File:  [local] / rpl / src / formateur.c
Revision 1.96: download - view: text, annotated - select for diffs - revision graph
Fri Jan 10 11:15:42 2020 UTC (4 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_32, HEAD
Modification du copyright.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.32
    4:   Copyright (C) 1989-2020 Dr. BERTRAND Joël
    5: 
    6:   This file is part of RPL/2.
    7: 
    8:   RPL/2 is free software; you can redistribute it and/or modify it
    9:   under the terms of the CeCILL V2 License as published by the french
   10:   CEA, CNRS and INRIA.
   11:  
   12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   15:   for more details.
   16:  
   17:   You should have received a copy of the CeCILL License
   18:   along with RPL/2. If not, write to info@cecill.info.
   19: ================================================================================
   20: */
   21: 
   22: 
   23: #include "rpl-conv.h"
   24: 
   25: 
   26: /*
   27: ================================================================================
   28:   Routine de formation des données pour l'affichage
   29: ================================================================================
   30:   Entrées : structure sur l'état du processus et objet à afficher
   31: --------------------------------------------------------------------------------
   32:   Sorties : chaine de caractères
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: unsigned char *
   39: formateur(struct_processus *s_etat_processus, long offset_initial,
   40:         struct_objet *s_objet)
   41: {
   42:     int                         parentheses_groupe_gauche;
   43:     int                         parentheses_groupe_droit;
   44: 
   45:     integer8                    (*__type_disp)(struct_processus *, void **);
   46: 
   47:     logical1                    registre45;
   48: 
   49:     logical4                    autorisation_parenthese;
   50:     logical4                    presence_signe;
   51: 
   52:     logical8                    masque_binaire;
   53: 
   54:     struct_liste_chainee        *l_atome;
   55:     struct_liste_chainee        *l_element_courant;
   56:     struct_liste_chainee        *l_liste1;
   57:     struct_liste_chainee        *l_liste2;
   58: 
   59:     struct_objet                *s_sous_objet;
   60:     struct_objet                *s_sous_objet_1;
   61:     struct_objet                *s_sous_objet_2;
   62:     struct_objet                *s_sous_objet_3;
   63: 
   64:     unsigned char               base[1 + 1];
   65:     unsigned char               *chaine;
   66:     unsigned char               *chaine_fonction;
   67:     unsigned char               *chaine_formatee;
   68:     unsigned char               *chaine_tampon;
   69:     unsigned char               *chaine_sauvegarde;
   70:     unsigned char               *format;
   71:     unsigned char               *format_majuscule;
   72:     unsigned char               *ptre;
   73:     unsigned char               *ptrl;
   74:     unsigned char               *registre;
   75:     unsigned char               tampon[1024 + 1];
   76: 
   77:     integer8                    i;
   78:     integer8                    j;
   79:     integer8                    k;
   80:     integer8                    longueur_chaine;
   81:     integer8                    longueur_courante;
   82:     integer8                    longueur_decimale_courante;
   83:     integer8                    *longueurs_maximales;
   84:     integer8                    nombre_arguments;
   85:     integer8                    nombre_arguments_fonction;
   86:     integer8                    nombre_colonnes;
   87:     integer8                    nombre_elements;
   88:     integer8                    nombre_lignes;
   89:     integer8                    offset;
   90: 
   91:     chaine = NULL;
   92:     chaine_formatee = NULL;
   93:     chaine_sauvegarde = NULL;
   94: 
   95:     strcpy(base, " ");
   96: 
   97:     masque_binaire = 0;
   98: 
   99:     if ((*s_objet).type == ADR)
  100:     {
  101: 
  102: /*
  103: --------------------------------------------------------------------------------
  104:   Adresse
  105: --------------------------------------------------------------------------------
  106: */
  107: 
  108:         if (alsprintf(s_etat_processus, &chaine,
  109:                 "@ %016llX", (*((unsigned long long *)
  110:                 ((*s_objet).objet)))) < 0)
  111:         {
  112:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  113:             return(NULL);
  114:         }
  115:     }
  116:     else if ((*s_objet).type == SLB)
  117:     {
  118: 
  119: /*
  120: --------------------------------------------------------------------------------
  121:   Bibliothèque partagée
  122: --------------------------------------------------------------------------------
  123: */
  124: 
  125: #       pragma GCC diagnostic push
  126: #       pragma GCC diagnostic ignored "-Wpointer-to-int-cast"
  127: 
  128:         if (alsprintf(s_etat_processus, &chaine, "Library $ %016llX [%s]",
  129:                 (unsigned long long) (*((struct_bibliotheque *)
  130:                 (*s_objet).objet)).descripteur, (*((struct_bibliotheque *)
  131:                 (*s_objet).objet)).nom) < 0)
  132:         {
  133:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  134:             return(NULL);
  135:         }
  136: 
  137: #       pragma GCC diagnostic pop
  138: 
  139:     }
  140:     else if ((*s_objet).type == SPH)
  141:     {
  142: 
  143: /*
  144: --------------------------------------------------------------------------------
  145:   Sémaphore
  146: --------------------------------------------------------------------------------
  147: */
  148: 
  149: #       pragma GCC diagnostic push
  150: #       pragma GCC diagnostic ignored "-Wpointer-to-int-cast"
  151: 
  152:         if (alsprintf(s_etat_processus,
  153:                 &chaine, "Semaphore $ %016llX '%s'", (unsigned long long)
  154:                 &((*((struct_semaphore *) (*s_objet).objet)).semaphore),
  155:                 (*((struct_semaphore *) (*s_objet).objet)).nom) < 0)
  156:         {
  157:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  158:             return(NULL);
  159:         }
  160: 
  161: #       pragma GCC diagnostic pop
  162: 
  163:     }
  164:     else if ((*s_objet).type == SQL)
  165:     {
  166: 
  167: /*
  168: --------------------------------------------------------------------------------
  169:   Connecteur SQL
  170: --------------------------------------------------------------------------------
  171: */
  172: 
  173:         if (strcmp((*((struct_connecteur_sql *) (*s_objet).objet)).type,
  174:                 "MYSQL") == 0)
  175:         {
  176: #           ifdef MYSQL_SUPPORT
  177:             if (alsprintf(s_etat_processus, &chaine, "Sql $ %016llX (%s)",
  178:                     (unsigned long long) (*((struct_connecteur_sql *)
  179:                     (*s_objet).objet)).descripteur.mysql,
  180:                     (*((struct_connecteur_sql *) (*s_objet).objet)).type) < 0)
  181:             {
  182:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  183:                 return(NULL);
  184:             }
  185: #           else
  186:             if ((*s_etat_processus).langue == 'F')
  187:             {
  188:                 printf("+++Attention : Support de MySQL "
  189:                         "non compilé !\n");
  190:             }
  191:             else
  192:             {
  193:                 printf("+++Warning : MySQL support "
  194:                         "not available !\n");
  195:             }
  196: 
  197:             fflush(stdout);
  198: #           endif
  199:         }
  200:         else if (strcmp((*((struct_connecteur_sql *) (*s_objet).objet)).type,
  201:                 "POSTGRESQL") == 0)
  202:         {
  203: #           ifdef POSTGRESQL_SUPPORT
  204:             if (alsprintf(s_etat_processus, &chaine, "Sql $ %016llX (%s)",
  205:                     (unsigned long long) (*((struct_connecteur_sql *)
  206:                     (*s_objet).objet)).descripteur.postgresql,
  207:                     (*((struct_connecteur_sql *) (*s_objet).objet)).type) < 0)
  208:             {
  209:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  210:                 return(NULL);
  211:             }
  212: #           else
  213:             if ((*s_etat_processus).langue == 'F')
  214:             {
  215:                 printf("+++Attention : Support de PostgreSQL "
  216:                         "non compilé !\n");
  217:             }
  218:             else
  219:             {
  220:                 printf("+++Warning : PostgreSQL support "
  221:                         "not available !\n");
  222:             }
  223: 
  224:             fflush(stdout);
  225: #           endif
  226:         }
  227:         else
  228:         {
  229:             BUG(1, printf("SQL type '%s' not allowed!",
  230:                     (*((struct_connecteur_sql *) (*s_objet).objet))
  231:                     .type));
  232:         }
  233:     }
  234:     else if ((*s_objet).type == PRC)
  235:     {
  236: 
  237: /*
  238: --------------------------------------------------------------------------------
  239:   Processus
  240: --------------------------------------------------------------------------------
  241: */
  242: 
  243:         if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread)
  244:                 .processus_detache == d_vrai)
  245:         {
  246:             if (alsprintf(s_etat_processus, &chaine,
  247:                     "Process $ %016llX", (unsigned long long)
  248:                     (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
  249:                     .pid) < 0)
  250:             {
  251:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  252:                 return(NULL);
  253:             }
  254:         }
  255:         else
  256:         {
  257:             if (alsprintf(s_etat_processus, &chaine,
  258:                     "Light weight process $ %016llX/%016llX",
  259:                     (unsigned long long) (*(*((struct_processus_fils *)
  260:                     (*s_objet).objet)).thread).pid,
  261:                     (unsigned long long) (*(*((struct_processus_fils *)
  262:                     (*s_objet).objet)).thread).tid) < 0)
  263:             {
  264:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  265:                 return(NULL);
  266:             }
  267:         }
  268:     }
  269:     else if ((*s_objet).type == FCH)
  270:     {
  271: 
  272: /*
  273: --------------------------------------------------------------------------------
  274:   Fichier
  275: --------------------------------------------------------------------------------
  276: */
  277: 
  278:         if (alsprintf(s_etat_processus,
  279:                 &chaine, "File $ %016llX", (unsigned long long)
  280:                 (*((struct_fichier *) ((*s_objet).objet))).descripteur) < 0)
  281:         {
  282:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  283:             return(NULL);
  284:         }
  285: 
  286:         registre45 = test_cfsf(s_etat_processus, 45);
  287:         cf(s_etat_processus, 45);
  288: 
  289:         if ((format = formateur(s_etat_processus, 0, (*((struct_fichier *)
  290:                 ((*s_objet).objet))).format)) == NULL)
  291:         {
  292:             return(NULL);
  293:         }
  294: 
  295:         if (registre45 == d_vrai)
  296:         {
  297:             sf(s_etat_processus, 45);
  298:         }
  299:         else
  300:         {
  301:             cf(s_etat_processus, 45);
  302:         }
  303: 
  304:         if ((format_majuscule = conversion_majuscule(s_etat_processus,
  305:                 format)) == NULL)
  306:         {
  307:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  308:             return(NULL);
  309:         }
  310: 
  311:         free(format);
  312: 
  313:         registre = chaine;
  314: 
  315:         if ((chaine = malloc((strlen(registre) + 1 +
  316:                 strlen(format_majuscule) + 1) * sizeof(unsigned char)))
  317:                 == NULL)
  318:         {
  319:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  320:             return(NULL);
  321:         }
  322: 
  323:         sprintf(chaine, "%s %s", registre, format_majuscule);
  324:         free(registre);
  325: 
  326:         tampon[0] = d_code_fin_chaine;
  327: 
  328:         if ((*((struct_fichier *) ((*s_objet).objet))).acces == 'S')
  329:         {
  330:             strcat(tampon, "SEQUENTIAL, ");
  331:         }
  332:         else if ((*((struct_fichier *) ((*s_objet).objet))).acces == 'D')
  333:         {
  334:             strcat(tampon, "DIRECT, ");
  335:         }
  336:         else
  337:         {
  338:             strcat(tampon, "KEYED, ");
  339:         }
  340: 
  341:         if ((*((struct_fichier *) ((*s_objet).objet))).binaire == 'N')
  342:         {
  343:             strcat(tampon, "FORMATTED, ");
  344:         }
  345:         else if ((*((struct_fichier *) ((*s_objet).objet))).binaire == 'Y')
  346:         {
  347:             strcat(tampon, "UNFORMATTED, ");
  348:         }
  349:         else
  350:         {
  351:             strcat(tampon, "FLOW, ");
  352:         }
  353: 
  354:         if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'N')
  355:         {
  356:             strcat(tampon, "NEW, ");
  357:         }
  358:         else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'O')
  359:         {
  360:             strcat(tampon, "OLD, ");
  361:         }
  362:         else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'R')
  363:         {
  364:             strcat(tampon, "REPLACE, ");
  365:         }
  366:         else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'U')
  367:         {
  368:             strcat(tampon, "UNKNOWN, ");
  369:         }
  370:         else
  371:         {
  372:             strcat(tampon, "SCRATCH, ");
  373:         }
  374: 
  375:         if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'R')
  376:         {
  377:             strcat(tampon, "READONLY");
  378:         }
  379:         else if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'W')
  380:         {
  381:             strcat(tampon, "WRITEONLY");
  382:         }
  383:         else
  384:         {
  385:             strcat(tampon, "READWRITE");
  386:         }
  387: 
  388:         registre = chaine;
  389: 
  390:         if ((chaine = malloc((strlen(chaine) + 6 + strlen(tampon) +
  391:                 strlen((*((struct_fichier *) ((*s_objet).objet))).nom) + 1) *
  392:                 sizeof(unsigned char))) == NULL)
  393:         {
  394:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  395:             return(NULL);
  396:         }
  397: 
  398:         sprintf(chaine, "%s [%s <%s>]", registre, (*((struct_fichier *)
  399:                 ((*s_objet).objet))).nom, tampon);
  400:         free(registre);
  401: 
  402:         free(format_majuscule);
  403:     }
  404:     else if ((*s_objet).type == SCK)
  405:     {
  406: 
  407: /*
  408: --------------------------------------------------------------------------------
  409:   Socket
  410: --------------------------------------------------------------------------------
  411: */
  412: 
  413:         if (alsprintf(s_etat_processus, &chaine,
  414:                 "Socket $ %016llX", (unsigned long long)
  415:                 (*((struct_socket *) ((*s_objet).objet))).socket) < 0)
  416:         {
  417:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  418:             return(NULL);
  419:         }
  420: 
  421:         registre45 = test_cfsf(s_etat_processus, 45);
  422:         cf(s_etat_processus, 45);
  423: 
  424:         if ((format = formateur(s_etat_processus, 0, (*((struct_socket *)
  425:                 ((*s_objet).objet))).format)) == NULL)
  426:         {
  427:             return(NULL);
  428:         }
  429: 
  430:         if (registre45 == d_vrai)
  431:         {
  432:             sf(s_etat_processus, 45);
  433:         }
  434:         else
  435:         {
  436:             cf(s_etat_processus, 45);
  437:         }
  438: 
  439:         if ((format_majuscule = conversion_majuscule(s_etat_processus,
  440:                 format)) == NULL)
  441:         {
  442:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  443:             return(NULL);
  444:         }
  445: 
  446:         free(format);
  447: 
  448:         registre = chaine;
  449: 
  450:         if ((chaine = malloc((strlen(registre) + 1 +
  451:                 strlen(format_majuscule) + 1) * sizeof(unsigned char)))
  452:                 == NULL)
  453:         {
  454:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  455:             return(NULL);
  456:         }
  457: 
  458:         sprintf(chaine, "%s %s", registre, format_majuscule);
  459:         free(registre);
  460: 
  461:         tampon[0] = d_code_fin_chaine;
  462: 
  463:         strcat(tampon, (*((struct_socket *) ((*s_objet).objet))).type);
  464:         strcat(tampon, ", ");
  465: 
  466:         if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_UNIX)
  467:         {
  468:             strcat(tampon, "UNIX, ");
  469:         }
  470:         else if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_INET)
  471:         {
  472:             strcat(tampon, "IPV4, ");
  473:         }
  474:         else if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_INET6)
  475:         {
  476:             strcat(tampon, "IPV6, ");
  477:         }
  478: 
  479:         if ((*((struct_socket *) ((*s_objet).objet))).localisation == 'L')
  480:         {
  481:             strcat(tampon, "LOCAL, ");
  482:         }
  483:         else
  484:         {
  485:             strcat(tampon, "FOREIGN, ");
  486:         }
  487: 
  488:         if ((*((struct_socket *) ((*s_objet).objet))).binaire == 'N')
  489:         {
  490:             strcat(tampon, "FORMATTED, ");
  491:         }
  492:         else if ((*((struct_socket *) ((*s_objet).objet))).binaire == 'Y')
  493:         {
  494:             strcat(tampon, "UNFORMATTED, ");
  495:         }
  496:         else
  497:         {
  498:             strcat(tampon, "FLOW, ");
  499:         }
  500: 
  501:         if ((*((struct_socket *) ((*s_objet).objet))).protection == 'R')
  502:         {
  503:             strcat(tampon, "READONLY");
  504:         }
  505:         else if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'W')
  506:         {
  507:             strcat(tampon, "WRITEONLY");
  508:         }
  509:         else
  510:         {
  511:             strcat(tampon, "READWRITE");
  512:         }
  513: 
  514:         registre = chaine;
  515: 
  516:         if ((*((struct_socket *) ((*s_objet).objet))).localisation == 'L')
  517:         { // Socket locale
  518:             if ((strcmp((*((struct_socket *) ((*s_objet).objet))).type,
  519:                     "STREAM") == 0) || (strcmp((*((struct_socket *)
  520:                     ((*s_objet).objet))).type, "SEQUENTIAL DATAGRAM") == 0))
  521:             {
  522:                 if (strcmp((*((struct_socket *) ((*s_objet).objet)))
  523:                         .adresse_distante, "") == 0)
  524:                 { // Socket connectée en écoute
  525:                     if ((chaine = malloc((strlen(registre) + 16 +
  526:                             strlen(tampon) + strlen((*((struct_socket *)
  527:                             ((*s_objet).objet))).adresse) +
  528:                             + 1) * sizeof(unsigned char))) == NULL)
  529:                     {
  530:                         (*s_etat_processus).erreur_systeme =
  531:                                 d_es_allocation_memoire;
  532:                         return(NULL);
  533:                     }
  534: 
  535:                     sprintf(chaine, "%s [%s LISTENING <%s>]", registre,
  536:                             (*((struct_socket *) ((*s_objet).objet))).adresse,
  537:                             tampon);
  538:                 }
  539:                 else
  540:                 { // Socket connecté
  541:                     if ((chaine = malloc((strlen(registre) + 12 +
  542:                             strlen(tampon) + strlen((*((struct_socket *)
  543:                             ((*s_objet).objet))).adresse) +
  544:                             strlen((*((struct_socket *) ((*s_objet).objet)))
  545:                             .adresse_distante)
  546:                             + 1) * sizeof(unsigned char))) == NULL)
  547:                     {
  548:                         (*s_etat_processus).erreur_systeme =
  549:                                 d_es_allocation_memoire;
  550:                         return(NULL);
  551:                     }
  552: 
  553:                     sprintf(chaine, "%s [%s FROM %s <%s>]", registre,
  554:                             (*((struct_socket *) ((*s_objet).objet))).adresse,
  555:                             (*((struct_socket *) ((*s_objet).objet)))
  556:                             .adresse_distante, tampon);
  557:                 }
  558:             }
  559:             else // Socket non connectée
  560:             {
  561:                 if ((chaine = malloc((strlen(registre) + 6 +
  562:                         strlen(tampon) + strlen((*((struct_socket *)
  563:                         ((*s_objet).objet))).adresse) +
  564:                         + 1) * sizeof(unsigned char))) == NULL)
  565:                 {
  566:                     (*s_etat_processus).erreur_systeme =
  567:                             d_es_allocation_memoire;
  568:                     return(NULL);
  569:                 }
  570: 
  571:                 sprintf(chaine, "%s [%s <%s>]", registre,
  572:                         (*((struct_socket *) ((*s_objet).objet))).adresse,
  573:                         tampon);
  574:             }
  575:         }
  576:         else
  577:         { // Socket distante
  578:             if ((strcmp((*((struct_socket *) ((*s_objet).objet))).type,
  579:                     "STREAM") == 0) || (strcmp((*((struct_socket *)
  580:                     ((*s_objet).objet))).type, "SEQUENTIAL DATAGRAM") == 0))
  581:             {
  582:                 if ((chaine = malloc((strlen(registre) + 9 +
  583:                         strlen((*((struct_socket *) ((*s_objet).objet)))
  584:                         .adresse) + strlen(tampon)
  585:                         + 1) * sizeof(unsigned char))) == NULL)
  586:                 {
  587:                     (*s_etat_processus).erreur_systeme =
  588:                             d_es_allocation_memoire;
  589:                     return(NULL);
  590:                 }
  591: 
  592:                 sprintf(chaine, "%s [TO %s <%s>]", registre,
  593:                         (*((struct_socket *) ((*s_objet).objet)))
  594:                         .adresse, tampon);
  595:             }
  596:             else
  597:             {
  598:                 if (strcmp((*((struct_socket *) ((*s_objet).objet)))
  599:                         .adresse_distante, "") == 0)
  600:                 {
  601:                     if ((chaine = malloc((strlen(registre) + 5 +
  602:                             strlen(tampon) + 1) * sizeof(unsigned char)))
  603:                             == NULL)
  604:                     {
  605:                         (*s_etat_processus).erreur_systeme =
  606:                                 d_es_allocation_memoire;
  607:                         return(NULL);
  608:                     }
  609: 
  610:                     sprintf(chaine, "%s [<%s>]", registre, tampon);
  611:                 }
  612:                 else
  613:                 {
  614:                     if ((chaine = malloc((strlen(registre) + 9 +
  615:                             strlen((*((struct_socket *) ((*s_objet).objet)))
  616:                             .adresse_distante) + strlen(tampon)
  617:                             + 1) * sizeof(unsigned char))) == NULL)
  618:                     {
  619:                         (*s_etat_processus).erreur_systeme =
  620:                                 d_es_allocation_memoire;
  621:                         return(NULL);
  622:                     }
  623: 
  624:                     sprintf(chaine, "%s [TO %s <%s>]", registre,
  625:                             (*((struct_socket *) ((*s_objet).objet)))
  626:                             .adresse_distante, tampon);
  627:                 }
  628:             }
  629:         }
  630: 
  631:         free(registre);
  632:         free(format_majuscule);
  633:     }
  634:     else if ((*s_objet).type == ALG)
  635:     {
  636: 
  637: /*
  638: --------------------------------------------------------------------------------
  639:   Expression algébrique
  640: --------------------------------------------------------------------------------
  641: */
  642: 
  643:         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
  644: 
  645:         while(l_element_courant != NULL)
  646:         {
  647:             if ((*(*l_element_courant).donnee).type == FCT)
  648:             {
  649:                 if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
  650:                         .donnee).objet)).nom_fonction, "<<") != 0) &&
  651:                         (strcmp((*((struct_fonction *) (*(*l_element_courant)
  652:                         .donnee).objet)).nom_fonction, ">>") != 0))
  653:                 {
  654:                     if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
  655:                             .donnee).objet)).nom_fonction, "+") == 0) ||
  656:                             (strcmp((*((struct_fonction *)
  657:                             (*(*l_element_courant).donnee).objet))
  658:                             .nom_fonction, "-") == 0) || (strcmp(
  659:                             (*((struct_fonction *) (*(*l_element_courant)
  660:                             .donnee).objet)).nom_fonction, "*") == 0) ||
  661:                             (strcmp((*((struct_fonction *)
  662:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  663:                             "/") == 0) || (strcmp((*((struct_fonction *)
  664:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  665:                             "^") == 0) || (strcmp((*((struct_fonction *)
  666:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  667:                             "<") == 0) || (strcmp((*((struct_fonction *)
  668:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  669:                             ">") == 0) || (strcmp((*((struct_fonction *)
  670:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  671:                             "==") == 0) || (strcmp((*((struct_fonction *)
  672:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  673:                             "<>") == 0) || (strcmp((*((struct_fonction *)
  674:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  675:                             "<=") == 0) || (strcmp((*((struct_fonction *)
  676:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  677:                             "=<") == 0) || (strcmp((*((struct_fonction *)
  678:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  679:                             ">=") == 0) || (strcmp((*((struct_fonction *)
  680:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
  681:                             "=>") == 0))
  682:                     {
  683:                         if (depilement(s_etat_processus, &((*s_etat_processus)
  684:                                 .l_base_pile), &s_sous_objet_2) == d_erreur)
  685:                         {
  686:                             return(NULL);
  687:                         }
  688: 
  689:                         chaine_sauvegarde = (*s_etat_processus)
  690:                                 .instruction_courante;
  691: 
  692:                         if (((*s_etat_processus).instruction_courante =
  693:                                 (unsigned char *) malloc((strlen(
  694:                                 (unsigned char *) (*s_sous_objet_2).objet) + 2
  695:                                 + 1) * sizeof(unsigned char))) == NULL)
  696:                         {
  697:                             (*s_etat_processus).instruction_courante =
  698:                                     chaine_sauvegarde;
  699:                             (*s_etat_processus).erreur_systeme =
  700:                                     d_es_allocation_memoire;
  701:                             return(NULL);
  702:                         }
  703: 
  704:                         sprintf((*s_etat_processus).instruction_courante,
  705:                                 "'%s'", (unsigned char *)
  706:                                 (*s_sous_objet_2).objet);
  707: 
  708:                         presence_signe = (((*s_etat_processus)
  709:                                 .instruction_courante[1] == '+')
  710:                                 || ((*s_etat_processus).instruction_courante[1]
  711:                                 == '-')) ? d_vrai : d_faux;
  712: 
  713:                         (*s_etat_processus).type_en_cours = NON;
  714:                         recherche_type(s_etat_processus);
  715: 
  716:                         if ((*s_etat_processus).erreur_execution != d_ex)
  717:                         {
  718:                             // Aucune erreur d'exécution ne peut être
  719:                             // retournée, car l'argument est cohérent.
  720: 
  721:                             return(NULL);
  722:                         }
  723: 
  724:                         if (depilement(s_etat_processus, &((*s_etat_processus)
  725:                                 .l_base_pile), &s_sous_objet_3) == d_erreur)
  726:                         {
  727:                             return(NULL);
  728:                         }
  729: 
  730:                         free((*s_etat_processus).instruction_courante);
  731: 
  732:                         (*s_etat_processus).instruction_courante =
  733:                                 chaine_sauvegarde;
  734: 
  735:                         autorisation_parenthese = d_faux;
  736: 
  737:                         if ((*s_sous_objet_3).type == ALG)
  738:                         {
  739:                             l_atome = (struct_liste_chainee *)
  740:                                     (*s_sous_objet_3).objet;
  741:                             chaine_fonction = "";
  742:                             nombre_arguments_fonction = 0;
  743: 
  744:                             while(l_atome != NULL)
  745:                             {
  746:                                 if ((*(*l_atome).donnee).type == FCT)
  747:                                 {
  748:                                     if (strcmp((*((struct_fonction *)
  749:                                             (*(*l_atome).donnee).objet))
  750:                                             .nom_fonction, ">>") != 0)
  751:                                     {
  752:                                         chaine_fonction = (*((struct_fonction *)
  753:                                                 (*(*l_atome).donnee).objet))
  754:                                                 .nom_fonction;
  755:                                         nombre_arguments_fonction =
  756:                                                 (*((struct_fonction *)
  757:                                                 (*(*l_atome).donnee).objet))
  758:                                                 .nombre_arguments;
  759:                                     }
  760:                                 }
  761: 
  762:                                 l_atome = (*l_atome).suivant;
  763:                             }
  764: 
  765:                             if (strcmp((*((struct_fonction *)
  766:                                     (*(*l_element_courant).donnee).objet))
  767:                                     .nom_fonction, "+") == 0)
  768:                             {
  769:                                 if ((strcmp(chaine_fonction, "AND") == 0) ||
  770:                                         (strcmp(chaine_fonction, "XOR") == 0) ||
  771:                                         (strcmp(chaine_fonction, "EQV") == 0) ||
  772:                                         (strcmp(chaine_fonction, "OR") == 0))
  773:                                 {
  774:                                     autorisation_parenthese = d_vrai;
  775:                                 }
  776:                             }
  777:                             else if (strcmp((*((struct_fonction *)
  778:                                     (*(*l_element_courant).donnee).objet))
  779:                                     .nom_fonction, "-") == 0)
  780:                             {
  781:                                 if (nombre_arguments_fonction != 0)
  782:                                 {
  783:                                     autorisation_parenthese = d_faux;
  784:                                 }
  785:                                 else
  786:                                 {
  787:                                     autorisation_parenthese = d_vrai;
  788:                                 }
  789:                             }
  790:                             else if (strcmp((*((struct_fonction *)
  791:                                     (*(*l_element_courant).donnee).objet))
  792:                                     .nom_fonction, "*") == 0)
  793:                             {
  794:                                 if ((strcmp(chaine_fonction, "+") == 0) ||
  795:                                         (strcmp(chaine_fonction, "-") == 0) ||
  796:                                         (strcmp(chaine_fonction, "AND") == 0) ||
  797:                                         (strcmp(chaine_fonction, "XOR") == 0) ||
  798:                                         (strcmp(chaine_fonction, "EQV") == 0) ||
  799:                                         (strcmp(chaine_fonction, "OR") == 0))
  800:                                 {
  801:                                     autorisation_parenthese = d_vrai;
  802:                                 }
  803:                             }
  804:                             else if (strcmp((*((struct_fonction *)
  805:                                     (*(*l_element_courant).donnee).objet))
  806:                                     .nom_fonction, "/") == 0)
  807:                             {
  808:                                 if (nombre_arguments_fonction != 0)
  809:                                 {
  810:                                     autorisation_parenthese = d_faux;
  811:                                 }
  812:                                 else
  813:                                 {
  814:                                     autorisation_parenthese = d_vrai;
  815:                                 }
  816:                             }
  817:                             else if ((strcmp((*((struct_fonction *)
  818:                                     (*(*l_element_courant).donnee).objet))
  819:                                     .nom_fonction, "^") == 0))
  820:                             {
  821:                                 if (nombre_arguments_fonction != 0)
  822:                                 {
  823:                                     autorisation_parenthese = d_faux;
  824:                                 }
  825:                                 else
  826:                                 {
  827:                                     autorisation_parenthese = d_vrai;
  828:                                 }
  829:                             }
  830:                         }
  831: 
  832:                         if ((autorisation_parenthese == d_vrai) ||
  833:                                 (presence_signe == d_vrai))
  834:                         {
  835:                             chaine_sauvegarde = (unsigned char *)
  836:                                     (*s_sous_objet_2).objet;
  837: 
  838:                             if (((*s_sous_objet_2).objet =
  839:                                     malloc((strlen(chaine_sauvegarde) + 2 + 1)
  840:                                     * sizeof(unsigned char))) == NULL)
  841:                             {
  842:                                 (*s_etat_processus).erreur_systeme =
  843:                                         d_es_allocation_memoire;
  844:                                 return(NULL);
  845:                             }
  846: 
  847:                             sprintf((unsigned char *) (*s_sous_objet_2).objet,
  848:                                     "(%s)", chaine_sauvegarde);
  849:                             free(chaine_sauvegarde);
  850:                         }
  851: 
  852:                         liberation(s_etat_processus, s_sous_objet_3);
  853: 
  854:                         if (depilement(s_etat_processus, &((*s_etat_processus)
  855:                                 .l_base_pile), &s_sous_objet_1) == d_erreur)
  856:                         {
  857:                             return(NULL);
  858:                         }
  859: 
  860:                         chaine_sauvegarde = (*s_etat_processus)
  861:                                 .instruction_courante;
  862: 
  863:                         if (((*s_etat_processus).instruction_courante =
  864:                                 (unsigned char *) malloc((strlen(
  865:                                 (unsigned char *) (*s_sous_objet_1).objet) + 2
  866:                                 + 1) * sizeof(unsigned char))) == NULL)
  867:                         {
  868:                             (*s_etat_processus).instruction_courante =
  869:                                     chaine_sauvegarde;
  870:                             (*s_etat_processus).erreur_systeme =
  871:                                     d_es_allocation_memoire;
  872:                             return(NULL);
  873:                         }
  874: 
  875:                         sprintf((*s_etat_processus).instruction_courante,
  876:                                 "'%s'", (unsigned char *)
  877:                                 (*s_sous_objet_1).objet);
  878: 
  879:                         (*s_etat_processus).type_en_cours = NON;
  880:                         recherche_type(s_etat_processus);
  881: 
  882:                         if ((*s_etat_processus).erreur_execution != d_ex)
  883:                         {
  884:                             // Aucune erreur d'exécution ne peut être
  885:                             // retournée, car l'argument est cohérent.
  886: 
  887:                             return(NULL);
  888:                         }
  889: 
  890:                         if (depilement(s_etat_processus, &((*s_etat_processus)
  891:                                 .l_base_pile), &s_sous_objet_3) == d_erreur)
  892:                         {
  893:                             return(NULL);
  894:                         }
  895: 
  896:                         free((*s_etat_processus).instruction_courante);
  897: 
  898:                         (*s_etat_processus).instruction_courante =
  899:                                 chaine_sauvegarde;
  900: 
  901:                         autorisation_parenthese = d_faux;
  902: 
  903:                         if ((*s_sous_objet_3).type == ALG)
  904:                         {
  905:                             l_atome = (struct_liste_chainee *)
  906:                                     (*s_sous_objet_3).objet;
  907:                             chaine_fonction = "";
  908: 
  909:                             while(l_atome != NULL)
  910:                             {
  911:                                 if ((*(*l_atome).donnee).type == FCT)
  912:                                 {
  913:                                     if (strcmp((*((struct_fonction *)
  914:                                             (*(*l_atome).donnee).objet))
  915:                                             .nom_fonction, ">>") != 0)
  916:                                     {
  917:                                         chaine_fonction = (*((struct_fonction *)
  918:                                                 (*(*l_atome).donnee).objet))
  919:                                                 .nom_fonction;
  920:                                     }
  921:                                 }
  922: 
  923:                                 l_atome = (*l_atome).suivant;
  924:                             }
  925: 
  926:                             if ((strcmp((*((struct_fonction *)
  927:                                     (*(*l_element_courant).donnee).objet))
  928:                                     .nom_fonction, "+") == 0) ||
  929:                                     (strcmp((*((struct_fonction *)
  930:                                     (*(*l_element_courant).donnee).objet))
  931:                                     .nom_fonction, "-") == 0))
  932:                             {
  933:                                 if ((strcmp(chaine_fonction, "AND") == 0) ||
  934:                                         (strcmp(chaine_fonction, "XOR") == 0) ||
  935:                                         (strcmp(chaine_fonction, "EQV") == 0) ||
  936:                                         (strcmp(chaine_fonction, "OR") == 0))
  937:                                 {
  938:                                     autorisation_parenthese = d_vrai;
  939:                                 }
  940:                             }
  941:                             else if ((strcmp((*((struct_fonction *)
  942:                                     (*(*l_element_courant).donnee).objet))
  943:                                     .nom_fonction, "*") == 0) ||
  944:                                     (strcmp((*((struct_fonction *)
  945:                                     (*(*l_element_courant).donnee).objet))
  946:                                     .nom_fonction, "/") == 0))
  947:                             {
  948:                                 if ((strcmp(chaine_fonction, "+") == 0) ||
  949:                                         (strcmp(chaine_fonction, "-") == 0) ||
  950:                                         (strcmp(chaine_fonction, "AND") == 0) ||
  951:                                         (strcmp(chaine_fonction, "XOR") == 0) ||
  952:                                         (strcmp(chaine_fonction, "EQV") == 0) ||
  953:                                         (strcmp(chaine_fonction, "OR") == 0))
  954:                                 {
  955:                                     autorisation_parenthese = d_vrai;
  956:                                 }
  957:                             }
  958:                             else if ((strcmp((*((struct_fonction *)
  959:                                     (*(*l_element_courant).donnee).objet))
  960:                                     .nom_fonction, "^") == 0))
  961:                             {
  962:                                 autorisation_parenthese = d_vrai;
  963:                             }
  964:                         }
  965: 
  966:                         if (autorisation_parenthese == d_vrai)
  967:                         {
  968:                             chaine_sauvegarde = (unsigned char *)
  969:                                     (*s_sous_objet_1).objet;
  970: 
  971:                             if (((*s_sous_objet_1).objet =
  972:                                     malloc((strlen(chaine_sauvegarde) + 2 + 1)
  973:                                     * sizeof(unsigned char))) == NULL)
  974:                             {
  975:                                 (*s_etat_processus).erreur_systeme =
  976:                                         d_es_allocation_memoire;
  977:                                 return(NULL);
  978:                             }
  979: 
  980:                             sprintf((unsigned char *) (*s_sous_objet_1).objet,
  981:                                     "(%s)", chaine_sauvegarde);
  982:                             free(chaine_sauvegarde);
  983:                         }
  984: 
  985:                         liberation(s_etat_processus, s_sous_objet_3);
  986: 
  987:                         if ((s_sous_objet = allocation(s_etat_processus, CHN))
  988:                                 == NULL)
  989:                         {
  990:                             (*s_etat_processus).erreur_systeme =
  991:                                     d_es_allocation_memoire;
  992:                             return(NULL);
  993:                         }
  994: 
  995:                         if (((*s_sous_objet).objet = malloc((strlen(
  996:                                 (unsigned char *) (*s_sous_objet_1).objet) +
  997:                                 strlen((*((struct_fonction *)
  998:                                 (*(*l_element_courant).donnee).objet))
  999:                                 .nom_fonction) + strlen((unsigned char *)
 1000:                                 (*s_sous_objet_2).objet) + 1) *
 1001:                                 sizeof(unsigned char))) == NULL)
 1002:                         {
 1003:                             (*s_etat_processus).erreur_systeme =
 1004:                                     d_es_allocation_memoire;
 1005:                             return(NULL);
 1006:                         }
 1007: 
 1008:                         sprintf((unsigned char *) (*s_sous_objet).objet,
 1009:                                 "%s%s%s", (unsigned char *)
 1010:                                 (*s_sous_objet_1)
 1011:                                 .objet, (*((struct_fonction *)
 1012:                                 (*(*l_element_courant).donnee).objet))
 1013:                                 .nom_fonction, (unsigned char *)
 1014:                                 (*s_sous_objet_2).objet);
 1015: 
 1016:                         liberation(s_etat_processus, s_sous_objet_1);
 1017:                         liberation(s_etat_processus, s_sous_objet_2);
 1018: 
 1019:                         if (empilement(s_etat_processus, &((*s_etat_processus)
 1020:                                 .l_base_pile), s_sous_objet) == d_erreur)
 1021:                         {
 1022:                             return(NULL);
 1023:                         }
 1024:                     }
 1025:                     else if (strcmp((*((struct_fonction *)
 1026:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1027:                             "=") == 0)
 1028:                     {
 1029:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1030:                                 .l_base_pile), &s_sous_objet_2) == d_erreur)
 1031:                         {
 1032:                             return(NULL);
 1033:                         }
 1034: 
 1035:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1036:                                 .l_base_pile), &s_sous_objet_1) == d_erreur)
 1037:                         {
 1038:                             return(NULL);
 1039:                         }
 1040: 
 1041:                         if ((s_sous_objet = allocation(s_etat_processus, CHN))
 1042:                                 == NULL)
 1043:                         {
 1044:                             (*s_etat_processus).erreur_systeme =
 1045:                                     d_es_allocation_memoire;
 1046:                             return(NULL);
 1047:                         }
 1048: 
 1049:                         autorisation_parenthese = d_vrai;
 1050:                         l_atome = l_element_courant;
 1051: 
 1052:                         if (l_atome != NULL)
 1053:                         {
 1054:                             if ((*l_atome).suivant != NULL)
 1055:                             {
 1056:                                 l_atome = (*l_atome).suivant;
 1057: 
 1058:                                 if ((*(*l_atome).donnee).type == FCT)
 1059:                                 {
 1060:                                     if (strcmp((*((struct_fonction *)
 1061:                                             (*(*l_atome).donnee).objet))
 1062:                                             .nom_fonction, ">>") == 0)
 1063:                                     {
 1064:                                         if ((*l_atome).suivant == NULL)
 1065:                                         {
 1066:                                             autorisation_parenthese = d_faux;
 1067:                                         }
 1068:                                     }
 1069:                                 }
 1070:                             }
 1071:                         }
 1072: 
 1073:                         if (autorisation_parenthese == d_vrai)
 1074:                         {
 1075:                             if (((*s_sous_objet).objet =
 1076:                                     malloc((strlen(
 1077:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 1078:                                     strlen((*((struct_fonction *)
 1079:                                     (*(*l_element_courant).donnee).objet))
 1080:                                     .nom_fonction) + strlen((unsigned char *)
 1081:                                     (*s_sous_objet_2).objet) + 2 + 1) *
 1082:                                     sizeof(unsigned char))) == NULL)
 1083:                             {
 1084:                                 (*s_etat_processus).erreur_systeme =
 1085:                                         d_es_allocation_memoire;
 1086:                                 return(NULL);
 1087:                             }
 1088: 
 1089:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 1090:                                     "(%s%s%s)", (unsigned char *)
 1091:                                     (*s_sous_objet_1)
 1092:                                     .objet, (*((struct_fonction *)
 1093:                                     (*(*l_element_courant).donnee).objet))
 1094:                                     .nom_fonction, (unsigned char *)
 1095:                                     (*s_sous_objet_2).objet);
 1096:                         }
 1097:                         else
 1098:                         {
 1099:                             if (((*s_sous_objet).objet =
 1100:                                     malloc((strlen(
 1101:                                     (unsigned char *) (*s_sous_objet_1).objet) +
 1102:                                     strlen((*((struct_fonction *)
 1103:                                     (*(*l_element_courant).donnee).objet))
 1104:                                     .nom_fonction) + strlen((unsigned char *)
 1105:                                     (*s_sous_objet_2).objet) + 1) *
 1106:                                     sizeof(unsigned char))) == NULL)
 1107:                             {
 1108:                                 (*s_etat_processus).erreur_systeme =
 1109:                                         d_es_allocation_memoire;
 1110:                                 return(NULL);
 1111:                             }
 1112: 
 1113:                             sprintf((unsigned char *) (*s_sous_objet).objet,
 1114:                                     "%s%s%s", (unsigned char *)
 1115:                                     (*s_sous_objet_1)
 1116:                                     .objet, (*((struct_fonction *)
 1117:                                     (*(*l_element_courant).donnee).objet))
 1118:                                     .nom_fonction, (unsigned char *)
 1119:                                     (*s_sous_objet_2).objet);
 1120:                         }
 1121: 
 1122:                         liberation(s_etat_processus, s_sous_objet_1);
 1123:                         liberation(s_etat_processus, s_sous_objet_2);
 1124: 
 1125:                         if (empilement(s_etat_processus, &((*s_etat_processus)
 1126:                                 .l_base_pile), s_sous_objet) == d_erreur)
 1127:                         {
 1128:                             return(NULL);
 1129:                         }
 1130:                     }
 1131:                     else if (strcmp((*((struct_fonction *)
 1132:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1133:                             "NOT") == 0)
 1134:                     {
 1135:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1136:                                 .l_base_pile), &s_sous_objet_1) == d_erreur)
 1137:                         {
 1138:                             return(NULL);
 1139:                         }
 1140: 
 1141:                         if ((s_sous_objet = allocation(s_etat_processus, CHN))
 1142:                                 == NULL)
 1143:                         {
 1144:                             (*s_etat_processus).erreur_systeme =
 1145:                                     d_es_allocation_memoire;
 1146:                             return(NULL);
 1147:                         }
 1148: 
 1149:                         if (((*s_sous_objet).objet = (unsigned char *) malloc(
 1150:                                 (strlen((unsigned char *) (*s_sous_objet_1)
 1151:                                 .objet) + 5 + 1) * sizeof(unsigned char))) ==
 1152:                                 NULL)
 1153:                         {
 1154:                             (*s_etat_processus).erreur_systeme =
 1155:                                     d_es_allocation_memoire;
 1156:                             return(NULL);
 1157:                         }
 1158: 
 1159:                         sprintf((unsigned char *) (*s_sous_objet).objet,
 1160:                                 "%s(%s)", (*((struct_fonction *)
 1161:                                 (*(*l_element_courant).donnee).objet))
 1162:                                 .nom_fonction, (unsigned char *)
 1163:                                 (*s_sous_objet_1).objet );
 1164: 
 1165:                         liberation(s_etat_processus, s_sous_objet_1);
 1166: 
 1167:                         if (empilement(s_etat_processus, &((*s_etat_processus)
 1168:                                 .l_base_pile), s_sous_objet) == d_erreur)
 1169:                         {
 1170:                             return(NULL);
 1171:                         }
 1172:                     }
 1173:                     else if ((strcmp((*((struct_fonction *)
 1174:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1175:                             "OR") == 0) || (strcmp((*((struct_fonction *)
 1176:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1177:                             "XOR") == 0) || (strcmp((*((struct_fonction *)
 1178:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1179:                             "EQV") == 0) || (strcmp((*((struct_fonction *)
 1180:                             (*(*l_element_courant).donnee).objet)).nom_fonction,
 1181:                             "AND") == 0))
 1182:                     {
 1183:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1184:                                 .l_base_pile), &s_sous_objet_2) == d_erreur)
 1185:                         {
 1186:                             return(NULL);
 1187:                         }
 1188: 
 1189:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1190:                                 .l_base_pile), &s_sous_objet_1) == d_erreur)
 1191:                         {
 1192:                             return(NULL);
 1193:                         }
 1194: 
 1195:                         if ((s_sous_objet = allocation(s_etat_processus, CHN))
 1196:                                 == NULL)
 1197:                         {
 1198:                             (*s_etat_processus).erreur_systeme =
 1199:                                     d_es_allocation_memoire;
 1200:                             return(NULL);
 1201:                         }
 1202: 
 1203:                         parentheses_groupe_gauche = 0;
 1204:                         parentheses_groupe_droit = 0;
 1205: 
 1206:                         chaine_sauvegarde = (*s_etat_processus)
 1207:                                 .instruction_courante;
 1208: 
 1209:                         if (((*s_etat_processus).instruction_courante =
 1210:                                 (unsigned char *) malloc((strlen(
 1211:                                 (unsigned char *) (*s_sous_objet_1).objet) + 2
 1212:                                 + 1) * sizeof(unsigned char))) == NULL)
 1213:                         {
 1214:                             (*s_etat_processus).instruction_courante =
 1215:                                     chaine_sauvegarde;
 1216:                             (*s_etat_processus).erreur_systeme =
 1217:                                     d_es_allocation_memoire;
 1218:                             return(NULL);
 1219:                         }
 1220: 
 1221:                         sprintf((*s_etat_processus).instruction_courante,
 1222:                                 "'%s'", (unsigned char *)
 1223:                                 (*s_sous_objet_1).objet);
 1224: 
 1225:                         (*s_etat_processus).type_en_cours = NON;
 1226:                         recherche_type(s_etat_processus);
 1227: 
 1228:                         if ((*s_etat_processus).erreur_execution != d_ex)
 1229:                         {
 1230:                             // Aucune erreur d'exécution ne peut être
 1231:                             // retournée, car l'argument est cohérent.
 1232: 
 1233:                             return(NULL);
 1234:                         }
 1235: 
 1236:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1237:                                 .l_base_pile), &s_sous_objet_3) == d_erreur)
 1238:                         {
 1239:                             return(NULL);
 1240:                         }
 1241: 
 1242:                         free((*s_etat_processus).instruction_courante);
 1243: 
 1244:                         (*s_etat_processus).instruction_courante =
 1245:                                 chaine_sauvegarde;
 1246: 
 1247:                         if ((*s_sous_objet_3).type == ALG)
 1248:                         {
 1249:                             l_atome = (struct_liste_chainee *)
 1250:                                     (*s_sous_objet_3).objet;
 1251:                             chaine_fonction = "";
 1252: 
 1253:                             while(l_atome != NULL)
 1254:                             {
 1255:                                 if ((*(*l_atome).donnee).type == FCT)
 1256:                                 {
 1257:                                     if (strcmp((*((struct_fonction *)
 1258:                                             (*(*l_atome).donnee).objet))
 1259:                                             .nom_fonction, ">>") != 0)
 1260:                                     {
 1261:                                         chaine_fonction = (*((struct_fonction *)
 1262:                                                 (*(*l_atome).donnee).objet))
 1263:                                                 .nom_fonction;
 1264:                                     }
 1265:                                 }
 1266: 
 1267:                                 l_atome = (*l_atome).suivant;
 1268:                             }
 1269: 
 1270:                             if (((strcmp(chaine_fonction, "OR") == 0) ||
 1271:                                     (strcmp(chaine_fonction, "EQV") == 0) ||
 1272:                                     (strcmp(chaine_fonction, "XOR") == 0)) &&
 1273:                                     (strcmp((*((struct_fonction *)
 1274:                                     (*(*l_element_courant).donnee).objet))
 1275:                                     .nom_fonction, "AND") == 0))
 1276:                             {
 1277:                                 parentheses_groupe_gauche = 2;
 1278:                             }
 1279:                         }
 1280: 
 1281:                         liberation(s_etat_processus, s_sous_objet_3);
 1282: 
 1283:                         chaine_sauvegarde = (*s_etat_processus)
 1284:                                 .instruction_courante;
 1285: 
 1286:                         if (((*s_etat_processus).instruction_courante =
 1287:                                 (unsigned char *) malloc((strlen(
 1288:                                 (unsigned char *) (*s_sous_objet_2).objet) + 2
 1289:                                 + 1) * sizeof(unsigned char))) == NULL)
 1290:                         {
 1291:                             (*s_etat_processus).instruction_courante =
 1292:                                     chaine_sauvegarde;
 1293:                             (*s_etat_processus).erreur_systeme =
 1294:                                     d_es_allocation_memoire;
 1295:                             return(NULL);
 1296:                         }
 1297: 
 1298:                         sprintf((*s_etat_processus).instruction_courante,
 1299:                                 "'%s'", (unsigned char *)
 1300:                                 (*s_sous_objet_2).objet);
 1301: 
 1302:                         (*s_etat_processus).type_en_cours = NON;
 1303:                         recherche_type(s_etat_processus);
 1304: 
 1305:                         if ((*s_etat_processus).erreur_execution != d_ex)
 1306:                         {
 1307:                             // Aucune erreur d'exécution ne peut être
 1308:                             // retournée, car l'argument est cohérent.
 1309: 
 1310:                             return(NULL);
 1311:                         }
 1312: 
 1313:                         if (depilement(s_etat_processus, &((*s_etat_processus)
 1314:                                 .l_base_pile), &s_sous_objet_3) == d_erreur)
 1315:                         {
 1316:                             return(NULL);
 1317:                         }
 1318: 
 1319:                         free((*s_etat_processus).instruction_courante);
 1320: 
 1321:                         (*s_etat_processus).instruction_courante =
 1322:                                 chaine_sauvegarde;
 1323: 
 1324:                         if ((*s_sous_objet_3).type == ALG)
 1325:                         {
 1326:                             l_atome = (struct_liste_chainee *)
 1327:                                     (*s_sous_objet_3).objet;
 1328:                             chaine_fonction = "";
 1329: 
 1330:                             while(l_atome != NULL)
 1331:                             {
 1332:                                 if ((*(*l_atome).donnee).type == FCT)
 1333:                                 {
 1334:                                     if (strcmp((*((struct_fonction *)
 1335:                                             (*(*l_atome).donnee).objet))
 1336:                                             .nom_fonction, ">>") != 0)
 1337:                                     {
 1338:                                         chaine_fonction = (*((struct_fonction *)
 1339:                                                 (*(*l_atome).donnee).objet))
 1340:                                                 .nom_fonction;
 1341:                                     }
 1342:                                 }
 1343: 
 1344:                                 l_atome = (*l_atome).suivant;
 1345:                             }
 1346: 
 1347:                             if (((strcmp(chaine_fonction, "OR") == 0) ||
 1348:                                     (strcmp(chaine_fonction, "EQV") == 0) ||
 1349:                                     (strcmp(chaine_fonction, "XOR") == 0)) &&
 1350:                                     (strcmp((*((struct_fonction *)
 1351:                                     (*(*l_element_courant).donnee).objet))
 1352:                                     .nom_fonction, "AND") == 0))
 1353:                             {
 1354:                                 parentheses_groupe_droit = 2;
 1355:                             }
 1356:                         }
 1357: 
 1358:                         liberation(s_etat_processus, s_sous_objet_3);
 1359: 
 1360:                         if (((*s_sous_objet).objet = malloc((strlen(
 1361:                                 (unsigned char *) (*s_sous_objet_1).objet) +
 1362:                                 strlen((*((struct_fonction *)
 1363:                                 (*(*l_element_courant).donnee).objet))
 1364:                                 .nom_fonction) + strlen((unsigned char *)
 1365:                                 (*s_sous_objet_2).objet) + 2 + 1 +
 1366:                                 ((size_t) parentheses_groupe_gauche) +
 1367:                                 ((size_t) parentheses_groupe_droit)) *
 1368:                                 sizeof(unsigned char))) == NULL)
 1369:                         {
 1370:                             (*s_etat_processus).erreur_systeme =
 1371:                                     d_es_allocation_memoire;
 1372:                             return(NULL);
 1373:                         }
 1374: 
 1375:                         sprintf((unsigned char *) (*s_sous_objet).objet,
 1376:                                 (parentheses_groupe_gauche == 0)
 1377:                                 ? ((parentheses_groupe_droit == 0)
 1378:                                     ? "%s %s %s"
 1379:                                     : "%s %s (%s)")
 1380:                                 : ((parentheses_groupe_droit == 0)
 1381:                                     ? "(%s) %s %s"
 1382:                                     : "(%s) %s (%s)"),
 1383:                                 (unsigned char *) (*s_sous_objet_1)
 1384:                                 .objet, (*((struct_fonction *)
 1385:                                 (*(*l_element_courant).donnee).objet))
 1386:                                 .nom_fonction, (unsigned char *)
 1387:                                 (*s_sous_objet_2).objet);
 1388: 
 1389:                         liberation(s_etat_processus, s_sous_objet_1);
 1390:                         liberation(s_etat_processus, s_sous_objet_2);
 1391: 
 1392:                         if (empilement(s_etat_processus, &((*s_etat_processus)
 1393:                                 .l_base_pile), s_sous_objet) == d_erreur)
 1394:                         {
 1395:                             (*s_etat_processus).erreur_systeme =
 1396:                                     d_es_allocation_memoire;
 1397:                             return(NULL);
 1398:                         }
 1399:                     }
 1400:                     else
 1401:                     {
 1402:                         nombre_arguments = (*((struct_fonction *)
 1403:                                 (*(*l_element_courant).donnee).objet))
 1404:                                 .nombre_arguments;
 1405: 
 1406:                         if ((chaine = (unsigned char *)
 1407:                                 malloc(sizeof(unsigned char))) == NULL)
 1408:                         {
 1409:                             (*s_etat_processus).erreur_systeme =
 1410:                                     d_es_allocation_memoire;
 1411:                             return(NULL);
 1412:                         }
 1413:                         
 1414:                         chaine[0] = d_code_fin_chaine;
 1415: 
 1416:                         for(i = 0; i < nombre_arguments; i++)
 1417:                         {
 1418:                             if ((nombre_arguments - i) > 1)
 1419:                             {
 1420:                                 l_liste1 = (*s_etat_processus).l_base_pile;
 1421: 
 1422:                                 for(j = 2; j < (nombre_arguments - i); j++)
 1423:                                 {
 1424:                                     l_liste1 = (*l_liste1).suivant;
 1425:                                 }
 1426: 
 1427:                                 l_liste2 = (*l_liste1).suivant;
 1428:                                 (*l_liste1).suivant = (*l_liste2).suivant;
 1429:                                 (*l_liste2).suivant = (*s_etat_processus)
 1430:                                         .l_base_pile;
 1431:                                 (*s_etat_processus).l_base_pile = l_liste2;
 1432:                             }
 1433:                             
 1434:                             if (depilement(s_etat_processus,
 1435:                                     &((*s_etat_processus).l_base_pile),
 1436:                                     &s_sous_objet) == d_erreur)
 1437:                             {
 1438:                                 return(NULL);
 1439:                             }
 1440: 
 1441:                             chaine_sauvegarde = chaine;
 1442: 
 1443:                             if (strlen(chaine_sauvegarde) == 0)
 1444:                             {
 1445:                                 if ((chaine = (unsigned char *) malloc((strlen(
 1446:                                         (unsigned char *) (*s_sous_objet).objet)
 1447:                                         + 1) * sizeof(unsigned char))) == NULL)
 1448:                                 {
 1449:                                     (*s_etat_processus).erreur_systeme =
 1450:                                             d_es_allocation_memoire;
 1451:                                     return(NULL);
 1452:                                 }
 1453: 
 1454:                                 sprintf(chaine, "%s", (unsigned char *)
 1455:                                         (*s_sous_objet).objet);
 1456:                             }
 1457:                             else
 1458:                             {
 1459:                                 if ((chaine = (unsigned char *) malloc((strlen(
 1460:                                         chaine_sauvegarde) + 1 + strlen(
 1461:                                         (unsigned char *) (*s_sous_objet).objet)
 1462:                                         + 1) * sizeof(unsigned char))) == NULL)
 1463:                                 {
 1464:                                     (*s_etat_processus).erreur_systeme =
 1465:                                             d_es_allocation_memoire;
 1466:                                     return(NULL);
 1467:                                 }
 1468: 
 1469:                                 sprintf(chaine, "%s,%s", chaine_sauvegarde,
 1470:                                         (unsigned char *) (*s_sous_objet)
 1471:                                         .objet);
 1472:                             }
 1473: 
 1474:                             free(chaine_sauvegarde);
 1475:                             liberation(s_etat_processus, s_sous_objet);
 1476:                         }
 1477: 
 1478:                         chaine_sauvegarde = chaine;
 1479: 
 1480:                         if ((chaine = (unsigned char *) malloc((strlen(
 1481:                                 (*((struct_fonction *) (*(*l_element_courant)
 1482:                                 .donnee).objet)).nom_fonction) + 2 +
 1483:                                 strlen(chaine_sauvegarde) + 1) *
 1484:                                 sizeof(unsigned char))) == NULL)
 1485:                         {
 1486:                             (*s_etat_processus).erreur_systeme =
 1487:                                     d_es_allocation_memoire;
 1488:                             return(NULL);
 1489:                         }
 1490: 
 1491:                         sprintf(chaine, "%s(%s)", (*((struct_fonction *)
 1492:                                 (*(*l_element_courant).donnee).objet))
 1493:                                 .nom_fonction, chaine_sauvegarde);
 1494:                         free(chaine_sauvegarde);
 1495: 
 1496:                         if ((s_sous_objet = allocation(s_etat_processus, CHN))
 1497:                                 == NULL)
 1498:                         {
 1499:                             (*s_etat_processus).erreur_systeme =
 1500:                                     d_es_allocation_memoire;
 1501:                             return(NULL);
 1502:                         }
 1503: 
 1504:                         (*s_sous_objet).objet = chaine;
 1505: 
 1506:                         if (empilement(s_etat_processus, &((*s_etat_processus)
 1507:                                 .l_base_pile), s_sous_objet) == d_erreur)
 1508:                         {
 1509:                             return(NULL);
 1510:                         }
 1511:                     }
 1512:                 }
 1513:             }
 1514:             else
 1515:             {
 1516:                 if ((s_sous_objet = allocation(s_etat_processus, CHN))
 1517:                         == NULL)
 1518:                 {
 1519:                     (*s_etat_processus).erreur_systeme =
 1520:                             d_es_allocation_memoire;
 1521:                     return(NULL);
 1522:                 }
 1523: 
 1524:                 if (((*s_sous_objet).objet = formateur(
 1525:                         s_etat_processus, 0, (*l_element_courant).donnee))
 1526:                         == NULL)
 1527:                 {
 1528:                     (*s_etat_processus).erreur_systeme =
 1529:                             d_es_allocation_memoire;
 1530:                     return(NULL);
 1531:                 }
 1532: 
 1533:                 if (((*(*l_element_courant).donnee).type == ALG)
 1534:                         || (((*(*l_element_courant).donnee).type == NOM)
 1535:                         && ((*((struct_nom *) (*(*l_element_courant)
 1536:                         .donnee).objet)).symbole == d_vrai)))
 1537:                 {
 1538:                     chaine_sauvegarde = (unsigned char *) (*s_sous_objet).objet;
 1539: 
 1540:                     if (((*s_sous_objet).objet = malloc((strlen(
 1541:                             chaine_sauvegarde) - 1) *
 1542:                             sizeof(unsigned char))) == NULL)
 1543:                     {
 1544:                         (*s_etat_processus).erreur_systeme =
 1545:                                 d_es_allocation_memoire;
 1546:                         return(NULL);
 1547:                     }
 1548: 
 1549:                     ptrl = chaine_sauvegarde;
 1550:                     ptre = (unsigned char *) (*s_sous_objet).objet;
 1551: 
 1552:                     for(ptrl++, i = ((integer8) strlen(chaine_sauvegarde)) - 2;
 1553:                             i > 0; i--, *ptre++ = *ptrl++);
 1554: 
 1555:                     (*ptre) = d_code_fin_chaine;
 1556: 
 1557:                     free(chaine_sauvegarde);
 1558:                 }
 1559:                 else if ((*(*l_element_courant).donnee).type == CHN)
 1560:                 {
 1561:                     chaine_sauvegarde = (unsigned char *) (*s_sous_objet).objet;
 1562: 
 1563:                     if (((*s_sous_objet).objet = malloc((strlen(
 1564:                             chaine_sauvegarde) + 3) *
 1565:                             sizeof(unsigned char))) == NULL)
 1566:                     {
 1567:                         (*s_etat_processus).erreur_systeme =
 1568:                                 d_es_allocation_memoire;
 1569:                         return(NULL);
 1570:                     }
 1571: 
 1572:                     sprintf((unsigned char *) (*s_sous_objet).objet,
 1573:                             "\"%s\"", chaine_sauvegarde);
 1574: 
 1575:                     free(chaine_sauvegarde);
 1576:                 }
 1577: 
 1578:                 if (empilement(s_etat_processus, &((*s_etat_processus)
 1579:                         .l_base_pile), s_sous_objet) == d_erreur)
 1580:                 {
 1581:                     return(NULL);
 1582:                 }
 1583:             }
 1584: 
 1585:             l_element_courant = (*l_element_courant).suivant;
 1586:         }
 1587: 
 1588:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1589:                 &s_sous_objet) == d_erreur)
 1590:         {
 1591:             return(NULL);
 1592:         }
 1593: 
 1594:         if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
 1595:                 (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
 1596:                 == NULL)
 1597:         {
 1598:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1599:             return(NULL);
 1600:         }
 1601: 
 1602:         sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
 1603:         liberation(s_etat_processus, s_sous_objet);
 1604:     }
 1605:     else if ((*s_objet).type == BIN)
 1606:     {
 1607: 
 1608: /*
 1609: --------------------------------------------------------------------------------
 1610:   Entier binaire en base 2, 8, 10 ou 16
 1611: --------------------------------------------------------------------------------
 1612: */
 1613: 
 1614:         masque_binaire = masque_entiers_binaires(s_etat_processus);
 1615: 
 1616:         if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
 1617:                 (test_cfsf(s_etat_processus, 44) == d_faux))
 1618:         {
 1619: 
 1620: /*
 1621: -- Base décimale ---------------------------------------------------------------
 1622: */
 1623: 
 1624:             sprintf(tampon, "%llu", (*((unsigned long long *)
 1625:                     ((*s_objet).objet))) & masque_binaire);
 1626:             strcpy(base, "d");
 1627:         }
 1628:         else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
 1629:                 (test_cfsf(s_etat_processus, 44) == d_faux))
 1630:         {
 1631: 
 1632: /*
 1633: -- Base octale -----------------------------------------------------------------
 1634: */
 1635: 
 1636:             sprintf(tampon, "%llo", (*((unsigned long long *)
 1637:                     ((*s_objet).objet))) & masque_binaire);
 1638:             strcpy(base, "o");
 1639:         }
 1640:         else if (test_cfsf(s_etat_processus, 44) == d_vrai)
 1641:         {
 1642: 
 1643: /*
 1644: -- Bases hexadécimale et binaire -----------------------------------------------
 1645: */
 1646: 
 1647:             sprintf(tampon, "%llX", (*((unsigned long long *)
 1648:                     ((*s_objet).objet))) & masque_binaire);
 1649: 
 1650:             if (test_cfsf(s_etat_processus, 43) == d_vrai)
 1651:             {
 1652:                 strcpy(base, "h");
 1653:             }
 1654:             else
 1655:             {
 1656:                 chaine = (unsigned char *) malloc((strlen(tampon) + 1)
 1657:                         * sizeof(unsigned char));
 1658: 
 1659:                 if (chaine == NULL)
 1660:                 {
 1661:                     (*s_etat_processus).erreur_systeme =
 1662:                             d_es_allocation_memoire;
 1663:                     return(NULL);
 1664:                 }
 1665: 
 1666:                 strcpy(chaine, tampon);
 1667:                 tampon[0] = 0;
 1668: 
 1669:                 for(i = 0; i < (integer8) strlen(chaine); i++)
 1670:                 {
 1671:                     switch(chaine[i])
 1672:                     {
 1673:                         case '0' :
 1674:                         {
 1675:                             strcat(tampon, (i != 0) ? "0000" : "0");
 1676:                             break;
 1677:                         }
 1678:                         case '1' :
 1679:                         {
 1680:                                 strcat(tampon, (i != 0) ? "0001" : "1");
 1681:                             break;
 1682:                         }
 1683:                         case '2' :
 1684:                         {
 1685:                             strcat(tampon, (i != 0) ? "0010" : "10");
 1686:                             break;
 1687:                         }
 1688:                         case '3' :
 1689:                         {
 1690:                             strcat(tampon, (i != 0) ? "0011" : "11");
 1691:                             break;
 1692:                         }
 1693:                         case '4' :
 1694:                         {
 1695:                             strcat(tampon, (i != 0) ? "0100" : "100");
 1696:                             break;
 1697:                         }
 1698:                         case '5' :
 1699:                         {
 1700:                             strcat(tampon, (i != 0) ? "0101" : "101");
 1701:                             break;
 1702:                         }
 1703:                         case '6' :
 1704:                         {
 1705:                             strcat(tampon, (i != 0) ? "0110" : "110");
 1706:                             break;
 1707:                         }
 1708:                         case '7' :
 1709:                         {
 1710:                             strcat(tampon, (i != 0) ? "0111" : "111");
 1711:                             break;
 1712:                         }
 1713:                         case '8' :
 1714:                         {
 1715:                             strcat(tampon, "1000");
 1716:                             break;
 1717:                         }
 1718:                         case '9' :
 1719:                         {
 1720:                             strcat(tampon, "1001");
 1721:                             break;
 1722:                         }
 1723:                         case 'A' :
 1724:                         {
 1725:                             strcat(tampon, "1010");
 1726:                             break;
 1727:                         }
 1728:                         case 'B' :
 1729:                         {
 1730:                             strcat(tampon, "1011");
 1731:                             break;
 1732:                         }
 1733:                         case 'C' :
 1734:                         {
 1735:                             strcat(tampon, "1100");
 1736:                             break;
 1737:                         }
 1738:                         case 'D' :
 1739:                         {
 1740:                             strcat(tampon, "1101");
 1741:                             break;
 1742:                         }
 1743:                         case 'E' :
 1744:                         {
 1745:                             strcat(tampon, "1110");
 1746:                             break;
 1747:                         }
 1748:                         case 'F' :
 1749:                         {
 1750:                             strcat(tampon, "1111");
 1751:                             break;
 1752:                         }
 1753:                     }
 1754:                 }
 1755: 
 1756:                 free(chaine);
 1757:                 strcpy(base, "b");
 1758:             }
 1759:         }
 1760: 
 1761:         chaine = (unsigned char *) malloc((strlen(tampon) + 4)
 1762:                 * sizeof(unsigned char));
 1763: 
 1764:         if (chaine == NULL)
 1765:         {
 1766:             (*s_etat_processus).erreur_systeme =
 1767:                     d_es_allocation_memoire;
 1768:             return(NULL);
 1769:         }
 1770: 
 1771:         strcpy(chaine, "# ");
 1772: 
 1773:         strcat(chaine, tampon);
 1774:         strcat(chaine, base);
 1775:     }
 1776:     else if ((*s_objet).type == CHN)
 1777:     {
 1778: 
 1779: /*
 1780: --------------------------------------------------------------------------------
 1781:   Chaîne de caractères
 1782: --------------------------------------------------------------------------------
 1783: */
 1784: 
 1785:         if (((*s_etat_processus).autorisation_conversion_chaine == 'Y') &&
 1786:                 (test_cfsf(s_etat_processus, 34) == d_vrai))
 1787:         {
 1788:             if ((chaine = formateur_flux(s_etat_processus,
 1789:                     (unsigned char *) (*s_objet).objet, &longueur_chaine))
 1790:                     == NULL)
 1791:             {
 1792:                 return(NULL);
 1793:             }
 1794:         }
 1795:         else
 1796:         {
 1797:             if ((chaine = malloc((strlen((unsigned char *)
 1798:                     ((*s_objet).objet)) + 1) * sizeof(unsigned char))) == NULL)
 1799:             {
 1800:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1801:                 return(NULL);
 1802:             }
 1803: 
 1804:             strcpy(chaine, (unsigned char *) ((*s_objet).objet));
 1805:         }
 1806:     }
 1807:     else if ((*s_objet).type == CPL)
 1808:     {
 1809: 
 1810: /*
 1811: --------------------------------------------------------------------------------
 1812:   Complexe
 1813: --------------------------------------------------------------------------------
 1814: */
 1815: 
 1816:         chaine_formatee = formateur_nombre(s_etat_processus,
 1817:                 ((struct_complexe16 *) ((*s_objet).objet)), 'C');
 1818: 
 1819:         if (chaine_formatee == NULL)
 1820:         {
 1821:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1822:             return(NULL);
 1823:         }
 1824: 
 1825:         chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 1826:                 + 1) * sizeof(unsigned char));
 1827: 
 1828:         if (chaine == NULL)
 1829:         {
 1830:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1831:             return(NULL);
 1832:         }
 1833: 
 1834:         strcpy(chaine, chaine_formatee);
 1835:         free(chaine_formatee);
 1836:     }
 1837:     else if ((*s_objet).type == RPN)
 1838:     {
 1839: 
 1840: /*
 1841: --------------------------------------------------------------------------------
 1842:   Définition
 1843: --------------------------------------------------------------------------------
 1844: */
 1845: 
 1846:         l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 1847:         chaine_sauvegarde = chaine;
 1848: 
 1849:         while(l_element_courant != NULL)
 1850:         {
 1851:             if ((chaine_formatee = formateur(s_etat_processus, offset_initial,
 1852:                     (*l_element_courant).donnee)) == NULL)
 1853:             {
 1854:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1855:                 return(NULL);
 1856:             }
 1857: 
 1858:             if ((*(*l_element_courant).donnee).type == CHN)
 1859:             {
 1860:                 chaine_tampon = chaine_formatee;
 1861: 
 1862:                 if ((chaine_formatee = (unsigned char *) malloc((strlen(
 1863:                         chaine_tampon) + 3) * sizeof(unsigned char))) == NULL)
 1864:                 {
 1865:                     (*s_etat_processus).erreur_systeme =
 1866:                             d_es_allocation_memoire;
 1867:                     return(NULL);
 1868:                 }
 1869: 
 1870:                 sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
 1871:                 free(chaine_tampon);
 1872:             }
 1873: 
 1874:             l_element_courant = (*l_element_courant).suivant;
 1875: 
 1876:             if (chaine != NULL)
 1877:             {
 1878:                 chaine_sauvegarde = chaine;
 1879: 
 1880:                 if ((chaine = (unsigned char *) malloc((strlen(
 1881:                         chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
 1882:                         sizeof(unsigned char))) == NULL)
 1883:                 {
 1884:                     (*s_etat_processus).erreur_systeme =
 1885:                             d_es_allocation_memoire;
 1886:                     return(NULL);
 1887:                 }
 1888: 
 1889:                 strcpy(chaine, chaine_sauvegarde);
 1890:                 free(chaine_sauvegarde);
 1891:                 strcat(chaine, " ");
 1892:                 strcat(chaine, chaine_formatee);
 1893:                 free(chaine_formatee);
 1894:             }
 1895:             else
 1896:             {
 1897:                 chaine = chaine_formatee;
 1898:             }
 1899:         }
 1900: 
 1901:         chaine_sauvegarde = chaine;
 1902:         chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
 1903:                 sizeof(unsigned char));
 1904: 
 1905:         if (chaine == NULL)
 1906:         {
 1907:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1908:             return(NULL);
 1909:         }
 1910: 
 1911:         chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
 1912:         strcpy(chaine, chaine_sauvegarde);
 1913:         free(chaine_sauvegarde);
 1914:     }
 1915:     else if ((*s_objet).type == INT)
 1916:     {
 1917: 
 1918: /*
 1919: --------------------------------------------------------------------------------
 1920:   Entier
 1921: --------------------------------------------------------------------------------
 1922: */
 1923: 
 1924:         chaine_formatee = formateur_nombre(s_etat_processus,
 1925:                 ((integer8 *) ((*s_objet).objet)), 'I');
 1926: 
 1927:         if (chaine_formatee == NULL)
 1928:         {
 1929:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1930:             return(NULL);
 1931:         }
 1932: 
 1933:         chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 1934:                 * sizeof(unsigned char));
 1935: 
 1936:         if (chaine == NULL)
 1937:         {
 1938:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1939:             return(NULL);
 1940:         }
 1941: 
 1942:         strcpy(chaine, chaine_formatee);
 1943:         free(chaine_formatee);
 1944:     }
 1945:     else if ((*s_objet).type == FCT)
 1946:     {
 1947: 
 1948: /*
 1949: --------------------------------------------------------------------------------
 1950:   Fonction
 1951: --------------------------------------------------------------------------------
 1952: */
 1953: 
 1954:         chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
 1955:                 ((*s_objet).objet))).nom_fonction) + 1) *
 1956:                 sizeof(unsigned char));
 1957: 
 1958:         if (chaine == NULL)
 1959:         {
 1960:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1961:             return(NULL);
 1962:         }
 1963: 
 1964:         strcpy(chaine, (unsigned char *) (*((struct_fonction *)
 1965:                 ((*s_objet).objet))).nom_fonction);
 1966:     }
 1967:     else if ((*s_objet).type == TBL)
 1968:     {
 1969: 
 1970: /*
 1971: --------------------------------------------------------------------------------
 1972:   Tableau
 1973: --------------------------------------------------------------------------------
 1974: */
 1975: 
 1976:         chaine = (unsigned char *) malloc(4 * sizeof(unsigned char));
 1977: 
 1978:         if (chaine == NULL)
 1979:         {
 1980:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1981:             return(NULL);
 1982:         }
 1983: 
 1984:         strcpy(chaine, "<[ ");
 1985:         offset = ((integer8) strlen(chaine)) + offset_initial;
 1986: 
 1987:         for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
 1988:                 .nombre_elements; i++)
 1989:         {
 1990:             chaine_sauvegarde = chaine;
 1991:             chaine_formatee = formateur(s_etat_processus, (long) offset,
 1992:                     (*((struct_tableau *) (*s_objet).objet)).elements[i]);
 1993: 
 1994:             if (chaine_formatee == NULL)
 1995:             {
 1996:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1997:                 return(NULL);
 1998:             }
 1999: 
 2000:             if ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
 2001:                     .type == CHN)
 2002:             {
 2003:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2004:                         + strlen(chaine_sauvegarde) + 3)
 2005:                         * sizeof(unsigned char));
 2006: 
 2007:                 if (chaine == NULL)
 2008:                 {
 2009:                     (*s_etat_processus).erreur_systeme =
 2010:                             d_es_allocation_memoire;
 2011:                     return(NULL);
 2012:                 }
 2013: 
 2014:                 strcpy(chaine, chaine_sauvegarde);
 2015:                 free(chaine_sauvegarde);
 2016:                 strcat(chaine, "\"");
 2017:                 strcat(chaine, chaine_formatee);
 2018:                 free(chaine_formatee);
 2019:                 strcat(chaine, "\"");
 2020:             }
 2021:             else if ((*(*((struct_tableau *) (*s_objet).objet))
 2022:                     .elements[i]).type == CHN)
 2023:             {
 2024:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2025:                         + strlen(chaine_sauvegarde) + 1)
 2026:                         * sizeof(unsigned char));
 2027: 
 2028:                 if (chaine == NULL)
 2029:                 {
 2030:                     (*s_etat_processus).erreur_systeme =
 2031:                             d_es_allocation_memoire;
 2032:                     return(NULL);
 2033:                 }
 2034: 
 2035:                 sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 2036:                 free(chaine_sauvegarde);
 2037:                 free(chaine_formatee);
 2038:             }
 2039:             else
 2040:             {
 2041:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2042:                         + strlen(chaine_sauvegarde) + 1)
 2043:                         * sizeof(unsigned char));
 2044: 
 2045:                 if (chaine == NULL)
 2046:                 {
 2047:                     (*s_etat_processus).erreur_systeme =
 2048:                             d_es_allocation_memoire;
 2049:                     return(NULL);
 2050:                 }
 2051: 
 2052:                 sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 2053:                 free(chaine_sauvegarde);
 2054:                 free(chaine_formatee);
 2055:             }
 2056: 
 2057:             if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2058:             {
 2059:                 chaine_sauvegarde = chaine;
 2060: 
 2061:                 chaine = (unsigned char *) malloc(
 2062:                         (strlen(chaine_sauvegarde) + 2)
 2063:                         * sizeof(unsigned char));
 2064: 
 2065:                 if (chaine == NULL)
 2066:                 {
 2067:                     (*s_etat_processus).erreur_systeme =
 2068:                             d_es_allocation_memoire;
 2069:                     return(NULL);
 2070:                 }
 2071: 
 2072:                 strcpy(chaine, chaine_sauvegarde);
 2073:                 free(chaine_sauvegarde);
 2074:                 strcat(chaine, "\n");
 2075: 
 2076:                 if ((*((struct_tableau *) (*s_objet).objet))
 2077:                         .nombre_elements != (i + 1))
 2078:                 {
 2079:                     chaine_sauvegarde = chaine;
 2080: 
 2081:                     chaine = (unsigned char *) malloc(
 2082:                             (strlen(chaine_sauvegarde) + 1 + ((size_t) offset))
 2083:                             * sizeof(unsigned char));
 2084: 
 2085:                     if (chaine == NULL)
 2086:                     {
 2087:                         (*s_etat_processus).erreur_systeme =
 2088:                                 d_es_allocation_memoire;
 2089:                         return(NULL);
 2090:                     }
 2091: 
 2092:                     strcpy(chaine, chaine_sauvegarde);
 2093:                     free(chaine_sauvegarde);
 2094:                     ptre = &(chaine[strlen(chaine)]);
 2095: 
 2096:                     for(k = 0; k < offset; k++, *(ptre++) = ' ');
 2097: 
 2098:                     (*ptre) = d_code_fin_chaine;
 2099:                 }
 2100:             }
 2101:             else
 2102:             {
 2103:                 if ((*((struct_tableau *) (*s_objet).objet))
 2104:                         .nombre_elements != (i + 1))
 2105:                 {
 2106:                     chaine_sauvegarde = chaine;
 2107: 
 2108:                     chaine = (unsigned char *) malloc(
 2109:                             (strlen(chaine_sauvegarde) + 2)
 2110:                             * sizeof(unsigned char));
 2111: 
 2112:                     if (chaine == NULL)
 2113:                     {
 2114:                         (*s_etat_processus).erreur_systeme =
 2115:                                 d_es_allocation_memoire;
 2116:                         return(NULL);
 2117:                     }
 2118: 
 2119:                     strcpy(chaine, chaine_sauvegarde);
 2120:                     free(chaine_sauvegarde);
 2121:                     strcat(chaine, " ");
 2122:                 }
 2123:             }
 2124:         }
 2125: 
 2126:         if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2127:         {
 2128:             if (chaine[strlen(chaine) - 1] == '\n')
 2129:             {
 2130:                 chaine[strlen(chaine) - 1] = d_code_fin_chaine;
 2131:             }
 2132:         }
 2133: 
 2134:         if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements != 0)
 2135:         {
 2136:             chaine_sauvegarde = chaine;
 2137:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 2138:                     * sizeof(unsigned char));
 2139: 
 2140:             if (chaine == NULL)
 2141:             {
 2142:                 (*s_etat_processus).erreur_systeme =
 2143:                         d_es_allocation_memoire;
 2144:                 return(NULL);
 2145:             }
 2146: 
 2147:             strcpy(chaine, chaine_sauvegarde);
 2148:             free(chaine_sauvegarde);
 2149:             strcat(chaine, " ]>");
 2150:         }
 2151:         else
 2152:         {
 2153:             chaine_sauvegarde = chaine;
 2154:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
 2155:                     * sizeof(unsigned char));
 2156: 
 2157:             if (chaine == NULL)
 2158:             {
 2159:                 (*s_etat_processus).erreur_systeme =
 2160:                         d_es_allocation_memoire;
 2161:                 return(NULL);
 2162:             }
 2163: 
 2164:             strcpy(chaine, chaine_sauvegarde);
 2165:             free(chaine_sauvegarde);
 2166:             strcat(chaine, "]>");
 2167:         }
 2168:     }
 2169:     else if ((*s_objet).type == LST)
 2170:     {
 2171: 
 2172: /*
 2173: --------------------------------------------------------------------------------
 2174:   Liste
 2175: --------------------------------------------------------------------------------
 2176: */
 2177: 
 2178:         chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2179: 
 2180:         if (chaine == NULL)
 2181:         {
 2182:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2183:             return(NULL);
 2184:         }
 2185: 
 2186:         strcpy(chaine, "{ ");
 2187: 
 2188:         l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
 2189:         nombre_elements = 0;
 2190:         offset = ((integer8) strlen(chaine)) + offset_initial;
 2191: 
 2192:         while(l_element_courant != NULL)
 2193:         {
 2194:             chaine_sauvegarde = chaine;
 2195:             chaine_formatee = formateur(s_etat_processus, (long) offset,
 2196:                     (*l_element_courant).donnee);
 2197: 
 2198:             if (chaine_formatee == NULL)
 2199:             {
 2200:                 (*s_etat_processus).erreur_systeme =
 2201:                         d_es_allocation_memoire;
 2202:                 return(NULL);
 2203:             }
 2204: 
 2205:             if ((*(*l_element_courant).donnee).type == CHN)
 2206:             {
 2207:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2208:                         + strlen(chaine_sauvegarde) + 3)
 2209:                         * sizeof(unsigned char));
 2210: 
 2211:                 if (chaine == NULL)
 2212:                 {
 2213:                     (*s_etat_processus).erreur_systeme =
 2214:                             d_es_allocation_memoire;
 2215:                     return(NULL);
 2216:                 }
 2217: 
 2218:                 strcpy(chaine, chaine_sauvegarde);
 2219:                 free(chaine_sauvegarde);
 2220:                 strcat(chaine, "\"");
 2221:                 strcat(chaine, chaine_formatee);
 2222:                 free(chaine_formatee);
 2223:                 strcat(chaine, "\"");
 2224:             }
 2225:             else if ((*(*l_element_courant).donnee).type == NOM)
 2226:             {
 2227:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2228:                         + strlen(chaine_sauvegarde) + 1)
 2229:                         * sizeof(unsigned char));
 2230: 
 2231:                 if (chaine == NULL)
 2232:                 {
 2233:                     (*s_etat_processus).erreur_systeme =
 2234:                             d_es_allocation_memoire;
 2235:                     return(NULL);
 2236:                 }
 2237: 
 2238:                 sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 2239:                 free(chaine_sauvegarde);
 2240:                 free(chaine_formatee);
 2241:             }
 2242:             else
 2243:             {
 2244:                 chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 2245:                         + strlen(chaine_sauvegarde) + 1)
 2246:                         * sizeof(unsigned char));
 2247: 
 2248:                 if (chaine == NULL)
 2249:                 {
 2250:                     (*s_etat_processus).erreur_systeme =
 2251:                             d_es_allocation_memoire;
 2252:                     return(NULL);
 2253:                 }
 2254: 
 2255:                 sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 2256:                 free(chaine_sauvegarde);
 2257:                 free(chaine_formatee);
 2258:             }
 2259: 
 2260:             if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2261:             {
 2262:                 chaine_sauvegarde = chaine;
 2263: 
 2264:                 chaine = (unsigned char *) malloc(
 2265:                         (strlen(chaine_sauvegarde) + 2)
 2266:                         * sizeof(unsigned char));
 2267: 
 2268:                 if (chaine == NULL)
 2269:                 {
 2270:                     (*s_etat_processus).erreur_systeme =
 2271:                             d_es_allocation_memoire;
 2272:                     return(NULL);
 2273:                 }
 2274: 
 2275:                 strcpy(chaine, chaine_sauvegarde);
 2276:                 free(chaine_sauvegarde);
 2277:                 strcat(chaine, "\n");
 2278: 
 2279:                 if ((*l_element_courant).suivant != NULL)
 2280:                 {
 2281:                     chaine_sauvegarde = chaine;
 2282: 
 2283:                     chaine = (unsigned char *) malloc(
 2284:                             (strlen(chaine_sauvegarde) + 1 + ((size_t) offset))
 2285:                             * sizeof(unsigned char));
 2286: 
 2287:                     if (chaine == NULL)
 2288:                     {
 2289:                         (*s_etat_processus).erreur_systeme =
 2290:                                 d_es_allocation_memoire;
 2291:                         return(NULL);
 2292:                     }
 2293: 
 2294:                     strcpy(chaine, chaine_sauvegarde);
 2295:                     free(chaine_sauvegarde);
 2296:                     ptre = &(chaine[strlen(chaine)]);
 2297: 
 2298:                     for(k = 0; k < offset; k++, *(ptre++) = ' ');
 2299: 
 2300:                     (*ptre) = d_code_fin_chaine;
 2301:                 }
 2302:             }
 2303:             else
 2304:             {
 2305:                 if ((*l_element_courant).suivant != NULL)
 2306:                 {
 2307:                     chaine_sauvegarde = chaine;
 2308: 
 2309:                     chaine = (unsigned char *) malloc(
 2310:                             (strlen(chaine_sauvegarde) + 2)
 2311:                             * sizeof(unsigned char));
 2312: 
 2313:                     if (chaine == NULL)
 2314:                     {
 2315:                         (*s_etat_processus).erreur_systeme =
 2316:                                 d_es_allocation_memoire;
 2317:                         return(NULL);
 2318:                     }
 2319: 
 2320:                     strcpy(chaine, chaine_sauvegarde);
 2321:                     free(chaine_sauvegarde);
 2322:                     strcat(chaine, " ");
 2323:                 }
 2324:             }
 2325: 
 2326:             nombre_elements++;
 2327:             l_element_courant = (*l_element_courant).suivant;
 2328:         }
 2329: 
 2330:         if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2331:         {
 2332:             if (chaine[strlen(chaine) - 1] == '\n')
 2333:             {
 2334:                 chaine[strlen(chaine) - 1] = d_code_fin_chaine;
 2335:             }
 2336:         }
 2337: 
 2338:         if (nombre_elements != 0)
 2339:         {
 2340:             chaine_sauvegarde = chaine;
 2341:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
 2342:                     * sizeof(unsigned char));
 2343: 
 2344:             if (chaine == NULL)
 2345:             {
 2346:                 (*s_etat_processus).erreur_systeme =
 2347:                         d_es_allocation_memoire;
 2348:                 return(NULL);
 2349:             }
 2350: 
 2351:             strcpy(chaine, chaine_sauvegarde);
 2352:             free(chaine_sauvegarde);
 2353:             strcat(chaine, " }");
 2354:         }
 2355:         else
 2356:         {
 2357:             chaine_sauvegarde = chaine;
 2358:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 2)
 2359:                     * sizeof(unsigned char));
 2360: 
 2361:             if (chaine == NULL)
 2362:             {
 2363:                 (*s_etat_processus).erreur_systeme =
 2364:                         d_es_allocation_memoire;
 2365:                 return(NULL);
 2366:             }
 2367: 
 2368:             strcpy(chaine, chaine_sauvegarde);
 2369:             free(chaine_sauvegarde);
 2370:             strcat(chaine, "}");
 2371:         }
 2372:     }
 2373:     else if ((*s_objet).type == MCX)
 2374:     {
 2375: 
 2376: /*
 2377: --------------------------------------------------------------------------------
 2378:   Matrice complexe
 2379: --------------------------------------------------------------------------------
 2380: */
 2381: 
 2382:         nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2383:                 .nombre_lignes;
 2384:         nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2385:                 .nombre_colonnes;
 2386: 
 2387:         chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2388: 
 2389:         if (chaine != NULL)
 2390:         {
 2391:             strcpy(chaine, "[[");
 2392:             offset = ((integer8) strlen(chaine)) + offset_initial - 1;
 2393: 
 2394:             if ((longueurs_maximales = malloc(sizeof(integer8) * 2 *
 2395:                     ((size_t) nombre_colonnes))) == NULL)
 2396:             {
 2397:                 (*s_etat_processus).erreur_systeme =
 2398:                         d_es_allocation_memoire;
 2399:                 return(NULL);
 2400:             }
 2401: 
 2402:             if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2403:             {
 2404:                 for(j = 0; j < (2 * nombre_colonnes); j++)
 2405:                 {
 2406:                     longueurs_maximales[j] = 0;
 2407:                 }
 2408: 
 2409:                 for(i = 0; i < nombre_lignes; i++)
 2410:                 {
 2411:                     for(j = 0; j < nombre_colonnes; j++)
 2412:                     {
 2413:                         chaine_formatee = formateur_nombre(s_etat_processus,
 2414:                                 &(((struct_complexe16 **)
 2415:                                 ((*((struct_matrice *)
 2416:                                 ((*s_objet).objet))).tableau))[i][j]), 'C');
 2417: 
 2418:                         if (chaine_formatee == NULL)
 2419:                         {
 2420:                             (*s_etat_processus).erreur_systeme =
 2421:                                     d_es_allocation_memoire;
 2422:                             return(NULL);
 2423:                         }
 2424: 
 2425:                         longueur_courante = (integer8) strlen(chaine_formatee);
 2426:                         longueur_decimale_courante = 0;
 2427: 
 2428:                         if ((ptrl = index(chaine_formatee,
 2429:                                 (test_cfsf(s_etat_processus, 48) == d_vrai)
 2430:                                 ? '.' : ',')) != NULL)
 2431:                         {
 2432:                             longueur_decimale_courante = longueur_courante
 2433:                                     - (ptrl - chaine_formatee);
 2434:                             longueur_courante = ptrl - chaine_formatee;
 2435:                         }
 2436: 
 2437:                         free(chaine_formatee);
 2438: 
 2439:                         if (longueurs_maximales[2 * j] < longueur_courante)
 2440:                         {
 2441:                             longueurs_maximales[2 * j] = longueur_courante;
 2442:                         }
 2443: 
 2444:                         if (longueurs_maximales[(2 * j) + 1] <
 2445:                                 longueur_decimale_courante)
 2446:                         {
 2447:                             longueurs_maximales[(2 * j) + 1] =
 2448:                                     longueur_decimale_courante;
 2449:                         }
 2450:                     }
 2451:                 }
 2452:             }
 2453: 
 2454:             for(i = 0; i < nombre_lignes; i++)
 2455:             {
 2456:                 for(j = 0; j < nombre_colonnes; j++)
 2457:                 {
 2458:                     chaine_formatee = formateur_nombre(s_etat_processus,
 2459:                             &(((struct_complexe16 **)
 2460:                             ((*((struct_matrice *)
 2461:                             ((*s_objet).objet))).tableau))[i][j]), 'C');
 2462: 
 2463:                     if (chaine_formatee == NULL)
 2464:                     {
 2465:                         (*s_etat_processus).erreur_systeme =
 2466:                                 d_es_allocation_memoire;
 2467:                         return(NULL);
 2468:                     }
 2469: 
 2470:                     longueur_courante = (integer8) strlen(chaine_formatee);
 2471:                     longueur_decimale_courante = 0;
 2472: 
 2473:                     if ((ptrl = index(chaine_formatee,
 2474:                             (test_cfsf(s_etat_processus, 48) == d_vrai)
 2475:                             ? '.' : ',')) != NULL)
 2476:                     {
 2477:                         longueur_decimale_courante = longueur_courante
 2478:                                 - (ptrl - chaine_formatee);
 2479:                         longueur_courante = ptrl - chaine_formatee;
 2480:                     }
 2481: 
 2482:                     chaine_sauvegarde = chaine;
 2483: 
 2484:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2485:                     {
 2486: 
 2487:                         chaine = (unsigned char *) malloc(
 2488:                                 (strlen(chaine_sauvegarde) +
 2489:                                 ((size_t) longueur_courante) +
 2490:                                 ((size_t) longueur_decimale_courante) +
 2491:                                 ((size_t) longueurs_maximales[2 * j]) +
 2492:                                 ((size_t) longueurs_maximales[(2 * j) + 1]) + 2)
 2493:                                 * sizeof(unsigned char));
 2494: 
 2495:                         if (chaine == NULL)
 2496:                         {
 2497:                             (*s_etat_processus).erreur_systeme =
 2498:                                     d_es_allocation_memoire;
 2499:                             return(NULL);
 2500:                         }
 2501: 
 2502:                         strcpy(chaine, chaine_sauvegarde);
 2503:                         free(chaine_sauvegarde);
 2504:                         strcat(chaine, " ");
 2505: 
 2506:                         ptre = &(chaine[strlen(chaine)]);
 2507: 
 2508:                         for (k = 0; k < (longueurs_maximales[2 * j]
 2509:                                 - longueur_courante); k++, *(ptre++) = ' ');
 2510: 
 2511:                         (*ptre) = d_code_fin_chaine;
 2512:                         strcat(chaine, chaine_formatee);
 2513:                         ptre = &(chaine[strlen(chaine)]);
 2514: 
 2515:                         for(k = 0; k < (longueurs_maximales[(2 * j) + 1]
 2516:                                 - longueur_decimale_courante);
 2517:                                 k++, *(ptre++) = ' ');
 2518: 
 2519:                         (*ptre) = d_code_fin_chaine;
 2520:                     }
 2521:                     else
 2522:                     {
 2523:                         chaine = (unsigned char *) malloc(
 2524:                                 (strlen(chaine_sauvegarde) +
 2525:                                 ((size_t) longueur_courante) +
 2526:                                 ((size_t) longueur_decimale_courante)
 2527:                                 + 2) * sizeof(unsigned char));
 2528: 
 2529:                         if (chaine == NULL)
 2530:                         {
 2531:                             (*s_etat_processus).erreur_systeme =
 2532:                                     d_es_allocation_memoire;
 2533:                             return(NULL);
 2534:                         }
 2535: 
 2536:                         strcpy(chaine, chaine_sauvegarde);
 2537:                         free(chaine_sauvegarde);
 2538:                         strcat(chaine, " ");
 2539:                         strcat(chaine, chaine_formatee);
 2540:                     }
 2541: 
 2542:                     free(chaine_formatee);
 2543:                 }
 2544: 
 2545:                 chaine_sauvegarde = chaine;
 2546: 
 2547:                 if (i != (nombre_lignes - 1))
 2548:                 {
 2549:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2550:                     {
 2551:                         chaine = (unsigned char *) malloc(
 2552:                                 (strlen(chaine_sauvegarde) + 5 +
 2553:                                 ((size_t) offset)) * sizeof(unsigned char));
 2554: 
 2555:                         if (chaine == NULL)
 2556:                         {
 2557:                             (*s_etat_processus).erreur_systeme =
 2558:                                     d_es_allocation_memoire;
 2559:                             return(NULL);
 2560:                         }
 2561: 
 2562:                         strcpy(chaine, chaine_sauvegarde);
 2563:                         free(chaine_sauvegarde);
 2564:                         strcat(chaine, " ]\n");
 2565:                         ptre = &(chaine[strlen(chaine)]);
 2566: 
 2567:                         for(k = 0; k < offset; k++, *(ptre++) = ' ');
 2568: 
 2569:                         (*ptre) = d_code_fin_chaine;
 2570:                         strcat(chaine, "[");
 2571:                     }
 2572:                     else
 2573:                     {
 2574:                         chaine = (unsigned char *) malloc(
 2575:                                 (strlen(chaine_sauvegarde) + 4)
 2576:                                 * sizeof(unsigned char));
 2577: 
 2578:                         if (chaine == NULL)
 2579:                         {
 2580:                             (*s_etat_processus).erreur_systeme =
 2581:                                     d_es_allocation_memoire;
 2582:                             return(NULL);
 2583:                         }
 2584: 
 2585:                         strcpy(chaine, chaine_sauvegarde);
 2586:                         free(chaine_sauvegarde);
 2587:                         strcat(chaine, " ][");
 2588:                     }
 2589:                 }
 2590:             }
 2591: 
 2592:             free(longueurs_maximales);
 2593: 
 2594:             chaine_sauvegarde = chaine;
 2595:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2596:                     + 4) * sizeof(unsigned char));
 2597: 
 2598:             if (chaine == NULL)
 2599:             {
 2600:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2601:                 return(NULL);
 2602:             }
 2603: 
 2604:             strcpy(chaine, chaine_sauvegarde);
 2605:             free(chaine_sauvegarde);
 2606:             strcat(chaine, " ]]");
 2607:         }
 2608:     }
 2609:     else if ((*s_objet).type == MIN)
 2610:     {
 2611: 
 2612: /*
 2613: --------------------------------------------------------------------------------
 2614:   Matrice entière
 2615: --------------------------------------------------------------------------------
 2616: */
 2617: 
 2618:         nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2619:                 .nombre_lignes;
 2620:         nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2621:                 .nombre_colonnes;
 2622: 
 2623:         chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2624: 
 2625:         if (chaine != NULL)
 2626:         {
 2627:             strcpy(chaine, "[[");
 2628:             offset = ((integer8) strlen(chaine)) + offset_initial - 1;
 2629: 
 2630:             if ((longueurs_maximales = malloc(sizeof(integer8) *
 2631:                     ((size_t) nombre_colonnes))) == NULL)
 2632:             {
 2633:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2634:                 return(NULL);
 2635:             }
 2636: 
 2637:             if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2638:             {
 2639:                 for(j = 0; j < nombre_colonnes; j++)
 2640:                 {
 2641:                     longueurs_maximales[j] = 0;
 2642:                 }
 2643: 
 2644:                 for(i = 0; i < nombre_lignes; i++)
 2645:                 {
 2646:                     for(j = 0; j < nombre_colonnes; j++)
 2647:                     {
 2648:                         chaine_formatee = formateur_nombre(s_etat_processus,
 2649:                                 &(((integer8 **) ((*((struct_matrice *)
 2650:                                 ((*s_objet).objet))).tableau))[i][j]), 'I');
 2651: 
 2652:                         if (chaine_formatee == NULL)
 2653:                         {
 2654:                             (*s_etat_processus).erreur_systeme =
 2655:                                     d_es_allocation_memoire;
 2656:                             return(NULL);
 2657:                         }
 2658: 
 2659:                         longueur_courante = (integer8) strlen(chaine_formatee);
 2660:                         free(chaine_formatee);
 2661: 
 2662:                         if (longueurs_maximales[j] < longueur_courante)
 2663:                         {
 2664:                             longueurs_maximales[j] = longueur_courante;
 2665:                         }
 2666:                     }
 2667:                 }
 2668:             }
 2669: 
 2670:             for(i = 0; i < nombre_lignes; i++)
 2671:             {
 2672:                 for(j = 0; j < nombre_colonnes; j++)
 2673:                 {
 2674:                     chaine_formatee = formateur_nombre(s_etat_processus,
 2675:                             &(((integer8 **) ((*((struct_matrice *)
 2676:                             ((*s_objet).objet))).tableau))[i][j]), 'I');
 2677: 
 2678:                     if (chaine_formatee == NULL)
 2679:                     {
 2680:                         (*s_etat_processus).erreur_systeme =
 2681:                                 d_es_allocation_memoire;
 2682:                         return(NULL);
 2683:                     }
 2684: 
 2685:                     longueur_courante = (integer8) strlen(chaine_formatee);
 2686:                     chaine_sauvegarde = chaine;
 2687: 
 2688:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2689:                     {
 2690:                         chaine = (unsigned char *) malloc(
 2691:                                 (strlen(chaine_sauvegarde) +
 2692:                                 ((size_t) longueur_courante)
 2693:                                 + ((size_t) longueurs_maximales[j]) + 2)
 2694:                                 * sizeof(unsigned char));
 2695: 
 2696:                         if (chaine == NULL)
 2697:                         {
 2698:                             (*s_etat_processus).erreur_systeme =
 2699:                                     d_es_allocation_memoire;
 2700:                             return(NULL);
 2701:                         }
 2702: 
 2703:                         strcpy(chaine, chaine_sauvegarde);
 2704:                         free(chaine_sauvegarde);
 2705:                         strcat(chaine, " ");
 2706: 
 2707:                         ptre = &(chaine[strlen(chaine)]);
 2708: 
 2709:                         for(k = 0; k < (longueurs_maximales[j]
 2710:                                 - longueur_courante); k++, *(ptre++) = ' ');
 2711: 
 2712:                         (*ptre) = d_code_fin_chaine;
 2713:                     }
 2714:                     else
 2715:                     {
 2716:                         chaine = (unsigned char *) malloc(
 2717:                                 (strlen(chaine_sauvegarde) +
 2718:                                 ((size_t) longueur_courante)
 2719:                                 + 2) * sizeof(unsigned char));
 2720: 
 2721:                         if (chaine == NULL)
 2722:                         {
 2723:                             (*s_etat_processus).erreur_systeme =
 2724:                                     d_es_allocation_memoire;
 2725:                             return(NULL);
 2726:                         }
 2727: 
 2728:                         strcpy(chaine, chaine_sauvegarde);
 2729:                         free(chaine_sauvegarde);
 2730:                         strcat(chaine, " ");
 2731:                     }
 2732: 
 2733:                     strcat(chaine, chaine_formatee);
 2734:                     free(chaine_formatee);
 2735:                 }
 2736: 
 2737:                 chaine_sauvegarde = chaine;
 2738: 
 2739:                 if (i != (nombre_lignes - 1))
 2740:                 {
 2741:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2742:                     {
 2743:                         chaine = (unsigned char *) malloc(
 2744:                                 (strlen(chaine_sauvegarde) + 5 +
 2745:                                 ((size_t) offset)) * sizeof(unsigned char));
 2746: 
 2747:                         if (chaine == NULL)
 2748:                         {
 2749:                             (*s_etat_processus).erreur_systeme =
 2750:                                     d_es_allocation_memoire;
 2751:                             return(NULL);
 2752:                         }
 2753: 
 2754:                         strcpy(chaine, chaine_sauvegarde);
 2755:                         free(chaine_sauvegarde);
 2756:                         strcat(chaine, " ]\n");
 2757:                         ptre = &(chaine[strlen(chaine)]);
 2758: 
 2759:                         for(k = 0; k < offset; k++, *(ptre++) = ' ');
 2760: 
 2761:                         (*ptre) = d_code_fin_chaine;
 2762:                         strcat(chaine, "[");
 2763:                     }
 2764:                     else
 2765:                     {
 2766:                         chaine = (unsigned char *) malloc(
 2767:                                 (strlen(chaine_sauvegarde) + 4)
 2768:                                 * sizeof(unsigned char));
 2769: 
 2770:                         if (chaine == NULL)
 2771:                         {
 2772:                             (*s_etat_processus).erreur_systeme =
 2773:                                     d_es_allocation_memoire;
 2774:                             return(NULL);
 2775:                         }
 2776: 
 2777:                         strcpy(chaine, chaine_sauvegarde);
 2778:                         free(chaine_sauvegarde);
 2779:                         strcat(chaine, " ][");
 2780:                     }
 2781:                 }
 2782:             }
 2783: 
 2784:             free(longueurs_maximales);
 2785: 
 2786:             chaine_sauvegarde = chaine;
 2787:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 2788:                     + 4) * sizeof(unsigned char));
 2789: 
 2790:             if (chaine == NULL)
 2791:             {
 2792:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2793:                 return(NULL);
 2794:             }
 2795: 
 2796:             strcpy(chaine, chaine_sauvegarde);
 2797:             free(chaine_sauvegarde);
 2798:             strcat(chaine, " ]]");
 2799:         }
 2800:     }
 2801:     else if ((*s_objet).type == MRL)
 2802:     {
 2803: 
 2804: /*
 2805: --------------------------------------------------------------------------------
 2806:   Matrice réelle
 2807: --------------------------------------------------------------------------------
 2808: */
 2809: 
 2810:         nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
 2811:                 .nombre_lignes;
 2812:         nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
 2813:                 .nombre_colonnes;
 2814: 
 2815:         chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
 2816: 
 2817:         if (chaine != NULL)
 2818:         {
 2819:             strcpy(chaine, "[[");
 2820:             offset = ((integer8) strlen(chaine)) + offset_initial - 1;
 2821: 
 2822:             if ((longueurs_maximales = malloc(sizeof(integer8) * 2 *
 2823:                     ((size_t) nombre_colonnes))) == NULL)
 2824:             {
 2825:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2826:                 return(NULL);
 2827:             }
 2828: 
 2829:             if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2830:             {
 2831:                 for(j = 0; j < (2 * nombre_colonnes); j++)
 2832:                 {
 2833:                     longueurs_maximales[j] = 0;
 2834:                 }
 2835: 
 2836:                 for(i = 0; i < nombre_lignes; i++)
 2837:                 {
 2838:                     for(j = 0; j < nombre_colonnes; j++)
 2839:                     {
 2840:                         chaine_formatee = formateur_nombre(s_etat_processus,
 2841:                                 &(((real8 **) ((*((struct_matrice *)
 2842:                                 ((*s_objet).objet))).tableau))[i][j]), 'R');
 2843: 
 2844:                         if (chaine_formatee == NULL)
 2845:                         {
 2846:                             (*s_etat_processus).erreur_systeme =
 2847:                                     d_es_allocation_memoire;
 2848:                             return(NULL);
 2849:                         }
 2850: 
 2851:                         longueur_courante = (integer8) strlen(chaine_formatee);
 2852:                         longueur_decimale_courante = 0;
 2853: 
 2854:                         if ((ptrl = index(chaine_formatee,
 2855:                                 (test_cfsf(s_etat_processus, 48) == d_vrai)
 2856:                                 ? ',' : '.')) != NULL)
 2857:                         {
 2858:                             longueur_decimale_courante = longueur_courante
 2859:                                     - (ptrl - chaine_formatee);
 2860:                             longueur_courante = ptrl - chaine_formatee;
 2861:                         }
 2862: 
 2863:                         free(chaine_formatee);
 2864: 
 2865:                         if (longueurs_maximales[2 * j] < longueur_courante)
 2866:                         {
 2867:                             longueurs_maximales[2 * j] = longueur_courante;
 2868:                         }
 2869: 
 2870:                         if (longueurs_maximales[(2 * j) + 1] <
 2871:                                 longueur_decimale_courante)
 2872:                         {
 2873:                             longueurs_maximales[(2 * j) + 1] =
 2874:                                     longueur_decimale_courante;
 2875:                         }
 2876:                     }
 2877:                 }
 2878:             }
 2879: 
 2880:             for(i = 0; i < nombre_lignes; i++)
 2881:             {
 2882:                 for(j = 0; j < nombre_colonnes; j++)
 2883:                 {
 2884:                     chaine_formatee = formateur_nombre(s_etat_processus,
 2885:                             &(((real8 **) ((*((struct_matrice *)
 2886:                             ((*s_objet).objet))).tableau))[i][j]), 'R');
 2887: 
 2888:                     if (chaine_formatee == NULL)
 2889:                     {
 2890:                         (*s_etat_processus).erreur_systeme =
 2891:                                 d_es_allocation_memoire;
 2892:                         return(NULL);
 2893:                     }
 2894: 
 2895:                     longueur_courante = (integer8) strlen(chaine_formatee);
 2896:                     longueur_decimale_courante = 0;
 2897: 
 2898:                     if ((ptrl = index(chaine_formatee,
 2899:                             (test_cfsf(s_etat_processus, 48) == d_vrai)
 2900:                             ? ',' : '.')) != NULL)
 2901:                     {
 2902:                         longueur_decimale_courante = longueur_courante
 2903:                                 - (ptrl - chaine_formatee);
 2904:                         longueur_courante = ptrl - chaine_formatee;
 2905:                     }
 2906: 
 2907:                     chaine_sauvegarde = chaine;
 2908: 
 2909:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2910:                     {
 2911:                         chaine = (unsigned char *) malloc(
 2912:                                 (strlen(chaine_sauvegarde) +
 2913:                                 ((size_t) longueur_courante) +
 2914:                                 ((size_t) longueur_decimale_courante) +
 2915:                                 ((size_t) longueurs_maximales[2 * j]) +
 2916:                                 ((size_t) longueurs_maximales[(2 * j) + 1]) + 2)
 2917:                                 * sizeof(unsigned char));
 2918: 
 2919:                         if (chaine == NULL)
 2920:                         {
 2921:                             (*s_etat_processus).erreur_systeme =
 2922:                                     d_es_allocation_memoire;
 2923:                             return(NULL);
 2924:                         }
 2925: 
 2926:                         strcpy(chaine, chaine_sauvegarde);
 2927:                         free(chaine_sauvegarde);
 2928:                         strcat(chaine, " ");
 2929: 
 2930:                         ptre = &(chaine[strlen(chaine)]);
 2931: 
 2932:                         for(k = 0; k < (longueurs_maximales[2 * j]
 2933:                                 - longueur_courante); k++, *(ptre++) = ' ');
 2934: 
 2935:                         (*ptre) = d_code_fin_chaine;
 2936:                         strcat(chaine, chaine_formatee);
 2937:                         ptre = &(chaine[strlen(chaine)]);
 2938: 
 2939:                         for(k = 0; k < (longueurs_maximales[(2 * j) + 1]
 2940:                                 - longueur_decimale_courante);
 2941:                                 k++, *(ptre++) = ' ');
 2942: 
 2943:                         (*ptre) = d_code_fin_chaine;
 2944:                     }
 2945:                     else
 2946:                     {
 2947:                         chaine = (unsigned char *) malloc(
 2948:                                 (strlen(chaine_sauvegarde) +
 2949:                                 ((size_t) longueur_courante) +
 2950:                                 ((size_t) longueur_decimale_courante)
 2951:                                 + 2) * sizeof(unsigned char));
 2952: 
 2953:                         if (chaine == NULL)
 2954:                         {
 2955:                             (*s_etat_processus).erreur_systeme =
 2956:                                     d_es_allocation_memoire;
 2957:                             return(NULL);
 2958:                         }
 2959: 
 2960:                         strcpy(chaine, chaine_sauvegarde);
 2961:                         free(chaine_sauvegarde);
 2962:                         strcat(chaine, " ");
 2963:                         strcat(chaine, chaine_formatee);
 2964:                     }
 2965:                     
 2966:                     free(chaine_formatee);
 2967:                 }
 2968: 
 2969:                 chaine_sauvegarde = chaine;
 2970: 
 2971:                 if (i != (nombre_lignes - 1))
 2972:                 {
 2973:                     if (test_cfsf(s_etat_processus, 45) == d_vrai)
 2974:                     {
 2975:                         chaine = (unsigned char *) malloc(
 2976:                                 (strlen(chaine_sauvegarde) + 5 +
 2977:                                 ((size_t) offset)) * sizeof(unsigned char));
 2978:                         
 2979:                         if (chaine == NULL)
 2980:                         {
 2981:                             (*s_etat_processus).erreur_systeme =
 2982:                                     d_es_allocation_memoire;
 2983:                             return(NULL);
 2984:                         }
 2985: 
 2986:                         strcpy(chaine, chaine_sauvegarde);
 2987:                         free(chaine_sauvegarde);
 2988:                         strcat(chaine, " ]\n");
 2989:                         ptre = &(chaine[strlen(chaine)]);
 2990: 
 2991:                         for(k = 0; k < offset; k++, *(ptre++) = ' ');
 2992: 
 2993:                         (*ptre) = d_code_fin_chaine;
 2994:                         strcat(chaine, "[");
 2995:                     }
 2996:                     else
 2997:                     {
 2998:                         chaine = (unsigned char *) malloc(
 2999:                                 (strlen(chaine_sauvegarde) + 4)
 3000:                                 * sizeof(unsigned char));
 3001: 
 3002:                         if (chaine == NULL)
 3003:                         {
 3004:                             (*s_etat_processus).erreur_systeme =
 3005:                                     d_es_allocation_memoire;
 3006:                             return(NULL);
 3007:                         }
 3008: 
 3009:                         strcpy(chaine, chaine_sauvegarde);
 3010:                         free(chaine_sauvegarde);
 3011:                         strcat(chaine, " ][");
 3012:                     }
 3013:                 }
 3014:             }
 3015: 
 3016:             free(longueurs_maximales);
 3017: 
 3018:             chaine_sauvegarde = chaine;
 3019:             chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
 3020:                     + 4) * sizeof(unsigned char));
 3021: 
 3022:             if (chaine == NULL)
 3023:             {
 3024:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3025:                 return(NULL);
 3026:             }
 3027: 
 3028:             strcpy(chaine, chaine_sauvegarde);
 3029:             free(chaine_sauvegarde);
 3030:             strcat(chaine, " ]]");
 3031:         }
 3032:     }
 3033:     else if ((*s_objet).type == MTX)
 3034:     {
 3035:         if (alsprintf(s_etat_processus, &chaine,
 3036:                 "Mutex $ %016llX owned by $ %016llX",
 3037:                 &((*((struct_mutex *) (*s_objet).objet)).mutex),
 3038:                 (logical8) (*((struct_mutex *) (*s_objet).objet)).tid) < 0)
 3039:         {
 3040:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3041:             return(NULL);
 3042:         }
 3043:     }
 3044:     else if ((*s_objet).type == NOM)
 3045:     {
 3046: 
 3047: /*
 3048: --------------------------------------------------------------------------------
 3049:   Nom
 3050: --------------------------------------------------------------------------------
 3051: */
 3052: 
 3053:         if ((*((struct_nom *) (*s_objet).objet)).symbole == d_vrai)
 3054:         {
 3055:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 3056:                     (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
 3057: 
 3058:             if (chaine == NULL)
 3059:             {
 3060:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3061:                 return(NULL);
 3062:             }
 3063: 
 3064:             sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
 3065:         }
 3066:         else
 3067:         {
 3068:             chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
 3069:                     (*s_objet).objet)).nom) + 1) * sizeof(unsigned char));
 3070: 
 3071:             if (chaine == NULL)
 3072:             {
 3073:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3074:                 return(NULL);
 3075:             }
 3076: 
 3077:             sprintf(chaine, "%s", (*((struct_nom *) (*s_objet).objet)).nom);
 3078:         }
 3079:     }
 3080:     else if ((*s_objet).type == REL)
 3081:     {
 3082: 
 3083: /*
 3084: --------------------------------------------------------------------------------
 3085:   Réel
 3086: --------------------------------------------------------------------------------
 3087: */
 3088: 
 3089:         chaine_formatee = formateur_nombre(s_etat_processus,
 3090:                 ((real8 *) ((*s_objet).objet)), 'R');
 3091: 
 3092:         if (chaine_formatee == NULL)
 3093:         {
 3094:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3095:             return(NULL);
 3096:         }
 3097: 
 3098:         chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
 3099:                 * sizeof(unsigned char));
 3100: 
 3101:         if (chaine == NULL)
 3102:         {
 3103:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3104:             return(NULL);
 3105:         }
 3106: 
 3107:         strcpy(chaine, chaine_formatee);
 3108:         free(chaine_formatee);
 3109:     }
 3110:     else if ((*s_objet).type == VCX)
 3111:     {
 3112: 
 3113: /*
 3114: --------------------------------------------------------------------------------
 3115:   Vecteur complexe
 3116: --------------------------------------------------------------------------------
 3117: */
 3118: 
 3119:         nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 3120:                 .taille;
 3121: 
 3122:         chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 3123: 
 3124:         if (chaine != NULL)
 3125:         {
 3126:             strcpy(chaine, "[");
 3127: 
 3128:             for(i = 0; i < nombre_colonnes; i++)
 3129:             {
 3130:                 chaine_formatee = formateur_nombre(s_etat_processus,
 3131:                         &(((struct_complexe16 *) ((*((struct_vecteur *)
 3132:                         ((*s_objet).objet))).tableau))[i]), 'C');
 3133: 
 3134:                 if (chaine_formatee == NULL)
 3135:                 {
 3136:                     (*s_etat_processus).erreur_systeme =
 3137:                             d_es_allocation_memoire;
 3138:                     return(NULL);
 3139:                 }
 3140: 
 3141:                 chaine_sauvegarde = chaine;
 3142:                 chaine = (unsigned char *) malloc(
 3143:                         (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 3144:                         + 2) * sizeof(unsigned char));
 3145: 
 3146:                 if (chaine == NULL)
 3147:                 {
 3148:                     (*s_etat_processus).erreur_systeme =
 3149:                             d_es_allocation_memoire;
 3150:                     return(NULL);
 3151:                 }
 3152: 
 3153:                 strcpy(chaine, chaine_sauvegarde);
 3154:                 free(chaine_sauvegarde);
 3155:                 strcat(chaine, " ");
 3156:                 strcat(chaine, chaine_formatee);
 3157:                 free(chaine_formatee);
 3158:             }
 3159: 
 3160:             chaine_sauvegarde = chaine;
 3161:             chaine = (unsigned char *) malloc(
 3162:                     (strlen(chaine_sauvegarde) + 3)
 3163:                     * sizeof(unsigned char));
 3164: 
 3165:             if (chaine == NULL)
 3166:             {
 3167:                 (*s_etat_processus).erreur_systeme =
 3168:                         d_es_allocation_memoire;
 3169:                 return(NULL);
 3170:             }
 3171: 
 3172:             strcpy(chaine, chaine_sauvegarde);
 3173:             free(chaine_sauvegarde);
 3174:             strcat(chaine, " ]");
 3175:         }
 3176:     }
 3177:     else if ((*s_objet).type == VIN)
 3178:     {
 3179: 
 3180: /*
 3181: --------------------------------------------------------------------------------
 3182:   Vecteur entier
 3183: --------------------------------------------------------------------------------
 3184: */
 3185: 
 3186:         nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 3187:                 .taille;
 3188: 
 3189:         chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 3190: 
 3191:         if (chaine != NULL)
 3192:         {
 3193:             strcpy(chaine, "[");
 3194: 
 3195:             for(i = 0; i < nombre_colonnes; i++)
 3196:             {
 3197:                 chaine_formatee = formateur_nombre(s_etat_processus,
 3198:                         &(((integer8 *) ((*((struct_vecteur *)
 3199:                         ((*s_objet).objet))).tableau))[i]), 'I');
 3200: 
 3201:                 if (chaine_formatee == NULL)
 3202:                 {
 3203:                     (*s_etat_processus).erreur_systeme =
 3204:                             d_es_allocation_memoire;
 3205:                     return(NULL);
 3206:                 }
 3207: 
 3208:                 chaine_sauvegarde = chaine;
 3209:                 chaine = (unsigned char *) malloc(
 3210:                         (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 3211:                         + 2) * sizeof(unsigned char));
 3212: 
 3213:                 if (chaine == NULL)
 3214:                 {
 3215:                     (*s_etat_processus).erreur_systeme =
 3216:                             d_es_allocation_memoire;
 3217:                     return(NULL);
 3218:                 }
 3219: 
 3220:                 strcpy(chaine, chaine_sauvegarde);
 3221:                 free(chaine_sauvegarde);
 3222:                 strcat(chaine, " ");
 3223:                 strcat(chaine, chaine_formatee);
 3224:                 free(chaine_formatee);
 3225:             }
 3226: 
 3227:             chaine_sauvegarde = chaine;
 3228:             chaine = (unsigned char *) malloc(
 3229:                     (strlen(chaine_sauvegarde) + 3)
 3230:                     * sizeof(unsigned char));
 3231: 
 3232:             if (chaine == NULL)
 3233:             {
 3234:                 (*s_etat_processus).erreur_systeme =
 3235:                         d_es_allocation_memoire;
 3236:                 return(NULL);
 3237:             }
 3238: 
 3239:             strcpy(chaine, chaine_sauvegarde);
 3240:             free(chaine_sauvegarde);
 3241:             strcat(chaine, " ]");
 3242:         }
 3243:     }
 3244:     else if ((*s_objet).type == VRL)
 3245:     {
 3246: 
 3247: /*
 3248: --------------------------------------------------------------------------------
 3249:   Vecteur réel
 3250: --------------------------------------------------------------------------------
 3251: */
 3252: 
 3253:         nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
 3254:                 .taille;
 3255: 
 3256:         chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
 3257: 
 3258:         if (chaine != NULL)
 3259:         {
 3260:             strcpy(chaine, "[");
 3261: 
 3262:             for(i = 0; i < nombre_colonnes; i++)
 3263:             {
 3264:                 chaine_formatee = formateur_nombre(s_etat_processus,
 3265:                         &(((real8 *) ((*((struct_vecteur *)
 3266:                         ((*s_objet).objet))).tableau))[i]), 'R');
 3267: 
 3268:                 if (chaine_formatee == NULL)
 3269:                 {
 3270:                     (*s_etat_processus).erreur_systeme =
 3271:                             d_es_allocation_memoire;
 3272:                     return(NULL);
 3273:                 }
 3274: 
 3275:                 chaine_sauvegarde = chaine;
 3276:                 chaine = (unsigned char *) malloc(
 3277:                         (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
 3278:                         + 2) * sizeof(unsigned char));
 3279: 
 3280:                 if (chaine == NULL)
 3281:                 {
 3282:                     (*s_etat_processus).erreur_systeme =
 3283:                             d_es_allocation_memoire;
 3284:                     return(NULL);
 3285:                 }
 3286: 
 3287:                 strcpy(chaine, chaine_sauvegarde);
 3288:                 free(chaine_sauvegarde);
 3289:                 strcat(chaine, " ");
 3290:                 strcat(chaine, chaine_formatee);
 3291:                 free(chaine_formatee);
 3292:             }
 3293: 
 3294:             chaine_sauvegarde = chaine;
 3295:             chaine = (unsigned char *) malloc(
 3296:                     (strlen(chaine_sauvegarde) + 3)
 3297:                     * sizeof(unsigned char));
 3298: 
 3299:             if (chaine == NULL)
 3300:             {
 3301:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3302:                 return(NULL);
 3303:             }
 3304: 
 3305:             strcpy(chaine, chaine_sauvegarde);
 3306:             free(chaine_sauvegarde);
 3307:             strcat(chaine, " ]");
 3308:         }
 3309:     }
 3310:     else if ((*s_objet).type == REC)
 3311:     {
 3312:         chaine = (unsigned char *) malloc(4 * sizeof(unsigned char));
 3313: 
 3314:         if (chaine == NULL)
 3315:         {
 3316:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3317:             return(NULL);
 3318:         }
 3319: 
 3320:         strcpy(chaine, "|[ ");
 3321:         offset = ((integer8) strlen(chaine)) + offset_initial;
 3322: 
 3323:         // L'objet se compose de deux tables à une dimension de
 3324:         // mêmes tailles.
 3325: 
 3326:         chaine_sauvegarde = chaine;
 3327: 
 3328:         if ((chaine_formatee = formateur(s_etat_processus, (long) offset,
 3329:                 (*((struct_record *) (*s_objet).objet)).noms)) == NULL)
 3330:         {
 3331:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3332:             return(NULL);
 3333:         }
 3334: 
 3335:         if ((chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 3336:                 + strlen(chaine_sauvegarde) + 1)
 3337:                 * sizeof(unsigned char))) == NULL)
 3338:         {
 3339:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3340:             return(NULL);
 3341:         }
 3342: 
 3343:         sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 3344:         free(chaine_sauvegarde);
 3345:         free(chaine_formatee);
 3346: 
 3347:         if (test_cfsf(s_etat_processus, 45) == d_vrai)
 3348:         {
 3349:             chaine_sauvegarde = chaine;
 3350: 
 3351:             if ((chaine = (unsigned char *) malloc(
 3352:                     (strlen(chaine_sauvegarde) + 2) * sizeof(unsigned char)))
 3353:                     == NULL)
 3354:             {
 3355:                 (*s_etat_processus).erreur_systeme =
 3356:                         d_es_allocation_memoire;
 3357:                 return(NULL);
 3358:             }
 3359: 
 3360:             strcpy(chaine, chaine_sauvegarde);
 3361:             free(chaine_sauvegarde);
 3362:             strcat(chaine, "\n");
 3363: 
 3364:             chaine_sauvegarde = chaine;
 3365: 
 3366:             chaine = (unsigned char *) malloc(
 3367:                     (strlen(chaine_sauvegarde) + 1 + ((size_t) offset))
 3368:                     * sizeof(unsigned char));
 3369: 
 3370:             if (chaine == NULL)
 3371:             {
 3372:                 (*s_etat_processus).erreur_systeme =
 3373:                         d_es_allocation_memoire;
 3374:                 return(NULL);
 3375:             }
 3376: 
 3377:             strcpy(chaine, chaine_sauvegarde);
 3378:             free(chaine_sauvegarde);
 3379:             ptre = &(chaine[strlen(chaine)]);
 3380: 
 3381:             for(k = 0; k < offset; k++, *(ptre++) = ' ');
 3382: 
 3383:             (*ptre) = d_code_fin_chaine;
 3384:         }
 3385:         else
 3386:         {
 3387:             chaine_sauvegarde = chaine;
 3388: 
 3389:             if ((chaine = (unsigned char *) malloc(
 3390:                     (strlen(chaine_sauvegarde) + 2)
 3391:                     * sizeof(unsigned char))) == NULL)
 3392:             {
 3393:                 (*s_etat_processus).erreur_systeme =
 3394:                         d_es_allocation_memoire;
 3395:                 return(NULL);
 3396:             }
 3397: 
 3398:             strcpy(chaine, chaine_sauvegarde);
 3399:             free(chaine_sauvegarde);
 3400:             strcat(chaine, " ");
 3401:         }
 3402: 
 3403:         chaine_sauvegarde = chaine;
 3404: 
 3405:         if ((chaine_formatee = formateur(s_etat_processus, (long) offset,
 3406:                 (*((struct_record *) (*s_objet).objet)).donnees)) == NULL)
 3407:         {
 3408:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3409:             return(NULL);
 3410:         }
 3411: 
 3412:         if ((chaine = (unsigned char *) malloc((strlen(chaine_formatee)
 3413:                 + strlen(chaine_sauvegarde) + 1)
 3414:                 * sizeof(unsigned char))) == NULL)
 3415:         {
 3416:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3417:             return(NULL);
 3418:         }
 3419: 
 3420:         sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
 3421:         free(chaine_sauvegarde);
 3422:         free(chaine_formatee);
 3423: 
 3424:         chaine_sauvegarde = chaine;
 3425:         chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
 3426:                 * sizeof(unsigned char));
 3427: 
 3428:         if (chaine == NULL)
 3429:         {
 3430:             (*s_etat_processus).erreur_systeme =
 3431:                     d_es_allocation_memoire;
 3432:             return(NULL);
 3433:         }
 3434: 
 3435:         strcpy(chaine, chaine_sauvegarde);
 3436:         free(chaine_sauvegarde);
 3437:         strcat(chaine, " ]|");
 3438:     }
 3439:     else if ((*s_objet).type == NON)
 3440:     {
 3441:         if ((chaine = malloc((strlen("System object") + 1)
 3442:                 * sizeof(unsigned char))) == NULL)
 3443:         {
 3444:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3445:             return(NULL);
 3446:         }
 3447: 
 3448:         strcpy(chaine, "System object");
 3449:     }
 3450:     else if ((*s_objet).type == EXT)
 3451:     {
 3452:         l_element_courant = (*s_etat_processus).s_bibliotheques;
 3453: 
 3454:         while(l_element_courant != NULL)
 3455:         {
 3456:             if ((*((struct_bibliotheque *) (*l_element_courant).donnee))
 3457:                     .descripteur == (*s_objet).descripteur_bibliotheque)
 3458:             {
 3459:                 if ((__type_disp = dlsym((*s_objet).descripteur_bibliotheque,
 3460:                         "__type_disp")) == NULL)
 3461:                 {
 3462:                     // Symbole externe non affichable
 3463: 
 3464:                     if ((chaine = malloc((strlen(
 3465:                             "External symbol (disp function not found)") + 1)
 3466:                             * sizeof(unsigned char))) == NULL)
 3467:                     {
 3468:                         (*s_etat_processus).erreur_systeme =
 3469:                                 d_es_allocation_memoire;
 3470:                         return(NULL);
 3471:                     }
 3472: 
 3473:                     strcpy(chaine, "External symbol (disp function not found)");
 3474:                 }
 3475:                 else
 3476:                 {
 3477:                     // Symbole externe affichable
 3478:                     void        **arg;
 3479: 
 3480:                     arg = (void **) &s_objet;
 3481:                     __type_disp(s_etat_processus, arg);
 3482:                     chaine = (unsigned char *) (*arg);
 3483:                 }
 3484: 
 3485:                 break;
 3486:             }
 3487: 
 3488:             l_element_courant = (*l_element_courant).suivant;
 3489:         }
 3490: 
 3491:         if (l_element_courant == NULL)
 3492:         {
 3493:             // Symbole externe non affichable
 3494: 
 3495:             if ((chaine = malloc((strlen("External symbol") + 1)
 3496:                     * sizeof(unsigned char))) == NULL)
 3497:             {
 3498:                 (*s_etat_processus).erreur_systeme =
 3499:                         d_es_allocation_memoire;
 3500:                 return(NULL);
 3501:             }
 3502: 
 3503:             strcpy(chaine, "External symbol");
 3504:         }
 3505:     }
 3506:     else
 3507:     {
 3508:         BUG(1, uprintf("Unknown symbol type\n"));
 3509:     }
 3510: 
 3511:     return(chaine);
 3512: }
 3513: 
 3514: 
 3515: /*
 3516: ================================================================================
 3517:   Routines qui transforment un nombre entier, réel ou complexe en chaîne de
 3518:   caractères suivant le format courant
 3519: ================================================================================
 3520:   Entrées : pointeur générique sur la donnée numérique à convertir,
 3521:   type de l'entité (I, R ou C).
 3522: --------------------------------------------------------------------------------
 3523:   Sorties : chaîne de caractères allouée dans la routine
 3524: --------------------------------------------------------------------------------
 3525:   Effets de bord : néant
 3526: ================================================================================
 3527: */
 3528: 
 3529: /*
 3530: --------------------------------------------------------------------------------
 3531:   Formatage des complexes, réels et entiers
 3532: --------------------------------------------------------------------------------
 3533: */
 3534: 
 3535: unsigned char *
 3536: formateur_nombre(struct_processus *s_etat_processus,
 3537:         void *valeur_numerique, unsigned char type)
 3538: {
 3539:     unsigned char               *chaine;
 3540:     unsigned char               *construction_chaine;
 3541:     unsigned char               *sauvegarde;
 3542:     unsigned char               *tampon;
 3543: 
 3544:     chaine = NULL;
 3545: 
 3546:     switch(type)
 3547:     {
 3548:         case 'C' :
 3549:         {
 3550:             construction_chaine = (unsigned char *) malloc(
 3551:                     2 * sizeof(unsigned char));
 3552: 
 3553:             if (construction_chaine == NULL)
 3554:             {
 3555:                 (*s_etat_processus).erreur_systeme =
 3556:                         d_es_allocation_memoire;
 3557:                 return(NULL);
 3558:             }
 3559: 
 3560:             strcpy(construction_chaine, "(");
 3561: 
 3562:             tampon = formateur_reel(s_etat_processus,
 3563:                     &((*((struct_complexe16 *)
 3564:                     valeur_numerique)).partie_reelle), 'R');
 3565: 
 3566:             if (tampon == NULL)
 3567:             {
 3568:                 (*s_etat_processus).erreur_systeme =
 3569:                         d_es_allocation_memoire;
 3570:                 return(NULL);
 3571:             }
 3572: 
 3573:             sauvegarde = construction_chaine;
 3574: 
 3575:             construction_chaine = (unsigned char *) malloc(
 3576:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 3577:                     * sizeof(unsigned char));
 3578: 
 3579:             if (construction_chaine == NULL)
 3580:             {
 3581:                 (*s_etat_processus).erreur_systeme =
 3582:                         d_es_allocation_memoire;
 3583:                 return(NULL);
 3584:             }
 3585: 
 3586:             strcpy(construction_chaine, sauvegarde);
 3587:             free(sauvegarde);
 3588:             strcat(construction_chaine, tampon);
 3589:             free(tampon);
 3590: 
 3591:             if (test_cfsf(s_etat_processus, 48) == d_faux)
 3592:             {
 3593:                 strcat(construction_chaine, ",");
 3594:             }
 3595:             else
 3596:             {
 3597:                 strcat(construction_chaine, ".");
 3598:             }
 3599: 
 3600:             tampon = formateur_reel(s_etat_processus,
 3601:                     &((*((struct_complexe16 *)
 3602:                     valeur_numerique)).partie_imaginaire), 'R');
 3603: 
 3604:             if (tampon == NULL)
 3605:             {
 3606:                 (*s_etat_processus).erreur_systeme =
 3607:                         d_es_allocation_memoire;
 3608:                 return(NULL);
 3609:             }
 3610: 
 3611:             sauvegarde = construction_chaine;
 3612: 
 3613:             construction_chaine = (unsigned char *) malloc(
 3614:                     (strlen(sauvegarde) + strlen(tampon) + 2)
 3615:                     * sizeof(unsigned char));
 3616: 
 3617:             if (construction_chaine == NULL)
 3618:             {
 3619:                 (*s_etat_processus).erreur_systeme =
 3620:                         d_es_allocation_memoire;
 3621:                 return(NULL);
 3622:             }
 3623: 
 3624:             strcpy(construction_chaine, sauvegarde);
 3625:             free(sauvegarde);
 3626:             strcat(construction_chaine, tampon);
 3627:             free(tampon);
 3628:             strcat(construction_chaine, ")");
 3629: 
 3630:             chaine = construction_chaine;
 3631: 
 3632:             break;
 3633:         }
 3634: 
 3635:         case 'R' :
 3636:         {
 3637:             chaine = formateur_reel(s_etat_processus, valeur_numerique, 'R');
 3638: 
 3639:             if (chaine == NULL)
 3640:             {
 3641:                 (*s_etat_processus).erreur_systeme =
 3642:                         d_es_allocation_memoire;
 3643:                 return(NULL);
 3644:             }
 3645: 
 3646:             break;
 3647:         }
 3648: 
 3649:         default :
 3650:         case 'I' :
 3651:         {
 3652:             chaine = formateur_reel(s_etat_processus, valeur_numerique, 'I');
 3653: 
 3654:             if (chaine == NULL)
 3655:             {
 3656:                 (*s_etat_processus).erreur_systeme =
 3657:                         d_es_allocation_memoire;
 3658:                 return(NULL);
 3659:             }
 3660: 
 3661:             break;
 3662:         }
 3663:     }
 3664: 
 3665:     return(chaine);
 3666: }
 3667: 
 3668: 
 3669: /*
 3670: --------------------------------------------------------------------------------
 3671:   Formateur des réels et entiers
 3672: --------------------------------------------------------------------------------
 3673: */
 3674: 
 3675: unsigned char *
 3676: formateur_reel(struct_processus *s_etat_processus,
 3677:         void *valeur_numerique, unsigned char type)
 3678: {
 3679:     real8                   mantisse;
 3680:     real8                   tampon_reel;
 3681: 
 3682:     integer8                tampon_entier;
 3683: 
 3684:     logical1                i49;
 3685:     logical1                i50;
 3686: 
 3687:     long                    correction;
 3688:     long                    dernier_chiffre_significatif;
 3689:     long                    exposant;
 3690:     long                    i;
 3691:     long                    j;
 3692:     long                    longueur_utile;
 3693:     long                    longueur_utile_limite;
 3694: 
 3695:     unsigned char           *chaine;
 3696:     unsigned char           format[32 + 1];
 3697:     unsigned char           mode[3 + 1];
 3698:     unsigned char           *ptr;
 3699:     unsigned char           tampon[32 + 1];
 3700: 
 3701:     chaine = (unsigned char *) malloc((32 + 1) * sizeof(unsigned char));
 3702: 
 3703:     if (chaine == NULL)
 3704:     {
 3705:         (*s_etat_processus).erreur_systeme =
 3706:                 d_es_allocation_memoire;
 3707:         return(NULL);
 3708:     }
 3709: 
 3710:     if (type == 'R')
 3711:     {
 3712: #       ifdef FP_INFINITE
 3713:         int     signe;
 3714: 
 3715:         if ((signe = isinf((*((real8 *) valeur_numerique)))) != 0)
 3716:         {
 3717:             if (signe > 0)
 3718:             {
 3719:                 strcpy(chaine, "infinity");
 3720:             }
 3721:             else
 3722:             {
 3723:                 strcpy(chaine, "-infinity");
 3724:             }
 3725: 
 3726:             return(chaine);
 3727:         }
 3728: #       endif
 3729: 
 3730:         if (isnan((*((real8 *) valeur_numerique))))
 3731:         {
 3732:             strcpy(chaine, "undef");
 3733:             return(chaine);
 3734:         }
 3735: 
 3736:         tampon_reel = *((real8 *) valeur_numerique);
 3737: 
 3738:         if (tampon_reel > ((real8) 0))
 3739:         {
 3740:             exposant = (long) floor(log10(tampon_reel));
 3741:         }
 3742:         else if (tampon_reel < ((real8) 0))
 3743:         {
 3744:             exposant = (long) floor(log10(-tampon_reel));
 3745:         }
 3746:         else
 3747:         {
 3748:             exposant = 0;
 3749:         }
 3750: 
 3751:         mantisse = (*((real8 *) valeur_numerique)) / pow(10, (double) exposant);
 3752:     }
 3753:     else
 3754:     {
 3755:         tampon_entier = *((integer8 *) valeur_numerique);
 3756: 
 3757:         if (tampon_entier > ((integer8) 0))
 3758:         {
 3759:             exposant = (long) floor(log10((double) tampon_entier));
 3760:         }
 3761:         else if (tampon_entier < ((integer8) 0))
 3762:         {
 3763:             if (tampon_entier != INT64_MIN)
 3764:             {
 3765:                 exposant = (long) floor(log10((double) -tampon_entier));
 3766:             }
 3767:             else
 3768:             {
 3769:                 tampon_reel = (real8) tampon_entier;
 3770:                 exposant = (long) floor(log10(-tampon_reel));
 3771:             }
 3772:         }
 3773:         else
 3774:         {
 3775:             exposant = 0;
 3776:         }
 3777: 
 3778:         mantisse = ((real8) (*((integer8 *) valeur_numerique))) /
 3779:                 pow(10, (double) exposant);
 3780:     }
 3781: 
 3782:     longueur_utile = 0;
 3783:     j = 1;
 3784: 
 3785:     for(i = 53; i <= 56; i++)
 3786:     {
 3787:         longueur_utile += (test_cfsf(s_etat_processus, (unsigned char) i)
 3788:                 == d_vrai) ? j : 0;
 3789:         j *= 2;
 3790:     }
 3791: 
 3792:     longueur_utile_limite = 15;
 3793: 
 3794:     if (longueur_utile > longueur_utile_limite)
 3795:     {
 3796:         longueur_utile = longueur_utile_limite;
 3797:     }
 3798: 
 3799:     i49 = test_cfsf(s_etat_processus, 49);
 3800:     i50 = test_cfsf(s_etat_processus, 50);
 3801: 
 3802:     if (i49 == d_faux)
 3803:     {
 3804:         if (i50 == d_faux)
 3805:         {
 3806: 
 3807: /*
 3808: --------------------------------------------------------------------------------
 3809:   Mode standard
 3810: --------------------------------------------------------------------------------
 3811: */
 3812: 
 3813:             strcpy(mode, "STD");
 3814:         }
 3815:         else
 3816:         {
 3817: 
 3818: /*
 3819: --------------------------------------------------------------------------------
 3820:   Mode scientifique
 3821: --------------------------------------------------------------------------------
 3822: */
 3823: 
 3824:             strcpy(mode, "SCI");
 3825:         }
 3826:     }
 3827:     else
 3828:     {
 3829:         if (i50 == d_faux)
 3830:         {
 3831: 
 3832: /*
 3833: --------------------------------------------------------------------------------
 3834:   Mode fixe
 3835: --------------------------------------------------------------------------------
 3836: */
 3837: 
 3838:             strcpy(mode, "FIX");
 3839:         }
 3840:         else
 3841:         {
 3842: 
 3843: /*
 3844: --------------------------------------------------------------------------------
 3845:   Mode ingénieur
 3846: --------------------------------------------------------------------------------
 3847: */
 3848: 
 3849:             strcpy(mode, "ENG");
 3850:         }
 3851:     }
 3852: 
 3853:     // Test portant sur le nombre de chiffres significatifs dans
 3854:     // le cas du format STD pour que 1.2E-15 apparaisse en notation
 3855:     // SCI car il y a une perte de précision dans l'affichage.
 3856: 
 3857:     if ((strcmp(mode, "STD") == 0) && (type == 'R'))
 3858:     {
 3859:         if (abs(*((real8 *) valeur_numerique)) < 1)
 3860:         {
 3861:             dernier_chiffre_significatif = -exposant;
 3862:             sprintf(tampon, ".%f", mantisse);
 3863: 
 3864:             ptr = &(tampon[strlen(tampon) - 1]);
 3865: 
 3866:             while((*ptr) != '.')
 3867:             {
 3868:                 if ((*ptr) != '0')
 3869:                 {
 3870:                     dernier_chiffre_significatif++;
 3871:                 }
 3872: 
 3873:                 ptr--;
 3874:             }
 3875:         }
 3876:         else
 3877:         {
 3878:             dernier_chiffre_significatif = 0;
 3879:         }
 3880:     }
 3881:     else
 3882:     {
 3883:         dernier_chiffre_significatif = 0;
 3884:     }
 3885: 
 3886:     if ((strcmp(mode, "SCI") == 0) ||
 3887:             ((strcmp(mode, "STD") == 0) && ((exposant >
 3888:             longueur_utile_limite) || (dernier_chiffre_significatif > 15) ||
 3889:             (exposant < -longueur_utile_limite))) ||
 3890:             ((strcmp(mode, "FIX") == 0) &&
 3891:             ((exposant >= longueur_utile_limite) ||
 3892:             (exposant < -longueur_utile))))
 3893:     {
 3894:         chaine[0] = d_code_fin_chaine;
 3895:         format[0] = d_code_fin_chaine;
 3896: 
 3897:         if (strcmp(mode, "STD") == 0)
 3898:         {
 3899:             longueur_utile = longueur_utile_limite - 1;
 3900:         }
 3901: 
 3902:         sprintf(format, "%%.%luf", longueur_utile);
 3903:         sprintf(tampon, format, mantisse);
 3904:         strcpy(chaine, tampon);
 3905: 
 3906:         if (strcmp(mode, "STD") == 0)
 3907:         {
 3908:             ptr = &(chaine[strlen(chaine) - 1]);
 3909:             while(((*ptr) == '0') || ((*ptr) == '.'))
 3910:             {
 3911:                 (*ptr) = d_code_fin_chaine;
 3912:                 ptr--;
 3913:             }
 3914:         }
 3915: 
 3916:         strcat(chaine, "E");
 3917:         sprintf(tampon, "%ld", exposant);
 3918:         strcat(chaine, tampon);
 3919:     }
 3920:     else if (strcmp(mode, "FIX") == 0)
 3921:     {
 3922:         chaine[0] = d_code_fin_chaine;
 3923:         format[0] = d_code_fin_chaine;
 3924: 
 3925:         if (longueur_utile + exposant >= longueur_utile_limite)
 3926:         {
 3927:             longueur_utile = longueur_utile_limite - (exposant + 1);
 3928:         }
 3929: 
 3930:         sprintf(format, "%%.%luf", longueur_utile);
 3931: 
 3932:         sprintf(tampon, format, (mantisse * pow(10, (double) exposant)));
 3933:         strcpy(chaine, tampon);
 3934:     }
 3935:     else if (strcmp(mode, "ENG") == 0)
 3936:     {
 3937:         chaine[0] = d_code_fin_chaine;
 3938:         format[0] = d_code_fin_chaine;
 3939: 
 3940:         correction = labs(exposant) % 3;
 3941: 
 3942:         if (exposant < 0)
 3943:         {
 3944:             if (correction == 0)
 3945:             {
 3946:                 correction = 3;
 3947:             }
 3948: 
 3949:             correction =  3 - correction;
 3950:         }
 3951: 
 3952:         longueur_utile -= correction;
 3953:         sprintf(format, "%%.%luf", longueur_utile);
 3954: 
 3955:         sprintf(tampon, format, (mantisse * pow(10, (double) correction)));
 3956:         strcpy(chaine, tampon);
 3957:         strcat(chaine, "E");
 3958:         sprintf(tampon, "%ld", (exposant - correction));
 3959:         strcat(chaine, tampon);
 3960:     }
 3961:     else
 3962:     {
 3963:         if (type == 'I')
 3964:         {
 3965:             chaine[0] = d_code_fin_chaine;
 3966:             sprintf(tampon, "%lld", *((integer8 *) valeur_numerique));
 3967:         }
 3968:         else
 3969:         {
 3970:             chaine[0] = d_code_fin_chaine;
 3971:             format[0] = d_code_fin_chaine;
 3972: 
 3973:             if (exposant >= 0)
 3974:             {
 3975:                 if ((exposant + 1) < longueur_utile_limite)
 3976:                 {
 3977:                     sprintf(format, "%%.%luf", (longueur_utile_limite - exposant
 3978:                             - 1));
 3979:                 }
 3980:                 else
 3981:                 {
 3982:                     strcpy(format, "%.0f.");
 3983:                 }
 3984:             }
 3985:             else
 3986:             {
 3987:                 sprintf(format, "%%.%luf", longueur_utile_limite);
 3988:             }
 3989: 
 3990:             sprintf(tampon, format, *((real8 *) valeur_numerique));
 3991: 
 3992:             i = ((long) strlen(tampon)) - 1;
 3993:             while(tampon[i] == '0')
 3994:             {
 3995:                 tampon[i] = d_code_fin_chaine;
 3996:                 i--;
 3997:             }
 3998: 
 3999:             if (ds_imposition_separateur_decimal == d_faux)
 4000:             {
 4001:                 i = ((long) strlen(tampon)) - 1;
 4002:                 if (tampon[i] == '.')
 4003:                 {
 4004:                     tampon[i] = d_code_fin_chaine;
 4005:                 }
 4006:             }
 4007:         }
 4008: 
 4009:         strcpy(chaine, tampon);
 4010:     }
 4011: 
 4012:     if (test_cfsf(s_etat_processus, 48) == d_vrai)
 4013:     {
 4014:         for(i = 0; i < (long) strlen(chaine); i++)
 4015:         {
 4016:             if (chaine[i] == '.')
 4017:             {
 4018:                 chaine[i] = ',';
 4019:             }
 4020:         }
 4021:     }
 4022: 
 4023:     return(chaine);
 4024: }
 4025: 
 4026: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>