File:  [local] / rpl / src / formateur_fichiers.c
Revision 1.92: download - view: text, annotated - select for diffs - revision graph
Wed Jan 18 15:44:17 2017 UTC (7 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Modification du copyright.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.26
    4:   Copyright (C) 1989-2017 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: #define DEBUG_ERREURS
   24: #include "rpl-conv.h"
   25: 
   26: 
   27: /*
   28: ================================================================================
   29:   Routine de formation des données pour l'écriture dans les fichiers
   30: ================================================================================
   31:   Entrées : structure sur l'état du processus et objet à afficher
   32:   Longueur est la précision requise et longueur_champ, le nombre maximal
   33:   de caractères de la chaîne résultat (-1 signifiant une absence de contrainte)
   34:   Type = 'F/U' (formaté, non formaté)
   35: --------------------------------------------------------------------------------
   36:   Sorties : chaine de caractères et longueur du tableau de caractères
   37: --------------------------------------------------------------------------------
   38:   Effets de bord : néant
   39: ================================================================================
   40: */
   41: 
   42: unsigned char *
   43: formateur_fichier(struct_processus *s_etat_processus, struct_objet *s_objet,
   44:         struct_objet *s_format, integer8 longueur, integer8 longueur_champ,
   45:         unsigned char format_sortie, unsigned char type,
   46:         integer8 *longueur_effective, integer8 *recursivite,
   47:         logical1 export_fichier)
   48: {
   49:     /*
   50:      * Traitement du format des fichiers formatés :
   51:      *
   52:      * { "standard*(*)" (format classique sans limitation)
   53:      *   "standard*(Y)" (format classique limité à Y caractères)
   54:      *   "fixed*X(*)"   (format virgule fixe avec une partie
   55:      *                   fractionnaire composée de X chiffres,
   56:      *                   mais dont la longueur est limité par
   57:      *                   la précision de la représentation interne)
   58:      *   "fixed*X(Y)"   (idem, mais longueur totale inférieure ou égale à
   59:      *                   Y caractères)
   60:      *   "scientific*X(*)"
   61:      *   "scientific*X(Y)"
   62:      *   "engineer*X(*)"
   63:      *   "engineer*X(Y)"
   64:      *   "binary*X(*)"
   65:      *   "binary*X(Y)"  (X est la base : 2, 8, 10, 16)
   66:      *   "character*(*)"
   67:      *   "character*(Y)"
   68:      *   "native*(*)" }
   69:      *
   70:      * Traitement du format des fichiers non formatés :
   71:      *
   72:      * { "integer*1", "integer*2", "integer*4", "integer*8",
   73:      *   "real*4", "real*8", ["real*16",]
   74:      *   "complex*8", "complex*16", ["complex*32",]
   75:      *   "logical*1", "logical*2", "logical*4", logical*8",
   76:      *   "character*n" "character*(*)" "native*(*)" }
   77:      */
   78: 
   79:     logical1                    autorisation_parenthese;
   80:     logical1                    format_degenere;
   81:     logical1                    presence_signe;
   82: 
   83:     struct_liste_chainee        *l_atome;
   84:     struct_liste_chainee        *l_compteur;
   85:     struct_liste_chainee        *l_element_courant;
   86:     struct_liste_chainee        *l_element_courant_format;
   87:     struct_liste_chainee        *l_liste1;
   88:     struct_liste_chainee        *l_liste2;
   89:     struct_liste_chainee        *l_tmp;
   90: 
   91:     struct_objet                *s_format_tmp;
   92:     struct_objet                *s_sous_objet;
   93:     struct_objet                *s_sous_objet_1;
   94:     struct_objet                *s_sous_objet_2;
   95:     struct_objet                *s_sous_objet_3;
   96: 
   97:     unsigned char               base[1 + 1];
   98:     unsigned char               *chaine;
   99:     unsigned char               *chaine_fonction;
  100:     unsigned char               *chaine_formatee;
  101:     unsigned char               *chaine_offset;
  102:     unsigned char               *chaine_tampon;
  103:     unsigned char               *chaine_sauvegarde;
  104:     unsigned char               *format_chaine;
  105:     unsigned char               *ptre;
  106:     unsigned char               *ptrl;
  107:     unsigned char               tampon[64 + 1];
  108:     unsigned char               type_binaire;
  109: 
  110:     integer8                    i;
  111:     integer8                    j;
  112:     integer8                    nombre_arguments;
  113:     integer8                    nombre_arguments_fonction;
  114:     integer8                    nombre_colonnes;
  115:     integer8                    nombre_elements;
  116:     integer8                    nombre_lignes;
  117: 
  118:     integer8                    longueur_chaine_traitee;
  119:     integer8                    longueur_element;
  120:     integer8                    longueur_fonction;
  121:     integer8                    longueur_liste;
  122:     integer8                    longueur_objet;
  123:     integer8                    longueur_reelle_chaine;
  124:     integer8                    longueur_totale;
  125:     integer8                    position_1;
  126:     integer8                    position_2;
  127:     integer8                    position_3;
  128: 
  129:     (*recursivite)++;
  130: 
  131:     if (type == 'F')
  132:     {
  133:         /*
  134:          * Fichiers formatés
  135:          */
  136: 
  137:         chaine = NULL;
  138:         chaine_formatee = NULL;
  139:         chaine_sauvegarde = NULL;
  140: 
  141:         strcpy(base, " ");
  142: 
  143:         if ((*s_objet).type == ALG)
  144:         {
  145: 
  146: /*
  147: --------------------------------------------------------------------------------
  148:   Expression algébrique
  149: --------------------------------------------------------------------------------
  150: */
  151: 
  152:             if (format_sortie != 'N')
  153:             {
  154:                 (*s_etat_processus).erreur_execution =
  155:                         d_ex_erreur_format_fichier;
  156:                 return(NULL);
  157:             }
  158: 
  159:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
  160: 
  161:             while(l_element_courant != NULL)
  162:             {
  163:                 if ((*(*l_element_courant).donnee).type == FCT)
  164:                 {
  165:                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
  166:                             .donnee).objet)).nom_fonction, "<<") != 0) &&
  167:                             (strcmp((*((struct_fonction *)
  168:                             (*(*l_element_courant)
  169:                             .donnee).objet)).nom_fonction, ">>") != 0))
  170:                     {
  171:                         if ((strcmp((*((struct_fonction *)
  172:                                 (*(*l_element_courant)
  173:                                 .donnee).objet)).nom_fonction, "+") == 0) ||
  174:                                 (strcmp((*((struct_fonction *)
  175:                                 (*(*l_element_courant).donnee).objet))
  176:                                 .nom_fonction, "-") == 0) || (strcmp(
  177:                                 (*((struct_fonction *) (*(*l_element_courant)
  178:                                 .donnee).objet)).nom_fonction, "*") == 0) ||
  179:                                 (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) || (strcmp((*((struct_fonction *)
  204:                                 (*(*l_element_courant).donnee).objet))
  205:                                 .nom_fonction,
  206:                                 ">=") == 0) || (strcmp((*((struct_fonction *)
  207:                                 (*(*l_element_courant).donnee).objet))
  208:                                 .nom_fonction,
  209:                                 "=>") == 0))
  210:                         {
  211:                             if (depilement(s_etat_processus,
  212:                                     &((*s_etat_processus)
  213:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
  214:                             {
  215:                                 return(NULL);
  216:                             }
  217: 
  218:                             chaine_sauvegarde = (*s_etat_processus)
  219:                                     .instruction_courante;
  220: 
  221:                             if (((*s_etat_processus).instruction_courante =
  222:                                     (unsigned char *) malloc((strlen(
  223:                                     (unsigned char *) (*s_sous_objet_2).objet)
  224:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
  225:                             {
  226:                                 (*s_etat_processus).instruction_courante =
  227:                                         chaine_sauvegarde;
  228:                                 (*s_etat_processus).erreur_systeme =
  229:                                         d_es_allocation_memoire;
  230:                                 return(NULL);
  231:                             }
  232: 
  233:                             sprintf((*s_etat_processus).instruction_courante,
  234:                                     "'%s'", (unsigned char *)
  235:                                     (*s_sous_objet_2).objet);
  236: 
  237:                             presence_signe = (((*s_etat_processus)
  238:                                     .instruction_courante[1] == '+')
  239:                                     || ((*s_etat_processus)
  240:                                     .instruction_courante[1]
  241:                                     == '-')) ? d_vrai : d_faux;
  242: 
  243:                             (*s_etat_processus).type_en_cours = NON;
  244:                             recherche_type(s_etat_processus);
  245: 
  246:                             if ((*s_etat_processus).erreur_execution != d_ex)
  247:                             {
  248:                                 // Aucune erreur ne peut être renvoyée.
  249: 
  250:                                 return(NULL);
  251:                             }
  252: 
  253:                             if (depilement(s_etat_processus,
  254:                                     &((*s_etat_processus)
  255:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
  256:                             {
  257:                                 return(NULL);
  258:                             }
  259: 
  260:                             free((*s_etat_processus).instruction_courante);
  261: 
  262:                             (*s_etat_processus).instruction_courante =
  263:                                     chaine_sauvegarde;
  264: 
  265:                             autorisation_parenthese = d_faux;
  266: 
  267:                             if ((*s_sous_objet_3).type == ALG)
  268:                             {
  269:                                 l_atome = (struct_liste_chainee *)
  270:                                         (*s_sous_objet_3).objet;
  271:                                 chaine_fonction = "";
  272:                                 nombre_arguments_fonction = 0;
  273: 
  274:                                 while(l_atome != NULL)
  275:                                 {
  276:                                     if ((*(*l_atome).donnee).type == FCT)
  277:                                     {
  278:                                         if (strcmp((*((struct_fonction *)
  279:                                                 (*(*l_atome).donnee).objet))
  280:                                                 .nom_fonction, ">>") != 0)
  281:                                         {
  282:                                             chaine_fonction =
  283:                                                     (*((struct_fonction *)
  284:                                                     (*(*l_atome).donnee).objet))
  285:                                                     .nom_fonction;
  286:                                             nombre_arguments_fonction =
  287:                                                     (*((struct_fonction *)
  288:                                                     (*(*l_atome).donnee).objet))
  289:                                                     .nombre_arguments;
  290:                                         }
  291:                                     }
  292: 
  293:                                     l_atome = (*l_atome).suivant;
  294:                                 }
  295: 
  296:                                 if (strcmp((*((struct_fonction *)
  297:                                         (*(*l_element_courant).donnee).objet))
  298:                                         .nom_fonction, "+") == 0)
  299:                                 {
  300:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
  301:                                             (strcmp(chaine_fonction, "XOR") ==
  302:                                             0) || (strcmp(chaine_fonction, "OR")
  303:                                             == 0) || (strcmp(chaine_fonction,
  304:                                             "EQV") == 0))
  305:                                     {
  306:                                         autorisation_parenthese = d_vrai;
  307:                                     }
  308:                                 }
  309:                                 else if (strcmp((*((struct_fonction *)
  310:                                         (*(*l_element_courant).donnee).objet))
  311:                                         .nom_fonction, "-") == 0)
  312:                                 {
  313:                                     if (nombre_arguments_fonction != 0)
  314:                                     {
  315:                                         autorisation_parenthese = d_faux;
  316:                                     }
  317:                                     else
  318:                                     {
  319:                                         autorisation_parenthese = d_vrai;
  320:                                     }
  321:                                 }
  322:                                 else if (strcmp((*((struct_fonction *)
  323:                                         (*(*l_element_courant).donnee).objet))
  324:                                         .nom_fonction, "*") == 0)
  325:                                 {
  326:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
  327:                                             (strcmp(chaine_fonction, "-") == 0)
  328:                                             || (strcmp(chaine_fonction, "AND")
  329:                                             == 0) || (strcmp(chaine_fonction,
  330:                                             "XOR") == 0) || (strcmp(
  331:                                             chaine_fonction, "OR") == 0) ||
  332:                                             (strcmp(chaine_fonction, "EQV")
  333:                                             == 0))
  334:                                     {
  335:                                         autorisation_parenthese = d_vrai;
  336:                                     }
  337:                                 }
  338:                                 else if (strcmp((*((struct_fonction *)
  339:                                         (*(*l_element_courant).donnee).objet))
  340:                                         .nom_fonction, "/") == 0)
  341:                                 {
  342:                                     if (nombre_arguments_fonction != 0)
  343:                                     {
  344:                                         autorisation_parenthese = d_faux;
  345:                                     }
  346:                                     else
  347:                                     {
  348:                                         autorisation_parenthese = d_vrai;
  349:                                     }
  350:                                 }
  351:                                 else if ((strcmp((*((struct_fonction *)
  352:                                         (*(*l_element_courant).donnee).objet))
  353:                                         .nom_fonction, "^") == 0))
  354:                                 {
  355:                                     if (nombre_arguments_fonction != 0)
  356:                                     {
  357:                                         autorisation_parenthese = d_faux;
  358:                                     }
  359:                                     else
  360:                                     {
  361:                                         autorisation_parenthese = d_vrai;
  362:                                     }
  363:                                 }
  364:                             }
  365: 
  366:                             if ((autorisation_parenthese == d_vrai) ||
  367:                                     (presence_signe == d_vrai))
  368:                             {
  369:                                 chaine_sauvegarde = (unsigned char *)
  370:                                         (*s_sous_objet_2).objet;
  371: 
  372:                                 if (((*s_sous_objet_2).objet = (void *)
  373:                                         malloc((strlen(chaine_sauvegarde) + 2
  374:                                         + 1) * sizeof(unsigned char))) == NULL)
  375:                                 {
  376:                                     (*s_etat_processus).erreur_systeme =
  377:                                             d_es_allocation_memoire;
  378:                                     return(NULL);
  379:                                 }
  380: 
  381:                                 sprintf((unsigned char *) (*s_sous_objet_2)
  382:                                         .objet, "(%s)", chaine_sauvegarde);
  383:                                 free(chaine_sauvegarde);
  384:                             }
  385: 
  386:                             liberation(s_etat_processus, s_sous_objet_3);
  387: 
  388:                             if (depilement(s_etat_processus,
  389:                                     &((*s_etat_processus)
  390:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  391:                             {
  392:                                 return(NULL);
  393:                             }
  394: 
  395:                             chaine_sauvegarde = (*s_etat_processus)
  396:                                     .instruction_courante;
  397: 
  398:                             if (((*s_etat_processus).instruction_courante =
  399:                                     (unsigned char *) malloc((strlen(
  400:                                     (unsigned char *) (*s_sous_objet_1).objet)
  401:                                     + 2 + 1) * sizeof(unsigned char))) == NULL)
  402:                             {
  403:                                 (*s_etat_processus).instruction_courante =
  404:                                         chaine_sauvegarde;
  405:                                 (*s_etat_processus).erreur_systeme =
  406:                                         d_es_allocation_memoire;
  407:                                 return(NULL);
  408:                             }
  409: 
  410:                             sprintf((*s_etat_processus).instruction_courante,
  411:                                     "'%s'", (unsigned char *)
  412:                                     (*s_sous_objet_1).objet);
  413: 
  414:                             (*s_etat_processus).type_en_cours = NON;
  415:                             recherche_type(s_etat_processus);
  416: 
  417:                             if ((*s_etat_processus).erreur_execution != d_ex)
  418:                             {
  419:                                 // Aucune erreur ne peut être renvoyée.
  420: 
  421:                                 return(NULL);
  422:                             }
  423: 
  424:                             if (depilement(s_etat_processus,
  425:                                     &((*s_etat_processus)
  426:                                     .l_base_pile), &s_sous_objet_3) == d_erreur)
  427:                             {
  428:                                 return(NULL);
  429:                             }
  430: 
  431:                             free((*s_etat_processus).instruction_courante);
  432: 
  433:                             (*s_etat_processus).instruction_courante =
  434:                                     chaine_sauvegarde;
  435: 
  436:                             autorisation_parenthese = d_faux;
  437: 
  438:                             if ((*s_sous_objet_3).type == ALG)
  439:                             {
  440:                                 l_atome = (struct_liste_chainee *)
  441:                                         (*s_sous_objet_3).objet;
  442:                                 chaine_fonction = "";
  443: 
  444:                                 while(l_atome != NULL)
  445:                                 {
  446:                                     if ((*(*l_atome).donnee).type == FCT)
  447:                                     {
  448:                                         if (strcmp((*((struct_fonction *)
  449:                                                 (*(*l_atome).donnee).objet))
  450:                                                 .nom_fonction, ">>") != 0)
  451:                                         {
  452:                                             chaine_fonction =
  453:                                                     (*((struct_fonction *)
  454:                                                     (*(*l_atome).donnee).objet))
  455:                                                     .nom_fonction;
  456:                                         }
  457:                                     }
  458: 
  459:                                     l_atome = (*l_atome).suivant;
  460:                                 }
  461: 
  462:                                 if ((strcmp((*((struct_fonction *)
  463:                                         (*(*l_element_courant).donnee).objet))
  464:                                         .nom_fonction, "+") == 0) ||
  465:                                         (strcmp((*((struct_fonction *)
  466:                                         (*(*l_element_courant).donnee).objet))
  467:                                         .nom_fonction, "-") == 0))
  468:                                 {
  469:                                     if ((strcmp(chaine_fonction, "AND") == 0) ||
  470:                                             (strcmp(chaine_fonction, "XOR") ==
  471:                                             0) || (strcmp(chaine_fonction, "OR")
  472:                                             == 0) || (strcmp(chaine_fonction,
  473:                                             "EQV") == 0))
  474:                                     {
  475:                                         autorisation_parenthese = d_vrai;
  476:                                     }
  477:                                 }
  478:                                 else if ((strcmp((*((struct_fonction *)
  479:                                         (*(*l_element_courant).donnee).objet))
  480:                                         .nom_fonction, "*") == 0) ||
  481:                                         (strcmp((*((struct_fonction *)
  482:                                         (*(*l_element_courant).donnee).objet))
  483:                                         .nom_fonction, "/") == 0))
  484:                                 {
  485:                                     if ((strcmp(chaine_fonction, "+") == 0) ||
  486:                                             (strcmp(chaine_fonction, "-") == 0)
  487:                                             || (strcmp(chaine_fonction, "AND")
  488:                                             == 0) || (strcmp(chaine_fonction,
  489:                                             "XOR") == 0) || (strcmp(
  490:                                             chaine_fonction, "OR") == 0) ||
  491:                                             (strcmp(chaine_fonction, "EQV")
  492:                                             == 0))
  493:                                     {
  494:                                         autorisation_parenthese = d_vrai;
  495:                                     }
  496:                                 }
  497:                                 else if ((strcmp((*((struct_fonction *)
  498:                                         (*(*l_element_courant).donnee).objet))
  499:                                         .nom_fonction, "^") == 0))
  500:                                 {
  501:                                     autorisation_parenthese = d_vrai;
  502:                                 }
  503:                             }
  504: 
  505:                             if (autorisation_parenthese == d_vrai)
  506:                             {
  507:                                 chaine_sauvegarde = (unsigned char *)
  508:                                         (*s_sous_objet_1).objet;
  509: 
  510:                                 if (((*s_sous_objet_1).objet = (void *)
  511:                                         malloc((strlen(chaine_sauvegarde) + 2
  512:                                         + 1) * sizeof(unsigned char))) == NULL)
  513:                                 {
  514:                                     (*s_etat_processus).erreur_systeme =
  515:                                             d_es_allocation_memoire;
  516:                                     return(NULL);
  517:                                 }
  518: 
  519:                                 sprintf((unsigned char *) (*s_sous_objet_1)
  520:                                         .objet, "(%s)", chaine_sauvegarde);
  521:                                 free(chaine_sauvegarde);
  522:                             }
  523: 
  524:                             liberation(s_etat_processus, s_sous_objet_3);
  525: 
  526:                             if ((s_sous_objet = allocation(s_etat_processus,
  527:                                     CHN)) == NULL)
  528:                             {
  529:                                 (*s_etat_processus).erreur_systeme =
  530:                                         d_es_allocation_memoire;
  531:                                 return(NULL);
  532:                             }
  533: 
  534:                             if (((*s_sous_objet).objet = (void *)
  535:                                     malloc((strlen(
  536:                                     (unsigned char *) (*s_sous_objet_1).objet) +
  537:                                     strlen((*((struct_fonction *)
  538:                                     (*(*l_element_courant).donnee).objet))
  539:                                     .nom_fonction) + strlen((unsigned char *)
  540:                                     (*s_sous_objet_2).objet) + 1) *
  541:                                     sizeof(unsigned char))) == NULL)
  542:                             {
  543:                                 (*s_etat_processus).erreur_systeme =
  544:                                         d_es_allocation_memoire;
  545:                                 return(NULL);
  546:                             }
  547: 
  548:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  549:                                     "%s%s%s", (unsigned char *)
  550:                                     (*s_sous_objet_1)
  551:                                     .objet, (*((struct_fonction *)
  552:                                     (*(*l_element_courant).donnee).objet))
  553:                                     .nom_fonction, (unsigned char *)
  554:                                     (*s_sous_objet_2).objet);
  555: 
  556:                             liberation(s_etat_processus, s_sous_objet_1);
  557:                             liberation(s_etat_processus, s_sous_objet_2);
  558: 
  559:                             if (empilement(s_etat_processus,
  560:                                     &((*s_etat_processus)
  561:                                     .l_base_pile), s_sous_objet) == d_erreur)
  562:                             {
  563:                                 return(NULL);
  564:                             }
  565:                         }
  566:                         else if (strcmp((*((struct_fonction *)
  567:                                 (*(*l_element_courant).donnee).objet))
  568:                                 .nom_fonction, "=") == 0)
  569:                         {
  570:                             if (depilement(s_etat_processus,
  571:                                     &((*s_etat_processus).l_base_pile),
  572:                                     &s_sous_objet_2) == d_erreur)
  573:                             {
  574:                                 return(NULL);
  575:                             }
  576: 
  577:                             if (depilement(s_etat_processus,
  578:                                     &((*s_etat_processus).l_base_pile),
  579:                                     &s_sous_objet_1) == d_erreur)
  580:                             {
  581:                                 return(NULL);
  582:                             }
  583: 
  584:                             if ((s_sous_objet = allocation(s_etat_processus,
  585:                                     CHN)) == NULL)
  586:                             {
  587:                                 (*s_etat_processus).erreur_systeme =
  588:                                         d_es_allocation_memoire;
  589:                                 return(NULL);
  590:                             }
  591: 
  592:                             autorisation_parenthese = d_vrai;
  593:                             l_atome = l_element_courant;
  594: 
  595:                             if (l_atome != NULL)
  596:                             {
  597:                                 if ((*l_atome).suivant != NULL)
  598:                                 {
  599:                                     l_atome = (*l_atome).suivant;
  600: 
  601:                                     if ((*(*l_atome).donnee).type == FCT)
  602:                                     {
  603:                                         if (strcmp((*((struct_fonction *)
  604:                                                 (*(*l_atome).donnee).objet))
  605:                                                 .nom_fonction, ">>") == 0)
  606:                                         {
  607:                                             if ((*l_atome).suivant == NULL)
  608:                                             {
  609:                                                 autorisation_parenthese =
  610:                                                         d_faux;
  611:                                             }
  612:                                         }
  613:                                     }
  614:                                 }
  615:                             }
  616: 
  617:                             if (autorisation_parenthese == d_vrai)
  618:                             {
  619:                                 if (((*s_sous_objet).objet =
  620:                                         (void *) malloc((strlen(
  621:                                         (unsigned char *) (*s_sous_objet_1)
  622:                                         .objet) + strlen((*((struct_fonction *)
  623:                                         (*(*l_element_courant).donnee).objet))
  624:                                         .nom_fonction) +
  625:                                         strlen((unsigned char *)
  626:                                         (*s_sous_objet_2).objet) + 2 + 1) *
  627:                                         sizeof(unsigned char))) == NULL)
  628:                                 {
  629:                                     (*s_etat_processus).erreur_systeme =
  630:                                             d_es_allocation_memoire;
  631:                                     return(NULL);
  632:                                 }
  633: 
  634:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
  635:                                         "(%s%s%s)", (unsigned char *)
  636:                                         (*s_sous_objet_1)
  637:                                         .objet, (*((struct_fonction *)
  638:                                         (*(*l_element_courant).donnee).objet))
  639:                                         .nom_fonction, (unsigned char *)
  640:                                         (*s_sous_objet_2).objet);
  641:                             }
  642:                             else
  643:                             {
  644:                                 if (((*s_sous_objet).objet =
  645:                                         (void *) malloc((strlen(
  646:                                         (unsigned char *) (*s_sous_objet_1)
  647:                                         .objet) + strlen((*((struct_fonction *)
  648:                                         (*(*l_element_courant).donnee).objet))
  649:                                         .nom_fonction) + strlen(
  650:                                         (unsigned char *) (*s_sous_objet_2)
  651:                                         .objet) + 1) * sizeof(unsigned char)))
  652:                                         == NULL)
  653:                                 {
  654:                                     (*s_etat_processus).erreur_systeme =
  655:                                             d_es_allocation_memoire;
  656:                                     return(NULL);
  657:                                 }
  658: 
  659:                                 sprintf((unsigned char *) (*s_sous_objet).objet,
  660:                                         "%s%s%s", (unsigned char *)
  661:                                         (*s_sous_objet_1)
  662:                                         .objet, (*((struct_fonction *)
  663:                                         (*(*l_element_courant).donnee).objet))
  664:                                         .nom_fonction, (unsigned char *)
  665:                                         (*s_sous_objet_2).objet);
  666:                             }
  667: 
  668:                             liberation(s_etat_processus, s_sous_objet_1);
  669:                             liberation(s_etat_processus, s_sous_objet_2);
  670: 
  671:                             if (empilement(s_etat_processus,
  672:                                     &((*s_etat_processus).l_base_pile),
  673:                                     s_sous_objet) == d_erreur)
  674:                             {
  675:                                 return(NULL);
  676:                             }
  677:                         }
  678:                         else if (strcmp((*((struct_fonction *)
  679:                                 (*(*l_element_courant).donnee).objet))
  680:                                 .nom_fonction,
  681:                                 "NOT") == 0)
  682:                         {
  683:                             if (depilement(s_etat_processus,
  684:                                     &((*s_etat_processus)
  685:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  686:                             {
  687:                                 return(NULL);
  688:                             }
  689: 
  690:                             if ((s_sous_objet = allocation(s_etat_processus,
  691:                                     CHN)) == NULL)
  692:                             {
  693:                                 (*s_etat_processus).erreur_systeme =
  694:                                         d_es_allocation_memoire;
  695:                                 return(NULL);
  696:                             }
  697: 
  698:                             if (((*s_sous_objet).objet = (unsigned char *)
  699:                                     malloc(
  700:                                     (strlen((unsigned char *) (*s_sous_objet_1)
  701:                                     .objet) + 4 + 1) * sizeof(unsigned char)))
  702:                                     == NULL)
  703:                             {
  704:                                 (*s_etat_processus).erreur_systeme =
  705:                                         d_es_allocation_memoire;
  706:                                 return(NULL);
  707:                             }
  708: 
  709:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  710:                                     "%s %s", (*((struct_fonction *)
  711:                                     (*(*l_element_courant).donnee).objet))
  712:                                     .nom_fonction, (unsigned char *)
  713:                                     (*s_sous_objet_1).objet );
  714: 
  715:                             liberation(s_etat_processus, s_sous_objet_1);
  716: 
  717:                             if (empilement(s_etat_processus,
  718:                                     &((*s_etat_processus)
  719:                                     .l_base_pile), s_sous_objet) == d_erreur)
  720:                             {
  721:                                 return(NULL);
  722:                             }
  723:                         }
  724:                         else if ((strcmp((*((struct_fonction *)
  725:                                 (*(*l_element_courant).donnee).objet))
  726:                                 .nom_fonction,
  727:                                 "OR") == 0) || (strcmp((*((struct_fonction *)
  728:                                 (*(*l_element_courant).donnee).objet))
  729:                                 .nom_fonction,
  730:                                 "XOR") == 0) || (strcmp((*((struct_fonction *)
  731:                                 (*(*l_element_courant).donnee).objet))
  732:                                 .nom_fonction,
  733:                                 "AND") == 0) || (strcmp((*((struct_fonction *)
  734:                                 (*(*l_element_courant).donnee).objet))
  735:                                 .nom_fonction, "EQV") == 0))
  736:                         {
  737:                             if (depilement(s_etat_processus,
  738:                                     &((*s_etat_processus)
  739:                                     .l_base_pile), &s_sous_objet_2) == d_erreur)
  740:                             {
  741:                                 return(NULL);
  742:                             }
  743: 
  744:                             if (depilement(s_etat_processus,
  745:                                     &((*s_etat_processus)
  746:                                     .l_base_pile), &s_sous_objet_1) == d_erreur)
  747:                             {
  748:                                 return(NULL);
  749:                             }
  750: 
  751:                             if ((s_sous_objet = allocation(s_etat_processus,
  752:                                     CHN)) == NULL)
  753:                             {
  754:                                 (*s_etat_processus).erreur_systeme =
  755:                                         d_es_allocation_memoire;
  756:                                 return(NULL);
  757:                             }
  758: 
  759:                             if (((*s_sous_objet).objet = (void *)
  760:                                     malloc((strlen(
  761:                                     (unsigned char *) (*s_sous_objet_1).objet) +
  762:                                     strlen((*((struct_fonction *)
  763:                                     (*(*l_element_courant).donnee).objet))
  764:                                     .nom_fonction) + strlen((unsigned char *)
  765:                                     (*s_sous_objet_2).objet) + 2 + 1) *
  766:                                     sizeof(unsigned char))) == NULL)
  767:                             {
  768:                                 (*s_etat_processus).erreur_systeme =
  769:                                         d_es_allocation_memoire;
  770:                                 return(NULL);
  771:                             }
  772: 
  773:                             sprintf((unsigned char *) (*s_sous_objet).objet,
  774:                                     "%s %s %s", (unsigned char *)
  775:                                     (*s_sous_objet_1)
  776:                                     .objet, (*((struct_fonction *)
  777:                                     (*(*l_element_courant).donnee).objet))
  778:                                     .nom_fonction, (unsigned char *)
  779:                                     (*s_sous_objet_2).objet);
  780: 
  781:                             liberation(s_etat_processus, s_sous_objet_1);
  782:                             liberation(s_etat_processus, s_sous_objet_2);
  783: 
  784:                             if (empilement(s_etat_processus,
  785:                                     &((*s_etat_processus)
  786:                                     .l_base_pile), s_sous_objet) == d_erreur)
  787:                             {
  788:                                 return(NULL);
  789:                             }
  790:                         }
  791:                         else
  792:                         {
  793:                             nombre_arguments = (*((struct_fonction *)
  794:                                     (*(*l_element_courant).donnee).objet))
  795:                                     .nombre_arguments;
  796: 
  797:                             if ((chaine = (unsigned char *)
  798:                                     malloc(sizeof(unsigned char))) == NULL)
  799:                             {
  800:                                 (*s_etat_processus).erreur_systeme =
  801:                                         d_es_allocation_memoire;
  802:                                 return(NULL);
  803:                             }
  804:                             
  805:                             chaine[0] = d_code_fin_chaine;
  806: 
  807:                             for(i = 0; i < nombre_arguments; i++)
  808:                             {
  809:                                 if ((nombre_arguments - i) > 1)
  810:                                 {
  811:                                     l_liste1 = (*s_etat_processus).l_base_pile;
  812: 
  813:                                     for(j = 2; j < (nombre_arguments - i); j++)
  814:                                     {
  815:                                         l_liste1 = (*l_liste1).suivant;
  816:                                     }
  817: 
  818:                                     l_liste2 = (*l_liste1).suivant;
  819:                                     (*l_liste1).suivant = (*l_liste2).suivant;
  820:                                     (*l_liste2).suivant = (*s_etat_processus)
  821:                                             .l_base_pile;
  822:                                     (*s_etat_processus).l_base_pile = l_liste2;
  823:                                 }
  824:                                 
  825:                                 if (depilement(s_etat_processus,
  826:                                         &((*s_etat_processus).l_base_pile),
  827:                                         &s_sous_objet) == d_erreur)
  828:                                 {
  829:                                     return(NULL);
  830:                                 }
  831: 
  832:                                 chaine_sauvegarde = chaine;
  833: 
  834:                                 if (strlen(chaine_sauvegarde) == 0)
  835:                                 {
  836:                                     if ((chaine = (unsigned char *)
  837:                                             malloc((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", (unsigned char *)
  847:                                             (*s_sous_objet).objet);
  848:                                 }
  849:                                 else
  850:                                 {
  851:                                     if ((chaine = (unsigned char *)
  852:                                             malloc((strlen(chaine_sauvegarde)
  853:                                             + 1 + strlen((unsigned char *)
  854:                                             (*s_sous_objet).objet) + 1) *
  855:                                             sizeof(unsigned char))) == NULL)
  856:                                     {
  857:                                         (*s_etat_processus).erreur_systeme =
  858:                                                 d_es_allocation_memoire;
  859:                                         return(NULL);
  860:                                     }
  861: 
  862:                                     sprintf(chaine, "%s,%s", chaine_sauvegarde,
  863:                                             (unsigned char *) (*s_sous_objet)
  864:                                             .objet);
  865:                                 }
  866: 
  867:                                 free(chaine_sauvegarde);
  868:                                 liberation(s_etat_processus, s_sous_objet);
  869:                             }
  870: 
  871:                             chaine_sauvegarde = chaine;
  872: 
  873:                             if ((chaine = (unsigned char *) malloc((strlen(
  874:                                     (*((struct_fonction *)
  875:                                     (*(*l_element_courant)
  876:                                     .donnee).objet)).nom_fonction) + 2 +
  877:                                     strlen(chaine_sauvegarde) + 1) *
  878:                                     sizeof(unsigned char))) == NULL)
  879:                             {
  880:                                 (*s_etat_processus).erreur_systeme =
  881:                                         d_es_allocation_memoire;
  882:                                 return(NULL);
  883:                             }
  884: 
  885:                             sprintf(chaine, "%s(%s)", (*((struct_fonction *)
  886:                                     (*(*l_element_courant).donnee).objet))
  887:                                     .nom_fonction, chaine_sauvegarde);
  888:                             free(chaine_sauvegarde);
  889: 
  890:                             if ((s_sous_objet = allocation(s_etat_processus,
  891:                                     CHN)) == NULL)
  892:                             {
  893:                                 (*s_etat_processus).erreur_systeme =
  894:                                         d_es_allocation_memoire;
  895:                                 return(NULL);
  896:                             }
  897: 
  898:                             (*s_sous_objet).objet = (void *) chaine;
  899: 
  900:                             if (empilement(s_etat_processus,
  901:                                     &((*s_etat_processus)
  902:                                     .l_base_pile), s_sous_objet) == d_erreur)
  903:                             {
  904:                                 return(NULL);
  905:                             }
  906:                         }
  907:                     }
  908:                 }
  909:                 else
  910:                 {
  911:                     if ((s_sous_objet = allocation(s_etat_processus, CHN))
  912:                             == NULL)
  913:                     {
  914:                         (*s_etat_processus).erreur_systeme =
  915:                                 d_es_allocation_memoire;
  916:                         return(NULL);
  917:                     }
  918: 
  919:                     if (((*s_sous_objet).objet = (void *) formateur_fichier(
  920:                             s_etat_processus, (*l_element_courant).donnee,
  921:                             s_format, longueur, longueur_champ, format_sortie,
  922:                             type, longueur_effective, recursivite,
  923:                             export_fichier)) == NULL)
  924:                     {
  925:                         (*s_etat_processus).erreur_systeme =
  926:                                 d_es_allocation_memoire;
  927:                         return(NULL);
  928:                     }
  929: 
  930:                     if (((*(*l_element_courant).donnee).type == ALG)
  931:                             || ((*(*l_element_courant).donnee).type == NOM))
  932:                     {
  933:                         chaine_sauvegarde = (unsigned char *)
  934:                                 (*s_sous_objet).objet;
  935: 
  936:                         if (((*s_sous_objet).objet = malloc((strlen(
  937:                                 chaine_sauvegarde) - 1) *
  938:                                 sizeof(unsigned char))) == NULL)
  939:                         {
  940:                             (*s_etat_processus).erreur_systeme =
  941:                                     d_es_allocation_memoire;
  942:                             return(NULL);
  943:                         }
  944: 
  945:                         ptrl = chaine_sauvegarde;
  946:                         ptre = (unsigned char *) (*s_sous_objet).objet;
  947: 
  948:                         for(ptrl++, i = ((integer8) strlen(chaine_sauvegarde))
  949:                                 - 2; i > 0; i--, *ptre++ = *ptrl++);
  950: 
  951:                         (*ptre) = d_code_fin_chaine;
  952: 
  953:                         free(chaine_sauvegarde);
  954:                     }
  955:                     else if ((*(*l_element_courant).donnee).type == CHN)
  956:                     {
  957:                         chaine_sauvegarde = (unsigned char *)
  958:                                 (*s_sous_objet).objet;
  959: 
  960:                         if (((*s_sous_objet).objet = malloc((strlen(
  961:                                 chaine_sauvegarde) + 3) *
  962:                                 sizeof(unsigned char))) == NULL)
  963:                         {
  964:                             (*s_etat_processus).erreur_systeme =
  965:                                     d_es_allocation_memoire;
  966:                             return(NULL);
  967:                         }
  968: 
  969:                         sprintf((unsigned char *) (*s_sous_objet).objet,
  970:                                 "\"%s\"", chaine_sauvegarde);
  971: 
  972:                         free(chaine_sauvegarde);
  973:                     }
  974: 
  975:                     if (empilement(s_etat_processus, &((*s_etat_processus)
  976:                             .l_base_pile), s_sous_objet) == d_erreur)
  977:                     {
  978:                         return(NULL);
  979:                     }
  980:                 }
  981: 
  982:                 l_element_courant = (*l_element_courant).suivant;
  983:             }
  984: 
  985:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  986:                     &s_sous_objet) == d_erreur)
  987:             {
  988:                 return(NULL);
  989:             }
  990: 
  991:             if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
  992:                     (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
  993:                     == NULL)
  994:             {
  995:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  996:                 return(NULL);
  997:             }
  998: 
  999:             sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
 1000:             liberation(s_etat_processus, s_sous_objet);
 1001:         }
 1002:         else if ((*s_objet).type == BIN)
 1003:         {
 1004: 
 1005: /*
 1006: --------------------------------------------------------------------------------
 1007:   Entier binaire en base 2, 8, 10 ou 16
 1008: --------------------------------------------------------------------------------
 1009: */
 1010: 
 1011:             if ((format_sortie != 'B') && (format_sortie != 'N'))
 1012:             {
 1013:                 (*s_etat_processus).erreur_execution =
 1014:                         d_ex_erreur_format_fichier;
 1015:                 return(NULL);
 1016:             }
 1017: 
 1018:             if (format_sortie == 'N')
 1019:             {
 1020:                 sprintf(tampon, "%llX", (unsigned long long) (*((logical8 *)
 1021:                         ((*s_objet).objet))));
 1022:                 strcpy(base, "h");
 1023:             }
 1024:             else
 1025:             {
 1026:                 switch(longueur)
 1027:                 {
 1028:                     case 2:
 1029:                     {
 1030:                         sprintf(tampon, "%llX", (unsigned long long)
 1031:                                 (*((logical8 *) ((*s_objet).objet))));
 1032: 
 1033:                         chaine = (unsigned char *) malloc((strlen(tampon) + 1)
 1034:                                 * sizeof(unsigned char));
 1035: 
 1036:                         if (chaine == NULL)
 1037:                         {
 1038:                             (*s_etat_processus).erreur_systeme =
 1039:                                     d_es_allocation_memoire;
 1040:                             return(NULL);
 1041:                         }
 1042: 
 1043:                         strcpy(chaine, tampon);
 1044:                         tampon[0] = 0;
 1045: 
 1046:                         for(i = 0; i < ((integer8) strlen(chaine)); i++)
 1047:                         {
 1048:                             switch(chaine[i])
 1049:                             {
 1050:                                 case '0' :
 1051:                                 {
 1052:                                     strcat(tampon, (i != 0) ? "0000" : "0");
 1053:                                     break;
 1054:                                 }
 1055:                                 case '1' :
 1056:                                 {
 1057:                                     strcat(tampon, (i != 0) ? "0001" : "1");
 1058:                                     break;
 1059:                                 }
 1060:                                 case '2' :
 1061:                                 {
 1062:                                     strcat(tampon, (i != 0) ? "0010" : "10");
 1063:                                     break;
 1064:                                 }
 1065:                                 case '3' :
 1066:                                 {
 1067:                                     strcat(tampon, (i != 0) ? "0011" : "11");
 1068:                                 break;
 1069:                                 }
 1070:                                 case '4' :
 1071:                                 {
 1072:                                     strcat(tampon, (i != 0) ? "0100" : "100");
 1073:                                     break;
 1074:                                 }
 1075:                                 case '5' :
 1076:                                 {
 1077:                                     strcat(tampon, (i != 0) ? "0101" : "101");
 1078:                                     break;
 1079:                                 }
 1080:                                 case '6' :
 1081:                                 {
 1082:                                     strcat(tampon, (i != 0) ? "0110" : "110");
 1083:                                     break;
 1084:                                 }
 1085:                                 case '7' :
 1086:                                 {
 1087:                                     strcat(tampon, (i != 0) ? "0111" : "111");
 1088:                                     break;
 1089:                                 }
 1090:                                 case '8' :
 1091:                                 {
 1092:                                     strcat(tampon, "1000");
 1093:                                     break;
 1094:                                 }
 1095:                                 case '9' :
 1096:                                 {
 1097:                                     strcat(tampon, "1001");
 1098:                                     break;
 1099:                                 }
 1100:                                 case 'A' :
 1101:                                 {
 1102:                                     strcat(tampon, "1010");
 1103:                                     break;
 1104:                                 }
 1105:                                 case 'B' :
 1106:                                 {
 1107:                                     strcat(tampon, "1011");
 1108:                                     break;
 1109:                                 }
 1110:                                 case 'C' :
 1111:                                 {
 1112:                                     strcat(tampon, "1100");
 1113:                                     break;
 1114:                                 }
 1115:                                 case 'D' :
 1116:                                 {
 1117:                                     strcat(tampon, "1101");
 1118:                                     break;
 1119:                                 }
 1120:                                 case 'E' :
 1121:                                 {
 1122:                                     strcat(tampon, "1110");
 1123:                                     break;
 1124:                                 }
 1125:                                 case 'F' :
 1126:                                 {
 1127:                                     strcat(tampon, "1111");
 1128:                                     break;
 1129:                                 }
 1130:                             }
 1131:                         }
 1132: 
 1133:                         free(chaine);
 1134:                         strcpy(base, "b");
 1135:                         break;
 1136:                     }
 1137: 
 1138:                     case 8:
 1139:                     {
 1140:                         sprintf(tampon, "%llo", (*((unsigned long long *)
 1141:                                 ((*s_objet).objet))));
 1142:                         strcpy(base, "o");
 1143:                         break;
 1144:                     }
 1145: 
 1146:                     case 10:
 1147:                     {
 1148:                         sprintf(tampon, "%llu", (*((unsigned long long *)
 1149:                                 ((*s_objet).objet))));
 1150:                         strcpy(base, "d");
 1151:                         break;
 1152:                     }
 1153: 
 1154:                     case 16:
 1155:                     {
 1156:                         sprintf(tampon, "%llX", (unsigned long long)
 1157:                                 (*((logical8 *) ((*s_objet).objet))));
 1158:                         strcpy(base, "h");
 1159:                         break;
 1160:                     }
 1161: 
 1162:                     default:
 1163:                     {
 1164:                         (*s_etat_processus).erreur_execution =
 1165:                                 d_ex_erreur_format_fichier;
 1166:                         return(NULL);
 1167:                     }
 1168:                 }
 1169:             }
 1170: 
 1171:             if (format_sortie == 'B')
 1172:             {
 1173:                 if ((longueur_champ > 0) && (longueur_champ
 1174:                         < (signed) strlen(tampon)))
 1175:                 {
 1176:                     ptrl = &(tampon[((integer8) strlen(tampon))
 1177:                             - longueur_champ]);
 1178:                     ptre = tampon;
 1179: 
 1180:                     do
 1181:                     {
 1182:                         *ptre++ = *ptrl++;
 1183:                     } while((*ptrl) != d_code_fin_chaine);
 1184: 
 1185:                     (*ptre) = d_code_fin_chaine;
 1186:                 }
 1187:             }
 1188: 
 1189:             chaine = (unsigned char *) malloc((strlen(tampon) + 4)
 1190:                     * sizeof(unsigned char));
 1191: 
 1192:             if (chaine == NULL)
 1193:             {
 1194:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1195:                 return(NULL);
 1196:             }
 1197: 
 1198:             strcpy(chaine, "# ");
 1199: 
 1200:             strcat(chaine, tampon);
 1201:             strcat(chaine, base);
 1202:         }
 1203:         else if ((*s_objet).type == CHN)
 1204:         {
 1205: 
 1206: /*
 1207: --------------------------------------------------------------------------------
 1208:   Chaîne de caractères
 1209: --------------------------------------------------------------------------------
 1210: */
 1211: 
 1212:             if ((format_sortie != 'C') && (format_sortie != 'N'))
 1213:             {
 1214:                 (*s_etat_processus).erreur_execution =
 1215:                         d_ex_erreur_format_fichier;
 1216:                 return(NULL);
 1217:             }
 1218: 
 1219:             longueur_reelle_chaine = longueur_chaine(s_etat_processus,
 1220:                     (unsigned char *) (*s_objet).objet);
 1221: 
 1222:             if (format_sortie == 'N')
 1223:             {
 1224:                 longueur_champ = -1;
 1225:             }
 1226: 
 1227:             if ((longueur_champ == -1) || (longueur_reelle_chaine <
 1228:                     longueur_champ))
 1229:             {
 1230:                 chaine = (unsigned char *) malloc((strlen((unsigned char *)
 1231:                         ((*s_objet).objet)) + 1) * sizeof(unsigned char));
 1232: 
 1233:                 if (chaine == NULL)
 1234:                 {
 1235:                     (*s_etat_processus).erreur_systeme =
 1236:                             d_es_allocation_memoire;
 1237:                     return(NULL);
 1238:                 }
 1239: 
 1240:                 strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 1241:             }
 1242:             else
 1243:             {
 1244:                 longueur_reelle_chaine = pointeur_ieme_caractere(
 1245:                         s_etat_processus, (unsigned char *)
 1246:                         (*s_objet).objet, longueur_champ)
 1247:                         - ((unsigned char *) (*s_objet).objet);
 1248: 
 1249:                 if ((chaine = malloc((((size_t) longueur_reelle_chaine) + 1) *
 1250:                         sizeof(unsigned char))) == NULL)
 1251:                 {
 1252:                     (*s_etat_processus).erreur_systeme =
 1253:                             d_es_allocation_memoire;
 1254:                     return(NULL);
 1255:                 }
 1256: 
 1257:                 strncpy(chaine, (unsigned char *) ((*s_objet).objet),
 1258:                         (size_t) longueur_reelle_chaine);
 1259:                 chaine[longueur_reelle_chaine] = d_code_fin_chaine;
 1260:             }
 1261:         }
 1262:         else if ((*s_objet).type == CPL)
 1263:         {
 1264: 
 1265: /*
 1266: --------------------------------------------------------------------------------
 1267:   Complexe
 1268: --------------------------------------------------------------------------------
 1269: */
 1270: 
 1271:             if (format_sortie == 'N')
 1272:             {
 1273:                 format_sortie = 'S';
 1274:             }
 1275: 
 1276:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1277:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1278:             {
 1279:                 (*s_etat_processus).erreur_execution =
 1280:                         d_ex_erreur_format_fichier;
 1281:                 return(NULL);
 1282:             }
 1283: 
 1284:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1285:                     (void *) ((struct_complexe16 *) ((*s_objet).objet)), 'C',
 1286:                     longueur, longueur_champ, format_sortie)) == NULL)
 1287:             {
 1288:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1289:                 return(NULL);
 1290:             }
 1291: 
 1292:             chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1293:                     + 1) * sizeof(unsigned char));
 1294: 
 1295:             if (chaine == NULL)
 1296:             {
 1297:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1298:                 return(NULL);
 1299:             }
 1300: 
 1301:             strcpy(chaine, chaine_formatee);
 1302:             free(chaine_formatee);
 1303:         }
 1304:         else if ((*s_objet).type == RPN)
 1305:         {
 1306: 
 1307: /*
 1308: --------------------------------------------------------------------------------
 1309:   Définition
 1310: --------------------------------------------------------------------------------
 1311: */
 1312: 
 1313:             if (format_sortie != 'N')
 1314:             {
 1315:                 (*s_etat_processus).erreur_execution =
 1316:                         d_ex_erreur_format_fichier;
 1317:                 return(NULL);
 1318:             }
 1319: 
 1320:             l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 1321:             chaine_sauvegarde = chaine;
 1322: 
 1323:             while(l_element_courant != NULL)
 1324:             {
 1325:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1326:                         (*l_element_courant).donnee, s_format,
 1327:                         longueur, longueur_champ, format_sortie, type,
 1328:                         longueur_effective, recursivite, export_fichier))
 1329:                         == NULL)
 1330:                 {
 1331:                     return(NULL);
 1332:                 }
 1333: 
 1334:                 if ((*(*l_element_courant).donnee).type == CHN)
 1335:                 {
 1336:                     chaine_tampon = chaine_formatee;
 1337: 
 1338:                     if ((chaine_formatee = (unsigned char *) malloc((strlen(
 1339:                             chaine_tampon) + 3) * sizeof(unsigned char)))
 1340:                             == NULL)
 1341:                     {
 1342:                         (*s_etat_processus).erreur_systeme =
 1343:                                 d_es_allocation_memoire;
 1344:                         return(NULL);
 1345:                     }
 1346: 
 1347:                     sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 1348:                     free(chaine_tampon);
 1349:                 }
 1350: 
 1351:                 l_element_courant = (*l_element_courant).suivant;
 1352: 
 1353:                 if (chaine != NULL)
 1354:                 {
 1355:                     chaine_sauvegarde = chaine;
 1356: 
 1357:                     if ((chaine = (unsigned char *) malloc((strlen(
 1358:                             chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 1359:                             sizeof(unsigned char))) == NULL)
 1360:                     {
 1361:                         (*s_etat_processus).erreur_systeme =
 1362:                                 d_es_allocation_memoire;
 1363:                         return(NULL);
 1364:                     }
 1365: 
 1366:                     strcpy(chaine, chaine_sauvegarde);
 1367:                     free(chaine_sauvegarde);
 1368:                     strcat(chaine, " ");
 1369:                     strcat(chaine, chaine_formatee);
 1370:                     free(chaine_formatee);
 1371:                 }
 1372:                 else
 1373:                 {
 1374:                     chaine = chaine_formatee;
 1375:                 }
 1376:             }
 1377: 
 1378:             chaine_sauvegarde = chaine;
 1379:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 1380:                     sizeof(unsigned char));
 1381: 
 1382:             if (chaine == NULL)
 1383:             {
 1384:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1385:                 free(chaine_sauvegarde);
 1386:                 return(NULL);
 1387:             }
 1388: 
 1389:             chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 1390:             strcpy(chaine, chaine_sauvegarde);
 1391:             free(chaine_sauvegarde);
 1392:         }
 1393:         else if ((*s_objet).type == INT)
 1394:         {
 1395: 
 1396: /*
 1397: --------------------------------------------------------------------------------
 1398:   Entier
 1399: --------------------------------------------------------------------------------
 1400: */
 1401: 
 1402:             if (format_sortie == 'N')
 1403:             {
 1404:                 format_sortie = 'S';
 1405:             }
 1406: 
 1407:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 1408:                     (format_sortie != 'I') && (format_sortie != 'E'))
 1409:             {
 1410:                 (*s_etat_processus).erreur_execution =
 1411:                         d_ex_erreur_format_fichier;
 1412:                 return(NULL);
 1413:             }
 1414: 
 1415:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 1416:                     (void *) ((integer8 *) ((*s_objet).objet)), 'I',
 1417:                     longueur, longueur_champ, format_sortie)) == NULL)
 1418:             {
 1419:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1420:                 return(NULL);
 1421:             }
 1422: 
 1423:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 1424:                     * sizeof(unsigned char));
 1425: 
 1426:             if (chaine == NULL)
 1427:             {
 1428:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1429:                 return(NULL);
 1430:             }
 1431: 
 1432:             strcpy(chaine, chaine_formatee);
 1433:             free(chaine_formatee);
 1434:         }
 1435:         else if ((*s_objet).type == FCT)
 1436:         {
 1437: 
 1438: /*
 1439: --------------------------------------------------------------------------------
 1440:   Fonction
 1441: --------------------------------------------------------------------------------
 1442: */
 1443: 
 1444:             if (format_sortie != 'N')
 1445:             {
 1446:                 (*s_etat_processus).erreur_execution =
 1447:                         d_ex_erreur_format_fichier;
 1448:                 return(NULL);
 1449:             }
 1450: 
 1451:             chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 1452:                     ((*s_objet).objet))).nom_fonction) + 1) *
 1453:                     sizeof(unsigned char));
 1454: 
 1455:             if (chaine == NULL)
 1456:             {
 1457:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1458:                 return(NULL);
 1459:             }
 1460: 
 1461:             strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 1462:                     ((*s_objet).objet))).nom_fonction);
 1463:         }
 1464:         else if ((*s_objet).type == LST)
 1465:         {
 1466: 
 1467: /*
 1468: --------------------------------------------------------------------------------
 1469:   Liste
 1470: --------------------------------------------------------------------------------
 1471: */
 1472: 
 1473:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 1474: 
 1475:             if (chaine == NULL)
 1476:             {
 1477:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1478:                 return(NULL);
 1479:             }
 1480: 
 1481:             strcpy(chaine, "{");
 1482: 
 1483:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1484:             l_element_courant_format = (struct_liste_chainee *)
 1485:                     (*s_format).objet;
 1486:             nombre_elements = 0;
 1487: 
 1488:             while((l_element_courant != NULL) &&
 1489:                     (l_element_courant_format != NULL))
 1490:             {
 1491:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 1492:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 1493:                         (((*(*l_element_courant_format).donnee).type == TBL)
 1494:                         && ((*(*l_element_courant).donnee).type == TBL)))
 1495:                 {
 1496:                     chaine_sauvegarde = chaine;
 1497: 
 1498:                     if (format_sortie != 'N')
 1499:                     {
 1500:                         if ((chaine_formatee =
 1501:                                 formateur_fichier(s_etat_processus,
 1502:                                 (*l_element_courant).donnee,
 1503:                                 (*l_element_courant_format).donnee,
 1504:                                 0, 0, ' ', 'F', longueur_effective, recursivite,
 1505:                                 export_fichier)) == NULL)
 1506:                         {
 1507:                             return(NULL);
 1508:                         }
 1509:                     }
 1510:                     else
 1511:                     {
 1512:                         if ((chaine_formatee =
 1513:                                 formateur_fichier(s_etat_processus,
 1514:                                 (*l_element_courant).donnee,
 1515:                                 (*l_element_courant_format).donnee,
 1516:                                 0, 0, 'N', 'F', longueur_effective, recursivite,
 1517:                                 export_fichier)) == NULL)
 1518:                         {
 1519:                             return(NULL);
 1520:                         }
 1521:                     }
 1522: 
 1523:                     chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1524:                             + strlen(chaine_sauvegarde) + 2)
 1525:                             * sizeof(unsigned char));
 1526: 
 1527:                     if (chaine == NULL)
 1528:                     {
 1529:                         (*s_etat_processus).erreur_systeme =
 1530:                                 d_es_allocation_memoire;
 1531:                         return(NULL);
 1532:                     }
 1533: 
 1534:                     strcpy(chaine, chaine_sauvegarde);
 1535:                     free(chaine_sauvegarde);
 1536:                     strcat(chaine, " ");
 1537:                     strcat(chaine, chaine_formatee);
 1538:                     free(chaine_formatee);
 1539:                 }
 1540:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 1541:                 {
 1542:                     free(chaine);
 1543: 
 1544:                     (*s_etat_processus).erreur_execution =
 1545:                             d_ex_erreur_format_fichier;
 1546:                     return(NULL);
 1547:                 }
 1548:                 else
 1549:                 {
 1550:                     if ((format_chaine = conversion_majuscule(
 1551:                             s_etat_processus, (unsigned char *)
 1552:                             (*(*l_element_courant_format).donnee).objet))
 1553:                             == NULL)
 1554:                     {
 1555:                         (*s_etat_processus).erreur_systeme =
 1556:                                 d_es_allocation_memoire;
 1557:                         return(NULL);
 1558:                     }
 1559: 
 1560:                     format_degenere = d_faux;
 1561: 
 1562:                     if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1563:                     {
 1564:                         format_sortie = 'S';
 1565:                         position_1 = 9;
 1566:                         format_degenere = d_vrai;
 1567:                     }
 1568:                     else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1569:                     {
 1570:                         format_sortie = 'B';
 1571:                         position_1 = 7;
 1572:                     }
 1573:                     else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1574:                     {
 1575:                         format_sortie = 'F';
 1576:                         position_1 = 6;
 1577:                     }
 1578:                     else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1579:                     {
 1580:                         format_sortie = 'I';
 1581:                         position_1 = 11;
 1582:                     }
 1583:                     else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1584:                     {
 1585:                         format_sortie = 'E';
 1586:                         position_1 = 9;
 1587:                     }
 1588:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1589:                     {
 1590:                         format_sortie = 'C';
 1591:                         position_1 = 10;
 1592:                         format_degenere = d_vrai;
 1593:                     }
 1594:                     else if (strcmp("NATIVE*(*)", format_chaine) == 0)
 1595:                     {
 1596:                         format_sortie = 'N';
 1597:                         position_1 = 7;
 1598:                         format_degenere = d_vrai;
 1599:                     }
 1600:                     else
 1601:                     {
 1602:                         free(chaine);
 1603:                         free(format_chaine);
 1604: 
 1605:                         (*s_etat_processus).erreur_execution =
 1606:                                 d_ex_erreur_format_fichier;
 1607:                         return(NULL);
 1608:                     }
 1609: 
 1610:                     position_3 = ((integer8) strlen(format_chaine)) - 1;
 1611: 
 1612:                     if (format_chaine[position_3] != ')')
 1613:                     {
 1614:                         free(chaine);
 1615:                         free(format_chaine);
 1616: 
 1617:                         (*s_etat_processus).erreur_execution =
 1618:                                 d_ex_erreur_format_fichier;
 1619:                         return(NULL);
 1620:                     }
 1621: 
 1622:                     format_chaine[position_3] = d_code_fin_chaine;
 1623: 
 1624:                     position_2 = position_1;
 1625: 
 1626:                     while(format_chaine[position_2] != '(')
 1627:                     {
 1628:                         if (format_chaine[position_2] == d_code_fin_chaine)
 1629:                         {
 1630:                             free(chaine);
 1631:                             free(format_chaine);
 1632: 
 1633:                             (*s_etat_processus).erreur_execution =
 1634:                                     d_ex_erreur_format_fichier;
 1635:                             return(NULL);
 1636:                         }
 1637: 
 1638:                         position_2++;
 1639:                     }
 1640: 
 1641:                     format_chaine[position_2++] = d_code_fin_chaine;
 1642: 
 1643:                     if (format_degenere == d_faux)
 1644:                     {
 1645:                         if (sscanf(&(format_chaine[position_1]), "%lld",
 1646:                                 &longueur) != 1)
 1647:                         {
 1648:                             free(chaine);
 1649:                             free(format_chaine);
 1650: 
 1651:                             (*s_etat_processus).erreur_execution =
 1652:                                     d_ex_erreur_format_fichier;
 1653:                             return(NULL);
 1654:                         }
 1655:                     }
 1656:                     else
 1657:                     {
 1658:                         longueur = -1;
 1659:                     }
 1660: 
 1661:                     if (strcmp(&(format_chaine[position_2]), "*") != 0)
 1662:                     {
 1663:                         if (sscanf(&(format_chaine[position_2]), "%lld",
 1664:                                 &longueur_champ) != 1)
 1665:                         {
 1666:                             free(chaine);
 1667:                             free(format_chaine);
 1668: 
 1669:                             (*s_etat_processus).erreur_execution =
 1670:                                     d_ex_erreur_format_fichier;
 1671:                             return(NULL);
 1672:                         }
 1673:                     }
 1674:                     else
 1675:                     {
 1676:                         longueur_champ = -1;
 1677:                     }
 1678: 
 1679:                     if ((longueur >= 0) && (longueur_champ >= 0) && (longueur >
 1680:                             longueur_champ) && (format_sortie != 'B'))
 1681:                     {
 1682:                         free(chaine);
 1683:                         free(format_chaine);
 1684: 
 1685:                         (*s_etat_processus).erreur_execution =
 1686:                                 d_ex_erreur_format_fichier;
 1687:                         return(NULL);
 1688:                     }
 1689: 
 1690:                     free(format_chaine);
 1691:                 
 1692:                     chaine_sauvegarde = chaine;
 1693: 
 1694:                     // Si le format_sortie vaut 'N', on remplace le format par
 1695:                     // { "native*(*)" }. L'intérêt est de pouvoir traiter une
 1696:                     // liste par un format "native*(*)".
 1697: 
 1698:                     if ((format_sortie == 'N') && ((*(*l_element_courant)
 1699:                             .donnee).type == LST))
 1700:                     {
 1701:                         if ((s_format_tmp = allocation(s_etat_processus, LST))
 1702:                                 == NULL)
 1703:                         {
 1704:                             return(NULL);
 1705:                         }
 1706: 
 1707:                         if (((*s_format_tmp).objet = allocation_maillon(
 1708:                                 s_etat_processus)) == NULL)
 1709:                         {
 1710:                             return(NULL);
 1711:                         }
 1712: 
 1713:                         (*((struct_liste_chainee *) (*s_format_tmp).objet))
 1714:                                 .suivant = NULL;
 1715: 
 1716:                         if (((*((struct_liste_chainee *) (*s_format_tmp).objet))
 1717:                                 .donnee = allocation(s_etat_processus, CHN))
 1718:                                 == NULL)
 1719:                         {
 1720:                             return(NULL);
 1721:                         }
 1722: 
 1723:                         if (((*(*((struct_liste_chainee *) (*s_format_tmp)
 1724:                                 .objet)).donnee).objet = malloc(11 *
 1725:                                 sizeof(unsigned char))) == NULL)
 1726:                         {
 1727:                             (*s_etat_processus).erreur_systeme =
 1728:                                     d_es_allocation_memoire;
 1729:                             return(NULL);
 1730:                         }
 1731: 
 1732:                         strcpy((unsigned char *) (*(*((struct_liste_chainee *)
 1733:                                 (*s_format_tmp).objet)).donnee).objet,
 1734:                                 "native*(*)");
 1735:                     }
 1736:                     else
 1737:                     {
 1738:                         if ((s_format_tmp = copie_objet(s_etat_processus,
 1739:                                 s_format, 'P')) == NULL)
 1740:                         {
 1741:                             return(NULL);
 1742:                         }
 1743:                     }
 1744: 
 1745:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 1746:                             (*l_element_courant).donnee, s_format,
 1747:                             longueur, longueur_champ, format_sortie, type,
 1748:                             longueur_effective, recursivite, export_fichier))
 1749:                             == NULL)
 1750:                     {
 1751:                         liberation(s_etat_processus, s_format_tmp);
 1752:                         free(chaine);
 1753:                         return(NULL);
 1754:                     }
 1755: 
 1756:                     liberation(s_etat_processus, s_format_tmp);
 1757: 
 1758:                     if ((*(*l_element_courant).donnee).type == CHN)
 1759:                     {
 1760:                         chaine = (unsigned char *)
 1761:                                 malloc((strlen(chaine_formatee)
 1762:                                 + strlen(chaine_sauvegarde) + 4)
 1763:                                 * sizeof(unsigned char));
 1764: 
 1765:                         if (chaine == NULL)
 1766:                         {
 1767:                             (*s_etat_processus).erreur_systeme =
 1768:                                     d_es_allocation_memoire;
 1769:                             return(NULL);
 1770:                         }
 1771: 
 1772:                         strcpy(chaine, chaine_sauvegarde);
 1773:                         free(chaine_sauvegarde);
 1774:                         strcat(chaine, " \"");
 1775:                         strcat(chaine, chaine_formatee);
 1776:                         free(chaine_formatee);
 1777:                         strcat(chaine, "\"");
 1778:                     }
 1779:                     else if ((*(*l_element_courant).donnee).type == NOM)
 1780:                     {
 1781:                         chaine = (unsigned char *)
 1782:                                 malloc((strlen(chaine_formatee)
 1783:                                 + strlen(chaine_sauvegarde) + 2)
 1784:                                 * sizeof(unsigned char));
 1785: 
 1786:                         if (chaine == NULL)
 1787:                         {
 1788:                             (*s_etat_processus).erreur_systeme =
 1789:                                     d_es_allocation_memoire;
 1790:                             return(NULL);
 1791:                         }
 1792: 
 1793:                         sprintf(chaine, "%s %s", chaine_sauvegarde,
 1794:                                 chaine_formatee);
 1795:                         free(chaine_formatee);
 1796:                     }
 1797:                     else
 1798:                     {
 1799:                         chaine = (unsigned char *)
 1800:                                 malloc((strlen(chaine_formatee)
 1801:                                 + strlen(chaine_sauvegarde) + 2)
 1802:                                 * sizeof(unsigned char));
 1803: 
 1804:                         if (chaine == NULL)
 1805:                         {
 1806:                             (*s_etat_processus).erreur_systeme =
 1807:                                     d_es_allocation_memoire;
 1808:                             return(NULL);
 1809:                         }
 1810: 
 1811:                         strcpy(chaine, chaine_sauvegarde);
 1812:                         free(chaine_sauvegarde);
 1813:                         strcat(chaine, " ");
 1814:                         strcat(chaine, chaine_formatee);
 1815:                         free(chaine_formatee);
 1816:                     }
 1817:                 }
 1818: 
 1819:                 nombre_elements++;
 1820:                 l_element_courant = (*l_element_courant).suivant;
 1821: 
 1822:                 if (format_sortie != 'N')
 1823:                 {
 1824:                     l_element_courant_format =
 1825:                             (*l_element_courant_format).suivant;
 1826:                 }
 1827:             }
 1828: 
 1829:             // Dans le cas où le format de sortie n'est pas du type
 1830:             // NATIVE*(*), on vérifie que tous les éléments du format et
 1831:             // de la liste d'arguments ont été consommés.
 1832: 
 1833:             if (format_sortie != 'N')
 1834:             {
 1835:                 if ((l_element_courant != NULL) ||
 1836:                         (l_element_courant_format != NULL))
 1837:                 {
 1838:                     free(chaine);
 1839: 
 1840:                     (*s_etat_processus).erreur_execution =
 1841:                             d_ex_erreur_format_fichier;
 1842:                     return(NULL);
 1843:                 }
 1844:             }
 1845: 
 1846:             chaine_sauvegarde = chaine;
 1847:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
 1848:                     * sizeof(unsigned char));
 1849: 
 1850:             if (chaine == NULL)
 1851:             {
 1852:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1853:                 return(NULL);
 1854:             }
 1855: 
 1856:             strcpy(chaine, chaine_sauvegarde);
 1857:             free(chaine_sauvegarde);
 1858:             strcat(chaine, " }");
 1859:         }
 1860:         else if ((*s_objet).type == TBL)
 1861:         {
 1862: 
 1863: /*
 1864: --------------------------------------------------------------------------------
 1865:   Table
 1866: --------------------------------------------------------------------------------
 1867: */
 1868: 
 1869:             if (((*s_format).type != TBL) && (format_sortie != 'N'))
 1870:             {
 1871:                 (*s_etat_processus).erreur_execution =
 1872:                         d_ex_erreur_format_fichier;
 1873:                 return(NULL);
 1874:             }
 1875: 
 1876:             if (format_sortie != 'N')
 1877:             {
 1878:                 if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements !=
 1879:                         (*((struct_tableau *) (*s_format).objet))
 1880:                         .nombre_elements)
 1881:                 {
 1882:                     (*s_etat_processus).erreur_execution =
 1883:                             d_ex_erreur_format_fichier;
 1884:                     return(NULL);
 1885:                 }
 1886:             }
 1887: 
 1888:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 1889: 
 1890:             if (chaine == NULL)
 1891:             {
 1892:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1893:                 return(NULL);
 1894:             }
 1895: 
 1896:             strcpy(chaine, "<[");
 1897: 
 1898:             for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 1899:                     .nombre_elements; i++)
 1900:             {
 1901:                 if (format_sortie != 'N')
 1902:                 {
 1903:                     if ((((*(*((struct_tableau *) (*s_format).objet))
 1904:                             .elements[i]).type == LST) &&
 1905:                             ((*(*((struct_tableau *) (*s_objet).objet))
 1906:                             .elements[i]).type == LST)) ||
 1907:                             (((*(*((struct_tableau *) (*s_format).objet))
 1908:                             .elements[i]).type == TBL) &&
 1909:                             ((*(*((struct_tableau *) (*s_objet).objet))
 1910:                             .elements[i]).type == TBL)))
 1911:                     {
 1912:                         chaine_sauvegarde = chaine;
 1913: 
 1914:                         if ((chaine_formatee = formateur_fichier(
 1915:                                 s_etat_processus,
 1916:                                 (*(*((struct_tableau *) (*s_objet).objet))
 1917:                                 .elements[i]).objet,
 1918:                                 (*(*((struct_tableau *) (*s_format).objet))
 1919:                                 .elements[i]).objet,
 1920:                                 0, 0, ' ', 'F', longueur_effective, recursivite,
 1921:                                 export_fichier)) == NULL)
 1922:                         {
 1923:                             return(NULL);
 1924:                         }
 1925: 
 1926:                         if ((chaine = (unsigned char *) malloc((strlen(
 1927:                                 chaine_formatee) + strlen(chaine_sauvegarde)
 1928:                                 + 2) * sizeof(unsigned char))) == NULL)
 1929:                         {
 1930:                             (*s_etat_processus).erreur_systeme =
 1931:                                     d_es_allocation_memoire;
 1932:                             return(NULL);
 1933:                         }
 1934: 
 1935:                         strcpy(chaine, chaine_sauvegarde);
 1936:                         free(chaine_sauvegarde);
 1937:                         strcat(chaine, " ");
 1938:                         strcat(chaine, chaine_formatee);
 1939:                         free(chaine_formatee);
 1940:                     }
 1941:                     else if ((*(*((struct_tableau *) (*s_format).objet))
 1942:                             .elements[i]).type != CHN)
 1943:                     {
 1944:                         free(chaine);
 1945: 
 1946:                         (*s_etat_processus).erreur_execution =
 1947:                                 d_ex_erreur_format_fichier;
 1948:                         return(NULL);
 1949:                     }
 1950:                     else
 1951:                     {
 1952:                         if ((format_chaine = conversion_majuscule(
 1953:                                 s_etat_processus,
 1954:                                 (unsigned char *) (*(*((struct_tableau *)
 1955:                                 (*s_format).objet)).elements[i]).objet))
 1956:                                 == NULL)
 1957:                         {
 1958:                             (*s_etat_processus).erreur_systeme =
 1959:                                     d_es_allocation_memoire;
 1960:                             return(NULL);
 1961:                         }
 1962: 
 1963:                         format_degenere = d_faux;
 1964: 
 1965:                         if (strncmp("STANDARD*", format_chaine, 9) == 0)
 1966:                         {
 1967:                             format_sortie = 'S';
 1968:                             position_1 = 9;
 1969:                             format_degenere = d_vrai;
 1970:                         }
 1971:                         else if (strncmp("BINARY*", format_chaine, 7) == 0)
 1972:                         {
 1973:                             format_sortie = 'B';
 1974:                             position_1 = 7;
 1975:                         }
 1976:                         else if (strncmp("FIXED*", format_chaine, 6) == 0)
 1977:                         {
 1978:                             format_sortie = 'F';
 1979:                             position_1 = 6;
 1980:                         }
 1981:                         else if (strncmp("SCIENTIFIC*", format_chaine, 11) == 0)
 1982:                         {
 1983:                             format_sortie = 'I';
 1984:                             position_1 = 11;
 1985:                         }
 1986:                         else if (strncmp("ENGINEER*", format_chaine, 9) == 0)
 1987:                         {
 1988:                             format_sortie = 'E';
 1989:                             position_1 = 9;
 1990:                         }
 1991:                         else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 1992:                         {
 1993:                             format_sortie = 'C';
 1994:                             position_1 = 10;
 1995:                             format_degenere = d_vrai;
 1996:                         }
 1997:                         else if (strcmp("NATIVE*(*)", format_chaine) == 0)
 1998:                         {
 1999:                             format_sortie = 'N';
 2000:                             position_1 = 7;
 2001:                             format_degenere = d_vrai;
 2002:                         }
 2003:                         else
 2004:                         {
 2005:                             free(chaine);
 2006:                             free(format_chaine);
 2007: 
 2008:                             (*s_etat_processus).erreur_execution =
 2009:                                     d_ex_erreur_format_fichier;
 2010:                             return(NULL);
 2011:                         }
 2012: 
 2013:                         position_3 = (integer8) strlen(format_chaine);
 2014:                         format_chaine[--position_3] = d_code_fin_chaine;
 2015: 
 2016:                         position_2 = position_1;
 2017: 
 2018:                         while(format_chaine[position_2] != '(')
 2019:                         {
 2020:                             if (format_chaine[position_2] == d_code_fin_chaine)
 2021:                             {
 2022:                                 free(chaine);
 2023:                                 free(format_chaine);
 2024: 
 2025:                                 (*s_etat_processus).erreur_execution =
 2026:                                         d_ex_erreur_format_fichier;
 2027:                                 return(NULL);
 2028:                             }
 2029: 
 2030:                             position_2++;
 2031:                         }
 2032: 
 2033:                         format_chaine[position_2++] = d_code_fin_chaine;
 2034: 
 2035:                         if (format_degenere == d_faux)
 2036:                         {
 2037:                             if (sscanf(&(format_chaine[position_1]), "%lld",
 2038:                                     &longueur) != 1)
 2039:                             {
 2040:                                 free(chaine);
 2041:                                 free(format_chaine);
 2042: 
 2043:                                 (*s_etat_processus).erreur_execution =
 2044:                                         d_ex_erreur_format_fichier;
 2045:                                 return(NULL);
 2046:                             }
 2047:                         }
 2048:                         else
 2049:                         {
 2050:                             longueur = -1;
 2051:                         }
 2052: 
 2053:                         if (strcmp(&(format_chaine[position_2]), "*") != 0)
 2054:                         {
 2055:                             if (sscanf(&(format_chaine[position_2]), "%lld",
 2056:                                     &longueur_champ) != 1)
 2057:                             {
 2058:                                 free(chaine);
 2059:                                 free(format_chaine);
 2060: 
 2061:                                 (*s_etat_processus).erreur_execution =
 2062:                                         d_ex_erreur_format_fichier;
 2063:                                 return(NULL);
 2064:                             }
 2065:                         }
 2066:                         else
 2067:                         {
 2068:                             longueur_champ = -1;
 2069:                         }
 2070: 
 2071:                         if ((longueur >= 0) && (longueur_champ >= 0) &&
 2072:                                 (longueur > longueur_champ))
 2073:                         {
 2074:                             free(chaine);
 2075:                             free(format_chaine);
 2076: 
 2077:                             (*s_etat_processus).erreur_execution =
 2078:                                     d_ex_erreur_format_fichier;
 2079:                             return(NULL);
 2080:                         }
 2081: 
 2082:                         free(format_chaine);
 2083:                     
 2084:                         chaine_sauvegarde = chaine;
 2085: 
 2086:                         if ((chaine_formatee = formateur_fichier(
 2087:                                 s_etat_processus, (*((struct_tableau *)
 2088:                                 (*s_objet).objet)).elements[i], s_format,
 2089:                                 longueur, longueur_champ, format_sortie, type,
 2090:                                 longueur_effective, recursivite,
 2091:                                 export_fichier)) == NULL)
 2092:                         {
 2093:                             return(NULL);
 2094:                         }
 2095:                     }
 2096:                 }
 2097:                 else // NATIVE*(*)
 2098:                 {
 2099:                     chaine_sauvegarde = chaine;
 2100: 
 2101:                     if ((chaine_formatee = formateur_fichier(
 2102:                             s_etat_processus, (*((struct_tableau *)
 2103:                             (*s_objet).objet)).elements[i], s_format,
 2104:                             longueur, longueur_champ, format_sortie, type,
 2105:                             longueur_effective, recursivite,
 2106:                             export_fichier)) == NULL)
 2107:                     {
 2108:                         return(NULL);
 2109:                     }
 2110:                 }
 2111: 
 2112:                 if ((*(*((struct_tableau *) (*s_objet).objet))
 2113:                         .elements[i]).type == CHN)
 2114:                 {
 2115:                     chaine = (unsigned char *)
 2116:                             malloc((strlen(chaine_formatee)
 2117:                             + strlen(chaine_sauvegarde) + 4)
 2118:                             * sizeof(unsigned char));
 2119: 
 2120:                     if (chaine == NULL)
 2121:                     {
 2122:                         (*s_etat_processus).erreur_systeme =
 2123:                                 d_es_allocation_memoire;
 2124:                         return(NULL);
 2125:                     }
 2126: 
 2127:                     strcpy(chaine, chaine_sauvegarde);
 2128:                     free(chaine_sauvegarde);
 2129:                     strcat(chaine, " \"");
 2130:                     strcat(chaine, chaine_formatee);
 2131:                     free(chaine_formatee);
 2132:                     strcat(chaine, "\"");
 2133:                 }
 2134:                 else if ((*(*((struct_tableau *) (*s_objet).objet))
 2135:                         .elements[i]).type == NOM)
 2136:                 {
 2137:                     chaine = (unsigned char *)
 2138:                             malloc((strlen(chaine_formatee)
 2139:                             + strlen(chaine_sauvegarde) + 2)
 2140:                             * sizeof(unsigned char));
 2141: 
 2142:                     if (chaine == NULL)
 2143:                     {
 2144:                         (*s_etat_processus).erreur_systeme =
 2145:                                 d_es_allocation_memoire;
 2146:                         return(NULL);
 2147:                     }
 2148: 
 2149:                     sprintf(chaine, "%s %s", chaine_sauvegarde,
 2150:                             chaine_formatee);
 2151:                     free(chaine_formatee);
 2152:                 }
 2153:                 else
 2154:                 {
 2155:                     chaine = (unsigned char *)
 2156:                             malloc((strlen(chaine_formatee)
 2157:                             + strlen(chaine_sauvegarde) + 2)
 2158:                             * sizeof(unsigned char));
 2159: 
 2160:                     if (chaine == NULL)
 2161:                     {
 2162:                         (*s_etat_processus).erreur_systeme =
 2163:                                 d_es_allocation_memoire;
 2164:                         return(NULL);
 2165:                     }
 2166: 
 2167:                     strcpy(chaine, chaine_sauvegarde);
 2168:                     free(chaine_sauvegarde);
 2169:                     strcat(chaine, " ");
 2170:                     strcat(chaine, chaine_formatee);
 2171:                     free(chaine_formatee);
 2172:                 }
 2173:             }
 2174: 
 2175:             chaine_sauvegarde = chaine;
 2176:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 2177:                     * sizeof(unsigned char));
 2178: 
 2179:             if (chaine == NULL)
 2180:             {
 2181:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2182:                 return(NULL);
 2183:             }
 2184: 
 2185:             strcpy(chaine, chaine_sauvegarde);
 2186:             free(chaine_sauvegarde);
 2187:             strcat(chaine, " ]>");
 2188:         }
 2189:         else if ((*s_objet).type == MCX)
 2190:         {
 2191: 
 2192: /*
 2193: --------------------------------------------------------------------------------
 2194:   Matrice complexe
 2195: --------------------------------------------------------------------------------
 2196: */
 2197: 
 2198:             if (format_sortie == 'N')
 2199:             {
 2200:                 format_sortie = 'S';
 2201:             }
 2202: 
 2203:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2204:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2205:             {
 2206:                 (*s_etat_processus).erreur_execution =
 2207:                         d_ex_erreur_format_fichier;
 2208:                 return(NULL);
 2209:             }
 2210: 
 2211:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2212:                     .nombre_lignes;
 2213:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2214:                     .nombre_colonnes;
 2215: 
 2216:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2217: 
 2218:             if (chaine != NULL)
 2219:             {
 2220:                 strcpy(chaine, "[[");
 2221: 
 2222:                 for(i = 0; i < nombre_lignes; i++)
 2223:                 {
 2224:                     for(j = 0; j < nombre_colonnes; j++)
 2225:                     {
 2226:                         if ((chaine_formatee =
 2227:                                 formateur_fichier_nombre(s_etat_processus,
 2228:                                 (void *) &(((struct_complexe16 **)
 2229:                                 ((*((struct_matrice *)
 2230:                                 ((*s_objet).objet))).tableau))[i][j]), 'C',
 2231:                                 longueur, longueur_champ, format_sortie))
 2232:                                 == NULL)
 2233:                         {
 2234:                             (*s_etat_processus).erreur_systeme =
 2235:                                     d_es_allocation_memoire;
 2236:                             return(NULL);
 2237:                         }
 2238: 
 2239:                         chaine_sauvegarde = chaine;
 2240:                         chaine = (unsigned char *) malloc(
 2241:                                 (strlen(chaine_sauvegarde) +
 2242:                                 strlen(chaine_formatee) + 2)
 2243:                                 * sizeof(unsigned char));
 2244: 
 2245:                         if (chaine == NULL)
 2246:                         {
 2247:                             (*s_etat_processus).erreur_systeme =
 2248:                                     d_es_allocation_memoire;
 2249:                             return(NULL);
 2250:                         }
 2251: 
 2252:                         strcpy(chaine, chaine_sauvegarde);
 2253:                         free(chaine_sauvegarde);
 2254:                         strcat(chaine, " ");
 2255:                         strcat(chaine, chaine_formatee);
 2256:                         free(chaine_formatee);
 2257:                     }
 2258: 
 2259:                     chaine_sauvegarde = chaine;
 2260:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2261:                     {
 2262:                         chaine = (unsigned char *) malloc(
 2263:                                 (strlen(chaine_sauvegarde) + 6)
 2264:                                 * sizeof(unsigned char));
 2265: 
 2266:                         if (chaine == NULL)
 2267:                         {
 2268:                             (*s_etat_processus).erreur_systeme =
 2269:                                     d_es_allocation_memoire;
 2270:                             return(NULL);
 2271:                         }
 2272: 
 2273:                         strcpy(chaine, chaine_sauvegarde);
 2274:                         free(chaine_sauvegarde);
 2275:                         strcat(chaine, " ]\n [");
 2276:                     }
 2277:                     else
 2278:                     {
 2279:                         chaine = (unsigned char *) malloc(
 2280:                                 (strlen(chaine_sauvegarde) + 4)
 2281:                                 * sizeof(unsigned char));
 2282: 
 2283:                         if (chaine == NULL)
 2284:                         {
 2285:                             (*s_etat_processus).erreur_systeme =
 2286:                                     d_es_allocation_memoire;
 2287:                             return(NULL);
 2288:                         }
 2289: 
 2290:                         strcpy(chaine, chaine_sauvegarde);
 2291:                         free(chaine_sauvegarde);
 2292:                         strcat(chaine, " ][");
 2293:                     }
 2294:                 }
 2295: 
 2296:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2297:                 {
 2298:                     chaine[strlen(chaine) - 3] = ']';
 2299:                     chaine[strlen(chaine) - 2] = 0;
 2300: 
 2301:                     chaine_sauvegarde = chaine;
 2302:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2303:                             + 1) * sizeof(unsigned char));
 2304: 
 2305:                     if (chaine == NULL)
 2306:                     {
 2307:                         (*s_etat_processus).erreur_systeme =
 2308:                                 d_es_allocation_memoire;
 2309:                         return(NULL);
 2310:                     }
 2311: 
 2312:                     strcpy(chaine, chaine_sauvegarde);
 2313:                     free(chaine_sauvegarde);
 2314:                 }
 2315:                 else
 2316:                 {
 2317:                     chaine[strlen(chaine) - 2] = ']';
 2318:                     chaine[strlen(chaine) - 1] = 0;
 2319: 
 2320:                     chaine_sauvegarde = chaine;
 2321:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2322:                             + 2) * sizeof(unsigned char));
 2323: 
 2324:                     if (chaine == NULL)
 2325:                     {
 2326:                         (*s_etat_processus).erreur_systeme =
 2327:                                 d_es_allocation_memoire;
 2328:                         return(NULL);
 2329:                     }
 2330: 
 2331:                     strcpy(chaine, chaine_sauvegarde);
 2332:                     free(chaine_sauvegarde);
 2333:                     strcat(chaine, "]");
 2334:                 }
 2335:             }
 2336:         }
 2337:         else if ((*s_objet).type == MIN)
 2338:         {
 2339: 
 2340: /*
 2341: --------------------------------------------------------------------------------
 2342:   Matrice entière
 2343: --------------------------------------------------------------------------------
 2344: */
 2345: 
 2346:             if (format_sortie == 'N')
 2347:             {
 2348:                 format_sortie = 'S';
 2349:             }
 2350: 
 2351:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2352:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2353:             {
 2354:                 (*s_etat_processus).erreur_execution =
 2355:                         d_ex_erreur_format_fichier;
 2356:                 return(NULL);
 2357:             }
 2358: 
 2359:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2360:                     .nombre_lignes;
 2361:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2362:                     .nombre_colonnes;
 2363: 
 2364:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2365: 
 2366:             if (chaine != NULL)
 2367:             {
 2368:                 strcpy(chaine, "[[");
 2369: 
 2370:                 for(i = 0; i < nombre_lignes; i++)
 2371:                 {
 2372:                     for(j = 0; j < nombre_colonnes; j++)
 2373:                     {
 2374:                         if ((chaine_formatee =
 2375:                                 formateur_fichier_nombre(s_etat_processus,
 2376:                                 (void *) &(((integer8 **) ((*((struct_matrice *)
 2377:                                 ((*s_objet).objet))).tableau))[i][j]), 'I',
 2378:                                 longueur, longueur_champ, format_sortie))
 2379:                                 == NULL)
 2380:                         {
 2381:                             (*s_etat_processus).erreur_systeme =
 2382:                                     d_es_allocation_memoire;
 2383:                             return(NULL);
 2384:                         }
 2385: 
 2386:                         chaine_sauvegarde = chaine;
 2387:                         chaine = (unsigned char *) malloc(
 2388:                                 (strlen(chaine_sauvegarde) +
 2389:                                 strlen(chaine_formatee) + 2)
 2390:                                 * sizeof(unsigned char));
 2391: 
 2392:                         if (chaine == NULL)
 2393:                         {
 2394:                             (*s_etat_processus).erreur_systeme =
 2395:                                     d_es_allocation_memoire;
 2396:                             return(NULL);
 2397:                         }
 2398: 
 2399:                         strcpy(chaine, chaine_sauvegarde);
 2400:                         free(chaine_sauvegarde);
 2401:                         strcat(chaine, " ");
 2402:                         strcat(chaine, chaine_formatee);
 2403:                         free(chaine_formatee);
 2404:                     }
 2405: 
 2406:                     chaine_sauvegarde = chaine;
 2407:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2408:                     {
 2409:                         chaine = (unsigned char *) malloc(
 2410:                                 (strlen(chaine_sauvegarde) + 6)
 2411:                                 * sizeof(unsigned char));
 2412: 
 2413:                         if (chaine == NULL)
 2414:                         {
 2415:                             (*s_etat_processus).erreur_systeme =
 2416:                                     d_es_allocation_memoire;
 2417:                             return(NULL);
 2418:                         }
 2419: 
 2420:                         strcpy(chaine, chaine_sauvegarde);
 2421:                         free(chaine_sauvegarde);
 2422:                         strcat(chaine, " ]\n [");
 2423:                     }
 2424:                     else
 2425:                     {
 2426:                         chaine = (unsigned char *) malloc(
 2427:                                 (strlen(chaine_sauvegarde) + 4)
 2428:                                 * sizeof(unsigned char));
 2429: 
 2430:                         if (chaine == NULL)
 2431:                         {
 2432:                             (*s_etat_processus).erreur_systeme =
 2433:                                     d_es_allocation_memoire;
 2434:                             return(NULL);
 2435:                         }
 2436: 
 2437:                         strcpy(chaine, chaine_sauvegarde);
 2438:                         free(chaine_sauvegarde);
 2439:                         strcat(chaine, " ][");
 2440:                     }
 2441:                 }
 2442: 
 2443:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2444:                 {
 2445:                     chaine[strlen(chaine) - 3] = ']';
 2446:                     chaine[strlen(chaine) - 2] = 0;
 2447: 
 2448:                     chaine_sauvegarde = chaine;
 2449:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2450:                             + 1) * sizeof(unsigned char));
 2451: 
 2452:                     if (chaine == NULL)
 2453:                     {
 2454:                         (*s_etat_processus).erreur_systeme =
 2455:                                 d_es_allocation_memoire;
 2456:                         return(NULL);
 2457:                     }
 2458: 
 2459:                     strcpy(chaine, chaine_sauvegarde);
 2460:                     free(chaine_sauvegarde);
 2461:                 }
 2462:                 else
 2463:                 {
 2464:                     chaine[strlen(chaine) - 2] = ']';
 2465:                     chaine[strlen(chaine) - 1] = 0;
 2466: 
 2467:                     chaine_sauvegarde = chaine;
 2468:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2469:                             + 2) * sizeof(unsigned char));
 2470: 
 2471:                     if (chaine == NULL)
 2472:                     {
 2473:                         (*s_etat_processus).erreur_systeme =
 2474:                                 d_es_allocation_memoire;
 2475:                         return(NULL);
 2476:                     }
 2477: 
 2478:                     strcpy(chaine, chaine_sauvegarde);
 2479:                     free(chaine_sauvegarde);
 2480:                     strcat(chaine, "]");
 2481:                 }
 2482:             }
 2483:         }
 2484:         else if ((*s_objet).type == MRL)
 2485:         {
 2486: 
 2487: /*
 2488: --------------------------------------------------------------------------------
 2489:   Matrice réelle
 2490: --------------------------------------------------------------------------------
 2491: */
 2492: 
 2493:             if (format_sortie == 'N')
 2494:             {
 2495:                 format_sortie = 'S';
 2496:             }
 2497: 
 2498:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2499:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2500:             {
 2501:                 (*s_etat_processus).erreur_execution =
 2502:                         d_ex_erreur_format_fichier;
 2503:                 return(NULL);
 2504:             }
 2505: 
 2506:             nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2507:                     .nombre_lignes;
 2508:             nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2509:                     .nombre_colonnes;
 2510: 
 2511:             chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2512: 
 2513:             if (chaine != NULL)
 2514:             {
 2515:                 strcpy(chaine, "[[");
 2516: 
 2517:                 for(i = 0; i < nombre_lignes; i++)
 2518:                 {
 2519:                     for(j = 0; j < nombre_colonnes; j++)
 2520:                     {
 2521:                         if ((chaine_formatee =
 2522:                                 formateur_fichier_nombre(s_etat_processus,
 2523:                                 (void *) &(((real8 **) ((*((struct_matrice *)
 2524:                                 ((*s_objet).objet))).tableau))[i][j]), 'R',
 2525:                                 longueur, longueur_champ, format_sortie))
 2526:                                 == NULL)
 2527:                         {
 2528:                             (*s_etat_processus).erreur_systeme =
 2529:                                     d_es_allocation_memoire;
 2530:                             return(NULL);
 2531:                         }
 2532: 
 2533:                         chaine_sauvegarde = chaine;
 2534:                         chaine = (unsigned char *) malloc(
 2535:                                 (strlen(chaine_sauvegarde) +
 2536:                                 strlen(chaine_formatee) + 2)
 2537:                                 * sizeof(unsigned char));
 2538: 
 2539:                         if (chaine == NULL)
 2540:                         {
 2541:                             (*s_etat_processus).erreur_systeme =
 2542:                                     d_es_allocation_memoire;
 2543:                             return(NULL);
 2544:                         }
 2545: 
 2546:                         strcpy(chaine, chaine_sauvegarde);
 2547:                         free(chaine_sauvegarde);
 2548:                         strcat(chaine, " ");
 2549:                         strcat(chaine, chaine_formatee);
 2550:                         free(chaine_formatee);
 2551:                     }
 2552: 
 2553:                     chaine_sauvegarde = chaine;
 2554:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2555:                     {
 2556:                         chaine = (unsigned char *) malloc(
 2557:                                 (strlen(chaine_sauvegarde) + 6)
 2558:                                 * sizeof(unsigned char));
 2559: 
 2560:                         if (chaine == NULL)
 2561:                         {
 2562:                             (*s_etat_processus).erreur_systeme =
 2563:                                     d_es_allocation_memoire;
 2564:                             return(NULL);
 2565:                         }
 2566: 
 2567:                         strcpy(chaine, chaine_sauvegarde);
 2568:                         free(chaine_sauvegarde);
 2569:                         strcat(chaine, " ]\n [");
 2570:                     }
 2571:                     else
 2572:                     {
 2573:                         chaine = (unsigned char *) malloc(
 2574:                                 (strlen(chaine_sauvegarde) + 4)
 2575:                                 * sizeof(unsigned char));
 2576: 
 2577:                         if (chaine == NULL)
 2578:                         {
 2579:                             (*s_etat_processus).erreur_systeme =
 2580:                                     d_es_allocation_memoire;
 2581:                             return(NULL);
 2582:                         }
 2583: 
 2584:                         strcpy(chaine, chaine_sauvegarde);
 2585:                         free(chaine_sauvegarde);
 2586:                         strcat(chaine, " ][");
 2587:                     }
 2588:                 }
 2589: 
 2590:                 if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2591:                 {
 2592:                     chaine[strlen(chaine) - 3] = ']';
 2593:                     chaine[strlen(chaine) - 2] = 0;
 2594: 
 2595:                     chaine_sauvegarde = chaine;
 2596:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2597:                             + 1) * sizeof(unsigned char));
 2598: 
 2599:                     if (chaine == NULL)
 2600:                     {
 2601:                         (*s_etat_processus).erreur_systeme =
 2602:                                 d_es_allocation_memoire;
 2603:                         return(NULL);
 2604:                     }
 2605: 
 2606:                     strcpy(chaine, chaine_sauvegarde);
 2607:                     free(chaine_sauvegarde);
 2608:                 }
 2609:                 else
 2610:                 {
 2611:                     chaine[strlen(chaine) - 2] = ']';
 2612:                     chaine[strlen(chaine) - 1] = 0;
 2613: 
 2614:                     chaine_sauvegarde = chaine;
 2615:                     chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2616:                             + 2) * sizeof(unsigned char));
 2617: 
 2618:                     if (chaine == NULL)
 2619:                     {
 2620:                         (*s_etat_processus).erreur_systeme =
 2621:                                 d_es_allocation_memoire;
 2622:                         return(NULL);
 2623:                     }
 2624: 
 2625:                     strcpy(chaine, chaine_sauvegarde);
 2626:                     free(chaine_sauvegarde);
 2627:                     strcat(chaine, "]");
 2628:                 }
 2629:             }
 2630:         }
 2631:         else if ((*s_objet).type == NOM)
 2632:         {
 2633: 
 2634: /*
 2635: --------------------------------------------------------------------------------
 2636:   Nom
 2637: --------------------------------------------------------------------------------
 2638: */
 2639: 
 2640:             if (format_sortie != 'N')
 2641:             {
 2642:                 (*s_etat_processus).erreur_execution =
 2643:                         d_ex_erreur_format_fichier;
 2644:                 return(NULL);
 2645:             }
 2646: 
 2647:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 2648:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 2649: 
 2650:             if (chaine == NULL)
 2651:             {
 2652:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2653:                 return(NULL);
 2654:             }
 2655: 
 2656:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 2657:         }
 2658:         else if ((*s_objet).type == REL)
 2659:         {
 2660: 
 2661: /*
 2662: --------------------------------------------------------------------------------
 2663:   Réel
 2664: --------------------------------------------------------------------------------
 2665: */
 2666: 
 2667:             if (format_sortie == 'N')
 2668:             {
 2669:                 format_sortie = 'S';
 2670:             }
 2671: 
 2672:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2673:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2674:             {
 2675:                 (*s_etat_processus).erreur_execution =
 2676:                         d_ex_erreur_format_fichier;
 2677:                 return(NULL);
 2678:             }
 2679: 
 2680:             if ((chaine_formatee = formateur_fichier_nombre(s_etat_processus,
 2681:                     (void *) ((real8 *) ((*s_objet).objet)), 'R',
 2682:                     longueur, longueur_champ, format_sortie)) == NULL)
 2683:             {
 2684:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2685:                 return(NULL);
 2686:             }
 2687: 
 2688:             chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 2689:                     * sizeof(unsigned char));
 2690: 
 2691:             if (chaine == NULL)
 2692:             {
 2693:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2694:                 return(NULL);
 2695:             }
 2696: 
 2697:             strcpy(chaine, chaine_formatee);
 2698:             free(chaine_formatee);
 2699:         }
 2700:         else if ((*s_objet).type == VCX)
 2701:         {
 2702: 
 2703: /*
 2704: --------------------------------------------------------------------------------
 2705:   Vecteur complexe
 2706: --------------------------------------------------------------------------------
 2707: */
 2708: 
 2709:             if (format_sortie == 'N')
 2710:             {
 2711:                 format_sortie = 'S';
 2712:             }
 2713: 
 2714:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2715:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2716:             {
 2717:                 (*s_etat_processus).erreur_execution =
 2718:                         d_ex_erreur_format_fichier;
 2719:                 return(NULL);
 2720:             }
 2721: 
 2722:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2723:                     .taille;
 2724: 
 2725:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2726: 
 2727:             if (chaine != NULL)
 2728:             {
 2729:                 strcpy(chaine, "[");
 2730: 
 2731:                 for(i = 0; i < nombre_colonnes; i++)
 2732:                 {
 2733:                     if ((chaine_formatee =
 2734:                             formateur_fichier_nombre(s_etat_processus,
 2735:                             (void *) &(((struct_complexe16 *)
 2736:                             ((*((struct_vecteur *)
 2737:                             ((*s_objet).objet))).tableau))[i]), 'C',
 2738:                             longueur, longueur_champ, format_sortie)) == NULL)
 2739:                     {
 2740:                         (*s_etat_processus).erreur_systeme =
 2741:                                 d_es_allocation_memoire;
 2742:                         return(NULL);
 2743:                     }
 2744: 
 2745:                     chaine_sauvegarde = chaine;
 2746:                     chaine = (unsigned char *) malloc(
 2747:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2748:                             + 2) * sizeof(unsigned char));
 2749: 
 2750:                     if (chaine == NULL)
 2751:                     {
 2752:                         (*s_etat_processus).erreur_systeme =
 2753:                                 d_es_allocation_memoire;
 2754:                         return(NULL);
 2755:                     }
 2756: 
 2757:                     strcpy(chaine, chaine_sauvegarde);
 2758:                     free(chaine_sauvegarde);
 2759:                     strcat(chaine, " ");
 2760:                     strcat(chaine, chaine_formatee);
 2761:                     free(chaine_formatee);
 2762:                 }
 2763: 
 2764:                 chaine_sauvegarde = chaine;
 2765:                 chaine = (unsigned char *) malloc(
 2766:                         (strlen(chaine_sauvegarde) + 3)
 2767:                         * sizeof(unsigned char));
 2768: 
 2769:                 if (chaine == NULL)
 2770:                 {
 2771:                     (*s_etat_processus).erreur_systeme =
 2772:                             d_es_allocation_memoire;
 2773:                     return(NULL);
 2774:                 }
 2775: 
 2776:                 strcpy(chaine, chaine_sauvegarde);
 2777:                 free(chaine_sauvegarde);
 2778:                 strcat(chaine, " ]");
 2779:             }
 2780:         }
 2781:         else if ((*s_objet).type == VIN)
 2782:         {
 2783: 
 2784: /*
 2785: --------------------------------------------------------------------------------
 2786:   Vecteur entier
 2787: --------------------------------------------------------------------------------
 2788: */
 2789: 
 2790:             if (format_sortie == 'N')
 2791:             {
 2792:                 format_sortie = 'S';
 2793:             }
 2794: 
 2795:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2796:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2797:             {
 2798:                 (*s_etat_processus).erreur_execution =
 2799:                         d_ex_erreur_format_fichier;
 2800:                 return(NULL);
 2801:             }
 2802: 
 2803:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2804:                     .taille;
 2805: 
 2806:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2807: 
 2808:             if (chaine != NULL)
 2809:             {
 2810:                 strcpy(chaine, "[");
 2811: 
 2812:                 for(i = 0; i < nombre_colonnes; i++)
 2813:                 {
 2814:                     if ((chaine_formatee =
 2815:                             formateur_fichier_nombre(s_etat_processus,
 2816:                             (void *) &(((integer8 *) ((*((struct_vecteur *)
 2817:                             ((*s_objet).objet))).tableau))[i]), 'I',
 2818:                             longueur, longueur_champ, format_sortie)) == NULL)
 2819:                     {
 2820:                         (*s_etat_processus).erreur_systeme =
 2821:                                 d_es_allocation_memoire;
 2822:                         return(NULL);
 2823:                     }
 2824: 
 2825:                     chaine_sauvegarde = chaine;
 2826:                     chaine = (unsigned char *) malloc(
 2827:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2828:                             + 2) * sizeof(unsigned char));
 2829: 
 2830:                     if (chaine == NULL)
 2831:                     {
 2832:                         (*s_etat_processus).erreur_systeme =
 2833:                                 d_es_allocation_memoire;
 2834:                         return(NULL);
 2835:                     }
 2836: 
 2837:                     strcpy(chaine, chaine_sauvegarde);
 2838:                     free(chaine_sauvegarde);
 2839:                     strcat(chaine, " ");
 2840:                     strcat(chaine, chaine_formatee);
 2841:                     free(chaine_formatee);
 2842:                 }
 2843: 
 2844:                 chaine_sauvegarde = chaine;
 2845:                 chaine = (unsigned char *) malloc(
 2846:                         (strlen(chaine_sauvegarde) + 3)
 2847:                         * sizeof(unsigned char));
 2848: 
 2849:                 if (chaine == NULL)
 2850:                 {
 2851:                     (*s_etat_processus).erreur_systeme =
 2852:                             d_es_allocation_memoire;
 2853:                     return(NULL);
 2854:                 }
 2855: 
 2856:                 strcpy(chaine, chaine_sauvegarde);
 2857:                 free(chaine_sauvegarde);
 2858:                 strcat(chaine, " ]");
 2859:             }
 2860:         }
 2861:         else if ((*s_objet).type == VRL)
 2862:         {
 2863: 
 2864: /*
 2865: --------------------------------------------------------------------------------
 2866:   Vecteur réel
 2867: --------------------------------------------------------------------------------
 2868: */
 2869: 
 2870:             if (format_sortie == 'N')
 2871:             {
 2872:                 format_sortie = 'S';
 2873:             }
 2874: 
 2875:             if ((format_sortie != 'S') && (format_sortie != 'F') &&
 2876:                     (format_sortie != 'I') && (format_sortie != 'E'))
 2877:             {
 2878:                 (*s_etat_processus).erreur_execution =
 2879:                         d_ex_erreur_format_fichier;
 2880:                 return(NULL);
 2881:             }
 2882: 
 2883:             nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 2884:                     .taille;
 2885: 
 2886:             chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 2887: 
 2888:             if (chaine != NULL)
 2889:             {
 2890:                 strcpy(chaine, "[");
 2891: 
 2892:                 for(i = 0; i < nombre_colonnes; i++)
 2893:                 {
 2894:                     if ((chaine_formatee =
 2895:                             formateur_fichier_nombre(s_etat_processus,
 2896:                             (void *) &(((real8 *) ((*((struct_vecteur *)
 2897:                             ((*s_objet).objet))).tableau))[i]), 'R',
 2898:                             longueur, longueur_champ, format_sortie)) == NULL)
 2899:                     {
 2900:                         (*s_etat_processus).erreur_systeme =
 2901:                                 d_es_allocation_memoire;
 2902:                         return(NULL);
 2903:                     }
 2904: 
 2905:                     chaine_sauvegarde = chaine;
 2906:                     chaine = (unsigned char *) malloc(
 2907:                             (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 2908:                             + 2) * sizeof(unsigned char));
 2909: 
 2910:                     if (chaine == NULL)
 2911:                     {
 2912:                         (*s_etat_processus).erreur_systeme =
 2913:                                 d_es_allocation_memoire;
 2914:                         return(NULL);
 2915:                     }
 2916: 
 2917:                     strcpy(chaine, chaine_sauvegarde);
 2918:                     free(chaine_sauvegarde);
 2919:                     strcat(chaine, " ");
 2920:                     strcat(chaine, chaine_formatee);
 2921:                     free(chaine_formatee);
 2922:                 }
 2923: 
 2924:                 chaine_sauvegarde = chaine;
 2925:                 chaine = (unsigned char *) malloc(
 2926:                         (strlen(chaine_sauvegarde) + 3)
 2927:                         * sizeof(unsigned char));
 2928: 
 2929:                 if (chaine == NULL)
 2930:                 {
 2931:                     (*s_etat_processus).erreur_systeme =
 2932:                             d_es_allocation_memoire;
 2933:                     return(NULL);
 2934:                 }
 2935: 
 2936:                 strcpy(chaine, chaine_sauvegarde);
 2937:                 free(chaine_sauvegarde);
 2938:                 strcat(chaine, " ]");
 2939:             }
 2940:         }
 2941:         else
 2942:         {
 2943:             // Type non exportable
 2944: 
 2945:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 2946:             free(chaine);
 2947: 
 2948:             return(NULL);
 2949:         }
 2950: 
 2951:         (*longueur_effective) = ((integer8) strlen(chaine)) + 1;
 2952:     }
 2953:     else
 2954:     {
 2955:         /*
 2956:          * Fichiers non formatés
 2957:          */
 2958: 
 2959: #define __zone() \
 2960:         do { int _i; \
 2961:             for(_i = 0; _i < longueur_totale; _i++) \
 2962:                 printf("%02X ", chaine[_i]); printf("\b\n"); } while(0)
 2963: 
 2964:         /*
 2965:          * Chaque enregistrement est composé d'une donnée (une liste)
 2966:          * suivie de sa longueur en octets et d'un champ binaire indiquant
 2967:          * le format (integer*1,2,4 ou 8) d'écriture de cette longueur.
 2968:          * Les données contenues dans ces fichiers sont associées à un
 2969:          * descripteur de type.
 2970:          *
 2971:          * Attention : les fichiers non formatés ne sont pas portables
 2972:          * d'une architecture à l'autre.
 2973:          *
 2974:          * Structure d'un enregistrement :
 2975:          * [en-tête][.........données..........][longueur + type de longueur]
 2976:          *
 2977:          * Longueur : (pour l'instruction backspace)
 2978:          *
 2979:          * XXXXXXX0                             longueur sur 7 bits
 2980:          * XXXX0011 XXXXXXXX XXXX0011           longueur sur 16 bits
 2981:          * LSB(1/2) MSB      LSB(2/2)
 2982:          * XXXX0101 XXXXXXXX XXXXXXXX XXXX0101  longueur sur 24 bits
 2983:          * XXXX0111 XXXXXXXX XXXXXXXX XXXXXXXX
 2984:          *          XXXX0111                    longueur sur 32 bits
 2985:          * XXXX1001 XXXXXXXX XXXXXXXX XXXXXXXX
 2986:          *          XXXXXXXX XXXX1001           longueur sur 40 bits
 2987:          * XXXX1011 XXXXXXXX XXXXXXXX XXXXXXXX
 2988:          *          XXXXXXXX XXXXXXXX XXXX1011  longueur sur 48 bits
 2989:          * XXXX1101 XXXXXXXX XXXXXXXX XXXXXXXX
 2990:          *          XXXXXXXX XXXXXXXX XXXXXXXX
 2991:          *          XXXX1101                    longueur sur 56 bits
 2992:          * XXXX1111 XXXXXXXX XXXXXXXX XXXXXXXX
 2993:          *          XXXXXXXX XXXXXXXX XXXXXXXX
 2994:          *          XXXXXXXX XXXX1111           longueur sur 64 bits
 2995:          *
 2996:          * Structures des enregistrements :
 2997:          * chaque type de donnée est associé à une en-tête binaire comprenant
 2998:          * le type de données ainsi que toutes autres informations utiles.
 2999:          *
 3000:          * Représentation binaire :
 3001:          *
 3002:          * 1/ scalaires
 3003:          * 0000 XXXX                Binaire sur XXXX octets
 3004:          *
 3005:          * TYPE
 3006:          * 0001 00 00               integer*1
 3007:          * 0001 00 01               integer*2
 3008:          * 0001 00 10               integer*4
 3009:          * 0001 00 11               integer*8
 3010:          *
 3011:          * 0001 01 00               real*4
 3012:          * 0001 01 01               real*8
 3013:          *
 3014:          * 0001 10 00               complex*8
 3015:          * 0001 10 01               complex*16
 3016:          *
 3017:          * 0010 00 00               vecteur integer*1 (dimensions integer*1)
 3018:          * 0010 01 00               vecteur integer*1 (dimensions integer*2)
 3019:          * 0010 10 00               vecteur integer*1 (dimensions integer*4)
 3020:          * 0010 11 00               vecteur integer*1 (dimensions integer*8)
 3021:          * 0010 00 01               vecteur integer*2 (dimensions integer*1)
 3022:          * 0010 01 01               vecteur integer*2 (dimensions integer*2)
 3023:          * 0010 10 01               vecteur integer*2 (dimensions integer*4)
 3024:          * 0010 11 01               vecteur integer*2 (dimensions integer*8)
 3025:          * 0010 00 10               vecteur integer*4 (dimensions integer*1)
 3026:          * 0010 01 10               vecteur integer*4 (dimensions integer*2)
 3027:          * 0010 10 10               vecteur integer*4 (dimensions integer*4)
 3028:          * 0010 11 10               vecteur integer*4 (dimensions integer*8)
 3029:          * 0010 00 11               vecteur integer*8 (dimensions integer*1)
 3030:          * 0010 01 11               vecteur integer*8 (dimensions integer*2)
 3031:          * 0010 10 11               vecteur integer*8 (dimensions integer*4)
 3032:          * 0010 11 11               vecteur integer*8 (dimensions integer*8)
 3033:          *
 3034:          * 0011 00 00               matrice integer*1 (dimensions integer*1)
 3035:          * 0011 01 00               matrice integer*1 (dimensions integer*2)
 3036:          * 0011 10 00               matrice integer*1 (dimensions integer*4)
 3037:          * 0011 11 00               matrice integer*1 (dimensions integer*8)
 3038:          * 0011 00 01               matrice integer*2 (dimensions integer*1)
 3039:          * 0011 01 01               matrice integer*2 (dimensions integer*2)
 3040:          * 0011 10 01               matrice integer*2 (dimensions integer*4)
 3041:          * 0011 11 01               matrice integer*2 (dimensions integer*8)
 3042:          * 0011 00 10               matrice integer*4 (dimensions integer*1)
 3043:          * 0011 01 10               matrice integer*4 (dimensions integer*2)
 3044:          * 0011 10 10               matrice integer*4 (dimensions integer*4)
 3045:          * 0011 11 10               matrice integer*4 (dimensions integer*8)
 3046:          * 0011 00 11               matrice integer*8 (dimensions integer*1)
 3047:          * 0011 01 11               matrice integer*8 (dimensions integer*2)
 3048:          * 0011 10 11               matrice integer*8 (dimensions integer*4)
 3049:          * 0011 11 11               matrice integer*8 (dimensions integer*8)
 3050:          *
 3051:          * 0100 0 XXX               liste de longueur XXX
 3052:          * 0100 10 00               liste de longueur integer*1
 3053:          * 0100 10 01               liste de longueur integer*2
 3054:          * 0100 10 10               liste de longueur integer*4
 3055:          * 0100 10 11               liste de longueur integer*8
 3056:          *
 3057:          * 0101 0 XXX               nom de longueur XXX
 3058:          * 0101 10 LL               nom de longueur integer*LL
 3059:          *
 3060:          * 0110 0 XXX               expression RPN
 3061:          * 0110 10 LL
 3062:          *
 3063:          * 0111 0 XXX               expression algébrique
 3064:          * 0111 10 LL
 3065:          *
 3066:          * 1000 0 XXX               chaîne de caractères
 3067:          * 1000 10 LL
 3068:          *
 3069:          * 1001 0 XXX               table de longueur XXX
 3070:          * 1001 10 00               table de longueur integer*1
 3071:          * 1001 10 01               table de longueur integer*2
 3072:          * 1001 10 10               table de longueur integer*4
 3073:          * 1001 10 11               table de longueur integer*8
 3074:          *
 3075:          * 1010 00 10               vecteur real*4 (dimensions integer*1)
 3076:          * 1010 01 10               vecteur real*4 (dimensions integer*2)
 3077:          * 1010 10 10               vecteur real*4 (dimensions integer*4)
 3078:          * 1010 11 10               vecteur real*4 (dimensions integer*8)
 3079:          * 1010 00 11               vecteur real*8 (dimensions integer*1)
 3080:          * 1010 01 11               vecteur real*8 (dimensions integer*2)
 3081:          * 1010 10 11               vecteur real*8 (dimensions integer*4)
 3082:          * 1010 11 11               vecteur real*8 (dimensions integer*8)
 3083:          * 1011 00 10               vecteur complex*8 (dimensions integer*1)
 3084:          * 1011 01 10               vecteur complex*8 (dimensions integer*2)
 3085:          * 1011 10 10               vecteur complex*8 (dimensions integer*4)
 3086:          * 1011 11 10               vecteur complex*8 (dimensions integer*8)
 3087:          * 1011 00 11               vecteur complex*16 (dimensions integer*1)
 3088:          * 1011 01 11               vecteur complex*16 (dimensions integer*2)
 3089:          * 1011 10 11               vecteur complex*16 (dimensions integer*4)
 3090:          * 1011 11 11               vecteur complex*16 (dimensions integer*8)
 3091:          *
 3092:          * 1100 00 10               matrice real*4 (dimensions integer*1)
 3093:          * 1100 01 10               matrice real*4 (dimensions integer*2)
 3094:          * 1100 10 10               matrice real*4 (dimensions integer*4)
 3095:          * 1100 11 10               matrice real*4 (dimensions integer*8)
 3096:          * 1100 00 11               matrice real*8 (dimensions integer*1)
 3097:          * 1100 01 11               matrice real*8 (dimensions integer*2)
 3098:          * 1100 10 11               matrice real*8 (dimensions integer*4)
 3099:          * 1100 11 11               matrice real*8 (dimensions integer*8)
 3100:          * 1101 00 10               matrice complex*8 (dimensions integer*1)
 3101:          * 1101 01 10               matrice complex*8 (dimensions integer*2)
 3102:          * 1101 10 10               matrice complex*8 (dimensions integer*4)
 3103:          * 1101 11 10               matrice complex*8 (dimensions integer*8)
 3104:          * 1101 00 11               matrice complex*16 (dimensions integer*1)
 3105:          * 1101 01 11               matrice complex*16 (dimensions integer*2)
 3106:          * 1101 10 11               matrice complex*16 (dimensions integer*4)
 3107:          * 1101 11 11               matrice complex*16 (dimensions integer*8)
 3108:          *
 3109:          * 1110 0 XXX               fonction de longueur XXX
 3110:          * 1110 10 LL               fonction de longueur integer*LL
 3111:          *
 3112:          * 1111 XXXXX               page 2
 3113:          * 1111 XXXXX 000000001     entier long
 3114:          * 1111 XXXXX 000000010     réel long
 3115:          * 1111 XXXXX 000000011     complexe long
 3116:          *
 3117:          * Les longueurs indiquées par le champ LL suivent l'en-tête :
 3118:          *      00 : integer*1
 3119:          *      01 : integer*2
 3120:          *      10 : integer*4
 3121:          *      11 : integer*8
 3122:          *
 3123:          * [En-tête][longueur_1][longueur_2][données]
 3124:          * le nombre de champs longueur dépendant des types d'enregistrement.
 3125:          *
 3126:          * Toutes les autres combinaisons sont invalides.
 3127:          */
 3128: 
 3129:         chaine = NULL;
 3130:         chaine_formatee = NULL;
 3131:         chaine_sauvegarde = NULL;
 3132: 
 3133:         if ((*s_objet).type == BIN)
 3134:         {
 3135: 
 3136: /*
 3137: --------------------------------------------------------------------------------
 3138:   Entier binaire en base 2, 8, 10 ou 16
 3139:   Poids fort 0000
 3140: --------------------------------------------------------------------------------
 3141: */
 3142: 
 3143:             if (format_sortie == 'N')
 3144:             {
 3145:                 format_sortie = 'L';
 3146:                 longueur_champ = 8;
 3147:             }
 3148: 
 3149:             if (format_sortie != 'L')
 3150:             {
 3151:                 (*s_etat_processus).erreur_execution =
 3152:                         d_ex_erreur_format_fichier;
 3153:                 return(NULL);
 3154:             }
 3155: 
 3156:             if (longueur_champ < 8)
 3157:             {
 3158:                 if ((*((logical8 *) (*s_objet).objet)) >=
 3159:                         ((logical8) 1 << (8 * longueur_champ)))
 3160:                 {
 3161:                     (*s_etat_processus).erreur_execution =
 3162:                             d_ex_representation;
 3163:                     return(NULL);
 3164:                 }
 3165:             }
 3166: 
 3167:             (*longueur_effective) = longueur_champ + 1;
 3168: 
 3169:             if ((chaine = malloc(((size_t) (*longueur_effective))
 3170:                     * sizeof(unsigned char))) == NULL)
 3171:             {
 3172:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3173:                 return(NULL);
 3174:             }
 3175: 
 3176:             chaine[0] = (unsigned char) longueur_champ;
 3177: 
 3178:             for(i = 1; i <= (*longueur_effective); i++)
 3179:             {
 3180:                 chaine[i] = ((*((logical8 *) (*s_objet).objet)) >>
 3181:                         (8 * (longueur_champ - i))) & 0xFF;
 3182:             }
 3183:         }
 3184:         else if ((*s_objet).type == CHN)
 3185:         {
 3186: 
 3187: /*
 3188: --------------------------------------------------------------------------------
 3189:   Chaîne de caractères
 3190:   Poids fort 1000 0XXX (longueur inférieure à 2**3-1
 3191:              1000 10LL (autres longueurs)
 3192: --------------------------------------------------------------------------------
 3193: */
 3194: 
 3195:             if (format_sortie == 'N')
 3196:             {
 3197:                 format_sortie = 'S';
 3198:                 longueur_champ = -1;
 3199:             }
 3200: 
 3201:             if (format_sortie != 'S')
 3202:             {
 3203:                 (*s_etat_processus).erreur_execution =
 3204:                         d_ex_erreur_format_fichier;
 3205:                 return(NULL);
 3206:             }
 3207: 
 3208:             longueur_reelle_chaine = longueur_chaine(s_etat_processus,
 3209:                     (unsigned char *) (*s_objet).objet);
 3210: 
 3211:             if ((longueur_champ == -1) || (longueur_reelle_chaine <
 3212:                     longueur_champ))
 3213:             {
 3214:                 // Le format est CHARACTER*(*). On copie dans la sortie
 3215:                 // la chaine en évaluant les caractères échappés.
 3216: 
 3217:                 if ((chaine = formateur_flux(s_etat_processus, (unsigned char *)
 3218:                         (*s_objet).objet, &longueur_chaine_traitee)) == NULL)
 3219:                 {
 3220:                     return(NULL);
 3221:                 }
 3222:             }
 3223:             else
 3224:             {
 3225:                 // Format de type CHARACTER*(n)
 3226: 
 3227:                 if ((chaine_sauvegarde = formateur_flux(s_etat_processus,
 3228:                         (unsigned char *) (*s_objet).objet,
 3229:                         &longueur_chaine_traitee)) == NULL)
 3230:                 {
 3231:                     return(NULL);
 3232:                 }
 3233: 
 3234:                 if ((chaine = malloc(((size_t) longueur_champ)
 3235:                         * sizeof(unsigned char))) == NULL)
 3236:                 {
 3237:                     (*s_etat_processus).erreur_systeme =
 3238:                             d_es_allocation_memoire;
 3239:                     return(NULL);
 3240:                 }
 3241: 
 3242:                 memcpy(chaine, chaine_sauvegarde, (size_t) longueur_champ);
 3243:                 longueur_chaine_traitee = longueur_champ;
 3244:                 free(chaine_sauvegarde);
 3245:             }
 3246: 
 3247:             chaine_sauvegarde = chaine;
 3248: 
 3249:             if (longueur_chaine_traitee < (1LL << 3))
 3250:             {
 3251:                 if ((chaine = malloc((((size_t) longueur_chaine_traitee) + 1)
 3252:                         * sizeof(unsigned char))) == NULL)
 3253:                 {
 3254:                     (*s_etat_processus).erreur_systeme =
 3255:                             d_es_allocation_memoire;
 3256:                     return(NULL);
 3257:                 }
 3258: 
 3259:                 chaine[0] = (unsigned char) (0x80 |
 3260:                         (longueur_chaine_traitee & 0x7));
 3261: 
 3262:                 memcpy(chaine + 1, chaine_sauvegarde,
 3263:                         (size_t) longueur_chaine_traitee);
 3264:                 longueur_totale = longueur_chaine_traitee + 1;
 3265:             }
 3266:             else if (longueur_chaine_traitee < (1LL << 8))
 3267:             {
 3268:                 if ((chaine = malloc((((size_t) longueur_chaine_traitee) + 2)
 3269:                         * sizeof(unsigned char))) == NULL)
 3270:                 {
 3271:                     (*s_etat_processus).erreur_systeme =
 3272:                             d_es_allocation_memoire;
 3273:                     return(NULL);
 3274:                 }
 3275: 
 3276:                 chaine[0] = (unsigned char) 0x88;
 3277:                 chaine[1] = (unsigned char) (longueur_chaine_traitee & 0xFF);
 3278: 
 3279:                 memcpy(chaine + 2, chaine_sauvegarde,
 3280:                         (size_t) longueur_chaine_traitee);
 3281:                 longueur_totale = longueur_chaine_traitee + 2;
 3282:             }
 3283:             else if (longueur_chaine_traitee < (1LL << 16))
 3284:             {
 3285:                 if ((chaine = malloc((((size_t) longueur_chaine_traitee) + 3)
 3286:                         * sizeof(unsigned char))) == NULL)
 3287:                 {
 3288:                     (*s_etat_processus).erreur_systeme =
 3289:                             d_es_allocation_memoire;
 3290:                     return(NULL);
 3291:                 }
 3292: 
 3293:                 chaine[0] = (unsigned char) 0x89;
 3294:                 chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 8)
 3295:                         & 0xFF);
 3296:                 chaine[2] = (unsigned char) (longueur_chaine_traitee & 0xFF);
 3297: 
 3298:                 memcpy(chaine + 3, chaine_sauvegarde,
 3299:                         (size_t) longueur_chaine_traitee);
 3300:                 longueur_totale = longueur_chaine_traitee + 3;
 3301:             }
 3302:             else if (longueur_chaine_traitee < (1LL << 32))
 3303:             {
 3304:                 if ((chaine = malloc((((size_t) longueur_chaine_traitee) + 5)
 3305:                         * sizeof(unsigned char))) == NULL)
 3306:                 {
 3307:                     (*s_etat_processus).erreur_systeme =
 3308:                             d_es_allocation_memoire;
 3309:                     return(NULL);
 3310:                 }
 3311: 
 3312:                 chaine[0] = (unsigned char) 0x8A;
 3313:                 chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 24)
 3314:                         & 0xFF);
 3315:                 chaine[2] = (unsigned char) ((longueur_chaine_traitee >> 16)
 3316:                         & 0xFF);
 3317:                 chaine[3] = (unsigned char) ((longueur_chaine_traitee >> 8)
 3318:                         & 0xFF);
 3319:                 chaine[4] = (unsigned char) (longueur_chaine_traitee & 0xFF);
 3320: 
 3321:                 memcpy(chaine + 5, chaine_sauvegarde,
 3322:                         (size_t) longueur_chaine_traitee);
 3323:                 longueur_totale = longueur_chaine_traitee + 5;
 3324:             }
 3325:             else
 3326:             {
 3327:                 if ((chaine = malloc((((size_t) longueur_chaine_traitee) + 9)
 3328:                         * sizeof(unsigned char))) == NULL)
 3329:                 {
 3330:                     (*s_etat_processus).erreur_systeme =
 3331:                             d_es_allocation_memoire;
 3332:                     return(NULL);
 3333:                 }
 3334: 
 3335:                 chaine[0] = (unsigned char) 0x8B;
 3336:                 chaine[1] = (unsigned char) ((longueur_chaine_traitee >> 56)
 3337:                         & 0xFF);
 3338:                 chaine[2] = (unsigned char) ((longueur_chaine_traitee >> 48)
 3339:                         & 0xFF);
 3340:                 chaine[3] = (unsigned char) ((longueur_chaine_traitee >> 40)
 3341:                         & 0xFF);
 3342:                 chaine[4] = (unsigned char) ((longueur_chaine_traitee >> 32)
 3343:                         & 0xFF);
 3344:                 chaine[5] = (unsigned char) ((longueur_chaine_traitee >> 24)
 3345:                         & 0xFF);
 3346:                 chaine[6] = (unsigned char) ((longueur_chaine_traitee >> 16)
 3347:                         & 0xFF);
 3348:                 chaine[7] = (unsigned char) ((longueur_chaine_traitee >> 8)
 3349:                         & 0xFF);
 3350:                 chaine[8] = (unsigned char) (longueur_chaine_traitee & 0xFF);
 3351: 
 3352:                 memcpy(chaine + 9, chaine_sauvegarde,
 3353:                         (size_t) longueur_chaine_traitee);
 3354:                 longueur_totale = longueur_chaine_traitee + 9;
 3355:             }
 3356: 
 3357:             (*longueur_effective) = longueur_totale;
 3358:         }
 3359:         else if ((*s_objet).type == CPL)
 3360:         {
 3361: 
 3362: /*
 3363: --------------------------------------------------------------------------------
 3364:   Complexe
 3365:   Poids fort 0001 10
 3366: --------------------------------------------------------------------------------
 3367: */
 3368: 
 3369:             if (format_sortie == 'N')
 3370:             {
 3371:                 format_sortie = 'C';
 3372:                 longueur = 8;
 3373:             }
 3374: 
 3375:             if (format_sortie != 'C')
 3376:             {
 3377:                 (*s_etat_processus).erreur_execution =
 3378:                         d_ex_erreur_format_fichier;
 3379:                 return(NULL);
 3380:             }
 3381: 
 3382:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 3383:                     (*s_objet).objet, 'C', 'C', longueur, longueur_effective))
 3384:                     == NULL)
 3385:             {
 3386:                 return(NULL);
 3387:             }
 3388:         }
 3389:         else if ((*s_objet).type == INT)
 3390:         {
 3391: 
 3392: /*
 3393: --------------------------------------------------------------------------------
 3394:   Entier
 3395:   Poids fort 0001 00
 3396: --------------------------------------------------------------------------------
 3397: */
 3398: 
 3399:             if (format_sortie == 'N')
 3400:             {
 3401:                 format_sortie = 'I';
 3402:                 longueur = 8;
 3403:             }
 3404: 
 3405:             if ((format_sortie != 'I') && (format_sortie != 'R')
 3406:                     && (format_sortie != 'C'))
 3407:             {
 3408:                 (*s_etat_processus).erreur_execution =
 3409:                         d_ex_erreur_format_fichier;
 3410:                 return(NULL);
 3411:             }
 3412: 
 3413:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 3414:                     (*s_objet).objet, 'I', format_sortie, longueur,
 3415:                     longueur_effective)) == NULL)
 3416:             {
 3417:                 return(NULL);
 3418:             }
 3419:         }
 3420:         else if ((*s_objet).type == FCT)
 3421:         {
 3422: 
 3423: /*
 3424: --------------------------------------------------------------------------------
 3425:   Fonction
 3426:   Poids fort 1110
 3427: --------------------------------------------------------------------------------
 3428: */
 3429: 
 3430:             if (format_sortie != 'N')
 3431:             {
 3432:                 (*s_etat_processus).erreur_execution =
 3433:                         d_ex_erreur_format_fichier;
 3434:                 return(NULL);
 3435:             }
 3436: 
 3437:             longueur_fonction = (integer8) strlen((*((struct_fonction *)
 3438:                     (*s_objet).objet)).nom_fonction);
 3439: 
 3440:             if (longueur_fonction < (1LL << 3))
 3441:             {
 3442:                 if ((chaine = malloc((1 + ((size_t) longueur_fonction) + 8)
 3443:                         * sizeof(unsigned char)))== NULL)
 3444:                 {
 3445:                     (*s_etat_processus).erreur_systeme =
 3446:                             d_es_allocation_memoire;
 3447:                     return(NULL);
 3448:                 }
 3449: 
 3450:                 chaine[0] = (unsigned char) (0xE0 | (longueur_fonction & 0x7));
 3451: 
 3452:                 strcpy(chaine + 1, (*((struct_fonction *) (*s_objet).objet))
 3453:                         .nom_fonction);
 3454:                 (*longueur_effective) = 1 + longueur_fonction + 8;
 3455:             }
 3456:             else if (longueur_fonction < (1LL << 8))
 3457:             {
 3458:                 if ((chaine = malloc((2 + ((size_t) longueur_fonction) + 8)
 3459:                         * sizeof(unsigned char)))== NULL)
 3460:                 {
 3461:                     (*s_etat_processus).erreur_systeme =
 3462:                             d_es_allocation_memoire;
 3463:                     return(NULL);
 3464:                 }
 3465: 
 3466:                 chaine[0] = (unsigned char) (0xE0 | 0x08);
 3467:                 chaine[1] = (unsigned char) (longueur_fonction & 0xFF);
 3468: 
 3469:                 strcpy(chaine + 2, (*((struct_fonction *) (*s_objet).objet))
 3470:                         .nom_fonction);
 3471:                 (*longueur_effective) = 2 + longueur_fonction + 8;
 3472:             }
 3473:             else if (longueur_fonction < (1LL << 16))
 3474:             {
 3475:                 if ((chaine = malloc((3 + ((size_t) longueur_fonction) + 8)
 3476:                         * sizeof(unsigned char)))== NULL)
 3477:                 {
 3478:                     (*s_etat_processus).erreur_systeme =
 3479:                             d_es_allocation_memoire;
 3480:                     return(NULL);
 3481:                 }
 3482: 
 3483:                 chaine[0] = (unsigned char ) (0xE0 | 0x09);
 3484:                 chaine[1] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 3485:                 chaine[2] = (unsigned char) (longueur_fonction & 0xFF);
 3486: 
 3487:                 strcpy(chaine + 3, (*((struct_fonction *) (*s_objet).objet))
 3488:                         .nom_fonction);
 3489:                 (*longueur_effective) = 3 + longueur_fonction + 9;
 3490:             }
 3491:             else if (longueur_fonction < (1LL << 32))
 3492:             {
 3493:                 if ((chaine = malloc((5 + ((size_t) longueur_fonction) + 8)
 3494:                         * sizeof(unsigned char)))== NULL)
 3495:                 {
 3496:                     (*s_etat_processus).erreur_systeme =
 3497:                             d_es_allocation_memoire;
 3498:                     return(NULL);
 3499:                 }
 3500: 
 3501:                 chaine[0] = (unsigned char) (0xE0 | 0x0A);
 3502:                 chaine[1] = (unsigned char) ((longueur_fonction >> 24) & 0xFF);
 3503:                 chaine[2] = (unsigned char) ((longueur_fonction >> 16) & 0xFF);
 3504:                 chaine[3] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 3505:                 chaine[4] = (unsigned char) (longueur_fonction & 0xFF);
 3506: 
 3507:                 strcpy(chaine + 5, (*((struct_fonction *) (*s_objet).objet))
 3508:                         .nom_fonction);
 3509:                 (*longueur_effective) = 5 + longueur_fonction + 8;
 3510:             }
 3511:             else
 3512:             {
 3513:                 if ((chaine = malloc((9 + ((size_t) longueur_fonction) + 8)
 3514:                         * sizeof(unsigned char)))== NULL)
 3515:                 {
 3516:                     (*s_etat_processus).erreur_systeme =
 3517:                             d_es_allocation_memoire;
 3518:                     return(NULL);
 3519:                 }
 3520: 
 3521:                 chaine[0] = (unsigned char) (0xE0 | 0x0B);
 3522:                 chaine[1] = (unsigned char) ((longueur_fonction >> 56) & 0xFF);
 3523:                 chaine[2] = (unsigned char) ((longueur_fonction >> 48) & 0xFF);
 3524:                 chaine[3] = (unsigned char) ((longueur_fonction >> 40) & 0xFF);
 3525:                 chaine[4] = (unsigned char) ((longueur_fonction >> 32) & 0xFF);
 3526:                 chaine[5] = (unsigned char) ((longueur_fonction >> 24) & 0xFF);
 3527:                 chaine[6] = (unsigned char) ((longueur_fonction >> 16) & 0xFF);
 3528:                 chaine[7] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 3529:                 chaine[8] = (unsigned char) (longueur_fonction & 0xFF);
 3530: 
 3531:                 strcpy(chaine + 9, (*((struct_fonction *) (*s_objet).objet))
 3532:                         .nom_fonction);
 3533:                 (*longueur_effective) = 9 + longueur_fonction + 8;
 3534:             }
 3535: 
 3536:             for(i = 1; i <= 8; i++)
 3537:             {
 3538:                 chaine[(*longueur_effective) - i] = (unsigned char)
 3539:                         (((*((struct_fonction *) (*s_objet).objet))
 3540:                         .nombre_arguments >> ((8 - i) * 8)) & 0xFF);
 3541:             }
 3542:         }
 3543:         else if (((*s_objet).type == LST) || ((*s_objet).type == ALG)
 3544:                 || ((*s_objet).type == RPN))
 3545:         {
 3546: 
 3547: /*
 3548: --------------------------------------------------------------------------------
 3549:   Liste
 3550:   Poids fort 0100
 3551: 
 3552:   Expression algébrique
 3553:   Poids fort 0111
 3554: 
 3555:   Définition
 3556:   Poids fort 0110
 3557: --------------------------------------------------------------------------------
 3558: */
 3559: 
 3560:             chaine = malloc(sizeof(unsigned char));
 3561: 
 3562:             if (chaine == NULL)
 3563:             {
 3564:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3565:                 return(NULL);
 3566:             }
 3567: 
 3568:             if ((*s_objet).type == LST)
 3569:             {
 3570:                 type_binaire = 0x40;
 3571:             }
 3572:             else if ((*s_objet).type == RPN)
 3573:             {
 3574:                 type_binaire = 0x60;
 3575:             }
 3576:             else // ALG
 3577:             {
 3578:                 type_binaire = 0x70;
 3579:             }
 3580: 
 3581:             // Calcul de la longueur de la liste.
 3582: 
 3583:             longueur_liste = 0;
 3584:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 3585: 
 3586:             while(l_element_courant != NULL)
 3587:             {
 3588:                 l_element_courant = (*l_element_courant).suivant;
 3589:                 longueur_liste++;
 3590:             }
 3591: 
 3592:             if (longueur_liste < (1LL << 3))
 3593:             {
 3594:                 chaine[0] = (unsigned char) (type_binaire |
 3595:                         (longueur_liste & 0x7));
 3596:             }
 3597:             else if (longueur_liste < (1LL << 8))
 3598:             {
 3599:                 chaine[0] = (unsigned char) (type_binaire | 0x08);
 3600:             }
 3601:             else if (longueur_liste < (1LL << 16))
 3602:             {
 3603:                 chaine[0] = (unsigned char ) (type_binaire | 0x09);
 3604:             }
 3605:             else if (longueur_liste < (1LL << 32))
 3606:             {
 3607:                 chaine[0] = (unsigned char) (type_binaire | 0x0A);
 3608:             }
 3609:             else
 3610:             {
 3611:                 chaine[0] = (unsigned char) (type_binaire | 0x0B);
 3612:             }
 3613: 
 3614:             longueur_totale = 1;
 3615: 
 3616:             if ((chaine[0] & 0x8) != 0)
 3617:             {
 3618:                 switch(chaine[0] & 0x03)
 3619:                 {
 3620:                     case 0x00 :
 3621:                     {
 3622:                         longueur_totale += 1;
 3623: 
 3624:                         if ((chaine = realloc(chaine,
 3625:                                 ((size_t) longueur_totale) *
 3626:                                 sizeof(unsigned char))) == NULL)
 3627:                         {
 3628:                             (*s_etat_processus).erreur_systeme =
 3629:                                     d_es_allocation_memoire;
 3630:                             return(NULL);
 3631:                         }
 3632: 
 3633:                         chaine[longueur_totale - 1] =
 3634:                                 (unsigned char) (longueur_liste & 0xFF);
 3635:                         break;
 3636:                     }
 3637: 
 3638:                     case 0x01 :
 3639:                     {
 3640:                         longueur_totale += 2;
 3641: 
 3642:                         if ((chaine = realloc(chaine,
 3643:                                 ((size_t) longueur_totale) *
 3644:                                 sizeof(unsigned char))) == NULL)
 3645:                         {
 3646:                             (*s_etat_processus).erreur_systeme =
 3647:                                     d_es_allocation_memoire;
 3648:                             return(NULL);
 3649:                         }
 3650: 
 3651:                         chaine[longueur_totale - 2] =
 3652:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 3653:                         chaine[longueur_totale - 1] =
 3654:                                 (unsigned char) (longueur_liste & 0xFF);
 3655:                         break;
 3656:                     }
 3657: 
 3658:                     case 0x02 :
 3659:                     {
 3660:                         longueur_totale += 4;
 3661: 
 3662:                         if ((chaine = realloc(chaine,
 3663:                                 ((size_t) longueur_totale) *
 3664:                                 sizeof(unsigned char))) == NULL)
 3665:                         {
 3666:                             (*s_etat_processus).erreur_systeme =
 3667:                                     d_es_allocation_memoire;
 3668:                             return(NULL);
 3669:                         }
 3670: 
 3671:                         chaine[longueur_totale - 4] =
 3672:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 3673:                         chaine[longueur_totale - 3] =
 3674:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 3675:                         chaine[longueur_totale - 2] =
 3676:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 3677:                         chaine[longueur_totale - 1] =
 3678:                                 (unsigned char) (longueur_liste & 0xFF);
 3679:                         break;
 3680:                     }
 3681: 
 3682:                     case 0x03 :
 3683:                     {
 3684:                         longueur_totale += 8;
 3685: 
 3686:                         if ((chaine = realloc(chaine,
 3687:                                 ((size_t) longueur_totale) *
 3688:                                 sizeof(unsigned char))) == NULL)
 3689:                         {
 3690:                             (*s_etat_processus).erreur_systeme =
 3691:                                     d_es_allocation_memoire;
 3692:                             return(NULL);
 3693:                         }
 3694: 
 3695:                         chaine[longueur_totale - 8] =
 3696:                                 (unsigned char) ((longueur_liste >> 56) & 0xFF);
 3697:                         chaine[longueur_totale - 7] =
 3698:                                 (unsigned char) ((longueur_liste >> 48) & 0xFF);
 3699:                         chaine[longueur_totale - 6] =
 3700:                                 (unsigned char) ((longueur_liste >> 40) & 0xFF);
 3701:                         chaine[longueur_totale - 5] =
 3702:                                 (unsigned char) ((longueur_liste >> 32) & 0xFF);
 3703:                         chaine[longueur_totale - 4] =
 3704:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 3705:                         chaine[longueur_totale - 3] =
 3706:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 3707:                         chaine[longueur_totale - 2] =
 3708:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 3709:                         chaine[longueur_totale - 1] =
 3710:                                 (unsigned char) (longueur_liste & 0xFF);
 3711:                         break;
 3712:                     }
 3713: 
 3714:                     default :
 3715:                     {
 3716:                         BUG(1, printf("Internal format error\n"));
 3717:                     }
 3718:                 }
 3719:             }
 3720: 
 3721:             l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 3722:             l_element_courant_format = (struct_liste_chainee *)
 3723:                     (*s_format).objet;
 3724:             nombre_elements = 0;
 3725: 
 3726:             while((l_element_courant != NULL) &&
 3727:                     (l_element_courant_format != NULL))
 3728:             {
 3729:                 if ((((*(*l_element_courant_format).donnee).type == LST)
 3730:                         && ((*(*l_element_courant).donnee).type == LST)) ||
 3731:                         (((*(*l_element_courant_format).donnee).type == TBL)
 3732:                         && ((*(*l_element_courant).donnee).type == TBL)))
 3733:                 {
 3734:                     if (format_sortie != 'N')
 3735:                     {
 3736:                         if ((chaine_formatee = formateur_fichier(
 3737:                                 s_etat_processus,
 3738:                                 (*l_element_courant).donnee,
 3739:                                 (*l_element_courant_format).donnee,
 3740:                                 0, 0, ' ', 'U', longueur_effective, recursivite,
 3741:                                 export_fichier)) == NULL)
 3742:                         {
 3743:                             free(chaine);
 3744:                             return(NULL);
 3745:                         }
 3746:                     }
 3747:                     else
 3748:                     {
 3749:                         if ((chaine_formatee = formateur_fichier(
 3750:                                 s_etat_processus,
 3751:                                 (*l_element_courant).donnee,
 3752:                                 (*l_element_courant_format).donnee,
 3753:                                 0, 0, 'N', 'U', longueur_effective, recursivite,
 3754:                                 export_fichier)) == NULL)
 3755:                         {
 3756:                             free(chaine);
 3757:                             return(NULL);
 3758:                         }
 3759:                     }
 3760: 
 3761:                     if ((chaine = realloc(chaine, ((size_t) (longueur_totale +
 3762:                             (*longueur_effective))) * sizeof(unsigned char)))
 3763:                             == NULL)
 3764:                     {
 3765:                         (*s_etat_processus).erreur_systeme =
 3766:                                 d_es_allocation_memoire;
 3767:                         return(NULL);
 3768:                     }
 3769: 
 3770:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 3771:                             (size_t) (*longueur_effective));
 3772:                     longueur_totale += (*longueur_effective);
 3773:                     free(chaine_formatee);
 3774:                 }
 3775:                 else if ((*(*l_element_courant_format).donnee).type != CHN)
 3776:                 {
 3777:                     free(chaine);
 3778: 
 3779:                     (*s_etat_processus).erreur_execution =
 3780:                             d_ex_erreur_format_fichier;
 3781:                     return(NULL);
 3782:                 }
 3783:                 else
 3784:                 {
 3785:                     format_degenere = d_faux;
 3786: 
 3787:                     if ((format_chaine = conversion_majuscule(
 3788:                             s_etat_processus, (unsigned char *)
 3789:                             (*(*l_element_courant_format).donnee).objet))
 3790:                             == NULL)
 3791:                     {
 3792:                         (*s_etat_processus).erreur_systeme =
 3793:                                 d_es_allocation_memoire;
 3794:                         return(NULL);
 3795:                     }
 3796: 
 3797:                     if (strncmp("INTEGER*", format_chaine, 8) == 0)
 3798:                     {
 3799:                         format_sortie = 'I';
 3800:                         position_1 = 8;
 3801:                     }
 3802:                     else if (strncmp("LOGICAL*", format_chaine, 8) == 0)
 3803:                     {
 3804:                         format_sortie = 'L';
 3805:                         position_1 = 8;
 3806:                     }
 3807:                     else if (strncmp("REAL*", format_chaine, 5) == 0)
 3808:                     {
 3809:                         format_sortie = 'R';
 3810:                         position_1 = 5;
 3811:                     }
 3812:                     else if (strncmp("COMPLEX*", format_chaine, 8) == 0)
 3813:                     {
 3814:                         format_sortie = 'C';
 3815:                         position_1 = 8;
 3816:                     }
 3817:                     else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 3818:                     {
 3819:                         format_sortie = 'S';
 3820:                         position_1 = 10;
 3821:                         format_degenere = d_vrai;
 3822:                     }
 3823:                     else if (strcmp("NATIVE*(*)", format_chaine) == 0)
 3824:                     {
 3825:                         format_sortie = 'N';
 3826:                         position_1 = 7;
 3827:                         format_degenere = d_vrai;
 3828:                     }
 3829:                     else
 3830:                     {
 3831:                         free(chaine);
 3832:                         free(format_chaine);
 3833: 
 3834:                         (*s_etat_processus).erreur_execution =
 3835:                                 d_ex_erreur_format_fichier;
 3836:                         return(NULL);
 3837:                     }
 3838: 
 3839:                     if (format_chaine[position_1] == d_code_fin_chaine)
 3840:                     {
 3841:                         free(chaine);
 3842:                         free(format_chaine);
 3843: 
 3844:                         (*s_etat_processus).erreur_execution =
 3845:                                 d_ex_erreur_format_fichier;
 3846:                         return(NULL);
 3847:                     }
 3848: 
 3849:                     if (strcmp(&(format_chaine[position_1]), "(*)") != 0)
 3850:                     {
 3851:                         if (sscanf(&(format_chaine[position_1]), "%lld",
 3852:                                 &longueur) != 1)
 3853:                         {
 3854:                             free(chaine);
 3855:                             free(format_chaine);
 3856: 
 3857:                             (*s_etat_processus).erreur_execution =
 3858:                                     d_ex_erreur_format_fichier;
 3859:                             return(NULL);
 3860:                         }
 3861: 
 3862:                         longueur_champ = longueur;
 3863:                     }
 3864:                     else
 3865:                     {
 3866:                         longueur_champ = -1;
 3867:                         longueur = -1;
 3868:                     }
 3869: 
 3870:                     free(format_chaine);
 3871: 
 3872:                     // Construction d'une liste de format
 3873: 
 3874:                     if ((s_format_tmp = allocation(s_etat_processus, LST))
 3875:                             == NULL)
 3876:                     {
 3877:                         return(NULL);
 3878:                     }
 3879: 
 3880:                     if ((*(*l_element_courant).donnee).type == LST)
 3881:                     {
 3882:                         l_compteur = (struct_liste_chainee *)
 3883:                                 (*(*l_element_courant).donnee).objet;
 3884: 
 3885:                         while(l_compteur != NULL)
 3886:                         {
 3887:                             l_tmp = (*s_format_tmp).objet;
 3888: 
 3889:                             if (((*s_format_tmp).objet = allocation_maillon(
 3890:                                     s_etat_processus)) == NULL)
 3891:                             {
 3892:                                 return(NULL);
 3893:                             }
 3894: 
 3895:                             if (((*((struct_liste_chainee *)
 3896:                                     (*s_format_tmp).objet))
 3897:                                     .donnee = copie_objet(s_etat_processus,
 3898:                                     (*l_element_courant_format).donnee, 'P'))
 3899:                                     == NULL)
 3900:                             {
 3901:                                 return(NULL);
 3902:                             }
 3903: 
 3904:                             (*((struct_liste_chainee *) (*s_format_tmp).objet))
 3905:                                     .suivant = l_tmp;
 3906:                             l_compteur = (*l_compteur).suivant;
 3907:                         }
 3908:                     }
 3909:                     else
 3910:                     {
 3911:                         if (((*s_format_tmp).objet = allocation_maillon(
 3912:                                 s_etat_processus)) == NULL)
 3913:                         {
 3914:                             return(NULL);
 3915:                         }
 3916: 
 3917:                         if (((*((struct_liste_chainee *) (*s_format_tmp).objet))
 3918:                                 .donnee = copie_objet(s_etat_processus,
 3919:                                 (*l_element_courant_format).donnee, 'P'))
 3920:                                 == NULL)
 3921:                         {
 3922:                             return(NULL);
 3923:                         }
 3924: 
 3925:                         (*((struct_liste_chainee *) (*s_format_tmp).objet))
 3926:                                 .suivant = NULL;
 3927:                     }
 3928: 
 3929:                     if ((chaine_formatee = formateur_fichier(s_etat_processus,
 3930:                             (*l_element_courant).donnee, s_format_tmp,
 3931:                             longueur, longueur_champ, format_sortie, type,
 3932:                             longueur_effective, recursivite, export_fichier))
 3933:                             == NULL)
 3934:                     {
 3935:                         liberation(s_etat_processus, s_format_tmp);
 3936:                         free(chaine);
 3937:                         return(NULL);
 3938:                     }
 3939: 
 3940:                     liberation(s_etat_processus, s_format_tmp);
 3941: 
 3942:                     if ((chaine = realloc(chaine,
 3943:                             ((size_t) (longueur_totale + (*longueur_effective)))
 3944:                             * sizeof(unsigned char))) == NULL)
 3945:                     {
 3946:                         (*s_etat_processus).erreur_systeme =
 3947:                                 d_es_allocation_memoire;
 3948:                         return(NULL);
 3949:                     }
 3950: 
 3951:                     memcpy(&(chaine[longueur_totale]), chaine_formatee,
 3952:                             (size_t) (*longueur_effective));
 3953:                     longueur_totale += (*longueur_effective);
 3954:                     free(chaine_formatee);
 3955:                 }
 3956: 
 3957:                 l_element_courant_format = (*l_element_courant_format).suivant;
 3958:                 nombre_elements++;
 3959:                 l_element_courant = (*l_element_courant).suivant;
 3960:             }
 3961: 
 3962:             if ((l_element_courant != NULL) ||
 3963:                     (l_element_courant_format != NULL))
 3964:             {
 3965:                 free(chaine);
 3966: 
 3967:                 (*s_etat_processus).erreur_execution =
 3968:                         d_ex_erreur_format_fichier;
 3969:                 return(NULL);
 3970:             }
 3971: 
 3972:             (*longueur_effective) = longueur_totale;
 3973:         }
 3974:         else if ((*s_objet).type == TBL)
 3975:         {
 3976: 
 3977: /*
 3978: --------------------------------------------------------------------------------
 3979:   Table
 3980:   Bits de poids fort : 1001
 3981: --------------------------------------------------------------------------------
 3982: */
 3983: 
 3984:             chaine = malloc(sizeof(unsigned char));
 3985: 
 3986:             if (chaine == NULL)
 3987:             {
 3988:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3989:                 return(NULL);
 3990:             }
 3991: 
 3992:             type_binaire = 0x90;
 3993:             longueur_liste = (*((struct_tableau *) (*s_objet).objet))
 3994:                     .nombre_elements;
 3995: 
 3996:             if (longueur_liste < (1LL << 3))
 3997:             {
 3998:                 chaine[0] = (unsigned char) (type_binaire |
 3999:                         (longueur_liste & 0x7));
 4000:             }
 4001:             else if (longueur_liste < (1LL << 8))
 4002:             {
 4003:                 chaine[0] = (unsigned char) (type_binaire | 0x08);
 4004:             }
 4005:             else if (longueur_liste < (1LL << 16))
 4006:             {
 4007:                 chaine[0] = (unsigned char ) (type_binaire | 0x09);
 4008:             }
 4009:             else if (longueur_liste < (1LL << 32))
 4010:             {
 4011:                 chaine[0] = (unsigned char) (type_binaire | 0x0A);
 4012:             }
 4013:             else
 4014:             {
 4015:                 chaine[0] = (unsigned char) (type_binaire | 0x0B);
 4016:             }
 4017: 
 4018:             longueur_totale = 1;
 4019: 
 4020:             if ((chaine[0] & 0x8) != 0)
 4021:             { // Longueur sur un entier distinct de l'en-tête
 4022:                 switch(chaine[0] & 0x03)
 4023:                 {
 4024:                     case 0x00 :
 4025:                     {
 4026:                         longueur_totale += 1;
 4027: 
 4028:                         if ((chaine = realloc(chaine,
 4029:                                 ((size_t) longueur_totale) *
 4030:                                 sizeof(unsigned char))) == NULL)
 4031:                         {
 4032:                             (*s_etat_processus).erreur_systeme =
 4033:                                     d_es_allocation_memoire;
 4034:                             return(NULL);
 4035:                         }
 4036: 
 4037:                         chaine[longueur_totale - 1] =
 4038:                                 (unsigned char) (longueur_liste & 0xFF);
 4039:                         break;
 4040:                     }
 4041: 
 4042:                     case 0x01 :
 4043:                     {
 4044:                         longueur_totale += 2;
 4045: 
 4046:                         if ((chaine = realloc(chaine,
 4047:                                 ((size_t) longueur_totale) *
 4048:                                 sizeof(unsigned char))) == NULL)
 4049:                         {
 4050:                             (*s_etat_processus).erreur_systeme =
 4051:                                     d_es_allocation_memoire;
 4052:                             return(NULL);
 4053:                         }
 4054: 
 4055:                         chaine[longueur_totale - 2] =
 4056:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4057:                         chaine[longueur_totale - 1] =
 4058:                                 (unsigned char) (longueur_liste & 0xFF);
 4059:                         break;
 4060:                     }
 4061: 
 4062:                     case 0x02 :
 4063:                     {
 4064:                         longueur_totale += 4;
 4065: 
 4066:                         if ((chaine = realloc(chaine,
 4067:                                 ((size_t) longueur_totale) *
 4068:                                 sizeof(unsigned char))) == NULL)
 4069:                         {
 4070:                             (*s_etat_processus).erreur_systeme =
 4071:                                     d_es_allocation_memoire;
 4072:                             return(NULL);
 4073:                         }
 4074: 
 4075:                         chaine[longueur_totale - 4] =
 4076:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4077:                         chaine[longueur_totale - 3] =
 4078:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4079:                         chaine[longueur_totale - 2] =
 4080:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4081:                         chaine[longueur_totale - 1] =
 4082:                                 (unsigned char) (longueur_liste & 0xFF);
 4083:                         break;
 4084:                     }
 4085: 
 4086:                     case 0x03 :
 4087:                     {
 4088:                         longueur_totale += 8;
 4089: 
 4090:                         if ((chaine = realloc(chaine,
 4091:                                 ((size_t) longueur_totale) *
 4092:                                 sizeof(unsigned char))) == NULL)
 4093:                         {
 4094:                             (*s_etat_processus).erreur_systeme =
 4095:                                     d_es_allocation_memoire;
 4096:                             return(NULL);
 4097:                         }
 4098: 
 4099:                         chaine[longueur_totale - 8] =
 4100:                                 (unsigned char) ((longueur_liste >> 56) & 0xFF);
 4101:                         chaine[longueur_totale - 7] =
 4102:                                 (unsigned char) ((longueur_liste >> 48) & 0xFF);
 4103:                         chaine[longueur_totale - 6] =
 4104:                                 (unsigned char) ((longueur_liste >> 40) & 0xFF);
 4105:                         chaine[longueur_totale - 5] =
 4106:                                 (unsigned char) ((longueur_liste >> 32) & 0xFF);
 4107:                         chaine[longueur_totale - 4] =
 4108:                                 (unsigned char) ((longueur_liste >> 24) & 0xFF);
 4109:                         chaine[longueur_totale - 3] =
 4110:                                 (unsigned char) ((longueur_liste >> 16) & 0xFF);
 4111:                         chaine[longueur_totale - 2] =
 4112:                                 (unsigned char) ((longueur_liste >> 8) & 0xFF);
 4113:                         chaine[longueur_totale - 1] =
 4114:                                 (unsigned char) (longueur_liste & 0xFF);
 4115:                         break;
 4116:                     }
 4117: 
 4118:                     default :
 4119:                     {
 4120:                         BUG(1, printf("Internal format error\n"));
 4121:                     }
 4122:                 }
 4123:             }
 4124: 
 4125: uprintf("F=%s\n", formateur(s_etat_processus, 0, s_format));
 4126: uprintf("D=%s\n", formateur(s_etat_processus, 0, s_objet));
 4127:             if ((*s_format).type == CHN)
 4128:             {
 4129: uprintf("<1>\n");
 4130:                 if ((format_chaine = conversion_majuscule(
 4131:                         s_etat_processus, (unsigned char *)
 4132:                         (*s_format).objet)) == NULL)
 4133:                 {
 4134:                     (*s_etat_processus).erreur_systeme =
 4135:                             d_es_allocation_memoire;
 4136:                     return(NULL);
 4137:                 }
 4138: 
 4139:                 if (strncmp("INTEGER*", format_chaine, 8) == 0)
 4140:                 {
 4141:                     format_sortie = 'I';
 4142:                     position_1 = 8;
 4143:                 }
 4144:                 else if (strncmp("LOGICAL*", format_chaine, 8) == 0)
 4145:                 {
 4146:                     format_sortie = 'L';
 4147:                     position_1 = 8;
 4148:                 }
 4149:                 else if (strncmp("REAL*", format_chaine, 5) == 0)
 4150:                 {
 4151:                     format_sortie = 'R';
 4152:                     position_1 = 5;
 4153:                 }
 4154:                 else if (strncmp("COMPLEX*", format_chaine, 8) == 0)
 4155:                 {
 4156:                     format_sortie = 'C';
 4157:                     position_1 = 8;
 4158:                 }
 4159:                 else if (strncmp("CHARACTER*", format_chaine, 10) == 0)
 4160:                 {
 4161:                     format_sortie = 'S';
 4162:                     position_1 = 10;
 4163:                     format_degenere = d_vrai;
 4164:                 }
 4165:                 else if (strcmp("NATIVE*(*)", format_chaine) == 0)
 4166:                 {
 4167:                     format_sortie = 'N';
 4168:                     position_1 = 7;
 4169:                     format_degenere = d_vrai;
 4170:                 }
 4171:                 else
 4172:                 {
 4173:                     free(chaine);
 4174:                     free(format_chaine);
 4175: 
 4176:                     (*s_etat_processus).erreur_execution =
 4177:                             d_ex_erreur_format_fichier;
 4178:                     return(NULL);
 4179:                 }
 4180: 
 4181:                 if (format_chaine[position_1] == d_code_fin_chaine)
 4182:                 {
 4183:                     free(chaine);
 4184:                     free(format_chaine);
 4185: 
 4186:                     (*s_etat_processus).erreur_execution =
 4187:                             d_ex_erreur_format_fichier;
 4188:                     return(NULL);
 4189:                 }
 4190: 
 4191:                 if (strcmp(&(format_chaine[position_1]), "(*)") != 0)
 4192:                 {
 4193:                     if (sscanf(&(format_chaine[position_1]), "%lld",
 4194:                             &longueur) != 1)
 4195:                     {
 4196:                         free(chaine);
 4197:                         free(format_chaine);
 4198: 
 4199:                         (*s_etat_processus).erreur_execution =
 4200:                                 d_ex_erreur_format_fichier;
 4201:                         return(NULL);
 4202:                     }
 4203: 
 4204:                     longueur_champ = longueur;
 4205:                 }
 4206:                 else
 4207:                 {
 4208:                     longueur_champ = -1;
 4209:                     longueur = -1;
 4210:                 }
 4211: 
 4212:                 free(format_chaine);
 4213: 
 4214:                 if ((s_format_tmp = allocation(s_etat_processus, TBL))
 4215:                         == NULL)
 4216:                 {
 4217:                     return(NULL);
 4218:                 }
 4219: 
 4220:                 (*((struct_tableau *) (*s_format_tmp).objet))
 4221:                         .nombre_elements = (*((struct_tableau *)
 4222:                         (*s_objet).objet)).nombre_elements;
 4223: 
 4224:                 for(i = 0; i < (*((struct_tableau *) (*s_format_tmp).objet))
 4225:                         .nombre_elements; i++)
 4226:                 {
 4227:                     if (((*((struct_tableau *) (*s_format_tmp).objet))
 4228:                             .elements[i] = copie_objet(s_etat_processus,
 4229:                             s_format, 'P')) == NULL)
 4230:                     {
 4231:                         return(NULL);
 4232:                     }
 4233:                 }
 4234: 
 4235: uprintf("%s\n", formateur(s_etat_processus, 0, s_format));
 4236:                 if ((chaine_formatee = formateur_fichier(s_etat_processus,
 4237:                         s_objet, s_format_tmp,
 4238:                         longueur, longueur_champ,
 4239:                         format_sortie, type, longueur_effective,
 4240:                         recursivite, export_fichier)) == NULL)
 4241:                 {
 4242:                     liberation(s_etat_processus, s_format_tmp);
 4243:                     free(chaine);
 4244:                     return(NULL);
 4245:                 }
 4246: 
 4247:                 liberation(s_etat_processus, s_format_tmp);
 4248:             }
 4249:             else if ((*s_format).type == TBL)
 4250:             {
 4251: uprintf("<2>\n");
 4252:                 free(chaine);
 4253:                 // A FIXER
 4254:             }
 4255:             else
 4256:             {
 4257: uprintf("<3>\n");
 4258:                 free(chaine);
 4259: 
 4260:                 (*s_etat_processus).erreur_execution =
 4261:                         d_ex_erreur_format_fichier;
 4262:                 return(NULL);
 4263:             }
 4264: 
 4265:             (*longueur_effective) = longueur_totale;
 4266:         }
 4267:         else if ((*s_objet).type == MCX)
 4268:         {
 4269: 
 4270: /*
 4271: --------------------------------------------------------------------------------
 4272:   Matrice complexe
 4273: --------------------------------------------------------------------------------
 4274: */
 4275: 
 4276:             if (format_sortie == 'N')
 4277:             {
 4278:                 format_sortie = 'C';
 4279:                 longueur = 16;
 4280:             }
 4281: 
 4282:             if (format_sortie != 'C')
 4283:             {
 4284:                 (*s_etat_processus).erreur_execution =
 4285:                         d_ex_erreur_format_fichier;
 4286:                 return(NULL);
 4287:             }
 4288: 
 4289:             longueur_objet = (*((struct_matrice *) (*s_objet).objet))
 4290:                     .nombre_lignes * (*((struct_matrice *) (*s_objet).objet))
 4291:                     .nombre_colonnes;
 4292: 
 4293:             if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4294:                     < (1LL << 8)) && ((*((struct_matrice *) (*s_objet).objet))
 4295:                     .nombre_colonnes < (1LL << 8)))
 4296:             {
 4297:                 // Taille sur un octet
 4298:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4299:                         (3 + (longueur_objet * longueur)))
 4300:                         * sizeof(unsigned char))) == NULL)
 4301:                 {
 4302:                     (*s_etat_processus).erreur_systeme =
 4303:                             d_es_allocation_memoire;
 4304:                     return(NULL);
 4305:                 }
 4306: 
 4307:                 chaine[0] = 0xD2;
 4308:                 chaine[1] = (unsigned char) ((*((struct_matrice *)
 4309:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4310:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4311:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4312:                 chaine_offset = chaine + 3;
 4313:             }
 4314:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4315:                     < (1LL << 16)) && ((*((struct_matrice *) (*s_objet).objet))
 4316:                     .nombre_colonnes < (1LL << 16)))
 4317:             {
 4318:                 // Taille sur deux octets
 4319:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4320:                         (5 + (longueur_objet * longueur)))
 4321:                         * sizeof(unsigned char))) == NULL)
 4322:                 {
 4323:                     (*s_etat_processus).erreur_systeme =
 4324:                             d_es_allocation_memoire;
 4325:                     return(NULL);
 4326:                 }
 4327: 
 4328:                 chaine[0] = 0xD6;
 4329:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4330:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4331:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4332:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4333:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4334:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4335:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4336:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4337:                 chaine_offset = chaine + 5;
 4338:             }
 4339:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4340:                     < (1LL << 32)) && ((*((struct_matrice *) (*s_objet).objet))
 4341:                     .nombre_colonnes < (1LL << 32)))
 4342:             {
 4343:                 // Taille sur quatre octets
 4344:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 4345:                         9 + (longueur_objet * longueur)))
 4346:                         * sizeof(unsigned char))) == NULL)
 4347:                 {
 4348:                     (*s_etat_processus).erreur_systeme =
 4349:                             d_es_allocation_memoire;
 4350:                     return(NULL);
 4351:                 }
 4352: 
 4353:                 chaine[0] = 0xDA;
 4354:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4355:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4356:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4357:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4358:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4359:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4360:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4361:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4362:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4363:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4364:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4365:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4366:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4367:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4368:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4369:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4370:                 chaine_offset = chaine + 9;
 4371:             }
 4372:             else
 4373:             {
 4374:                 // Taille sur huit octets
 4375:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4376:                         (17 + (longueur_objet * longueur)))
 4377:                         * sizeof(unsigned char))) == NULL)
 4378:                 {
 4379:                     (*s_etat_processus).erreur_systeme =
 4380:                             d_es_allocation_memoire;
 4381:                     return(NULL);
 4382:                 }
 4383: 
 4384:                 chaine[0] = 0xDE;
 4385:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4386:                         (*s_objet).objet)).nombre_lignes >> 56) & 0xFF);
 4387:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4388:                         (*s_objet).objet)).nombre_lignes >> 48) & 0xFF);
 4389:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4390:                         (*s_objet).objet)).nombre_lignes >> 40) & 0xFF);
 4391:                 chaine[4] = (unsigned char) (((*((struct_matrice *)
 4392:                         (*s_objet).objet)).nombre_lignes >> 32) & 0xFF);
 4393:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4394:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4395:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4396:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4397:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4398:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4399:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4400:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4401:                 chaine[9] = (unsigned char) (((*((struct_matrice *)
 4402:                         (*s_objet).objet)).nombre_colonnes >> 56) & 0xFF);
 4403:                 chaine[10] = (unsigned char) (((*((struct_matrice *)
 4404:                         (*s_objet).objet)).nombre_colonnes >> 48) & 0xFF);
 4405:                 chaine[11] = (unsigned char) (((*((struct_matrice *)
 4406:                         (*s_objet).objet)).nombre_colonnes >> 40) & 0xFF);
 4407:                 chaine[12] = (unsigned char) (((*((struct_matrice *)
 4408:                         (*s_objet).objet)).nombre_colonnes >> 32) & 0xFF);
 4409:                 chaine[13] = (unsigned char) (((*((struct_matrice *)
 4410:                         (*s_objet).objet)).nombre_colonnes >> 24) & 0xFF);
 4411:                 chaine[14] = (unsigned char) (((*((struct_matrice *)
 4412:                         (*s_objet).objet)).nombre_colonnes >> 16) & 0xFF);
 4413:                 chaine[15] = (unsigned char) (((*((struct_matrice *)
 4414:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4415:                 chaine[16] = (unsigned char) ((*((struct_matrice *)
 4416:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4417:                 chaine_offset = chaine + 17;
 4418:             }
 4419: 
 4420:             switch(longueur)
 4421:             {
 4422:                 case 8:
 4423:                 {
 4424:                     break;
 4425:                 }
 4426: 
 4427:                 default:
 4428:                 case 16:
 4429:                 {
 4430:                     chaine[0] |= 0x01;
 4431:                     break;
 4432:                 }
 4433:             }
 4434: 
 4435:             for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
 4436:                     .nombre_lignes; i++)
 4437:             {
 4438:                 for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
 4439:                         .nombre_colonnes; j++)
 4440:                 {
 4441:                     if ((chaine_tampon = formateur_fichier_binaire_nombre(
 4442:                             s_etat_processus, &(((complex16 **)
 4443:                             (*((struct_matrice *) (*s_objet).objet)).tableau)
 4444:                             [i][j]), 'R', format_sortie,
 4445:                             longueur, &longueur_element)) == NULL)
 4446:                     {
 4447:                         free(chaine);
 4448:                         return(NULL);
 4449:                     }
 4450: 
 4451:                     memcpy(chaine_offset + (((i * (*((struct_matrice *)
 4452:                             (*s_objet).objet)).nombre_colonnes) + j) *
 4453:                             longueur), chaine_tampon + 1, (size_t) longueur);
 4454:                     free(chaine_tampon);
 4455:                 }
 4456:             }
 4457:         }
 4458:         else if ((*s_objet).type == MIN)
 4459:         {
 4460: 
 4461: /*
 4462: --------------------------------------------------------------------------------
 4463:   Matrice entière
 4464: --------------------------------------------------------------------------------
 4465: */
 4466: 
 4467:             if (format_sortie == 'N')
 4468:             {
 4469:                 format_sortie = 'I';
 4470:                 longueur = 8;
 4471:             }
 4472: 
 4473:             if ((format_sortie != 'I') && (format_sortie != 'R')
 4474:                     && (format_sortie != 'C'))
 4475:             {
 4476:                 (*s_etat_processus).erreur_execution =
 4477:                         d_ex_erreur_format_fichier;
 4478:                 return(NULL);
 4479:             }
 4480: 
 4481:             longueur_objet = (*((struct_matrice *) (*s_objet).objet))
 4482:                     .nombre_lignes * (*((struct_matrice *) (*s_objet).objet))
 4483:                     .nombre_colonnes;
 4484: 
 4485:             if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4486:                     < (1LL << 8)) && ((*((struct_matrice *) (*s_objet).objet))
 4487:                     .nombre_colonnes < (1LL << 8)))
 4488:             {
 4489:                 // Taille sur un octet
 4490:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4491:                         (3 + (longueur_objet * longueur)))
 4492:                         * sizeof(unsigned char))) == NULL)
 4493:                 {
 4494:                     (*s_etat_processus).erreur_systeme =
 4495:                             d_es_allocation_memoire;
 4496:                     return(NULL);
 4497:                 }
 4498: 
 4499:                 chaine[0] = 0x00;
 4500:                 chaine[1] = (unsigned char) ((*((struct_matrice *)
 4501:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4502:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4503:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4504:                 chaine_offset = chaine + 3;
 4505:             }
 4506:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4507:                     < (1LL << 16)) && ((*((struct_matrice *) (*s_objet).objet))
 4508:                     .nombre_colonnes < (1LL << 16)))
 4509:             {
 4510:                 // Taille sur deux octets
 4511:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4512:                         (5 + (longueur_objet * longueur)))
 4513:                         * sizeof(unsigned char))) == NULL)
 4514:                 {
 4515:                     (*s_etat_processus).erreur_systeme =
 4516:                             d_es_allocation_memoire;
 4517:                     return(NULL);
 4518:                 }
 4519: 
 4520:                 chaine[0] = 0x04;
 4521:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4522:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4523:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4524:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4525:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4526:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4527:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4528:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4529:                 chaine_offset = chaine + 5;
 4530:             }
 4531:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4532:                     < (1LL << 32)) && ((*((struct_matrice *) (*s_objet).objet))
 4533:                     .nombre_colonnes < (1LL << 32)))
 4534:             {
 4535:                 // Taille sur quatre octets
 4536:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 4537:                         9 + (longueur_objet * longueur)))
 4538:                         * sizeof(unsigned char))) == NULL)
 4539:                 {
 4540:                     (*s_etat_processus).erreur_systeme =
 4541:                             d_es_allocation_memoire;
 4542:                     return(NULL);
 4543:                 }
 4544: 
 4545:                 chaine[0] = 0x08;
 4546:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4547:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4548:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4549:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4550:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4551:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4552:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4553:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4554:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4555:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4556:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4557:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4558:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4559:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4560:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4561:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4562:                 chaine_offset = chaine + 9;
 4563:             }
 4564:             else
 4565:             {
 4566:                 // Taille sur huit octets
 4567:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4568:                         (17 + (longueur_objet * longueur)))
 4569:                         * sizeof(unsigned char))) == NULL)
 4570:                 {
 4571:                     (*s_etat_processus).erreur_systeme =
 4572:                             d_es_allocation_memoire;
 4573:                     return(NULL);
 4574:                 }
 4575: 
 4576:                 chaine[0] = 0x0C;
 4577:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4578:                         (*s_objet).objet)).nombre_lignes >> 56) & 0xFF);
 4579:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4580:                         (*s_objet).objet)).nombre_lignes >> 48) & 0xFF);
 4581:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4582:                         (*s_objet).objet)).nombre_lignes >> 40) & 0xFF);
 4583:                 chaine[4] = (unsigned char) (((*((struct_matrice *)
 4584:                         (*s_objet).objet)).nombre_lignes >> 32) & 0xFF);
 4585:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4586:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4587:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4588:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4589:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4590:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4591:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4592:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4593:                 chaine[9] = (unsigned char) (((*((struct_matrice *)
 4594:                         (*s_objet).objet)).nombre_colonnes >> 56) & 0xFF);
 4595:                 chaine[10] = (unsigned char) (((*((struct_matrice *)
 4596:                         (*s_objet).objet)).nombre_colonnes >> 48) & 0xFF);
 4597:                 chaine[11] = (unsigned char) (((*((struct_matrice *)
 4598:                         (*s_objet).objet)).nombre_colonnes >> 40) & 0xFF);
 4599:                 chaine[12] = (unsigned char) (((*((struct_matrice *)
 4600:                         (*s_objet).objet)).nombre_colonnes >> 32) & 0xFF);
 4601:                 chaine[13] = (unsigned char) (((*((struct_matrice *)
 4602:                         (*s_objet).objet)).nombre_colonnes >> 24) & 0xFF);
 4603:                 chaine[14] = (unsigned char) (((*((struct_matrice *)
 4604:                         (*s_objet).objet)).nombre_colonnes >> 16) & 0xFF);
 4605:                 chaine[15] = (unsigned char) (((*((struct_matrice *)
 4606:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4607:                 chaine[16] = (unsigned char) ((*((struct_matrice *)
 4608:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4609:                 chaine_offset = chaine + 17;
 4610:             }
 4611: 
 4612:             switch(format_sortie)
 4613:             {
 4614:                 default:
 4615:                 case 'I':
 4616:                 {
 4617:                     switch(longueur)
 4618:                     {
 4619:                         case 1:
 4620:                         {
 4621:                             break;
 4622:                         }
 4623: 
 4624:                         case 2:
 4625:                         {
 4626:                             chaine[0] |= 0x01;
 4627:                             break;
 4628:                         }
 4629: 
 4630:                         case 4:
 4631:                         {
 4632:                             chaine[0] |= 0x02;
 4633:                             break;
 4634:                         }
 4635: 
 4636:                         default:
 4637:                         case 8:
 4638:                         {
 4639:                             chaine[0] |= 0x03;
 4640:                             break;
 4641:                         }
 4642:                     }
 4643: 
 4644:                     chaine[0] |= 0x30;
 4645:                     break;
 4646:                 }
 4647: 
 4648:                 case 'R':
 4649:                 {
 4650:                     switch(longueur)
 4651:                     {
 4652:                         case 4:
 4653:                         {
 4654:                             break;
 4655:                         }
 4656: 
 4657:                         default:
 4658:                         case 8:
 4659:                         {
 4660:                             chaine[0] |= 0x01;
 4661:                             break;
 4662:                         }
 4663:                     }
 4664: 
 4665:                     chaine[0] |= 0xC0;
 4666:                     break;
 4667:                 }
 4668: 
 4669:                 case 'C':
 4670:                 {
 4671:                     switch(longueur)
 4672:                     {
 4673:                         case 8:
 4674:                         {
 4675:                             break;
 4676:                         }
 4677: 
 4678:                         default:
 4679:                         case 16:
 4680:                         {
 4681:                             chaine[0] |= 0x01;
 4682:                             break;
 4683:                         }
 4684:                     }
 4685: 
 4686:                     chaine[0] |= 0xD0;
 4687:                     break;
 4688:                 }
 4689:             }
 4690: 
 4691:             for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
 4692:                     .nombre_lignes; i++)
 4693:             {
 4694:                 for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
 4695:                         .nombre_colonnes; j++)
 4696:                 {
 4697:                     if ((chaine_tampon = formateur_fichier_binaire_nombre(
 4698:                             s_etat_processus, &(((integer8 **)
 4699:                             (*((struct_matrice *) (*s_objet).objet)).tableau)
 4700:                             [i][j]), 'I', format_sortie,
 4701:                             longueur, &longueur_element)) == NULL)
 4702:                     {
 4703:                         free(chaine);
 4704:                         return(NULL);
 4705:                     }
 4706: 
 4707:                     memcpy(chaine_offset + (((i * (*((struct_matrice *)
 4708:                             (*s_objet).objet)).nombre_colonnes) + j) *
 4709:                             longueur), chaine_tampon + 1, (size_t) longueur);
 4710:                     free(chaine_tampon);
 4711:                 }
 4712:             }
 4713:         }
 4714:         else if ((*s_objet).type == MRL)
 4715:         {
 4716: 
 4717: /*
 4718: --------------------------------------------------------------------------------
 4719:   Matrice réelle
 4720: --------------------------------------------------------------------------------
 4721: */
 4722:             if (format_sortie == 'N')
 4723:             {
 4724:                 format_sortie = 'R';
 4725:                 longueur = 8;
 4726:             }
 4727: 
 4728:             if ((format_sortie != 'R') && (format_sortie != 'C'))
 4729:             {
 4730:                 (*s_etat_processus).erreur_execution =
 4731:                         d_ex_erreur_format_fichier;
 4732:                 return(NULL);
 4733:             }
 4734: 
 4735:             longueur_objet = (*((struct_matrice *) (*s_objet).objet))
 4736:                     .nombre_lignes * (*((struct_matrice *) (*s_objet).objet))
 4737:                     .nombre_colonnes;
 4738: 
 4739:             if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4740:                     < (1LL << 8)) && ((*((struct_matrice *) (*s_objet).objet))
 4741:                     .nombre_colonnes < (1LL << 8)))
 4742:             {
 4743:                 // Taille sur un octet
 4744:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4745:                         (3 + (longueur_objet * longueur)))
 4746:                         * sizeof(unsigned char))) == NULL)
 4747:                 {
 4748:                     (*s_etat_processus).erreur_systeme =
 4749:                             d_es_allocation_memoire;
 4750:                     return(NULL);
 4751:                 }
 4752: 
 4753:                 chaine[0] = 0xC2;
 4754:                 chaine[1] = (unsigned char) ((*((struct_matrice *)
 4755:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4756:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4757:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4758:                 chaine_offset = chaine + 3;
 4759:             }
 4760:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4761:                     < (1LL << 16)) && ((*((struct_matrice *) (*s_objet).objet))
 4762:                     .nombre_colonnes < (1LL << 16)))
 4763:             {
 4764:                 // Taille sur deux octets
 4765:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4766:                         (5 + (longueur_objet * longueur)))
 4767:                         * sizeof(unsigned char))) == NULL)
 4768:                 {
 4769:                     (*s_etat_processus).erreur_systeme =
 4770:                             d_es_allocation_memoire;
 4771:                     return(NULL);
 4772:                 }
 4773: 
 4774:                 chaine[0] = 0xC6;
 4775:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4776:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4777:                 chaine[2] = (unsigned char) ((*((struct_matrice *)
 4778:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4779:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4780:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4781:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4782:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4783:                 chaine_offset = chaine + 5;
 4784:             }
 4785:             else if (((*((struct_matrice *) (*s_objet).objet)).nombre_lignes
 4786:                     < (1LL << 32)) && ((*((struct_matrice *) (*s_objet).objet))
 4787:                     .nombre_colonnes < (1LL << 32)))
 4788:             {
 4789:                 // Taille sur quatre octets
 4790:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 4791:                         9 + (longueur_objet * longueur)))
 4792:                         * sizeof(unsigned char))) == NULL)
 4793:                 {
 4794:                     (*s_etat_processus).erreur_systeme =
 4795:                             d_es_allocation_memoire;
 4796:                     return(NULL);
 4797:                 }
 4798: 
 4799:                 chaine[0] = 0xCA;
 4800:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4801:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4802:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4803:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4804:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4805:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4806:                 chaine[4] = (unsigned char) ((*((struct_matrice *)
 4807:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4808:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4809:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4810:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4811:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4812:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4813:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4814:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4815:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4816:                 chaine_offset = chaine + 9;
 4817:             }
 4818:             else
 4819:             {
 4820:                 // Taille sur huit octets
 4821:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 4822:                         (17 + (longueur_objet * longueur)))
 4823:                         * sizeof(unsigned char))) == NULL)
 4824:                 {
 4825:                     (*s_etat_processus).erreur_systeme =
 4826:                             d_es_allocation_memoire;
 4827:                     return(NULL);
 4828:                 }
 4829: 
 4830:                 chaine[0] = 0xCE;
 4831:                 chaine[1] = (unsigned char) (((*((struct_matrice *)
 4832:                         (*s_objet).objet)).nombre_lignes >> 56) & 0xFF);
 4833:                 chaine[2] = (unsigned char) (((*((struct_matrice *)
 4834:                         (*s_objet).objet)).nombre_lignes >> 48) & 0xFF);
 4835:                 chaine[3] = (unsigned char) (((*((struct_matrice *)
 4836:                         (*s_objet).objet)).nombre_lignes >> 40) & 0xFF);
 4837:                 chaine[4] = (unsigned char) (((*((struct_matrice *)
 4838:                         (*s_objet).objet)).nombre_lignes >> 32) & 0xFF);
 4839:                 chaine[5] = (unsigned char) (((*((struct_matrice *)
 4840:                         (*s_objet).objet)).nombre_lignes >> 24) & 0xFF);
 4841:                 chaine[6] = (unsigned char) (((*((struct_matrice *)
 4842:                         (*s_objet).objet)).nombre_lignes >> 16) & 0xFF);
 4843:                 chaine[7] = (unsigned char) (((*((struct_matrice *)
 4844:                         (*s_objet).objet)).nombre_lignes >> 8) & 0xFF);
 4845:                 chaine[8] = (unsigned char) ((*((struct_matrice *)
 4846:                         (*s_objet).objet)).nombre_lignes & 0xFF);
 4847:                 chaine[9] = (unsigned char) (((*((struct_matrice *)
 4848:                         (*s_objet).objet)).nombre_colonnes >> 56) & 0xFF);
 4849:                 chaine[10] = (unsigned char) (((*((struct_matrice *)
 4850:                         (*s_objet).objet)).nombre_colonnes >> 48) & 0xFF);
 4851:                 chaine[11] = (unsigned char) (((*((struct_matrice *)
 4852:                         (*s_objet).objet)).nombre_colonnes >> 40) & 0xFF);
 4853:                 chaine[12] = (unsigned char) (((*((struct_matrice *)
 4854:                         (*s_objet).objet)).nombre_colonnes >> 32) & 0xFF);
 4855:                 chaine[13] = (unsigned char) (((*((struct_matrice *)
 4856:                         (*s_objet).objet)).nombre_colonnes >> 24) & 0xFF);
 4857:                 chaine[14] = (unsigned char) (((*((struct_matrice *)
 4858:                         (*s_objet).objet)).nombre_colonnes >> 16) & 0xFF);
 4859:                 chaine[15] = (unsigned char) (((*((struct_matrice *)
 4860:                         (*s_objet).objet)).nombre_colonnes >> 8) & 0xFF);
 4861:                 chaine[16] = (unsigned char) ((*((struct_matrice *)
 4862:                         (*s_objet).objet)).nombre_colonnes & 0xFF);
 4863:                 chaine_offset = chaine + 17;
 4864:             }
 4865: 
 4866:             switch(format_sortie)
 4867:             {
 4868:                 default:
 4869:                 case 'R':
 4870:                 {
 4871:                     switch(longueur)
 4872:                     {
 4873:                         case 4:
 4874:                         {
 4875:                             break;
 4876:                         }
 4877: 
 4878:                         default:
 4879:                         case 8:
 4880:                         {
 4881:                             chaine[0] |= 0x01;
 4882:                             break;
 4883:                         }
 4884:                     }
 4885: 
 4886:                     break;
 4887:                 }
 4888: 
 4889:                 case 'C':
 4890:                 {
 4891:                     switch(longueur)
 4892:                     {
 4893:                         case 8:
 4894:                         {
 4895:                             break;
 4896:                         }
 4897: 
 4898:                         default:
 4899:                         case 16:
 4900:                         {
 4901:                             chaine[0] |= 0x01;
 4902:                             break;
 4903:                         }
 4904:                     }
 4905: 
 4906:                     chaine[0] |= 0x10;
 4907:                     break;
 4908:                 }
 4909:             }
 4910: 
 4911:             for(i = 0; i < (*((struct_matrice *) (*s_objet).objet))
 4912:                     .nombre_lignes; i++)
 4913:             {
 4914:                 for(j = 0; j < (*((struct_matrice *) (*s_objet).objet))
 4915:                         .nombre_colonnes; j++)
 4916:                 {
 4917:                     if ((chaine_tampon = formateur_fichier_binaire_nombre(
 4918:                             s_etat_processus, &(((real8 **)
 4919:                             (*((struct_matrice *) (*s_objet).objet)).tableau)
 4920:                             [i][j]), 'R', format_sortie,
 4921:                             longueur, &longueur_element)) == NULL)
 4922:                     {
 4923:                         free(chaine);
 4924:                         return(NULL);
 4925:                     }
 4926: 
 4927:                     memcpy(chaine_offset + (((i * (*((struct_matrice *)
 4928:                             (*s_objet).objet)).nombre_colonnes) + j) *
 4929:                             longueur), chaine_tampon + 1, (size_t) longueur);
 4930:                     free(chaine_tampon);
 4931:                 }
 4932:             }
 4933:         }
 4934:         else if ((*s_objet).type == NOM)
 4935:         {
 4936: 
 4937: /*
 4938: --------------------------------------------------------------------------------
 4939:   Nom
 4940:   Poids fort 0101
 4941: --------------------------------------------------------------------------------
 4942: */
 4943:             if (format_sortie != 'N')
 4944:             {
 4945:                 (*s_etat_processus).erreur_execution =
 4946:                         d_ex_erreur_format_fichier;
 4947:                 return(NULL);
 4948:             }
 4949: 
 4950:             longueur_fonction = (integer8) strlen((*((struct_nom *)
 4951:                     (*s_objet).objet)).nom);
 4952: 
 4953:             if (longueur_fonction < (1LL << 3))
 4954:             {
 4955:                 if ((chaine = malloc((1 + ((size_t) longueur_fonction) + 1)
 4956:                         * sizeof(unsigned char)))== NULL)
 4957:                 {
 4958:                     (*s_etat_processus).erreur_systeme =
 4959:                             d_es_allocation_memoire;
 4960:                     return(NULL);
 4961:                 }
 4962: 
 4963:                 chaine[0] = (unsigned char) (0x50 | (longueur_fonction & 0x7));
 4964: 
 4965:                 strcpy(chaine + 1, (*((struct_nom *) (*s_objet).objet)).nom);
 4966:                 (*longueur_effective) = longueur_fonction + 2;
 4967:             }
 4968:             else if (longueur_fonction < (1LL << 8))
 4969:             {
 4970:                 if ((chaine = malloc((2 + ((size_t) longueur_fonction) + 1)
 4971:                         * sizeof(unsigned char)))== NULL)
 4972:                 {
 4973:                     (*s_etat_processus).erreur_systeme =
 4974:                             d_es_allocation_memoire;
 4975:                     return(NULL);
 4976:                 }
 4977: 
 4978:                 chaine[0] = (unsigned char) (0x50 | 0x08);
 4979:                 chaine[1] = (unsigned char) (longueur_fonction & 0xFF);
 4980: 
 4981:                 strcpy(chaine + 2, (*((struct_nom *) (*s_objet).objet)).nom);
 4982:                 (*longueur_effective) = longueur_fonction + 3;
 4983:             }
 4984:             else if (longueur_fonction < (1LL << 16))
 4985:             {
 4986:                 if ((chaine = malloc((3 + ((size_t) longueur_fonction) + 1)
 4987:                         * sizeof(unsigned char)))== NULL)
 4988:                 {
 4989:                     (*s_etat_processus).erreur_systeme =
 4990:                             d_es_allocation_memoire;
 4991:                     return(NULL);
 4992:                 }
 4993: 
 4994:                 chaine[0] = (unsigned char) (0x50 | 0x09);
 4995:                 chaine[1] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 4996:                 chaine[2] = (unsigned char) (longueur_fonction & 0xFF);
 4997: 
 4998:                 strcpy(chaine + 3, (*((struct_nom *) (*s_objet).objet)).nom);
 4999:                 (*longueur_effective) = longueur_fonction + 4;
 5000:             }
 5001:             else if (longueur_fonction < (1LL << 32))
 5002:             {
 5003:                 if ((chaine = malloc((5 + ((size_t) longueur_fonction) + 1)
 5004:                         * sizeof(unsigned char)))== NULL)
 5005:                 {
 5006:                     (*s_etat_processus).erreur_systeme =
 5007:                             d_es_allocation_memoire;
 5008:                     return(NULL);
 5009:                 }
 5010: 
 5011:                 chaine[0] = (unsigned char) (0xE0 | 0x0A);
 5012:                 chaine[1] = (unsigned char) ((longueur_fonction >> 24) & 0xFF);
 5013:                 chaine[2] = (unsigned char) ((longueur_fonction >> 16) & 0xFF);
 5014:                 chaine[3] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 5015:                 chaine[4] = (unsigned char) (longueur_fonction & 0xFF);
 5016: 
 5017:                 strcpy(chaine + 5, (*((struct_nom *) (*s_objet).objet)).nom);
 5018:                 (*longueur_effective) = longueur_fonction + 6;
 5019:             }
 5020:             else
 5021:             {
 5022:                 if ((chaine = malloc((9 + ((size_t) longueur_fonction) + 1)
 5023:                         * sizeof(unsigned char)))== NULL)
 5024:                 {
 5025:                     (*s_etat_processus).erreur_systeme =
 5026:                             d_es_allocation_memoire;
 5027:                     return(NULL);
 5028:                 }
 5029: 
 5030:                 chaine[0] = (unsigned char) (0xE0 | 0x0B);
 5031:                 chaine[1] = (unsigned char) ((longueur_fonction >> 56) & 0xFF);
 5032:                 chaine[2] = (unsigned char) ((longueur_fonction >> 48) & 0xFF);
 5033:                 chaine[3] = (unsigned char) ((longueur_fonction >> 40) & 0xFF);
 5034:                 chaine[4] = (unsigned char) ((longueur_fonction >> 32) & 0xFF);
 5035:                 chaine[5] = (unsigned char) ((longueur_fonction >> 24) & 0xFF);
 5036:                 chaine[6] = (unsigned char) ((longueur_fonction >> 16) & 0xFF);
 5037:                 chaine[7] = (unsigned char) ((longueur_fonction >> 8) & 0xFF);
 5038:                 chaine[8] = (unsigned char) (longueur_fonction & 0xFF);
 5039: 
 5040:                 strcpy(chaine + 9, (*((struct_nom *) (*s_objet).objet)).nom);
 5041:                 (*longueur_effective) = longueur_fonction + 10;
 5042:             }
 5043: 
 5044:             chaine[(*longueur_effective) - 1] = ((*((struct_nom *)
 5045:                     (*s_objet).objet)).symbole == d_vrai) ? 0xFF : 0x00;
 5046:         }
 5047:         else if ((*s_objet).type == REL)
 5048:         {
 5049: 
 5050: /*
 5051: --------------------------------------------------------------------------------
 5052:   Réel
 5053:   Poids fort 0001 01
 5054: --------------------------------------------------------------------------------
 5055: */
 5056: 
 5057:             if (format_sortie == 'N')
 5058:             {
 5059:                 format_sortie = 'R';
 5060:                 longueur = 8;
 5061:             }
 5062: 
 5063:             if ((format_sortie != 'R') && (format_sortie != 'C'))
 5064:             {
 5065:                 (*s_etat_processus).erreur_execution =
 5066:                         d_ex_erreur_format_fichier;
 5067:                 return(NULL);
 5068:             }
 5069: 
 5070:             if ((chaine = formateur_fichier_binaire_nombre(s_etat_processus,
 5071:                     (*s_objet).objet, 'R', format_sortie,
 5072:                     longueur, longueur_effective)) == NULL)
 5073:             {
 5074:                 return(NULL);
 5075:             }
 5076:         }
 5077:         else if ((*s_objet).type == VCX)
 5078:         {
 5079: 
 5080: /*
 5081: --------------------------------------------------------------------------------
 5082:   Vecteur complexe
 5083: --------------------------------------------------------------------------------
 5084: */
 5085: 
 5086:             if (format_sortie == 'N')
 5087:             {
 5088:                 format_sortie = 'C';
 5089:                 longueur = 16;
 5090:             }
 5091: 
 5092:             if (format_sortie != 'C')
 5093:             {
 5094:                 (*s_etat_processus).erreur_execution =
 5095:                         d_ex_erreur_format_fichier;
 5096:                 return(NULL);
 5097:             }
 5098: 
 5099:             longueur_objet = (*((struct_vecteur *) (*s_objet).objet)).taille;
 5100: 
 5101:             if (longueur_objet < (1LL << 8))
 5102:             {
 5103:                 // Taille sur un octet
 5104:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5105:                         (2 + (longueur_objet * longueur)))
 5106:                         * sizeof(unsigned char))) == NULL)
 5107:                 {
 5108:                     (*s_etat_processus).erreur_systeme =
 5109:                             d_es_allocation_memoire;
 5110:                     return(NULL);
 5111:                 }
 5112: 
 5113:                 chaine[0] = 0xB2;
 5114:                 chaine[1] = (unsigned char) (longueur_objet & 0xFF);
 5115:                 chaine_offset = chaine + 2;
 5116:             }
 5117:             else if (longueur_objet < (1LL << 16))
 5118:             {
 5119:                 // Taille sur deux octets
 5120:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5121:                         (3 + (longueur_objet * longueur)))
 5122:                         * sizeof(unsigned char))) == NULL)
 5123:                 {
 5124:                     (*s_etat_processus).erreur_systeme =
 5125:                             d_es_allocation_memoire;
 5126:                     return(NULL);
 5127:                 }
 5128: 
 5129:                 chaine[0] = 0xB6;
 5130:                 chaine[1] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5131:                 chaine[2] = (unsigned char) (longueur_objet & 0xFF);
 5132:                 chaine_offset = chaine + 3;
 5133:             }
 5134:             else if (longueur_objet < (1LL << 32))
 5135:             {
 5136:                 // Taille sur quatre octets
 5137:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 5138:                         5 + (longueur_objet * longueur)))
 5139:                         * sizeof(unsigned char))) == NULL)
 5140:                 {
 5141:                     (*s_etat_processus).erreur_systeme =
 5142:                             d_es_allocation_memoire;
 5143:                     return(NULL);
 5144:                 }
 5145: 
 5146:                 chaine[0] = 0xBA;
 5147:                 chaine[1] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5148:                 chaine[2] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5149:                 chaine[3] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5150:                 chaine[4] = (unsigned char) (longueur_objet & 0xFF);
 5151:                 chaine_offset = chaine + 5;
 5152:             }
 5153:             else
 5154:             {
 5155:                 // Taille sur huit octets
 5156:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5157:                         (9 + (longueur_objet * longueur)))
 5158:                         * sizeof(unsigned char))) == NULL)
 5159:                 {
 5160:                     (*s_etat_processus).erreur_systeme =
 5161:                             d_es_allocation_memoire;
 5162:                     return(NULL);
 5163:                 }
 5164: 
 5165:                 chaine[0] = 0xBE;
 5166:                 chaine[1] = (unsigned char) ((longueur_objet >> 56) & 0xFF);
 5167:                 chaine[2] = (unsigned char) ((longueur_objet >> 48) & 0xFF);
 5168:                 chaine[3] = (unsigned char) ((longueur_objet >> 40) & 0xFF);
 5169:                 chaine[4] = (unsigned char) ((longueur_objet >> 32) & 0xFF);
 5170:                 chaine[5] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5171:                 chaine[6] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5172:                 chaine[7] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5173:                 chaine[8] = (unsigned char) (longueur_objet & 0xFF);
 5174:                 chaine_offset = chaine + 9;
 5175:             }
 5176: 
 5177:             switch(longueur)
 5178:             {
 5179:                 case 8:
 5180:                 {
 5181:                     break;
 5182:                 }
 5183: 
 5184:                 default:
 5185:                 case 16:
 5186:                 {
 5187:                     chaine[0] |= 0x01;
 5188:                     break;
 5189:                 }
 5190:             }
 5191: 
 5192:             for(i = 0; i < longueur_objet; i++)
 5193:             {
 5194:                 if ((chaine_tampon = formateur_fichier_binaire_nombre(
 5195:                         s_etat_processus, &(((complex16 *) (*((struct_vecteur *)
 5196:                         (*s_objet).objet)).tableau)[i]), 'C', format_sortie,
 5197:                         longueur, &longueur_element)) == NULL)
 5198:                 {
 5199:                     free(chaine);
 5200:                     return(NULL);
 5201:                 }
 5202: 
 5203:                 memcpy(chaine_offset + (i * longueur), chaine_tampon + 1,
 5204:                         (size_t) longueur);
 5205:                 free(chaine_tampon);
 5206:             }
 5207:         }
 5208:         else if ((*s_objet).type == VIN)
 5209:         {
 5210: 
 5211: /*
 5212: --------------------------------------------------------------------------------
 5213:   Vecteur entier
 5214: --------------------------------------------------------------------------------
 5215: */
 5216: 
 5217:             if (format_sortie == 'N')
 5218:             {
 5219:                 format_sortie = 'I';
 5220:                 longueur = 8;
 5221:             }
 5222: 
 5223:             if ((format_sortie != 'I') && (format_sortie != 'R')
 5224:                     && (format_sortie != 'C'))
 5225:             {
 5226:                 (*s_etat_processus).erreur_execution =
 5227:                         d_ex_erreur_format_fichier;
 5228:                 return(NULL);
 5229:             }
 5230: 
 5231:             longueur_objet = (*((struct_vecteur *) (*s_objet).objet)).taille;
 5232: 
 5233:             if (longueur_objet < (1LL << 8))
 5234:             {
 5235:                 // Taille sur un octet
 5236:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5237:                         (2 + (longueur_objet * longueur)))
 5238:                         * sizeof(unsigned char))) == NULL)
 5239:                 {
 5240:                     (*s_etat_processus).erreur_systeme =
 5241:                             d_es_allocation_memoire;
 5242:                     return(NULL);
 5243:                 }
 5244: 
 5245:                 chaine[0] = 0x20;
 5246:                 chaine[1] = (unsigned char) (longueur_objet & 0xFF);
 5247:                 chaine_offset = chaine + 2;
 5248:             }
 5249:             else if (longueur_objet < (1LL << 16))
 5250:             {
 5251:                 // Taille sur deux octets
 5252:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5253:                         (3 + (longueur_objet * longueur)))
 5254:                         * sizeof(unsigned char))) == NULL)
 5255:                 {
 5256:                     (*s_etat_processus).erreur_systeme =
 5257:                             d_es_allocation_memoire;
 5258:                     return(NULL);
 5259:                 }
 5260: 
 5261:                 chaine[0] = 0x24;
 5262:                 chaine[1] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5263:                 chaine[2] = (unsigned char) (longueur_objet & 0xFF);
 5264:                 chaine_offset = chaine + 3;
 5265:             }
 5266:             else if (longueur_objet < (1LL << 32))
 5267:             {
 5268:                 // Taille sur quatre octets
 5269:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 5270:                         5 + (longueur_objet * longueur)))
 5271:                         * sizeof(unsigned char))) == NULL)
 5272:                 {
 5273:                     (*s_etat_processus).erreur_systeme =
 5274:                             d_es_allocation_memoire;
 5275:                     return(NULL);
 5276:                 }
 5277: 
 5278:                 chaine[0] = 0x28;
 5279:                 chaine[1] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5280:                 chaine[2] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5281:                 chaine[3] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5282:                 chaine[4] = (unsigned char) (longueur_objet & 0xFF);
 5283:                 chaine_offset = chaine + 5;
 5284:             }
 5285:             else
 5286:             {
 5287:                 // Taille sur huit octets
 5288:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5289:                         (9 + (longueur_objet * longueur)))
 5290:                         * sizeof(unsigned char))) == NULL)
 5291:                 {
 5292:                     (*s_etat_processus).erreur_systeme =
 5293:                             d_es_allocation_memoire;
 5294:                     return(NULL);
 5295:                 }
 5296: 
 5297:                 chaine[0] = 0x2C;
 5298:                 chaine[1] = (unsigned char) ((longueur_objet >> 56) & 0xFF);
 5299:                 chaine[2] = (unsigned char) ((longueur_objet >> 48) & 0xFF);
 5300:                 chaine[3] = (unsigned char) ((longueur_objet >> 40) & 0xFF);
 5301:                 chaine[4] = (unsigned char) ((longueur_objet >> 32) & 0xFF);
 5302:                 chaine[5] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5303:                 chaine[6] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5304:                 chaine[7] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5305:                 chaine[8] = (unsigned char) (longueur_objet & 0xFF);
 5306:                 chaine_offset = chaine + 9;
 5307:             }
 5308: 
 5309:             switch(format_sortie)
 5310:             {
 5311:                 default:
 5312:                 case 'I':
 5313:                 {
 5314:                     switch(longueur)
 5315:                     {
 5316:                         case 1:
 5317:                         {
 5318:                             break;
 5319:                         }
 5320: 
 5321:                         case 2:
 5322:                         {
 5323:                             chaine[0] |= 0x01;
 5324:                             break;
 5325:                         }
 5326: 
 5327:                         case 4:
 5328:                         {
 5329:                             chaine[0] |= 0x02;
 5330:                             break;
 5331:                         }
 5332: 
 5333:                         default:
 5334:                         case 8:
 5335:                         {
 5336:                             chaine[0] |= 0x03;
 5337:                             break;
 5338:                         }
 5339:                     }
 5340: 
 5341:                     break;
 5342:                 }
 5343: 
 5344:                 case 'R':
 5345:                 {
 5346:                     switch(longueur)
 5347:                     {
 5348:                         case 4:
 5349:                         {
 5350:                             break;
 5351:                         }
 5352: 
 5353:                         default:
 5354:                         case 8:
 5355:                         {
 5356:                             chaine[0] |= 0x01;
 5357:                             break;
 5358:                         }
 5359:                     }
 5360: 
 5361:                     chaine[0] |= 0x80;
 5362:                     break;
 5363:                 }
 5364: 
 5365:                 case 'C':
 5366:                 {
 5367:                     switch(longueur)
 5368:                     {
 5369:                         case 8:
 5370:                         {
 5371:                             break;
 5372:                         }
 5373: 
 5374:                         default:
 5375:                         case 16:
 5376:                         {
 5377:                             chaine[0] |= 0x01;
 5378:                             break;
 5379:                         }
 5380:                     }
 5381: 
 5382:                     chaine[0] |= 0x90;
 5383:                     break;
 5384:                 }
 5385:             }
 5386: 
 5387:             for(i = 0; i < longueur_objet; i++)
 5388:             {
 5389:                 if ((chaine_tampon = formateur_fichier_binaire_nombre(
 5390:                         s_etat_processus, &(((integer8 *) (*((struct_vecteur *)
 5391:                         (*s_objet).objet)).tableau)[i]), 'I', format_sortie,
 5392:                         longueur, &longueur_element)) == NULL)
 5393:                 {
 5394:                     free(chaine);
 5395:                     return(NULL);
 5396:                 }
 5397: 
 5398:                 memcpy(chaine_offset + (i * longueur), chaine_tampon + 1,
 5399:                         (size_t) longueur);
 5400:                 free(chaine_tampon);
 5401:             }
 5402:         }
 5403:         else if ((*s_objet).type == VRL)
 5404:         {
 5405: 
 5406: /*
 5407: --------------------------------------------------------------------------------
 5408:   Vecteur réel
 5409: --------------------------------------------------------------------------------
 5410: */
 5411: 
 5412:             if (format_sortie == 'N')
 5413:             {
 5414:                 format_sortie = 'R';
 5415:                 longueur = 8;
 5416:             }
 5417: 
 5418:             if ((format_sortie != 'R') && (format_sortie != 'C'))
 5419:             {
 5420:                 (*s_etat_processus).erreur_execution =
 5421:                         d_ex_erreur_format_fichier;
 5422:                 return(NULL);
 5423:             }
 5424: 
 5425:             longueur_objet = (*((struct_vecteur *) (*s_objet).objet)).taille;
 5426: 
 5427:             if (longueur_objet < (1LL << 8))
 5428:             {
 5429:                 // Taille sur un octet
 5430:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5431:                         (2 + (longueur_objet * longueur)))
 5432:                         * sizeof(unsigned char))) == NULL)
 5433:                 {
 5434:                     (*s_etat_processus).erreur_systeme =
 5435:                             d_es_allocation_memoire;
 5436:                     return(NULL);
 5437:                 }
 5438: 
 5439:                 chaine[0] = 0xA2;
 5440:                 chaine[1] = (unsigned char) (longueur_objet & 0xFF);
 5441:                 chaine_offset = chaine + 2;
 5442:             }
 5443:             else if (longueur_objet < (1LL << 16))
 5444:             {
 5445:                 // Taille sur deux octets
 5446:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5447:                         (3 + (longueur_objet * longueur)))
 5448:                         * sizeof(unsigned char))) == NULL)
 5449:                 {
 5450:                     (*s_etat_processus).erreur_systeme =
 5451:                             d_es_allocation_memoire;
 5452:                     return(NULL);
 5453:                 }
 5454: 
 5455:                 chaine[0] = 0xA6;
 5456:                 chaine[1] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5457:                 chaine[2] = (unsigned char) (longueur_objet & 0xFF);
 5458:                 chaine_offset = chaine + 3;
 5459:             }
 5460:             else if (longueur_objet < (1LL << 32))
 5461:             {
 5462:                 // Taille sur quatre octets
 5463:                 if ((chaine = malloc((size_t) (((*longueur_effective) =
 5464:                         5 + (longueur_objet * longueur)))
 5465:                         * sizeof(unsigned char))) == NULL)
 5466:                 {
 5467:                     (*s_etat_processus).erreur_systeme =
 5468:                             d_es_allocation_memoire;
 5469:                     return(NULL);
 5470:                 }
 5471: 
 5472:                 chaine[0] = 0xAA;
 5473:                 chaine[1] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5474:                 chaine[2] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5475:                 chaine[3] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5476:                 chaine[4] = (unsigned char) (longueur_objet & 0xFF);
 5477:                 chaine_offset = chaine + 5;
 5478:             }
 5479:             else
 5480:             {
 5481:                 // Taille sur huit octets
 5482:                 if ((chaine = malloc((size_t) ((*longueur_effective) =
 5483:                         (9 + (longueur_objet * longueur)))
 5484:                         * sizeof(unsigned char))) == NULL)
 5485:                 {
 5486:                     (*s_etat_processus).erreur_systeme =
 5487:                             d_es_allocation_memoire;
 5488:                     return(NULL);
 5489:                 }
 5490: 
 5491:                 chaine[0] = 0xAE;
 5492:                 chaine[1] = (unsigned char) ((longueur_objet >> 56) & 0xFF);
 5493:                 chaine[2] = (unsigned char) ((longueur_objet >> 48) & 0xFF);
 5494:                 chaine[3] = (unsigned char) ((longueur_objet >> 40) & 0xFF);
 5495:                 chaine[4] = (unsigned char) ((longueur_objet >> 32) & 0xFF);
 5496:                 chaine[5] = (unsigned char) ((longueur_objet >> 24) & 0xFF);
 5497:                 chaine[6] = (unsigned char) ((longueur_objet >> 16) & 0xFF);
 5498:                 chaine[7] = (unsigned char) ((longueur_objet >> 8) & 0xFF);
 5499:                 chaine[8] = (unsigned char) (longueur_objet & 0xFF);
 5500:                 chaine_offset = chaine + 9;
 5501:             }
 5502: 
 5503:             switch(format_sortie)
 5504:             {
 5505:                 default:
 5506:                 case 'R':
 5507:                 {
 5508:                     break;
 5509:                 }
 5510: 
 5511:                 case 'C':
 5512:                 {
 5513:                     chaine[0] |= 0x10;
 5514:                     break;
 5515:                 }
 5516:             }
 5517: 
 5518:             switch(longueur)
 5519:             {
 5520:                 case 4:
 5521:                 {
 5522:                     break;
 5523:                 }
 5524: 
 5525:                 default:
 5526:                 case 8:
 5527:                 {
 5528:                     chaine[0] |= 0x01;
 5529:                     break;
 5530:                 }
 5531:             }
 5532: 
 5533:             for(i = 0; i < longueur_objet; i++)
 5534:             {
 5535:                 if ((chaine_tampon = formateur_fichier_binaire_nombre(
 5536:                         s_etat_processus, &(((real8 *) (*((struct_vecteur *)
 5537:                         (*s_objet).objet)).tableau)[i]), 'R', format_sortie,
 5538:                         longueur, &longueur_element)) == NULL)
 5539:                 {
 5540:                     free(chaine);
 5541:                     return(NULL);
 5542:                 }
 5543: 
 5544:                 memcpy(chaine_offset + (i * longueur), chaine_tampon + 1,
 5545:                         (size_t) longueur);
 5546:                 free(chaine_tampon);
 5547:             }
 5548:         }
 5549:         else
 5550:         {
 5551:             // Type non exportable
 5552: 
 5553:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 5554:             free(chaine);
 5555: 
 5556:             return(NULL);
 5557:         }
 5558: 
 5559:         // On n'ajoute la longueur de l'enregistrement que dans le cas
 5560:         // où le format est utilisé dans un fichier.
 5561: 
 5562:         if (((*recursivite) == 1) && (export_fichier == d_vrai))
 5563:         {
 5564:             // Ajout de la longueur totale en fin d'enregistrement.
 5565: 
 5566:             longueur_totale = (*longueur_effective);
 5567: 
 5568:             if (longueur_totale < (((integer8) 1) << 7))
 5569:             {
 5570:                 tampon[0] = (unsigned char) (((longueur_totale + 1) << 1)
 5571:                         & 0xFF);
 5572: 
 5573:                 if ((chaine = realloc(chaine, (((size_t) longueur_totale) + 1)
 5574:                         * sizeof(unsigned char))) == NULL)
 5575:                 {
 5576:                     (*s_etat_processus).erreur_systeme =
 5577:                             d_es_allocation_memoire;
 5578:                     return(NULL);
 5579:                 }
 5580: 
 5581:                 // XXXX XXX0
 5582:                 memcpy(&(chaine[longueur_totale]), tampon, 1);
 5583:                 longueur_totale += 1;
 5584:             }
 5585:             else
 5586:             {
 5587:                 longueur_totale++;
 5588: 
 5589:                 // i = { 0 (16 bits) 2 (32 bits) 6 (64 bits) }
 5590: 
 5591:                 i = 0;
 5592: 
 5593:                 for(;;)
 5594:                 {
 5595:                     if ((longueur_totale < (((integer8) 1) << (8 * (i + 2))))
 5596:                             || (i == 6))
 5597:                     {
 5598:                         // LSB (4 bits de poids fort)
 5599:                         tampon[0] = (unsigned char) ((longueur_totale & 0xF0)
 5600:                                 | 0x1 /* longueur supérieure à 7 bits */
 5601:                                 | ((i + 1) << 1));
 5602: 
 5603:                         for(j = 0; j <= i; j++)
 5604:                         {
 5605:                             tampon[(i - j) + 1] = (unsigned char)
 5606:                                     ((longueur_totale >> (8 * (j + 1)))
 5607:                                     & 0xFF);
 5608:                         }
 5609: 
 5610:                         // LSB (4 bits de poids faible)
 5611:                         tampon[i + 2] = (unsigned char)
 5612:                                 (((longueur_totale & 0x0F) << 4)
 5613:                                 | 0x1 /* longueur supérieure à 7 bits */
 5614:                                 | ((i + 1) << 1));
 5615:                         break;
 5616:                     }
 5617: 
 5618:                     switch(i)
 5619:                     {
 5620:                         case 0 :
 5621:                         {
 5622:                             i = 2;
 5623:                             break;
 5624:                         }
 5625: 
 5626:                         case 2 :
 5627:                         {
 5628:                             i = 6;
 5629:                             break;
 5630:                         }
 5631:                     }
 5632:                 }
 5633: 
 5634:                 // i = 0 => +3 (16 bits)
 5635:                 // i = 2 => +5 (32 bits)
 5636:                 // i = 6 => +9 (64 bits)
 5637: 
 5638:                 if ((chaine = realloc(chaine, (((size_t) longueur_totale)
 5639:                         + ((i == 0) ? 3 : ((i == 2) ? 5 : 9)))
 5640:                         * sizeof(unsigned char))) == NULL)
 5641:                 {
 5642:                     (*s_etat_processus).erreur_systeme =
 5643:                             d_es_allocation_memoire;
 5644:                     return(NULL);
 5645:                 }
 5646: 
 5647:                 memcpy(&(chaine[longueur_totale]), tampon, 3);
 5648:                 longueur_totale += 3;
 5649:             }
 5650: 
 5651:             __zone();
 5652:             (*longueur_effective) = longueur_totale;
 5653:         }
 5654:     }
 5655: 
 5656:     (*recursivite)--;
 5657: 
 5658:     return(chaine);
 5659: }
 5660: 
 5661: 
 5662: /*
 5663: ================================================================================
 5664:   Routines qui transforment un nombre entier, réel ou complexe en chaîne de
 5665:   caractères suivant le format courant
 5666: ================================================================================
 5667:   Entrées : pointeur générique sur la donnée numérique à convertir,
 5668:   type de l'entité (I, R ou C).
 5669: --------------------------------------------------------------------------------
 5670:   Sorties : chaîne de caractères allouée dans la routine
 5671: --------------------------------------------------------------------------------
 5672:   Effets de bord : néant
 5673: ================================================================================
 5674: */
 5675: 
 5676: /*
 5677: --------------------------------------------------------------------------------
 5678:   Formatage des complexes, réels et entiers
 5679: --------------------------------------------------------------------------------
 5680: */
 5681: 
 5682: unsigned char *
 5683: formateur_fichier_nombre(struct_processus *s_etat_processus,
 5684:         void *valeur_numerique, unsigned char type,
 5685:         integer8 longueur, integer8 longueur_champ, unsigned char format)
 5686: {
 5687:     unsigned char               *chaine;
 5688:     unsigned char               *construction_chaine;
 5689:     unsigned char               *sauvegarde;
 5690:     unsigned char               *tampon;
 5691: 
 5692:     chaine = NULL;
 5693: 
 5694:     switch(type)
 5695:     {
 5696:         case 'C' :
 5697:         {
 5698:             construction_chaine = (unsigned char *) malloc(
 5699:                     2 * sizeof(unsigned char));
 5700: 
 5701:             if (construction_chaine == NULL)
 5702:             {
 5703:                 (*s_etat_processus).erreur_systeme =
 5704:                         d_es_allocation_memoire;
 5705:                 return(NULL);
 5706:             }
 5707: 
 5708:             strcpy(construction_chaine, "(");
 5709: 
 5710:             tampon = formateur_fichier_reel(s_etat_processus,
 5711:                     (void *) &((*((struct_complexe16 *)
 5712:                     valeur_numerique)).partie_reelle), 'R',
 5713:                     longueur, longueur_champ, format);
 5714: 
 5715:             if (tampon == NULL)
 5716:             {
 5717:                 (*s_etat_processus).erreur_systeme =
 5718:                         d_es_allocation_memoire;
 5719:                 return(NULL);
 5720:             }
 5721: 
 5722:             sauvegarde = construction_chaine;
 5723: 
 5724:             construction_chaine = (unsigned char *) malloc(
 5725:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5726:                     * sizeof(unsigned char));
 5727: 
 5728:             if (construction_chaine == NULL)
 5729:             {
 5730:                 (*s_etat_processus).erreur_systeme =
 5731:                         d_es_allocation_memoire;
 5732:                 return(NULL);
 5733:             }
 5734: 
 5735:             strcpy(construction_chaine, sauvegarde);
 5736:             free(sauvegarde);
 5737:             strcat(construction_chaine, tampon);
 5738:             free(tampon);
 5739: 
 5740:             strcat(construction_chaine, ",");
 5741: 
 5742:             tampon = formateur_fichier_reel(s_etat_processus,
 5743:                     (void *) &((*((struct_complexe16 *)
 5744:                     valeur_numerique)).partie_imaginaire), 'R',
 5745:                     longueur, longueur_champ, format);
 5746: 
 5747:             if (tampon == NULL)
 5748:             {
 5749:                 (*s_etat_processus).erreur_systeme =
 5750:                         d_es_allocation_memoire;
 5751:                 return(NULL);
 5752:             }
 5753: 
 5754:             sauvegarde = construction_chaine;
 5755: 
 5756:             construction_chaine = (unsigned char *) malloc(
 5757:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 5758:                     * sizeof(unsigned char));
 5759: 
 5760:             if (construction_chaine == NULL)
 5761:             {
 5762:                 (*s_etat_processus).erreur_systeme =
 5763:                         d_es_allocation_memoire;
 5764:                 return(NULL);
 5765:             }
 5766: 
 5767:             strcpy(construction_chaine, sauvegarde);
 5768:             free(sauvegarde);
 5769:             strcat(construction_chaine, tampon);
 5770:             free(tampon);
 5771:             strcat(construction_chaine, ")");
 5772: 
 5773:             chaine = construction_chaine;
 5774: 
 5775:             break;
 5776:         }
 5777: 
 5778:         case 'R' :
 5779:         {
 5780:             chaine = formateur_fichier_reel(s_etat_processus,
 5781:                     valeur_numerique, 'R', longueur, longueur_champ,
 5782:                     format);
 5783: 
 5784:             if (chaine == NULL)
 5785:             {
 5786:                 (*s_etat_processus).erreur_systeme =
 5787:                         d_es_allocation_memoire;
 5788:                 return(NULL);
 5789:             }
 5790: 
 5791:             break;
 5792:         }
 5793: 
 5794:         default :
 5795:         case 'I' :
 5796:         {
 5797:             chaine = formateur_fichier_reel(s_etat_processus,
 5798:                     valeur_numerique, 'I', longueur, longueur_champ,
 5799:                     format);
 5800: 
 5801:             if (chaine == NULL)
 5802:             {
 5803:                 (*s_etat_processus).erreur_systeme =
 5804:                         d_es_allocation_memoire;
 5805:                 return(NULL);
 5806:             }
 5807: 
 5808:             break;
 5809:         }
 5810:     }
 5811: 
 5812:     return(chaine);
 5813: }
 5814: 
 5815: 
 5816: /*
 5817: --------------------------------------------------------------------------------
 5818:   Formateur des réels et entiers
 5819: --------------------------------------------------------------------------------
 5820: */
 5821: 
 5822: unsigned char *
 5823: formateur_fichier_reel(struct_processus *s_etat_processus,
 5824:         void *valeur_numerique, unsigned char type,
 5825:         integer8 longueur, integer8 longueur_champ,
 5826:         unsigned char format_sortie)
 5827: {
 5828:     real8                   mantisse;
 5829:     real8                   tampon_reel;
 5830: 
 5831:     integer8                i;
 5832:     integer8                tampon_entier;
 5833: 
 5834:     long                    correction;
 5835:     long                    exposant;
 5836:     long                    longueur_utile;
 5837:     long                    longueur_utile_limite;
 5838: 
 5839:     unsigned char           *chaine;
 5840:     unsigned char           format[16 + 1];
 5841:     unsigned char           mode[3 + 1];
 5842:     unsigned char           tampon[16 + 1];
 5843: 
 5844:     chaine = (unsigned char *) malloc((32 + 1) * sizeof(unsigned char));
 5845: 
 5846:     if (chaine == NULL)
 5847:     {
 5848:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 5849:         return(NULL);
 5850:     }
 5851: 
 5852:     if (type == 'R')
 5853:     {
 5854:         tampon_reel = *((real8 *) valeur_numerique);
 5855: 
 5856:         if (tampon_reel > ((real8) 0))
 5857:         {
 5858:             exposant = (long) floor(log10(tampon_reel));
 5859:         }
 5860:         else if (tampon_reel < ((real8) 0))
 5861:         {
 5862:             exposant = (long) floor(log10(-tampon_reel));
 5863:         }
 5864:         else
 5865:         {
 5866:             exposant = 0;
 5867:         }
 5868: 
 5869:         mantisse = (*((real8 *) valeur_numerique)) / pow(10, (double) exposant);
 5870:     }
 5871:     else
 5872:     {
 5873:         tampon_entier = *((integer8 *) valeur_numerique);
 5874: 
 5875:         if (tampon_entier > ((integer8) 0))
 5876:         {
 5877:             exposant = (long) floor(log10((double) tampon_entier));
 5878:         }
 5879:         else if (tampon_entier < ((integer8) 0))
 5880:         {
 5881:             exposant = (long) floor(log10((double) -tampon_entier));
 5882:         }
 5883:         else
 5884:         {
 5885:             exposant = 0;
 5886:         }
 5887: 
 5888:         mantisse = ((real8) (*((integer8 *) valeur_numerique))) /
 5889:                 pow(10, (double) exposant);
 5890:     }
 5891: 
 5892:     longueur_utile = (long) longueur;
 5893:     longueur_utile_limite = 15;
 5894: 
 5895:     if (longueur_utile > longueur_utile_limite)
 5896:     {
 5897:         longueur_utile = longueur_utile_limite;
 5898:     }
 5899: 
 5900:     if (format_sortie == 'S')
 5901:     {
 5902:         strcpy(mode, "STD");
 5903:     }
 5904:     else if (format_sortie == 'C')
 5905:     {
 5906:         strcpy(mode, "SCI");
 5907:     }
 5908:     else if (format_sortie == 'F')
 5909:     {
 5910:         strcpy(mode, "FIX");
 5911:     }
 5912:     else
 5913:     {
 5914:         strcpy(mode, "ENG");
 5915:     }
 5916: 
 5917:     if ((strcmp(mode, "SCI") == 0) ||
 5918:             ((strcmp(mode, "STD") == 0) && ((exposant >
 5919:             longueur_utile_limite) ||
 5920:             (exposant < -longueur_utile_limite))) ||
 5921:             ((strcmp(mode, "FIX") == 0) &&
 5922:             ((exposant >= longueur_utile_limite) ||
 5923:             (exposant < -longueur_utile))))
 5924:     {
 5925:         chaine[0] = 0;
 5926:         format[0] = 0;
 5927: 
 5928:         if (strcmp(mode, "STD") == 0)
 5929:         {
 5930:             longueur_utile = longueur_utile_limite - 1;
 5931:         }
 5932: 
 5933:         sprintf(format, "%%.%luf", longueur_utile);
 5934:             
 5935:         sprintf(tampon, format, mantisse);
 5936:         strcpy(chaine, tampon);
 5937:         strcat(chaine, "E");
 5938:         sprintf(tampon, "%ld", exposant);
 5939:         strcat(chaine, tampon);
 5940:     }
 5941:     else if (strcmp(mode, "FIX") == 0)
 5942:     {
 5943:         chaine[0] = 0;
 5944:         format[0] = 0;
 5945: 
 5946:         if (longueur_utile + exposant >= longueur_utile_limite)
 5947:         {
 5948:             longueur_utile = longueur_utile_limite - (exposant + 1);
 5949:         }
 5950: 
 5951:         sprintf(format, "%%.%luf", longueur_utile);
 5952: 
 5953:         sprintf(tampon, format, (mantisse * pow(10, (double) exposant)));
 5954:         strcpy(chaine, tampon);
 5955:     }
 5956:     else if (strcmp(mode, "ENG") == 0)
 5957:     {
 5958:         chaine[0] = 0;
 5959:         format[0] = 0;
 5960: 
 5961:         correction = labs(exposant) % 3;
 5962: 
 5963:         if (exposant < 0)
 5964:         {
 5965:             if (correction == 0)
 5966:             {
 5967:                 correction = 3;
 5968:             }
 5969: 
 5970:             correction =  3 - correction;
 5971:         }
 5972: 
 5973:         longueur_utile -= correction;
 5974:         sprintf(format, "%%.%luf", longueur_utile);
 5975: 
 5976:         sprintf(tampon, format, (mantisse * pow(10, (double) correction)));
 5977:         strcpy(chaine, tampon);
 5978:         strcat(chaine, "E");
 5979:         sprintf(tampon, "%ld", (exposant - correction));
 5980:         strcat(chaine, tampon);
 5981:     }
 5982:     else
 5983:     {
 5984:         if (type == 'I')
 5985:         {
 5986:             chaine[0] = 0;
 5987:             sprintf(tampon, "%lld", *((integer8 *) valeur_numerique));
 5988:         }
 5989:         else
 5990:         {
 5991:             chaine[0] = 0;
 5992:             format[0] = 0;
 5993: 
 5994:             if (exposant >= 0)
 5995:             {
 5996:                 sprintf(format, "%%.%luf", (longueur_utile_limite - exposant
 5997:                         - 1));
 5998:             }
 5999:             else
 6000:             {
 6001:                 sprintf(format, "%%.%luf", longueur_utile_limite);
 6002:             }
 6003: 
 6004:             sprintf(tampon, format, *((real8 *) valeur_numerique));
 6005: 
 6006:             i = (integer8) (strlen(tampon)) - 1;
 6007:             while(tampon[i] == '0')
 6008:             {
 6009:                 tampon[i] = 0;
 6010:                 i--;
 6011:             }
 6012: 
 6013:             if (ds_imposition_separateur_decimal == d_faux)
 6014:             {
 6015:                 i = ((integer8) strlen(tampon)) - 1;
 6016:                 if (tampon[i] == '.')
 6017:                 {
 6018:                     tampon[i] = 0;
 6019:                 }
 6020:             }
 6021:         }
 6022: 
 6023:         strcpy(chaine, tampon);
 6024:     }
 6025: 
 6026:     if (longueur_champ >= 0)
 6027:     {
 6028:         if (strlen(chaine) > (size_t) longueur_champ)
 6029:         {
 6030:             for(i = 0; i < longueur_champ; i++)
 6031:             {
 6032:                 chaine[i] = '*';
 6033:             }
 6034: 
 6035:             chaine[i] = d_code_fin_chaine;
 6036:         }
 6037:     }
 6038: 
 6039:     return(chaine);
 6040: }
 6041: 
 6042: 
 6043: /*
 6044: --------------------------------------------------------------------------------
 6045:   Mêmes fonctions mais pour les fichiers binaires
 6046: --------------------------------------------------------------------------------
 6047: */
 6048: 
 6049: unsigned char *
 6050: formateur_fichier_binaire_nombre(struct_processus *s_etat_processus,
 6051:         void *valeur_numerique, unsigned char type_entree,
 6052:         unsigned char type, integer8 longueur, integer8 *longueur_conversion)
 6053: {
 6054:     unsigned char               *chaine;
 6055: 
 6056:     switch(type)
 6057:     {
 6058:         case 'I' :
 6059:         {
 6060:             if (type_entree != type)
 6061:             {
 6062:                 (*s_etat_processus).erreur_execution = d_ex_representation;
 6063:                 return(NULL);
 6064:             }
 6065: 
 6066:             switch(longueur)
 6067:             {
 6068:                 case 1:
 6069:                 {
 6070:                     if ((*((integer8 *) valeur_numerique)) !=
 6071:                             ((integer1) (*((integer8 *) valeur_numerique))))
 6072:                     {
 6073:                         (*s_etat_processus).erreur_execution =
 6074:                                 d_ex_representation;
 6075:                         return(NULL);
 6076:                     }
 6077: 
 6078:                     if ((chaine = malloc(2 * sizeof(unsigned char))) == NULL)
 6079:                     {
 6080:                         (*s_etat_processus).erreur_systeme =
 6081:                                 d_es_allocation_memoire;
 6082:                         return(NULL);
 6083:                     }
 6084: 
 6085:                     (*longueur_conversion) = 2;
 6086:                     chaine[0] = (unsigned char) 0x10;
 6087:                     chaine[1] = (unsigned char) ((*((integer8 *)
 6088:                             valeur_numerique)) & 0xFF);
 6089:                     break;
 6090:                 }
 6091: 
 6092:                 case 2:
 6093:                 {
 6094:                     if ((*((integer8 *) valeur_numerique)) !=
 6095:                             ((integer2) (*((integer8 *) valeur_numerique))))
 6096:                     {
 6097:                         (*s_etat_processus).erreur_execution =
 6098:                                 d_ex_representation;
 6099:                         return(NULL);
 6100:                     }
 6101: 
 6102:                     if ((chaine = malloc(3 * sizeof(unsigned char))) == NULL)
 6103:                     {
 6104:                         (*s_etat_processus).erreur_systeme =
 6105:                                 d_es_allocation_memoire;
 6106:                         return(NULL);
 6107:                     }
 6108: 
 6109:                     (*longueur_conversion) = 3;
 6110:                     chaine[0] = (unsigned char) 0x11;
 6111:                     chaine[1] = ((unsigned char) ((*((integer8 *)
 6112:                             valeur_numerique)) >> 8) & 0xFF);
 6113:                     chaine[2] = (unsigned char) ((*((integer8 *)
 6114:                             valeur_numerique)) & 0xFF);
 6115:                     break;
 6116:                 }
 6117: 
 6118:                 case 4:
 6119:                 {
 6120:                     if ((*((integer8 *) valeur_numerique)) !=
 6121:                             ((integer4) (*((integer8 *) valeur_numerique))))
 6122:                     {
 6123:                         (*s_etat_processus).erreur_execution =
 6124:                                 d_ex_representation;
 6125:                         return(NULL);
 6126:                     }
 6127: 
 6128:                     if ((chaine = malloc(5 * sizeof(unsigned char))) == NULL)
 6129:                     {
 6130:                         (*s_etat_processus).erreur_systeme =
 6131:                                 d_es_allocation_memoire;
 6132:                         return(NULL);
 6133:                     }
 6134: 
 6135:                     (*longueur_conversion) = 5;
 6136:                     chaine[0] = (unsigned char) 0x12;
 6137:                     chaine[1] = (unsigned char) (((*((integer8 *)
 6138:                             valeur_numerique)) >> 24) & 0xFF);
 6139:                     chaine[2] = (unsigned char) (((*((integer8 *)
 6140:                             valeur_numerique)) >> 16) & 0xFF);
 6141:                     chaine[3] = (unsigned char) (((*((integer8 *)
 6142:                             valeur_numerique)) >> 8) & 0xFF);
 6143:                     chaine[4] = (unsigned char) ((*((integer8 *)
 6144:                             valeur_numerique)) & 0xFF);
 6145:                     break;
 6146:                 }
 6147: 
 6148:                 case 8:
 6149:                 {
 6150:                     if ((chaine = malloc(9 * sizeof(unsigned char))) == NULL)
 6151:                     {
 6152:                         (*s_etat_processus).erreur_systeme =
 6153:                                 d_es_allocation_memoire;
 6154:                         return(NULL);
 6155:                     }
 6156: 
 6157:                     (*longueur_conversion) = 9;
 6158:                     chaine[0] = (unsigned char) 0x13;
 6159:                     chaine[1] = (unsigned char) (((*((integer8 *)
 6160:                             valeur_numerique)) >> 56) & 0xFF);
 6161:                     chaine[2] = (unsigned char) (((*((integer8 *)
 6162:                             valeur_numerique)) >> 48) & 0xFF);
 6163:                     chaine[3] = (unsigned char) (((*((integer8 *)
 6164:                             valeur_numerique)) >> 40) & 0xFF);
 6165:                     chaine[4] = (unsigned char) (((*((integer8 *)
 6166:                             valeur_numerique)) >> 32) & 0xFF);
 6167:                     chaine[5] = (unsigned char) (((*((integer8 *)
 6168:                             valeur_numerique)) >> 24) & 0xFF);
 6169:                     chaine[6] = (unsigned char) (((*((integer8 *)
 6170:                             valeur_numerique)) >> 16) & 0xFF);
 6171:                     chaine[7] = (unsigned char) (((*((integer8 *)
 6172:                             valeur_numerique)) >> 8) & 0xFF);
 6173:                     chaine[8] = (unsigned char) ((*((integer8 *)
 6174:                             valeur_numerique)) & 0xFF);
 6175:                     break;
 6176:                 }
 6177: 
 6178:                 default :
 6179:                 {
 6180:                     (*s_etat_processus).erreur_execution =
 6181:                             d_ex_erreur_format_fichier;
 6182:                     return(NULL);
 6183:                 }
 6184:             }
 6185: 
 6186:             break;
 6187:         }
 6188: 
 6189:         case 'R' :
 6190:         {
 6191:             switch(longueur)
 6192:             {
 6193:                 case 4:
 6194:                 {
 6195:                     real8           valeur;
 6196:                     real8           vinf;
 6197:                     real8           vsup;
 6198: 
 6199:                     union
 6200:                     {
 6201:                         real4       r4;
 6202:                         integer4    i4;
 6203:                     }               eq4;
 6204: 
 6205:                     if (type_entree == 'R')
 6206:                     {
 6207:                         valeur = (*((real8 *) valeur_numerique));
 6208:                     }
 6209:                     else if (type_entree == 'I')
 6210:                     {
 6211:                         valeur = (real8) (*((integer8 *) valeur_numerique));
 6212:                     }
 6213:                     else
 6214:                     {
 6215:                         (*s_etat_processus).erreur_execution =
 6216:                                 d_ex_representation;
 6217:                         return(NULL);
 6218:                     }
 6219: 
 6220:                     if (valeur > 0)
 6221:                     {
 6222:                         vinf = nextafter(valeur, 0);
 6223:                         vsup = nextafter(valeur, valeur * 2);
 6224:                     }
 6225:                     else if (valeur < 0)
 6226:                     {
 6227:                         vinf = nextafter(valeur, valeur * 2);
 6228:                         vsup = nextafter(valeur, 0);
 6229:                     }
 6230:                     else
 6231:                     {
 6232:                         vinf = valeur;
 6233:                         vsup = valeur;
 6234:                     }
 6235: 
 6236:                     if (!((((real4) vinf) <= ((real4) valeur)) &&
 6237:                             (((real4) valeur) <= ((real4) vsup))))
 6238:                     {
 6239:                         (*s_etat_processus).erreur_execution =
 6240:                                 d_ex_representation;
 6241:                         return(NULL);
 6242:                     }
 6243: 
 6244:                     if ((chaine = malloc(5 * sizeof(unsigned char))) == NULL)
 6245:                     {
 6246:                         (*s_etat_processus).erreur_systeme =
 6247:                                 d_es_allocation_memoire;
 6248:                         return(NULL);
 6249:                     }
 6250: 
 6251:                     eq4.r4 = (real4) valeur;
 6252:                     (*longueur_conversion) = 5;
 6253:                     chaine[0] = (unsigned char) 0x14;
 6254:                     chaine[1] = (unsigned char) ((eq4.i4 >> 24) & 0xFF);
 6255:                     chaine[2] = (unsigned char) ((eq4.i4 >> 16) & 0xFF);
 6256:                     chaine[3] = (unsigned char) ((eq4.i4 >> 8) & 0xFF);
 6257:                     chaine[4] = (unsigned char) (eq4.i4 & 0xFF);
 6258:                     break;
 6259:                 }
 6260: 
 6261:                 case 8:
 6262:                 {
 6263:                     union
 6264:                     {
 6265:                         real8       r8;
 6266:                         integer8    i8;
 6267:                     }               eq8;
 6268: 
 6269:                     if ((chaine = malloc(9 * sizeof(unsigned char))) == NULL)
 6270:                     {
 6271:                         (*s_etat_processus).erreur_systeme =
 6272:                                 d_es_allocation_memoire;
 6273:                         return(NULL);
 6274:                     }
 6275: 
 6276:                     if (type_entree == 'I')
 6277:                     {
 6278:                         eq8.r8 = (real8) (*((integer8 *) valeur_numerique));
 6279:                     }
 6280:                     else if (type_entree == 'R')
 6281:                     {
 6282:                         eq8.r8 = (*((real8 *) valeur_numerique));
 6283:                     }
 6284:                     else
 6285:                     {
 6286:                         (*s_etat_processus).erreur_execution =
 6287:                                 d_ex_representation;
 6288:                         return(NULL);
 6289:                     }
 6290: 
 6291:                     (*longueur_conversion) = 9;
 6292:                     chaine[0] = (unsigned char) (0x15);
 6293:                     chaine[1] = (unsigned char) ((eq8.i8 >> 56) & 0xFF);
 6294:                     chaine[2] = (unsigned char) ((eq8.i8 >> 48) & 0xFF);
 6295:                     chaine[3] = (unsigned char) ((eq8.i8 >> 40) & 0xFF);
 6296:                     chaine[4] = (unsigned char) ((eq8.i8 >> 32) & 0xFF);
 6297:                     chaine[5] = (unsigned char) ((eq8.i8 >> 24) & 0xFF);
 6298:                     chaine[6] = (unsigned char) ((eq8.i8 >> 16) & 0xFF);
 6299:                     chaine[7] = (unsigned char) ((eq8.i8 >> 8) & 0xFF);
 6300:                     chaine[8] = (unsigned char) (eq8.i8 & 0xFF);
 6301:                     break;
 6302:                 }
 6303: 
 6304:                 default :
 6305:                 {
 6306:                     (*s_etat_processus).erreur_execution =
 6307:                             d_ex_erreur_format_fichier;
 6308:                     return(NULL);
 6309:                 }
 6310:             }
 6311: 
 6312:             break;
 6313:         }
 6314: 
 6315:         case 'C' :
 6316:         {
 6317:             switch(longueur)
 6318:             {
 6319:                 case 8:
 6320:                 {
 6321:                     unsigned char       *partie_reelle;
 6322:                     unsigned char       *partie_imaginaire;
 6323: 
 6324:                     integer8            limag;
 6325:                     integer8            lreel;
 6326: 
 6327:                     real8               zero;
 6328: 
 6329:                     if (type_entree == 'I')
 6330:                     {
 6331:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6332:                                 s_etat_processus, &(*((integer8 *)
 6333:                                 valeur_numerique)), 'I', 'R', 4,
 6334:                                 &lreel)) == NULL)
 6335:                         {
 6336:                             return(NULL);
 6337:                         }
 6338: 
 6339:                         zero = 0;
 6340: 
 6341:                         if ((partie_imaginaire =
 6342:                                 formateur_fichier_binaire_nombre(
 6343:                                 s_etat_processus, &zero, 'R', 'R', 4,
 6344:                                 &limag)) == NULL)
 6345:                         {
 6346:                             free(partie_reelle);
 6347:                             return(NULL);
 6348:                         }
 6349:                     }
 6350:                     else if (type_entree == 'R')
 6351:                     {
 6352:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6353:                                 s_etat_processus, &(*((real8 *)
 6354:                                 valeur_numerique)), 'R', 'R', 4,
 6355:                                 &lreel)) == NULL)
 6356:                         {
 6357:                             return(NULL);
 6358:                         }
 6359: 
 6360:                         zero = 0;
 6361: 
 6362:                         if ((partie_imaginaire =
 6363:                                 formateur_fichier_binaire_nombre(
 6364:                                 s_etat_processus, &zero, 'R', 'R', 4,
 6365:                                 &limag)) == NULL)
 6366:                         {
 6367:                             free(partie_reelle);
 6368:                             return(NULL);
 6369:                         }
 6370:                     }
 6371:                     else if (type_entree == 'C')
 6372:                     {
 6373:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6374:                                 s_etat_processus, &((*((complex16 *)
 6375:                                 valeur_numerique)).partie_reelle), 'R', 'R', 4,
 6376:                                 &lreel)) == NULL)
 6377:                         {
 6378:                             return(NULL);
 6379:                         }
 6380: 
 6381:                         if ((partie_imaginaire =
 6382:                                 formateur_fichier_binaire_nombre(
 6383:                                 s_etat_processus, &((*((complex16 *)
 6384:                                 valeur_numerique)).partie_imaginaire),
 6385:                                 'R', 'R', 4, &limag)) == NULL)
 6386:                         {
 6387:                             free(partie_reelle);
 6388:                             return(NULL);
 6389:                         }
 6390:                     }
 6391:                     else
 6392:                     {
 6393:                         (*s_etat_processus).erreur_execution =
 6394:                                 d_ex_erreur_format_fichier;
 6395:                         return(NULL);
 6396:                     }
 6397: 
 6398:                     if ((chaine = malloc((((size_t) lreel) + ((size_t) limag)
 6399:                             - 1) * sizeof(unsigned char))) == NULL)
 6400:                     {
 6401:                         free(partie_reelle);
 6402:                         free(partie_imaginaire);
 6403: 
 6404:                         (*s_etat_processus).erreur_systeme =
 6405:                                 d_es_allocation_memoire;
 6406:                         return(NULL);
 6407:                     }
 6408: 
 6409:                     chaine[0] = (unsigned char) 0x18;
 6410:                     memcpy(chaine + 1, partie_reelle + 1,
 6411:                             ((size_t) lreel) - 1);
 6412:                     memcpy(chaine + lreel, partie_imaginaire + 1,
 6413:                             ((size_t) limag) - 1);
 6414:                     (*longueur_conversion) = lreel + limag - 1;
 6415: 
 6416:                     free(partie_reelle);
 6417:                     free(partie_imaginaire);
 6418:                     break;
 6419:                 }
 6420: 
 6421:                 case 16:
 6422:                 {
 6423:                     unsigned char       *partie_reelle;
 6424:                     unsigned char       *partie_imaginaire;
 6425: 
 6426:                     integer8            limag;
 6427:                     integer8            lreel;
 6428: 
 6429:                     real8               zero;
 6430: 
 6431:                     if (type_entree == 'I')
 6432:                     {
 6433:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6434:                                 s_etat_processus, &(*((integer8 *)
 6435:                                 valeur_numerique)), 'I', 'R', 8,
 6436:                                 &lreel)) == NULL)
 6437:                         {
 6438:                             return(NULL);
 6439:                         }
 6440: 
 6441:                         zero = 0;
 6442: 
 6443:                         if ((partie_imaginaire =
 6444:                                 formateur_fichier_binaire_nombre(
 6445:                                 s_etat_processus, &zero, 'R', 'R', 8,
 6446:                                 &limag)) == NULL)
 6447:                         {
 6448:                             free(partie_reelle);
 6449:                             return(NULL);
 6450:                         }
 6451:                     }
 6452:                     else if (type_entree == 'R')
 6453:                     {
 6454:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6455:                                 s_etat_processus, &(*((real8 *)
 6456:                                 valeur_numerique)), 'R', 'R', 8,
 6457:                                 &lreel)) == NULL)
 6458:                         {
 6459:                             return(NULL);
 6460:                         }
 6461: 
 6462:                         zero = 0;
 6463: 
 6464:                         if ((partie_imaginaire =
 6465:                                 formateur_fichier_binaire_nombre(
 6466:                                 s_etat_processus, &zero, 'R', 'R', 8,
 6467:                                 &limag)) == NULL)
 6468:                         {
 6469:                             free(partie_reelle);
 6470:                             return(NULL);
 6471:                         }
 6472:                     }
 6473:                     else if (type_entree == 'C')
 6474:                     {
 6475:                         if ((partie_reelle = formateur_fichier_binaire_nombre(
 6476:                                 s_etat_processus, &((*((complex16 *)
 6477:                                 valeur_numerique)).partie_reelle), 'R', 'R', 8,
 6478:                                 &lreel)) == NULL)
 6479:                         {
 6480:                             return(NULL);
 6481:                         }
 6482: 
 6483:                         if ((partie_imaginaire =
 6484:                                 formateur_fichier_binaire_nombre(
 6485:                                 s_etat_processus, &((*((complex16 *)
 6486:                                 valeur_numerique)).partie_imaginaire),
 6487:                                 'R', 'R', 8, &limag)) == NULL)
 6488:                         {
 6489:                             free(partie_reelle);
 6490:                             return(NULL);
 6491:                         }
 6492:                     }
 6493:                     else
 6494:                     {
 6495:                         (*s_etat_processus).erreur_execution =
 6496:                                 d_ex_erreur_format_fichier;
 6497:                         return(NULL);
 6498:                     }
 6499: 
 6500:                     if ((chaine = malloc((((size_t) lreel) + ((size_t) limag)
 6501:                             - 1) * sizeof(unsigned char))) == NULL)
 6502:                     {
 6503:                         free(partie_reelle);
 6504:                         free(partie_imaginaire);
 6505: 
 6506:                         (*s_etat_processus).erreur_systeme =
 6507:                                 d_es_allocation_memoire;
 6508:                         return(NULL);
 6509:                     }
 6510: 
 6511:                     chaine[0] = (unsigned char) 0x19;
 6512:                     memcpy(chaine + 1, partie_reelle + 1,
 6513:                             ((size_t) lreel) - 1);
 6514:                     memcpy(chaine + lreel, partie_imaginaire + 1,
 6515:                             ((size_t) limag) - 1);
 6516:                     (*longueur_conversion) = lreel + limag - 1;
 6517: 
 6518:                     free(partie_reelle);
 6519:                     free(partie_imaginaire);
 6520:                     break;
 6521:                 }
 6522: 
 6523:                 default :
 6524:                 {
 6525:                     (*s_etat_processus).erreur_execution =
 6526:                             d_ex_erreur_format_fichier;
 6527:                     return(NULL);
 6528:                 }
 6529:             }
 6530: 
 6531:             break;
 6532:         }
 6533: 
 6534:         default :
 6535:         {
 6536:             (*s_etat_processus).erreur_execution = d_ex_erreur_format_fichier;
 6537:             return(NULL);
 6538:         }
 6539:     }
 6540: 
 6541:     return(chaine);
 6542: }
 6543: 
 6544: 
 6545: /*
 6546: ================================================================================
 6547:   Routines de conversion d'un objet binaire en struct_objet *
 6548: ================================================================================
 6549:   Entrées : pointeur sur un void *. Si longueur_buffer est strictement inférieur
 6550:             à zéro, il s'agit d'un file * sinon d'un buffer de type unsigned
 6551:             char *.
 6552: --------------------------------------------------------------------------------
 6553:   Sorties : pointeur sur un struct_objet nouvellement alloué
 6554: --------------------------------------------------------------------------------
 6555:   Effets de bord : néant
 6556: ================================================================================
 6557: */
 6558: 
 6559: struct_objet *
 6560: lecture_fichier_non_formate(struct_processus *s_etat_processus,
 6561:         void *argument, integer8 longueur_buffer, logical1 recursivite)
 6562: {
 6563:     file                        *fichier;
 6564: 
 6565:     int                         j;
 6566: 
 6567:     integer8                    i;
 6568:     integer8                    longueur;
 6569: 
 6570:     struct_liste_chainee        *l_element_courant;
 6571: 
 6572:     struct_objet                *s_objet;
 6573:     struct_objet                *s_objet_elementaire;
 6574: 
 6575:     unsigned char               octets[8];
 6576:     unsigned char               *buffer;
 6577:     unsigned char               *flux;
 6578:     unsigned char               *ptr;
 6579:     unsigned char               type_objet;
 6580: 
 6581:     size_t                      deplacement;
 6582: 
 6583:     if (longueur_buffer < 0)
 6584:     {
 6585:         fichier = argument;
 6586:         buffer = NULL;
 6587:         ptr = NULL;
 6588:     }
 6589:     else
 6590:     {
 6591:         buffer = (*((unsigned char **) argument));
 6592:         ptr = buffer;
 6593:         fichier = NULL;
 6594:     }
 6595: 
 6596:     if (longueur_buffer < 0)
 6597:     {
 6598:         if (fread(octets, (size_t) sizeof(unsigned char),
 6599:                 1, fichier) != 1)
 6600:         {
 6601:             if (feof(fichier))
 6602:             {
 6603:                 (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 6604:             }
 6605:             else
 6606:             {
 6607:                 (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
 6608:             }
 6609: 
 6610:             return(NULL);
 6611:         }
 6612:     }
 6613:     else
 6614:     {
 6615:         if ((longueur_buffer - (ptr - buffer)) >= 1)
 6616:         {
 6617:             octets[0] = *ptr++;
 6618:         }
 6619:         else
 6620:         {
 6621:             (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 6622:             return(NULL);
 6623:         }
 6624:     }
 6625: 
 6626:     switch(type_objet = (octets[0] & 0xF0))
 6627:     {
 6628:         case 0x00:  // Binaire
 6629:         {
 6630:             switch(octets[0] & 0x0F)
 6631:             {
 6632:                 case 0x01:  // logical*1
 6633:                 {
 6634:                     deplacement = 1;
 6635:                     break;
 6636:                 }
 6637: 
 6638:                 case 0x02:  // logical*2
 6639:                 {
 6640:                     deplacement = 2;
 6641:                     break;
 6642:                 }
 6643: 
 6644:                 case 0x04:  // logical*4
 6645:                 {
 6646:                     deplacement = 4;
 6647:                     break;
 6648:                 }
 6649: 
 6650:                 case 0x08:  // logical*8
 6651:                 {
 6652:                     deplacement = 8;
 6653:                     break;
 6654:                 }
 6655: 
 6656:                 default:
 6657:                 {
 6658:                     (*s_etat_processus).erreur_execution =
 6659:                             d_ex_syntaxe;
 6660:                     return(NULL);
 6661:                 }
 6662:             }
 6663: 
 6664:             if (longueur_buffer < 0)
 6665:             {
 6666:                 if (fread(octets, (size_t) sizeof(unsigned char),
 6667:                         deplacement, fichier) != deplacement)
 6668:                 {
 6669:                     if (feof(fichier))
 6670:                     {
 6671:                         (*s_etat_processus).erreur_execution =
 6672:                                 d_ex_syntaxe;
 6673:                     }
 6674:                     else
 6675:                     {
 6676:                         (*s_etat_processus).erreur_systeme =
 6677:                                 d_es_erreur_fichier;
 6678:                     }
 6679: 
 6680:                     return(NULL);
 6681:                 }
 6682:             }
 6683:             else
 6684:             {
 6685:                 if ((longueur_buffer - (ptr - buffer)) >=
 6686:                         (ssize_t) deplacement)
 6687:                 {
 6688:                     for(i = 0; i < (signed) deplacement; i++)
 6689:                     {
 6690:                         octets[i] = *ptr++;
 6691:                     }
 6692:                 }
 6693:                 else
 6694:                 {
 6695:                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 6696:                     return(NULL);
 6697:                 }
 6698:             }
 6699: 
 6700:             if ((s_objet = allocation(s_etat_processus, BIN)) == NULL)
 6701:             {
 6702:                 return(NULL);
 6703:             }
 6704: 
 6705:             (*((logical8 *) (*s_objet).objet)) = 0;
 6706: 
 6707:             for(i = 0; i < (signed) deplacement; i++)
 6708:             {
 6709:                 (*((logical8 *) (*s_objet).objet)) |= ((logical8) octets[i])
 6710:                         << (8 * ((((signed) deplacement) - 1) - i));
 6711:             }
 6712: 
 6713:             break;
 6714:         }
 6715: 
 6716:         case 0x10:  // Scalaire
 6717:         {
 6718:             switch(octets[0] & 0x0C)
 6719:             {
 6720:                 case 0x00:  // Entier
 6721:                 {
 6722:                     switch(octets[0] & 0x03)
 6723:                     {
 6724:                         case 0x00:  // integer*1
 6725:                         {
 6726:                             deplacement = 1;
 6727:                             break;
 6728:                         }
 6729: 
 6730:                         case 0x01:  // integer*2
 6731:                         {
 6732:                             deplacement = 2;
 6733:                             break;
 6734:                         }
 6735: 
 6736:                         case 0x02:  // integer*4
 6737:                         {
 6738:                             deplacement = 4;
 6739:                             break;
 6740:                         }
 6741: 
 6742:                         case 0x03:  // integer*8
 6743:                         {
 6744:                             deplacement = 8;
 6745:                             break;
 6746:                         }
 6747:                     }
 6748: 
 6749:                     if (longueur_buffer < 0)
 6750:                     {
 6751:                         if (fread(octets, (size_t) sizeof(unsigned char),
 6752:                                 deplacement, fichier) != deplacement)
 6753:                         {
 6754:                             if (feof(fichier))
 6755:                             {
 6756:                                 (*s_etat_processus).erreur_execution =
 6757:                                         d_ex_syntaxe;
 6758:                             }
 6759:                             else
 6760:                             {
 6761:                                 (*s_etat_processus).erreur_systeme =
 6762:                                         d_es_erreur_fichier;
 6763:                             }
 6764: 
 6765:                             return(NULL);
 6766:                         }
 6767:                     }
 6768:                     else
 6769:                     {
 6770:                         if ((longueur_buffer - (ptr - buffer)) >=
 6771:                                 (ssize_t) deplacement)
 6772:                         {
 6773:                             for(i = 0; i < (signed) deplacement; i++)
 6774:                             {
 6775:                                 octets[i] = *ptr++;
 6776:                             }
 6777:                         }
 6778:                         else
 6779:                         {
 6780:                             (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 6781:                             return(NULL);
 6782:                         }
 6783:                     }
 6784: 
 6785:                     if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
 6786:                     {
 6787:                         return(NULL);
 6788:                     }
 6789: 
 6790:                     // Récupération des données avec extension de signe.
 6791: 
 6792:                     {
 6793:                         integer1        i1;
 6794:                         integer2        i2;
 6795:                         integer4        i4;
 6796:                         integer8        i8;
 6797: 
 6798:                         i1 = 0;
 6799:                         i2 = 0;
 6800:                         i4 = 0;
 6801:                         i8 = 0;
 6802: 
 6803:                         for(i = 0; i < (signed) deplacement; i++)
 6804:                         {
 6805:                             switch(deplacement)
 6806:                             {
 6807:                                 case 1:
 6808:                                     i1 = (integer1) octets[0];
 6809:                                 break;
 6810: 
 6811:                                 case 2:
 6812:                                     i2 |= (integer2) (((integer8) octets[i]) <<
 6813:                                             (8 * ((((signed) deplacement) - 1)
 6814:                                             - i)));
 6815:                                 break;
 6816: 
 6817:                                 case 4:
 6818:                                     i4 |= (integer4) (((integer8) octets[i]) <<
 6819:                                             (8 * ((((signed) deplacement) - 1)
 6820:                                             - i)));
 6821:                                 break;
 6822: 
 6823:                                 case 8:
 6824:                                     i8 |= (integer8) (((integer8) octets[i]) <<
 6825:                                             (8 * ((((signed) deplacement) - 1)
 6826:                                             - i)));
 6827:                                 break;
 6828:                             }
 6829:                         }
 6830: 
 6831:                         switch(deplacement)
 6832:                         {
 6833:                             case 1:
 6834:                                 (*((integer8 *) (*s_objet).objet)) =
 6835:                                         (integer8) i1;
 6836:                             break;
 6837: 
 6838:                             case 2:
 6839:                                 (*((integer8 *) (*s_objet).objet)) =
 6840:                                         (integer8) i2;
 6841:                             break;
 6842: 
 6843:                             case 4:
 6844:                                 (*((integer8 *) (*s_objet).objet)) =
 6845:                                         (integer8) i4;
 6846:                             break;
 6847: 
 6848:                             case 8:
 6849:                                 (*((integer8 *) (*s_objet).objet)) =
 6850:                                         (integer8) i8;
 6851:                             break;
 6852:                         }
 6853:                     }
 6854: 
 6855:                     break;
 6856:                 }
 6857: 
 6858:                 case 0x04:  // Réel
 6859:                 {
 6860:                     switch(octets[0] & 0x03)
 6861:                     {
 6862:                         case 0x00:  // real*4
 6863:                         {
 6864:                             deplacement = 4;
 6865:                             break;
 6866:                         }
 6867: 
 6868:                         case 0x01:  // real*8
 6869:                         {
 6870:                             deplacement = 8;
 6871:                             break;
 6872:                         }
 6873: 
 6874:                         default:
 6875:                         {
 6876:                             (*s_etat_processus).erreur_execution =
 6877:                                     d_ex_syntaxe;
 6878:                             return(NULL);
 6879:                         }
 6880:                     }
 6881: 
 6882:                     if (longueur_buffer < 0)
 6883:                     {
 6884:                         if (fread(octets, (size_t) sizeof(unsigned char),
 6885:                                 deplacement, fichier) != deplacement)
 6886:                         {
 6887:                             if (feof(fichier))
 6888:                             {
 6889:                                 (*s_etat_processus).erreur_execution =
 6890:                                         d_ex_syntaxe;
 6891:                             }
 6892:                             else
 6893:                             {
 6894:                                 (*s_etat_processus).erreur_systeme =
 6895:                                         d_es_erreur_fichier;
 6896:                             }
 6897: 
 6898:                             return(NULL);
 6899:                         }
 6900:                     }
 6901:                     else
 6902:                     {
 6903:                         if ((longueur_buffer - (ptr - buffer)) >=
 6904:                                 (ssize_t) deplacement)
 6905:                         {
 6906:                             for(i = 0; i < (signed) deplacement; i++)
 6907:                             {
 6908:                                 octets[i] = *ptr++;
 6909:                             }
 6910:                         }
 6911:                         else
 6912:                         {
 6913:                             (*s_etat_processus).erreur_execution =
 6914:                                     d_ex_syntaxe;
 6915:                             return(NULL);
 6916:                         }
 6917:                     }
 6918: 
 6919:                     if ((s_objet = allocation(s_etat_processus, REL)) == NULL)
 6920:                     {
 6921:                         return(NULL);
 6922:                     }
 6923: 
 6924:                     if (deplacement == 4)
 6925:                     {
 6926:                         union
 6927:                         {
 6928:                             real4       r4;
 6929:                             integer4    i4;
 6930:                         } eq4;
 6931: 
 6932:                         eq4.i4 = 0;
 6933: 
 6934:                         for(i = 0; i < (signed) deplacement; i++)
 6935:                         {
 6936:                             eq4.i4 |= ((integer4) octets[i]) <<
 6937:                                     (8 * ((((signed) deplacement) - 1) - i));
 6938:                         }
 6939: 
 6940:                         (*((real8 *) (*s_objet).objet)) = (real8) eq4.r4;
 6941:                     }
 6942:                     else
 6943:                     {
 6944:                         union
 6945:                         {
 6946:                             real8       r8;
 6947:                             integer8    i8;
 6948:                         } eq8;
 6949: 
 6950:                         eq8.i8 = 0;
 6951: 
 6952:                         for(i = 0; i < (signed) deplacement; i++)
 6953:                         {
 6954:                             eq8.i8 |= ((integer8) octets[i]) <<
 6955:                                     (8 * ((((signed) deplacement) - 1) - i));
 6956:                         }
 6957: 
 6958:                         (*((real8 *) (*s_objet).objet)) = (real8) eq8.r8;
 6959:                     }
 6960: 
 6961:                     break;
 6962:                 }
 6963: 
 6964:                 case 0x08:  // Complexe
 6965:                 {
 6966:                     switch(octets[0] & 0x03)
 6967:                     {
 6968:                         case 0x00:  // complex*8
 6969:                         {
 6970:                             deplacement = 4;
 6971:                             break;
 6972:                         }
 6973: 
 6974:                         case 0x01:  // complex*16
 6975:                         {
 6976:                             deplacement = 8;
 6977:                             break;
 6978:                         }
 6979: 
 6980:                         default:
 6981:                         {
 6982:                             (*s_etat_processus).erreur_execution =
 6983:                                     d_ex_syntaxe;
 6984:                             return(NULL);
 6985:                         }
 6986:                     }
 6987: 
 6988:                     if ((s_objet = allocation(s_etat_processus, CPL)) == NULL)
 6989:                     {
 6990:                         return(NULL);
 6991:                     }
 6992: 
 6993:                     for(j = 0; j < 2; j++)
 6994:                     {
 6995:                         if (longueur_buffer < 0)
 6996:                         {
 6997:                             if (fread(octets, (size_t) sizeof(unsigned char),
 6998:                                     deplacement, fichier) != deplacement)
 6999:                             {
 7000:                                 liberation(s_etat_processus, s_objet);
 7001: 
 7002:                                 if (feof(fichier))
 7003:                                 {
 7004:                                     (*s_etat_processus).erreur_execution =
 7005:                                             d_ex_syntaxe;
 7006:                                 }
 7007:                                 else
 7008:                                 {
 7009:                                     (*s_etat_processus).erreur_systeme =
 7010:                                             d_es_erreur_fichier;
 7011:                                 }
 7012: 
 7013:                                 return(NULL);
 7014:                             }
 7015:                         }
 7016:                         else
 7017:                         {
 7018:                             if ((longueur_buffer - (ptr - buffer)) >=
 7019:                                     (ssize_t) deplacement)
 7020:                             {
 7021:                                 for(i = 0; i < (signed) deplacement; i++)
 7022:                                 {
 7023:                                     octets[i] = *ptr++;
 7024:                                 }
 7025:                             }
 7026:                             else
 7027:                             {
 7028:                                 liberation(s_etat_processus, s_objet);
 7029:                                 (*s_etat_processus).erreur_execution =
 7030:                                         d_ex_syntaxe;
 7031:                                 return(NULL);
 7032:                             }
 7033:                         }
 7034: 
 7035:                         if (deplacement == 4)
 7036:                         {
 7037:                             union
 7038:                             {
 7039:                                 real4       r4;
 7040:                                 integer4    i4;
 7041:                             } eq4;
 7042: 
 7043:                             eq4.i4 = 0;
 7044: 
 7045:                             for(i = 0; i < (signed) deplacement; i++)
 7046:                             {
 7047:                                 eq4.i4 |= ((integer4) octets[i]) <<
 7048:                                         (8 * ((((signed) deplacement) - 1)
 7049:                                         - i));
 7050:                             }
 7051: 
 7052:                             if (j == 0)
 7053:                             {
 7054:                                 (*((complex16 *) (*s_objet).objet))
 7055:                                         .partie_reelle = (real8) eq4.r4;
 7056:                             }
 7057:                             else
 7058:                             {
 7059:                                 (*((complex16 *) (*s_objet).objet))
 7060:                                         .partie_imaginaire = (real8) eq4.r4;
 7061:                             }
 7062:                         }
 7063:                         else
 7064:                         {
 7065:                             union
 7066:                             {
 7067:                                 real8       r8;
 7068:                                 integer8    i8;
 7069:                             } eq8;
 7070: 
 7071:                             eq8.i8 = 0;
 7072: 
 7073:                             for(i = 0; i < (signed) deplacement; i++)
 7074:                             {
 7075:                                 eq8.i8 |= ((integer8) octets[i]) <<
 7076:                                         (8 * ((((signed) deplacement) - 1)
 7077:                                         - i));
 7078:                             }
 7079: 
 7080:                             if (j == 0)
 7081:                             {
 7082:                                 (*((complex16 *) (*s_objet).objet))
 7083:                                         .partie_reelle = (real8) eq8.r8;
 7084:                             }
 7085:                             else
 7086:                             {
 7087:                                 (*((complex16 *) (*s_objet).objet))
 7088:                                         .partie_imaginaire = (real8) eq8.r8;
 7089:                             }
 7090:                         }
 7091:                     }
 7092: 
 7093:                     break;
 7094:                 }
 7095: 
 7096:                 default:
 7097:                 {
 7098:                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7099:                     return(NULL);
 7100:                 }
 7101:             }
 7102: 
 7103:             break;
 7104:         }
 7105: 
 7106:         case 0x40:  // Liste
 7107:         case 0x60:  // Expression
 7108:         case 0x70:  // Expression algébrique
 7109:         {
 7110:             if ((octets[0] & 0x08) == 0)    // Longueur sur 6 bits
 7111:             {
 7112:                 longueur = (octets[0] & 0x07);
 7113:             }
 7114:             else
 7115:             {
 7116:                 switch(octets[0] & 0x07)
 7117:                 {
 7118:                     case 0x00:          // Longueur sur 8 bits
 7119:                     {
 7120:                         if (longueur_buffer < 0)
 7121:                         {
 7122:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7123:                                     1, fichier) != 1)
 7124:                             {
 7125:                                 if (feof(fichier))
 7126:                                 {
 7127:                                     (*s_etat_processus).erreur_execution =
 7128:                                             d_ex_syntaxe;
 7129:                                 }
 7130:                                 else
 7131:                                 {
 7132:                                     (*s_etat_processus).erreur_systeme =
 7133:                                             d_es_erreur_fichier;
 7134:                                 }
 7135: 
 7136:                                 return(NULL);
 7137:                             }
 7138:                         }
 7139:                         else
 7140:                         {
 7141:                             if ((longueur_buffer - (ptr - buffer)) >= 1)
 7142:                             {
 7143:                                 octets[0] = *ptr++;
 7144:                             }
 7145:                             else
 7146:                             {
 7147:                                 (*s_etat_processus).erreur_execution =
 7148:                                         d_ex_syntaxe;
 7149:                                 return(NULL);
 7150:                             }
 7151:                         }
 7152: 
 7153:                         longueur = octets[0];
 7154:                         break;
 7155:                     }
 7156: 
 7157:                     case 0x01:          // Longueur sur 16 bits
 7158:                     {
 7159:                         if (longueur_buffer < 0)
 7160:                         {
 7161:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7162:                                     2, fichier) != 2)
 7163:                             {
 7164:                                 if (feof(fichier))
 7165:                                 {
 7166:                                     (*s_etat_processus).erreur_execution =
 7167:                                             d_ex_syntaxe;
 7168:                                 }
 7169:                                 else
 7170:                                 {
 7171:                                     (*s_etat_processus).erreur_systeme =
 7172:                                             d_es_erreur_fichier;
 7173:                                 }
 7174: 
 7175:                                 return(NULL);
 7176:                             }
 7177:                         }
 7178:                         else
 7179:                         {
 7180:                             if ((longueur_buffer - (ptr - buffer)) >= 2)
 7181:                             {
 7182:                                 for(j = 0; j < 2; octets[j++] = *ptr++);
 7183:                             }
 7184:                             else
 7185:                             {
 7186:                                 (*s_etat_processus).erreur_execution =
 7187:                                         d_ex_syntaxe;
 7188:                                 return(NULL);
 7189:                             }
 7190:                         }
 7191: 
 7192:                         longueur = (((integer8) (octets[0])) << 8)
 7193:                                 | ((integer8) (octets[1]));
 7194:                         break;
 7195:                     }
 7196: 
 7197:                     case 0x02:          // Longueur sur 32 bits
 7198:                     {
 7199:                         if (longueur_buffer < 0)
 7200:                         {
 7201:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7202:                                     4, fichier) != 4)
 7203:                             {
 7204:                                 if (feof(fichier))
 7205:                                 {
 7206:                                     (*s_etat_processus).erreur_execution =
 7207:                                             d_ex_syntaxe;
 7208:                                 }
 7209:                                 else
 7210:                                 {
 7211:                                     (*s_etat_processus).erreur_systeme =
 7212:                                             d_es_erreur_fichier;
 7213:                                 }
 7214: 
 7215:                                 return(NULL);
 7216:                             }
 7217:                         }
 7218:                         else
 7219:                         {
 7220:                             if ((longueur_buffer - (ptr - buffer)) >= 4)
 7221:                             {
 7222:                                 for(j = 0; j < 4; octets[j++] = *ptr++);
 7223:                             }
 7224:                             else
 7225:                             {
 7226:                                 (*s_etat_processus).erreur_execution =
 7227:                                         d_ex_syntaxe;
 7228:                                 return(NULL);
 7229:                             }
 7230:                         }
 7231: 
 7232:                         longueur = (((integer8) (octets[0])) << 24)
 7233:                                 | (((integer8) (octets[1])) << 16)
 7234:                                 | (((integer8) (octets[2])) << 8)
 7235:                                 | ((integer8) (octets[3]));
 7236:                         break;
 7237:                     }
 7238: 
 7239:                     case 0x03:          // Longueur sur 64 bits
 7240:                     {
 7241:                         if (longueur_buffer < 0)
 7242:                         {
 7243:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7244:                                     8, fichier) != 8)
 7245:                             {
 7246:                                 if (feof(fichier))
 7247:                                 {
 7248:                                     (*s_etat_processus).erreur_execution =
 7249:                                             d_ex_syntaxe;
 7250:                                 }
 7251:                                 else
 7252:                                 {
 7253:                                     (*s_etat_processus).erreur_systeme =
 7254:                                             d_es_erreur_fichier;
 7255:                                 }
 7256: 
 7257:                                 return(NULL);
 7258:                             }
 7259:                         }
 7260:                         else
 7261:                         {
 7262:                             if ((longueur_buffer - (ptr - buffer)) >= 8)
 7263:                             {
 7264:                                 for(j = 0; j < 8; octets[j++] = *ptr++);
 7265:                             }
 7266:                             else
 7267:                             {
 7268:                                 (*s_etat_processus).erreur_execution =
 7269:                                         d_ex_syntaxe;
 7270:                                 return(NULL);
 7271:                             }
 7272:                         }
 7273: 
 7274:                         longueur = (((integer8) (octets[0])) << 56)
 7275:                                 | (((integer8) (octets[1])) << 48)
 7276:                                 | (((integer8) (octets[2])) << 40)
 7277:                                 | (((integer8) (octets[3])) << 32)
 7278:                                 | (((integer8) (octets[4])) << 24)
 7279:                                 | (((integer8) (octets[5])) << 16)
 7280:                                 | (((integer8) (octets[6])) << 8)
 7281:                                 | ((integer8) (octets[7]));
 7282:                         break;
 7283:                     }
 7284: 
 7285:                     default:
 7286:                     {
 7287:                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7288:                         return(NULL);
 7289:                     }
 7290:                 }
 7291:             }
 7292: 
 7293:             if (type_objet == 0x40)
 7294:             {
 7295:                 if ((s_objet = allocation(s_etat_processus, LST)) == NULL)
 7296:                 {
 7297:                     return(NULL);
 7298:                 }
 7299:             }
 7300:             else if (type_objet == 0x60)
 7301:             {
 7302:                 if ((s_objet = allocation(s_etat_processus, RPN)) == NULL)
 7303:                 {
 7304:                     return(NULL);
 7305:                 }
 7306:             }
 7307:             else
 7308:             {
 7309:                 if ((s_objet = allocation(s_etat_processus, ALG)) == NULL)
 7310:                 {
 7311:                     return(NULL);
 7312:                 }
 7313:             }
 7314: 
 7315:             l_element_courant = NULL;
 7316: 
 7317:             for(i = 0; i < longueur; i++)
 7318:             {
 7319:                 // Lecture des éléments de la liste.
 7320: 
 7321:                 if (longueur_buffer < 0)
 7322:                 {
 7323:                     if ((s_objet_elementaire = lecture_fichier_non_formate(
 7324:                             s_etat_processus, fichier, longueur_buffer, d_vrai))
 7325:                             == NULL)
 7326:                     {
 7327:                         liberation(s_etat_processus, s_objet);
 7328:                         return(NULL);
 7329:                     }
 7330:                 }
 7331:                 else
 7332:                 {
 7333:                     if ((s_objet_elementaire = lecture_fichier_non_formate(
 7334:                             s_etat_processus, &ptr,
 7335:                             longueur_buffer - (ptr - buffer), d_vrai)) == NULL)
 7336:                     {
 7337:                         liberation(s_etat_processus, s_objet);
 7338:                         return(NULL);
 7339:                     }
 7340:                 }
 7341: 
 7342:                 if (l_element_courant == NULL)
 7343:                 {
 7344:                     if (((*s_objet).objet = allocation_maillon(
 7345:                             s_etat_processus)) == NULL)
 7346:                     {
 7347:                         liberation(s_etat_processus, s_objet_elementaire);
 7348:                         liberation(s_etat_processus, s_objet);
 7349:                         return(NULL);
 7350:                     }
 7351: 
 7352:                     l_element_courant = (*s_objet).objet;
 7353:                 }
 7354:                 else
 7355:                 {
 7356:                     if (((*l_element_courant).suivant = allocation_maillon(
 7357:                             s_etat_processus)) == NULL)
 7358:                     {
 7359:                         liberation(s_etat_processus, s_objet_elementaire);
 7360:                         liberation(s_etat_processus, s_objet);
 7361:                         return(NULL);
 7362:                     }
 7363: 
 7364:                     l_element_courant = (*l_element_courant).suivant;
 7365:                 }
 7366: 
 7367:                 (*l_element_courant).donnee = s_objet_elementaire;
 7368:                 (*l_element_courant).suivant = NULL;
 7369:             }
 7370: 
 7371:             break;
 7372:         }
 7373: 
 7374:         case 0x80:  // Chaîne de caractères
 7375:         {
 7376:             if ((octets[0] & 0x08) == 0)    // Longueur sur 6 bits
 7377:             {
 7378:                 longueur = (octets[0] & 0x07);
 7379:             }
 7380:             else
 7381:             {
 7382:                 switch(octets[0] & 0x07)
 7383:                 {
 7384:                     case 0x00:          // Longueur sur 8 bits
 7385:                     {
 7386:                         if (longueur_buffer < 0)
 7387:                         {
 7388:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7389:                                     1, fichier) != 1)
 7390:                             {
 7391:                                 if (feof(fichier))
 7392:                                 {
 7393:                                     (*s_etat_processus).erreur_execution =
 7394:                                             d_ex_syntaxe;
 7395:                                 }
 7396:                                 else
 7397:                                 {
 7398:                                     (*s_etat_processus).erreur_systeme =
 7399:                                             d_es_erreur_fichier;
 7400:                                 }
 7401: 
 7402:                                 return(NULL);
 7403:                             }
 7404:                         }
 7405:                         else
 7406:                         {
 7407:                             if ((longueur_buffer - (ptr - buffer)) >= 1)
 7408:                             {
 7409:                                 octets[0] = *ptr++;
 7410:                             }
 7411:                             else
 7412:                             {
 7413:                                 (*s_etat_processus).erreur_execution =
 7414:                                         d_ex_syntaxe;
 7415:                                 return(NULL);
 7416:                             }
 7417:                         }
 7418: 
 7419:                         longueur = octets[0];
 7420:                         break;
 7421:                     }
 7422: 
 7423:                     case 0x01:          // Longueur sur 16 bits
 7424:                     {
 7425:                         if (longueur_buffer < 0)
 7426:                         {
 7427:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7428:                                     2, fichier) != 2)
 7429:                             {
 7430:                                 if (feof(fichier))
 7431:                                 {
 7432:                                     (*s_etat_processus).erreur_execution =
 7433:                                             d_ex_syntaxe;
 7434:                                 }
 7435:                                 else
 7436:                                 {
 7437:                                     (*s_etat_processus).erreur_systeme =
 7438:                                             d_es_erreur_fichier;
 7439:                                 }
 7440: 
 7441:                                 return(NULL);
 7442:                             }
 7443:                         }
 7444:                         else
 7445:                         {
 7446:                             if ((longueur_buffer - (ptr - buffer)) >= 2)
 7447:                             {
 7448:                                 for(j = 0; j < 2; octets[j++] = *ptr++);
 7449:                             }
 7450:                             else
 7451:                             {
 7452:                                 (*s_etat_processus).erreur_execution =
 7453:                                         d_ex_syntaxe;
 7454:                                 return(NULL);
 7455:                             }
 7456:                         }
 7457: 
 7458:                         longueur = (((integer8) (octets[0])) << 8)
 7459:                                 | ((integer8) (octets[1]));
 7460:                         break;
 7461:                     }
 7462: 
 7463:                     case 0x02:          // Longueur sur 32 bits
 7464:                     {
 7465:                         if (longueur_buffer < 0)
 7466:                         {
 7467:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7468:                                     4, fichier) != 4)
 7469:                             {
 7470:                                 if (feof(fichier))
 7471:                                 {
 7472:                                     (*s_etat_processus).erreur_execution =
 7473:                                             d_ex_syntaxe;
 7474:                                 }
 7475:                                 else
 7476:                                 {
 7477:                                     (*s_etat_processus).erreur_systeme =
 7478:                                             d_es_erreur_fichier;
 7479:                                 }
 7480: 
 7481:                                 return(NULL);
 7482:                             }
 7483:                         }
 7484:                         else
 7485:                         {
 7486:                             if ((longueur_buffer - (ptr - buffer)) >= 4)
 7487:                             {
 7488:                                 for(j = 0; j < 4; octets[j++] = *ptr++);
 7489:                             }
 7490:                             else
 7491:                             {
 7492:                                 (*s_etat_processus).erreur_execution =
 7493:                                         d_ex_syntaxe;
 7494:                                 return(NULL);
 7495:                             }
 7496:                         }
 7497: 
 7498:                         longueur = (((integer8) (octets[0])) << 24)
 7499:                                 | (((integer8) (octets[1])) << 16)
 7500:                                 | (((integer8) (octets[2])) << 8)
 7501:                                 | ((integer8) (octets[3]));
 7502:                         break;
 7503:                     }
 7504: 
 7505:                     case 0x03:          // Longueur sur 64 bits
 7506:                     {
 7507:                         if (longueur_buffer < 0)
 7508:                         {
 7509:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7510:                                     8, fichier) != 8)
 7511:                             {
 7512:                                 if (feof(fichier))
 7513:                                 {
 7514:                                     (*s_etat_processus).erreur_execution =
 7515:                                             d_ex_syntaxe;
 7516:                                 }
 7517:                                 else
 7518:                                 {
 7519:                                     (*s_etat_processus).erreur_systeme =
 7520:                                             d_es_erreur_fichier;
 7521:                                 }
 7522: 
 7523:                                 return(NULL);
 7524:                             }
 7525:                         }
 7526:                         else
 7527:                         {
 7528:                             if ((longueur_buffer - (ptr - buffer)) >= 8)
 7529:                             {
 7530:                                 for(j = 0; j < 8; octets[j++] = *ptr++);
 7531:                             }
 7532:                             else
 7533:                             {
 7534:                                 (*s_etat_processus).erreur_execution =
 7535:                                         d_ex_syntaxe;
 7536:                                 return(NULL);
 7537:                             }
 7538:                         }
 7539: 
 7540:                         longueur = (((integer8) (octets[0])) << 56)
 7541:                                 | (((integer8) (octets[1])) << 48)
 7542:                                 | (((integer8) (octets[2])) << 40)
 7543:                                 | (((integer8) (octets[3])) << 32)
 7544:                                 | (((integer8) (octets[4])) << 24)
 7545:                                 | (((integer8) (octets[5])) << 16)
 7546:                                 | (((integer8) (octets[6])) << 8)
 7547:                                 | ((integer8) (octets[7]));
 7548:                         break;
 7549:                     }
 7550: 
 7551:                     default:
 7552:                     {
 7553:                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7554:                         return(NULL);
 7555:                     }
 7556:                 }
 7557:             }
 7558: 
 7559:             if (longueur_buffer < 0)
 7560:             {
 7561:                 if ((flux = malloc(((size_t) longueur) * sizeof(unsigned char)))
 7562:                         == NULL)
 7563:                 {
 7564:                     (*s_etat_processus).erreur_systeme =
 7565:                             d_es_allocation_memoire;
 7566:                     return(NULL);
 7567:                 }
 7568: 
 7569:                 if (fread(flux, (size_t) sizeof(unsigned char),
 7570:                         (size_t) longueur, fichier) != (size_t) longueur)
 7571:                 {
 7572:                     if (feof(fichier))
 7573:                     {
 7574:                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7575:                     }
 7576:                     else
 7577:                     {
 7578:                         (*s_etat_processus).erreur_systeme =
 7579:                                 d_es_erreur_fichier;
 7580:                     }
 7581: 
 7582:                     return(NULL);
 7583:                 }
 7584:             }
 7585:             else
 7586:             {
 7587:                 if ((longueur_buffer - (ptr - buffer)) < longueur)
 7588:                 {
 7589:                     (*s_etat_processus).erreur_execution =
 7590:                             d_ex_syntaxe;
 7591:                     return(NULL);
 7592:                 }
 7593: 
 7594:                 flux = ptr;
 7595:                 ptr += longueur;
 7596:             }
 7597: 
 7598:             if ((s_objet = allocation(s_etat_processus, CHN)) == NULL)
 7599:             {
 7600:                 if (longueur_buffer < 0)
 7601:                 {
 7602:                     free(flux);
 7603:                 }
 7604: 
 7605:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7606:                 return(NULL);
 7607:             }
 7608: 
 7609:             if (((*s_objet).objet = analyse_flux(s_etat_processus, flux,
 7610:                     longueur)) == NULL)
 7611:             {
 7612:                 return(NULL);
 7613:             }
 7614: 
 7615:             if (longueur_buffer < 0)
 7616:             {
 7617:                 free(flux);
 7618:             }
 7619: 
 7620:             break;
 7621:         }
 7622: 
 7623:         case 0x50:  // Nom
 7624:         {
 7625:             if ((octets[0] & 0x08) == 0)    // Longueur sur 6 bits
 7626:             {
 7627:                 longueur = (octets[0] & 0x07);
 7628:             }
 7629:             else
 7630:             {
 7631:                 switch(octets[0] & 0x07)
 7632:                 {
 7633:                     case 0x00:          // Longueur sur 8 bits
 7634:                     {
 7635:                         if (longueur_buffer < 0)
 7636:                         {
 7637:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7638:                                     1, fichier) != 1)
 7639:                             {
 7640:                                 if (feof(fichier))
 7641:                                 {
 7642:                                     (*s_etat_processus).erreur_execution =
 7643:                                             d_ex_syntaxe;
 7644:                                 }
 7645:                                 else
 7646:                                 {
 7647:                                     (*s_etat_processus).erreur_systeme =
 7648:                                             d_es_erreur_fichier;
 7649:                                 }
 7650: 
 7651:                                 return(NULL);
 7652:                             }
 7653:                         }
 7654:                         else
 7655:                         {
 7656:                             if ((longueur_buffer - (ptr - buffer)) >= 1)
 7657:                             {
 7658:                                 octets[0] = *ptr++;
 7659:                             }
 7660:                             else
 7661:                             {
 7662:                                 (*s_etat_processus).erreur_execution =
 7663:                                         d_ex_syntaxe;
 7664:                                 return(NULL);
 7665:                             }
 7666:                         }
 7667: 
 7668:                         longueur = octets[0];
 7669:                         break;
 7670:                     }
 7671: 
 7672:                     case 0x01:          // Longueur sur 16 bits
 7673:                     {
 7674:                         if (longueur_buffer < 0)
 7675:                         {
 7676:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7677:                                     2, fichier) != 2)
 7678:                             {
 7679:                                 if (feof(fichier))
 7680:                                 {
 7681:                                     (*s_etat_processus).erreur_execution =
 7682:                                             d_ex_syntaxe;
 7683:                                 }
 7684:                                 else
 7685:                                 {
 7686:                                     (*s_etat_processus).erreur_systeme =
 7687:                                             d_es_erreur_fichier;
 7688:                                 }
 7689: 
 7690:                                 return(NULL);
 7691:                             }
 7692:                         }
 7693:                         else
 7694:                         {
 7695:                             if ((longueur_buffer - (ptr - buffer)) >= 2)
 7696:                             {
 7697:                                 for(j = 0; j < 2; octets[j++] = *ptr++);
 7698:                             }
 7699:                             else
 7700:                             {
 7701:                                 (*s_etat_processus).erreur_execution =
 7702:                                         d_ex_syntaxe;
 7703:                                 return(NULL);
 7704:                             }
 7705:                         }
 7706: 
 7707:                         longueur = (((integer8) (octets[0])) << 8)
 7708:                                 | ((integer8) (octets[1]));
 7709:                         break;
 7710:                     }
 7711: 
 7712:                     case 0x02:          // Longueur sur 32 bits
 7713:                     {
 7714:                         if (longueur_buffer < 0)
 7715:                         {
 7716:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7717:                                     4, fichier) != 4)
 7718:                             {
 7719:                                 if (feof(fichier))
 7720:                                 {
 7721:                                     (*s_etat_processus).erreur_execution =
 7722:                                             d_ex_syntaxe;
 7723:                                 }
 7724:                                 else
 7725:                                 {
 7726:                                     (*s_etat_processus).erreur_systeme =
 7727:                                             d_es_erreur_fichier;
 7728:                                 }
 7729: 
 7730:                                 return(NULL);
 7731:                             }
 7732:                         }
 7733:                         else
 7734:                         {
 7735:                             if ((longueur_buffer - (ptr - buffer)) >= 4)
 7736:                             {
 7737:                                 for(j = 0; j < 4; octets[j++] = *ptr++);
 7738:                             }
 7739:                             else
 7740:                             {
 7741:                                 (*s_etat_processus).erreur_execution =
 7742:                                         d_ex_syntaxe;
 7743:                                 return(NULL);
 7744:                             }
 7745:                         }
 7746: 
 7747:                         longueur = (((integer8) (octets[0])) << 24)
 7748:                                 | (((integer8) (octets[1])) << 16)
 7749:                                 | (((integer8) (octets[2])) << 8)
 7750:                                 | ((integer8) (octets[3]));
 7751:                         break;
 7752:                     }
 7753: 
 7754:                     case 0x03:          // Longueur sur 64 bits
 7755:                     {
 7756:                         if (longueur_buffer < 0)
 7757:                         {
 7758:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7759:                                     8, fichier) != 8)
 7760:                             {
 7761:                                 if (feof(fichier))
 7762:                                 {
 7763:                                     (*s_etat_processus).erreur_execution =
 7764:                                             d_ex_syntaxe;
 7765:                                 }
 7766:                                 else
 7767:                                 {
 7768:                                     (*s_etat_processus).erreur_systeme =
 7769:                                             d_es_erreur_fichier;
 7770:                                 }
 7771: 
 7772:                                 return(NULL);
 7773:                             }
 7774:                         }
 7775:                         else
 7776:                         {
 7777:                             if ((longueur_buffer - (ptr - buffer)) >= 8)
 7778:                             {
 7779:                                 for(j = 0; j < 8; octets[j++] = *ptr++);
 7780:                             }
 7781:                             else
 7782:                             {
 7783:                                 (*s_etat_processus).erreur_execution =
 7784:                                         d_ex_syntaxe;
 7785:                                 return(NULL);
 7786:                             }
 7787:                         }
 7788: 
 7789:                         longueur = (((integer8) (octets[0])) << 56)
 7790:                                 | (((integer8) (octets[1])) << 48)
 7791:                                 | (((integer8) (octets[2])) << 40)
 7792:                                 | (((integer8) (octets[3])) << 32)
 7793:                                 | (((integer8) (octets[4])) << 24)
 7794:                                 | (((integer8) (octets[5])) << 16)
 7795:                                 | (((integer8) (octets[6])) << 8)
 7796:                                 | ((integer8) (octets[7]));
 7797:                         break;
 7798:                     }
 7799: 
 7800:                     default:
 7801:                     {
 7802:                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7803:                         return(NULL);
 7804:                     }
 7805:                 }
 7806:             }
 7807: 
 7808:             if ((s_objet = allocation(s_etat_processus, NOM)) == NULL)
 7809:             {
 7810:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7811:                 return(NULL);
 7812:             }
 7813: 
 7814:             if (((*((struct_nom *) (*s_objet).objet)).nom =
 7815:                     malloc((((size_t) longueur) + 1) * sizeof(unsigned char)))
 7816:                     == NULL)
 7817:             {
 7818:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 7819:                 return(NULL);
 7820:             }
 7821: 
 7822:             if (longueur_buffer < 0)
 7823:             {
 7824:                 if (fread((unsigned char *) (*((struct_nom *) (*s_objet)
 7825:                         .objet)).nom, (size_t) sizeof(unsigned char),
 7826:                         (size_t) longueur, fichier) != (unsigned) longueur)
 7827:                 {
 7828:                     if (feof(fichier))
 7829:                     {
 7830:                         (*s_etat_processus).erreur_execution =
 7831:                                 d_ex_syntaxe;
 7832:                     }
 7833:                     else
 7834:                     {
 7835:                         (*s_etat_processus).erreur_systeme =
 7836:                                 d_es_erreur_fichier;
 7837:                     }
 7838: 
 7839:                     liberation(s_etat_processus, s_objet);
 7840:                     return(NULL);
 7841:                 }
 7842: 
 7843:                 if (fread(octets, (size_t) sizeof(unsigned char),
 7844:                         1, fichier) != 1)
 7845:                 {
 7846:                     if (feof(fichier))
 7847:                     {
 7848:                         (*s_etat_processus).erreur_execution =
 7849:                                 d_ex_syntaxe;
 7850:                     }
 7851:                     else
 7852:                     {
 7853:                         (*s_etat_processus).erreur_systeme =
 7854:                                 d_es_erreur_fichier;
 7855:                     }
 7856: 
 7857:                     liberation(s_etat_processus, s_objet);
 7858:                     return(NULL);
 7859:                 }
 7860:             }
 7861:             else
 7862:             {
 7863:                 if ((longueur_buffer - (ptr - buffer)) >= (longueur + 1))
 7864:                 {
 7865:                     for(j = 0; j < longueur; (*((struct_nom *)
 7866:                             (*s_objet).objet)).nom[j] = *ptr++);
 7867:                     octets[0] = *ptr++;
 7868:                 }
 7869:                 else
 7870:                 {
 7871:                     liberation(s_etat_processus, s_objet);
 7872:                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 7873:                     return(NULL);
 7874:                 }
 7875:             }
 7876: 
 7877:             (*((struct_nom *) (*s_objet).objet)).nom[longueur] =
 7878:                     d_code_fin_chaine;
 7879:             (*((struct_nom *) (*s_objet).objet)).symbole =
 7880:                     (octets[0] == 0xFF) ? d_vrai : d_faux;
 7881:             break;
 7882:         }
 7883: 
 7884:         case 0xE0:  // Fonction
 7885:         {
 7886:             if ((octets[0] & 0x08) == 0)    // Longueur sur 6 bits
 7887:             {
 7888:                 longueur = (octets[0] & 0x07);
 7889:             }
 7890:             else
 7891:             {
 7892:                 switch(octets[0] & 0x07)
 7893:                 {
 7894:                     case 0x00:          // Longueur sur 8 bits
 7895:                     {
 7896:                         if (longueur_buffer < 0)
 7897:                         {
 7898:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7899:                                     1, fichier) != 1)
 7900:                             {
 7901:                                 if (feof(fichier))
 7902:                                 {
 7903:                                     (*s_etat_processus).erreur_execution =
 7904:                                             d_ex_syntaxe;
 7905:                                 }
 7906:                                 else
 7907:                                 {
 7908:                                     (*s_etat_processus).erreur_systeme =
 7909:                                             d_es_erreur_fichier;
 7910:                                 }
 7911: 
 7912:                                 return(NULL);
 7913:                             }
 7914:                         }
 7915:                         else
 7916:                         {
 7917:                             if ((longueur_buffer - (ptr - buffer)) >= 1)
 7918:                             {
 7919:                                 octets[0] = *ptr++;
 7920:                             }
 7921:                             else
 7922:                             {
 7923:                                 (*s_etat_processus).erreur_execution =
 7924:                                         d_ex_syntaxe;
 7925:                                 return(NULL);
 7926:                             }
 7927:                         }
 7928: 
 7929:                         longueur = octets[0];
 7930:                         break;
 7931:                     }
 7932: 
 7933:                     case 0x01:          // Longueur sur 16 bits
 7934:                     {
 7935:                         if (longueur_buffer < 0)
 7936:                         {
 7937:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7938:                                     2, fichier) != 2)
 7939:                             {
 7940:                                 if (feof(fichier))
 7941:                                 {
 7942:                                     (*s_etat_processus).erreur_execution =
 7943:                                             d_ex_syntaxe;
 7944:                                 }
 7945:                                 else
 7946:                                 {
 7947:                                     (*s_etat_processus).erreur_systeme =
 7948:                                             d_es_erreur_fichier;
 7949:                                 }
 7950: 
 7951:                                 return(NULL);
 7952:                             }
 7953:                         }
 7954:                         else
 7955:                         {
 7956:                             if ((longueur_buffer - (ptr - buffer)) >= 2)
 7957:                             {
 7958:                                 for(j = 0; j < 2; octets[j++] = *ptr++);
 7959:                             }
 7960:                             else
 7961:                             {
 7962:                                 (*s_etat_processus).erreur_execution =
 7963:                                         d_ex_syntaxe;
 7964:                                 return(NULL);
 7965:                             }
 7966:                         }
 7967: 
 7968:                         longueur = (((integer8) (octets[0])) << 8)
 7969:                                 | ((integer8) (octets[1]));
 7970:                         break;
 7971:                     }
 7972: 
 7973:                     case 0x02:          // Longueur sur 32 bits
 7974:                     {
 7975:                         if (longueur_buffer < 0)
 7976:                         {
 7977:                             if (fread(octets, (size_t) sizeof(unsigned char),
 7978:                                     4, fichier) != 4)
 7979:                             {
 7980:                                 if (feof(fichier))
 7981:                                 {
 7982:                                     (*s_etat_processus).erreur_execution =
 7983:                                             d_ex_syntaxe;
 7984:                                 }
 7985:                                 else
 7986:                                 {
 7987:                                     (*s_etat_processus).erreur_systeme =
 7988:                                             d_es_erreur_fichier;
 7989:                                 }
 7990: 
 7991:                                 return(NULL);
 7992:                             }
 7993:                         }
 7994:                         else
 7995:                         {
 7996:                             if ((longueur_buffer - (ptr - buffer)) >= 4)
 7997:                             {
 7998:                                 for(j = 0; j < 4; octets[j++] = *ptr++);
 7999:                             }
 8000:                             else
 8001:                             {
 8002:                                 (*s_etat_processus).erreur_execution =
 8003:                                         d_ex_syntaxe;
 8004:                                 return(NULL);
 8005:                             }
 8006:                         }
 8007: 
 8008:                         longueur = (((integer8) (octets[0])) << 24)
 8009:                                 | (((integer8) (octets[1])) << 16)
 8010:                                 | (((integer8) (octets[2])) << 8)
 8011:                                 | ((integer8) (octets[3]));
 8012:                         break;
 8013:                     }
 8014: 
 8015:                     case 0x03:          // Longueur sur 64 bits
 8016:                     {
 8017:                         if (longueur_buffer < 0)
 8018:                         {
 8019:                             if (fread(octets, (size_t) sizeof(unsigned char),
 8020:                                     8, fichier) != 8)
 8021:                             {
 8022:                                 if (feof(fichier))
 8023:                                 {
 8024:                                     (*s_etat_processus).erreur_execution =
 8025:                                             d_ex_syntaxe;
 8026:                                 }
 8027:                                 else
 8028:                                 {
 8029:                                     (*s_etat_processus).erreur_systeme =
 8030:                                             d_es_erreur_fichier;
 8031:                                 }
 8032: 
 8033:                                 return(NULL);
 8034:                             }
 8035:                         }
 8036:                         else
 8037:                         {
 8038:                             if ((longueur_buffer - (ptr - buffer)) >= 8)
 8039:                             {
 8040:                                 for(j = 0; j < 8; octets[j++] = *ptr++);
 8041:                             }
 8042:                             else
 8043:                             {
 8044:                                 (*s_etat_processus).erreur_execution =
 8045:                                         d_ex_syntaxe;
 8046:                                 return(NULL);
 8047:                             }
 8048:                         }
 8049: 
 8050:                         longueur = (((integer8) (octets[0])) << 56)
 8051:                                 | (((integer8) (octets[1])) << 48)
 8052:                                 | (((integer8) (octets[2])) << 40)
 8053:                                 | (((integer8) (octets[3])) << 32)
 8054:                                 | (((integer8) (octets[4])) << 24)
 8055:                                 | (((integer8) (octets[5])) << 16)
 8056:                                 | (((integer8) (octets[6])) << 8)
 8057:                                 | ((integer8) (octets[7]));
 8058:                         break;
 8059:                     }
 8060: 
 8061:                     default:
 8062:                     {
 8063:                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 8064:                         return(NULL);
 8065:                     }
 8066:                 }
 8067:             }
 8068: 
 8069:             if ((s_objet = allocation(s_etat_processus, FCT)) == NULL)
 8070:             {
 8071:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 8072:                 return(NULL);
 8073:             }
 8074: 
 8075:             if (((*((struct_fonction *) (*s_objet).objet)).nom_fonction =
 8076:                     malloc((((size_t) longueur) + 1) * sizeof(unsigned char)))
 8077:                     == NULL)
 8078:             {
 8079:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 8080:                 return(NULL);
 8081:             }
 8082: 
 8083:             if (longueur_buffer < 0)
 8084:             {
 8085:                 if (fread((unsigned char *) (*((struct_fonction *) (*s_objet)
 8086:                         .objet)).nom_fonction, (size_t) sizeof(unsigned char),
 8087:                         (size_t) longueur, fichier) != (unsigned) longueur)
 8088:                 {
 8089:                     if (feof(fichier))
 8090:                     {
 8091:                         (*s_etat_processus).erreur_execution =
 8092:                                 d_ex_syntaxe;
 8093:                     }
 8094:                     else
 8095:                     {
 8096:                         (*s_etat_processus).erreur_systeme =
 8097:                                 d_es_erreur_fichier;
 8098:                     }
 8099: 
 8100:                     liberation(s_etat_processus, s_objet);
 8101:                     return(NULL);
 8102:                 }
 8103: 
 8104:                 if (fread(octets, (size_t) sizeof(unsigned char),
 8105:                         8, fichier) != 8)
 8106:                 {
 8107:                     if (feof(fichier))
 8108:                     {
 8109:                         (*s_etat_processus).erreur_execution =
 8110:                                 d_ex_syntaxe;
 8111:                     }
 8112:                     else
 8113:                     {
 8114:                         (*s_etat_processus).erreur_systeme =
 8115:                                 d_es_erreur_fichier;
 8116:                     }
 8117: 
 8118:                     liberation(s_etat_processus, s_objet);
 8119:                     return(NULL);
 8120:                 }
 8121:             }
 8122:             else
 8123:             {
 8124:                 if ((longueur_buffer - (ptr - buffer)) >= (longueur + 8))
 8125:                 {
 8126:                     for(j = 0; j < longueur; (*((struct_fonction *)
 8127:                             (*s_objet).objet)).nom_fonction[j] = *ptr++);
 8128:                     for(j = 0; j < 8; octets[j++] = *ptr++);
 8129:                 }
 8130:                 else
 8131:                 {
 8132:                     liberation(s_etat_processus, s_objet);
 8133:                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 8134:                     return(NULL);
 8135:                 }
 8136:             }
 8137: 
 8138:             (*((struct_fonction *) (*s_objet).objet)).nom_fonction[longueur] =
 8139:                     d_code_fin_chaine;
 8140:             (*((struct_fonction *) (*s_objet).objet)).nombre_arguments =
 8141:                     (((integer8) (octets[0])) << 56)
 8142:                     | (((integer8) (octets[1])) << 48)
 8143:                     | (((integer8) (octets[2])) << 40)
 8144:                     | (((integer8) (octets[3])) << 32)
 8145:                     | (((integer8) (octets[4])) << 24)
 8146:                     | (((integer8) (octets[5])) << 16)
 8147:                     | (((integer8) (octets[6])) << 8)
 8148:                     | ((integer8) (octets[7]));
 8149:             break;
 8150:         }
 8151: 
 8152:         default:
 8153:         {
 8154:             (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 8155:             return(NULL);
 8156:         }
 8157:     }
 8158: 
 8159:     if ((longueur_buffer < 0) && (recursivite == d_faux))
 8160:     {
 8161:         // Lecture depuis un fichier, on saute le champ de queue qui contient
 8162:         // la longueur de l'enregistrement.
 8163: 
 8164:         if (fread(octets, (size_t) sizeof(unsigned char), 1, fichier) != 1)
 8165:         {
 8166:             liberation(s_etat_processus, s_objet);
 8167: 
 8168:             if (feof(fichier))
 8169:             {
 8170:                 (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 8171:             }
 8172:             else
 8173:             {
 8174:                 (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
 8175:             }
 8176: 
 8177:             return(NULL);
 8178:         }
 8179: 
 8180:         if ((octets[0] & 0x01) != 0)
 8181:         {
 8182:             deplacement = (size_t) (((octets[0] & 0x0F) >> 1) + 1);
 8183: 
 8184:             if (fread(octets, (size_t) sizeof(unsigned char), deplacement,
 8185:                     fichier) != deplacement)
 8186:             {
 8187:                 liberation(s_etat_processus, s_objet);
 8188: 
 8189:                 if (feof(fichier))
 8190:                 {
 8191:                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;
 8192:                 }
 8193:                 else
 8194:                 {
 8195:                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
 8196:                 }
 8197: 
 8198:                 return(NULL);
 8199:             }
 8200:         }
 8201:     }
 8202: 
 8203:     if (longueur_buffer >= 0)
 8204:     {
 8205:         (*((unsigned char **) argument)) = ptr;
 8206:     }
 8207: 
 8208:     return(s_objet);
 8209: }
 8210: 
 8211: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>