Annotation of rpl/src/instructions_d3.c, revision 1.1

1.1     ! bertrand    1: /*
        !             2: ================================================================================
        !             3:   RPL/2 (R) version 4.0.9
        !             4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
        !             5: 
        !             6:   This file is part of RPL/2.
        !             7: 
        !             8:   RPL/2 is free software; you can redistribute it and/or modify it
        !             9:   under the terms of the CeCILL V2 License as published by the french
        !            10:   CEA, CNRS and INRIA.
        !            11:  
        !            12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
        !            13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
        !            14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
        !            15:   for more details.
        !            16:  
        !            17:   You should have received a copy of the CeCILL License
        !            18:   along with RPL/2. If not, write to info@cecill.info.
        !            19: ================================================================================
        !            20: */
        !            21: 
        !            22: 
        !            23: #include "rpl.conv.h"
        !            24: 
        !            25: 
        !            26: /*
        !            27: ================================================================================
        !            28:   Fonction 'draw'
        !            29: ================================================================================
        !            30:   Entrées : pointeur sur une structure struct_processus
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_draw(struct_processus *s_etat_processus)
        !            40: {
        !            41:    file                        *entree_standard;
        !            42:    file                        *fichier;
        !            43: 
        !            44:    int                         dimensions;
        !            45: 
        !            46:    logical1                    last_valide;
        !            47:    logical1                    premiere_iteration;
        !            48:    logical1                    presence_variable;
        !            49:    logical1                    retour_suite_erreur;
        !            50: 
        !            51:    long                        hauteur_pile;
        !            52:    long                        i;
        !            53: 
        !            54:    real8                       borne_maximale_x;
        !            55:    real8                       borne_maximale_y;
        !            56:    real8                       borne_minimale_x;
        !            57:    real8                       borne_minimale_y;
        !            58:    real8                       dernier_point_valide[3];
        !            59:    real8                       r;
        !            60:    real8                       t;
        !            61:    real8                       x;
        !            62:    real8                       y;
        !            63: 
        !            64:    struct_fichier_graphique    *l_fichier_courant;
        !            65:    struct_fichier_graphique    *l_fichier_precedent;
        !            66: 
        !            67:    struct_liste_chainee        *l_element_courant;
        !            68: 
        !            69:    struct_liste_pile_systeme   *l_position_normale;
        !            70: 
        !            71:    struct_objet                *s_objet;
        !            72:    struct_objet                *s_objet_evalue;
        !            73: 
        !            74:    struct_variable             s_variable_x;
        !            75:    struct_variable             s_variable_y;
        !            76: 
        !            77:    unsigned char               mode_evaluation_expression;
        !            78:    unsigned char               *nom_fichier;
        !            79:    unsigned char               *nom_fichier_converti;
        !            80:    unsigned char               *nom_x;
        !            81:    unsigned char               *nom_y;
        !            82: 
        !            83:    unsigned long               niveau_courant;
        !            84: 
        !            85:    (*s_etat_processus).erreur_execution = d_ex;
        !            86: 
        !            87:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            88:    {
        !            89:        printf("\n  DRAW ");
        !            90: 
        !            91:        if ((*s_etat_processus).langue == 'F')
        !            92:        {
        !            93:            printf("(trace un graphe)\n\n");
        !            94:            printf("  Aucun argument\n");
        !            95:        }
        !            96:        else
        !            97:        {
        !            98:            printf("(plot a graphic)\n\n");
        !            99:            printf("  No argument\n");
        !           100:        }
        !           101: 
        !           102:        return;
        !           103:    }
        !           104:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           105:    {
        !           106:        (*s_etat_processus).nombre_arguments = -1;
        !           107:        return;
        !           108:    }
        !           109: 
        !           110:    if ((last_valide = test_cfsf(s_etat_processus, 31)) == d_vrai)
        !           111:    {
        !           112:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           113:        {
        !           114:            return;
        !           115:        }
        !           116: 
        !           117:        cf(s_etat_processus, 31);
        !           118:    }
        !           119: 
        !           120:    /*
        !           121:     * Tracé y=f(x)
        !           122:     * Les bornes de variation de X sont données dans l'ordre
        !           123:     * - soit sous la forme "{ X X_min X_max } INDEP" ;
        !           124:     * - soit par les parties réelles de PMIN et PMAX.
        !           125:     * INDEP et DEPND testent leurs arguments pour que les pointeurs
        !           126:     * indep et depend désignent des objets de type NOM ou LST à
        !           127:     * trois éléments.
        !           128:     */
        !           129: 
        !           130:    if ((strcmp((*s_etat_processus).type_trace_eq, "FONCTION") == 0) ||
        !           131:            (strcmp((*s_etat_processus).type_trace_eq, "ECHANTILLONS") == 0))
        !           132:    {
        !           133:        dimensions = 2;
        !           134: 
        !           135:        /*
        !           136:         * Vérification de la présence de la variable globale EQ
        !           137:         */
        !           138:        
        !           139:        if (recherche_variable(s_etat_processus, "EQ") == d_faux)
        !           140:        {
        !           141:            /*
        !           142:             * Aucune variable "EQ" n'existe.
        !           143:             */
        !           144: 
        !           145:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !           146:            (*s_etat_processus).erreur_systeme = d_es;
        !           147: 
        !           148:            if (last_valide == d_vrai)
        !           149:            {
        !           150:                sf(s_etat_processus, 31);
        !           151:            }
        !           152: 
        !           153:            return;
        !           154:        }
        !           155: 
        !           156:        /*
        !           157:         * Recherche de la variable globale "EQ"
        !           158:         */
        !           159:        
        !           160:        i = (*s_etat_processus).position_variable_courante;
        !           161:        presence_variable = d_faux;
        !           162: 
        !           163:        while(i >= 0)
        !           164:        {
        !           165:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !           166:                    "EQ") == 0) && ((*s_etat_processus)
        !           167:                    .s_liste_variables[i].niveau == 1))
        !           168:            {
        !           169:                presence_variable = d_vrai;
        !           170:                break;
        !           171:            }
        !           172: 
        !           173:            i--;
        !           174:        }
        !           175: 
        !           176:        if (presence_variable == d_faux)
        !           177:        {
        !           178:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !           179: 
        !           180:            if (last_valide == d_vrai)
        !           181:            {
        !           182:                sf(s_etat_processus, 31);
        !           183:            }
        !           184: 
        !           185:            return;
        !           186:        }
        !           187: 
        !           188:        if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
        !           189:        {
        !           190:            (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
        !           191:            return;
        !           192:        }
        !           193: 
        !           194:        /*
        !           195:         * Création du fichier graphique temporaire
        !           196:         */
        !           197: 
        !           198:        if ((nom_fichier = creation_nom_fichier(s_etat_processus,
        !           199:                (*s_etat_processus).chemin_fichiers_temporaires)) == NULL)
        !           200:        {
        !           201:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           202:            return;
        !           203:        }
        !           204: 
        !           205:        if ((fichier = fopen(nom_fichier, "w+")) == NULL)
        !           206:        {
        !           207:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           208:            return;
        !           209:        }
        !           210: 
        !           211:        /*
        !           212:         * Récupération du domaine de variation de x
        !           213:         */
        !           214: 
        !           215:        if ((*(*s_etat_processus).indep).type == LST)
        !           216:        {
        !           217:            l_element_courant = (*(*s_etat_processus).indep).objet;
        !           218: 
        !           219:            if ((s_variable_x.nom = malloc((strlen((*((struct_nom *)
        !           220:                    (*(*l_element_courant).donnee).objet)).nom) + 1) *
        !           221:                    sizeof(unsigned char))) == NULL)
        !           222:            {
        !           223:                if (fclose(fichier) != 0)
        !           224:                {
        !           225:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           226:                    return;
        !           227:                }
        !           228: 
        !           229:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           230:                {
        !           231:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           232:                    return;
        !           233:                }
        !           234: 
        !           235:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           236:                return;
        !           237:            }
        !           238: 
        !           239:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*l_element_courant)
        !           240:                    .donnee).objet)).nom);
        !           241: 
        !           242:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1) *
        !           243:                    sizeof(unsigned char))) == NULL)
        !           244:            {
        !           245:                if (fclose(fichier) != 0)
        !           246:                {
        !           247:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           248:                    return;
        !           249:                }
        !           250: 
        !           251:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           252:                {
        !           253:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           254:                    return;
        !           255:                }
        !           256: 
        !           257:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           258:                return;
        !           259:            }
        !           260: 
        !           261:            strcpy(nom_x, s_variable_x.nom);
        !           262: 
        !           263:            l_element_courant = (*l_element_courant).suivant;
        !           264: 
        !           265:            if ((*(*l_element_courant).donnee).type == INT)
        !           266:            {
        !           267:                borne_minimale_x = (real8) (*((integer8 *)
        !           268:                        (*(*l_element_courant).donnee).objet));
        !           269:            }
        !           270:            else if ((*(*l_element_courant).donnee).type == REL)
        !           271:            {
        !           272:                borne_minimale_x = (*((real8 *) (*(*l_element_courant)
        !           273:                        .donnee).objet));
        !           274:            }
        !           275:            else
        !           276:            {
        !           277:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !           278:                        'N') == d_erreur)
        !           279:                {
        !           280:                    free(s_variable_x.nom);
        !           281:                    free(nom_x);
        !           282: 
        !           283:                    if (fclose(fichier) != 0)
        !           284:                    {
        !           285:                        (*s_etat_processus).erreur_systeme =
        !           286:                                d_es_erreur_fichier;
        !           287:                        return;
        !           288:                    }
        !           289: 
        !           290:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           291:                    {
        !           292:                        (*s_etat_processus).erreur_systeme =
        !           293:                                d_es_erreur_fichier;
        !           294:                        return;
        !           295:                    }
        !           296: 
        !           297:                    if (last_valide == d_vrai)
        !           298:                    {
        !           299:                        sf(s_etat_processus, 31);
        !           300:                    }
        !           301: 
        !           302:                    free(nom_fichier);
        !           303:                    return;
        !           304:                }
        !           305: 
        !           306:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !           307:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !           308:                {
        !           309:                    free(s_variable_x.nom);
        !           310:                    free(nom_x);
        !           311: 
        !           312:                    if (fclose(fichier) != 0)
        !           313:                    {
        !           314:                        (*s_etat_processus).erreur_systeme =
        !           315:                                d_es_erreur_fichier;
        !           316:                        return;
        !           317:                    }
        !           318: 
        !           319:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           320:                    {
        !           321:                        (*s_etat_processus).erreur_systeme =
        !           322:                                d_es_erreur_fichier;
        !           323:                        return;
        !           324:                    }
        !           325: 
        !           326:                    (*s_etat_processus).erreur_execution =
        !           327:                            d_ex_manque_argument;
        !           328: 
        !           329:                    if (last_valide == d_vrai)
        !           330:                    {
        !           331:                        sf(s_etat_processus, 31);
        !           332:                    }
        !           333: 
        !           334:                    free(nom_fichier);
        !           335:                    return;
        !           336:                }
        !           337: 
        !           338:                if ((*s_objet_evalue).type == INT)
        !           339:                {
        !           340:                    borne_minimale_x = (real8) (*((integer8 *)
        !           341:                            (*s_objet_evalue).objet));
        !           342:                }
        !           343:                else if ((*s_objet_evalue).type == REL)
        !           344:                {
        !           345:                    borne_minimale_x = (*((real8 *) (*s_objet_evalue).objet));
        !           346:                }
        !           347:                else
        !           348:                {
        !           349:                    if (fclose(fichier) != 0)
        !           350:                    {
        !           351:                        (*s_etat_processus).erreur_systeme =
        !           352:                                d_es_erreur_fichier;
        !           353:                        return;
        !           354:                    }
        !           355: 
        !           356:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           357:                    {
        !           358:                        (*s_etat_processus).erreur_systeme =
        !           359:                                d_es_erreur_fichier;
        !           360:                        return;
        !           361:                    }
        !           362: 
        !           363:                    free(s_variable_x.nom);
        !           364:                    free(nom_x);
        !           365:                    free(nom_fichier);
        !           366:                    liberation(s_etat_processus, s_objet_evalue);
        !           367: 
        !           368:                    if (last_valide == d_vrai)
        !           369:                    {
        !           370:                        sf(s_etat_processus, 31);
        !           371:                    }
        !           372: 
        !           373:                    (*s_etat_processus).erreur_execution =
        !           374:                            d_ex_erreur_type_argument;
        !           375:                    return;
        !           376:                }
        !           377: 
        !           378:                liberation(s_etat_processus, s_objet_evalue);
        !           379:            }
        !           380: 
        !           381:            l_element_courant = (*l_element_courant).suivant;
        !           382: 
        !           383:            if ((*(*l_element_courant).donnee).type == INT)
        !           384:            {
        !           385:                borne_maximale_x = (real8) (*((integer8 *)
        !           386:                        (*(*l_element_courant).donnee).objet));
        !           387:            }
        !           388:            else if ((*(*l_element_courant).donnee).type == REL)
        !           389:            {
        !           390:                borne_maximale_x = (*((real8 *) (*(*l_element_courant)
        !           391:                        .donnee).objet));
        !           392:            }
        !           393:            else
        !           394:            {
        !           395:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !           396:                        'N') == d_erreur)
        !           397:                {
        !           398:                    free(s_variable_x.nom);
        !           399:                    free(nom_x);
        !           400: 
        !           401:                    if (fclose(fichier) != 0)
        !           402:                    {
        !           403:                        (*s_etat_processus).erreur_systeme =
        !           404:                                d_es_erreur_fichier;
        !           405:                        return;
        !           406:                    }
        !           407: 
        !           408:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           409:                    {
        !           410:                        (*s_etat_processus).erreur_systeme =
        !           411:                                d_es_erreur_fichier;
        !           412:                        return;
        !           413:                    }
        !           414: 
        !           415:                    if (last_valide == d_vrai)
        !           416:                    {
        !           417:                        sf(s_etat_processus, 31);
        !           418:                    }
        !           419: 
        !           420:                    free(nom_fichier);
        !           421:                    return;
        !           422:                }
        !           423: 
        !           424:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !           425:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !           426:                {
        !           427:                    free(s_variable_x.nom);
        !           428:                    free(nom_x);
        !           429: 
        !           430:                    if (fclose(fichier) != 0)
        !           431:                    {
        !           432:                        (*s_etat_processus).erreur_systeme =
        !           433:                                d_es_erreur_fichier;
        !           434:                        return;
        !           435:                    }
        !           436: 
        !           437:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           438:                    {
        !           439:                        (*s_etat_processus).erreur_systeme =
        !           440:                                d_es_erreur_fichier;
        !           441:                        return;
        !           442:                    }
        !           443: 
        !           444:                    (*s_etat_processus).erreur_execution =
        !           445:                            d_ex_manque_argument;
        !           446: 
        !           447:                    if (last_valide == d_vrai)
        !           448:                    {
        !           449:                        sf(s_etat_processus, 31);
        !           450:                    }
        !           451: 
        !           452:                    free(nom_fichier);
        !           453:                    return;
        !           454:                }
        !           455: 
        !           456:                if ((*s_objet_evalue).type == INT)
        !           457:                {
        !           458:                    borne_maximale_x = (real8) (*((integer8 *)
        !           459:                            (*s_objet_evalue).objet));
        !           460:                }
        !           461:                else if ((*s_objet_evalue).type == REL)
        !           462:                {
        !           463:                    borne_maximale_x = (*((real8 *) (*s_objet_evalue).objet));
        !           464:                }
        !           465:                else
        !           466:                {
        !           467:                    free(s_variable_x.nom);
        !           468:                    free(nom_x);
        !           469: 
        !           470:                    if (fclose(fichier) != 0)
        !           471:                    {
        !           472:                        (*s_etat_processus).erreur_systeme =
        !           473:                                d_es_erreur_fichier;
        !           474:                        return;
        !           475:                    }
        !           476: 
        !           477:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !           478:                    {
        !           479:                        (*s_etat_processus).erreur_systeme =
        !           480:                                d_es_erreur_fichier;
        !           481:                        return;
        !           482:                    }
        !           483: 
        !           484:                    liberation(s_etat_processus, s_objet_evalue);
        !           485: 
        !           486:                    (*s_etat_processus).erreur_execution =
        !           487:                            d_ex_erreur_type_argument;
        !           488: 
        !           489:                    if (last_valide == d_vrai)
        !           490:                    {
        !           491:                        sf(s_etat_processus, 31);
        !           492:                    }
        !           493: 
        !           494:                    free(nom_fichier);
        !           495:                    return;
        !           496:                }
        !           497: 
        !           498:                liberation(s_etat_processus, s_objet_evalue);
        !           499:            }
        !           500:        }
        !           501:        else
        !           502:        {
        !           503:            if ((s_variable_x.nom =
        !           504:                    malloc((strlen((*((struct_nom *) (*(*s_etat_processus)
        !           505:                    .indep).objet)).nom) + 1) * sizeof(unsigned char))) == NULL)
        !           506:            {
        !           507:                if (fclose(fichier) != 0)
        !           508:                {
        !           509:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           510:                    return;
        !           511:                }
        !           512: 
        !           513:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           514:                {
        !           515:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           516:                    return;
        !           517:                }
        !           518: 
        !           519:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           520:                return;
        !           521:            }
        !           522: 
        !           523:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*s_etat_processus)
        !           524:                    .indep).objet)).nom);
        !           525: 
        !           526:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1)
        !           527:                    * sizeof(unsigned char))) == NULL)
        !           528:            {
        !           529:                if (fclose(fichier) != 0)
        !           530:                {
        !           531:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           532:                    return;
        !           533:                }
        !           534: 
        !           535:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           536:                {
        !           537:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           538:                    return;
        !           539:                }
        !           540: 
        !           541:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           542:                return;
        !           543:            }
        !           544: 
        !           545:            strcpy(nom_x, s_variable_x.nom);
        !           546: 
        !           547:            if ((*s_etat_processus).systeme_axes == 0)
        !           548:            {
        !           549:                borne_minimale_x = (*s_etat_processus).x_min;
        !           550:                borne_maximale_x = (*s_etat_processus).x_max;
        !           551:            }
        !           552:            else
        !           553:            {
        !           554:                borne_minimale_x = (*s_etat_processus).x2_min;
        !           555:                borne_maximale_x = (*s_etat_processus).x2_max;
        !           556:            }
        !           557:        }
        !           558: 
        !           559:        /*
        !           560:         * Création d'une variable locale du nom pointé par INDEP
        !           561:         */
        !           562: 
        !           563:        (*s_etat_processus).niveau_courant++;
        !           564:        s_variable_x.niveau = (*s_etat_processus).niveau_courant;
        !           565: 
        !           566:        if ((s_variable_x.objet = allocation(s_etat_processus, REL))
        !           567:                == NULL)
        !           568:        {
        !           569:            if (fclose(fichier) != 0)
        !           570:            {
        !           571:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           572:                return;
        !           573:            }
        !           574: 
        !           575:            if (destruction_fichier(nom_fichier) == d_erreur)
        !           576:            {
        !           577:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           578:                return;
        !           579:            }
        !           580: 
        !           581:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           582:            return;
        !           583:        }
        !           584: 
        !           585:        if (creation_variable(s_etat_processus, &s_variable_x, 'V', 'P')
        !           586:                == d_erreur)
        !           587:        {
        !           588:            if (fclose(fichier) != 0)
        !           589:            {
        !           590:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           591:                return;
        !           592:            }
        !           593: 
        !           594:            if (destruction_fichier(nom_fichier) == d_erreur)
        !           595:            {
        !           596:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           597:                return;
        !           598:            }
        !           599: 
        !           600:            /*
        !           601:             * L'erreur retournée ne peut être qu'une erreur système
        !           602:             */
        !           603: 
        !           604:            free(nom_fichier);
        !           605:            return;
        !           606:        }
        !           607: 
        !           608:        /*
        !           609:         * Boucle de calcul des points de la fonction
        !           610:         */
        !           611: 
        !           612:        if (borne_maximale_x < borne_minimale_x)
        !           613:        {
        !           614:            x = borne_maximale_x;
        !           615:            borne_maximale_x = borne_minimale_x;
        !           616:            borne_minimale_x = x;
        !           617:        }
        !           618: 
        !           619:        for(x = borne_minimale_x; x <= borne_maximale_x;
        !           620:                x += (*s_etat_processus).resolution)
        !           621:        {
        !           622:            if (recherche_variable(s_etat_processus, nom_x)
        !           623:                    == d_vrai)
        !           624:            {
        !           625:                // La variable étant créée localement, elle n'est jamais
        !           626:                // ni verrouillée ni partagée.
        !           627: 
        !           628:                BUG((*s_etat_processus).s_liste_variables
        !           629:                        [(*s_etat_processus).position_variable_courante]
        !           630:                        .objet == NULL);
        !           631: 
        !           632:                if ((*((*s_etat_processus).s_liste_variables
        !           633:                        [(*s_etat_processus).position_variable_courante])
        !           634:                        .objet).type != REL)
        !           635:                {
        !           636:                    liberation(s_etat_processus,
        !           637:                            ((*s_etat_processus).s_liste_variables
        !           638:                            [(*s_etat_processus).position_variable_courante])
        !           639:                            .objet);
        !           640: 
        !           641:                    if ((((*s_etat_processus).s_liste_variables
        !           642:                            [(*s_etat_processus).position_variable_courante])
        !           643:                            .objet = allocation(s_etat_processus, REL))
        !           644:                            == NULL)
        !           645:                    {
        !           646:                        (*s_etat_processus).erreur_systeme =
        !           647:                                d_es_allocation_memoire;
        !           648:                        return;
        !           649:                    }
        !           650:                }
        !           651: 
        !           652:                (*((real8 *) (*((*s_etat_processus).s_liste_variables
        !           653:                        [(*s_etat_processus).position_variable_courante])
        !           654:                        .objet).objet)) = x;
        !           655:            }
        !           656:            else
        !           657:            {
        !           658:                /*
        !           659:                 * La variable créée étant locale, l'utilisateur ne peut
        !           660:                 * pas l'effacer. On ne doit donc jamais passer par ici. Si
        !           661:                 * c'est néanmoins le cas, une erreur système est générée
        !           662:                 * provoquant l'arrêt du programme même dans une
        !           663:                 * structure IFERR.
        !           664:                 */
        !           665: 
        !           666:                if (fclose(fichier) != 0)
        !           667:                {
        !           668:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           669:                    return;
        !           670:                }
        !           671: 
        !           672:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           673:                {
        !           674:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           675:                    return;
        !           676:                }
        !           677: 
        !           678:                if (last_valide == d_vrai)
        !           679:                {
        !           680:                    sf(s_etat_processus, 31);
        !           681:                }
        !           682: 
        !           683:                free(nom_fichier);
        !           684:                return;
        !           685:            }
        !           686: 
        !           687:            if (recherche_variable(s_etat_processus, "EQ")
        !           688:                    == d_faux)
        !           689:            {
        !           690:                /*
        !           691:                 * Aucune variable "EQ" n'existe.
        !           692:                 */
        !           693: 
        !           694:                (*s_etat_processus).erreur_execution =
        !           695:                        d_ex_variable_non_definie;
        !           696: 
        !           697:                /*
        !           698:                 * Retrait de la variable INDEP
        !           699:                 */
        !           700: 
        !           701:                (*s_etat_processus).niveau_courant--;
        !           702: 
        !           703:                if (fclose(fichier) != 0)
        !           704:                {
        !           705:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           706:                    return;
        !           707:                }
        !           708: 
        !           709:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           710:                {
        !           711:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           712:                    return;
        !           713:                }
        !           714: 
        !           715:                if (retrait_variable(s_etat_processus, nom_x, 'L')
        !           716:                        == d_erreur)
        !           717:                {
        !           718:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !           719:                    {
        !           720:                        if ((*s_etat_processus).erreur_systeme ==
        !           721:                                d_es_variable_introuvable)
        !           722:                        {
        !           723:                            (*s_etat_processus).erreur_systeme = d_es;
        !           724:                        }
        !           725:                        else
        !           726:                        {
        !           727: 
        !           728:                        /*
        !           729:                         * Erreur système
        !           730:                         */
        !           731: 
        !           732:                            free(nom_fichier);
        !           733:                            return;
        !           734:                        }
        !           735:                    }
        !           736: 
        !           737:                    free(nom_x);
        !           738:                    free(nom_fichier);
        !           739: 
        !           740:                    if (last_valide == d_vrai)
        !           741:                    {
        !           742:                        sf(s_etat_processus, 31);
        !           743:                    }
        !           744: 
        !           745:                    (*s_etat_processus).erreur_execution =
        !           746:                            d_ex_variable_non_definie;
        !           747:                    return;
        !           748:                }
        !           749: 
        !           750:                if (last_valide == d_vrai)
        !           751:                {
        !           752:                    sf(s_etat_processus, 31);
        !           753:                }
        !           754: 
        !           755:                free(nom_x);
        !           756:                free(nom_fichier);
        !           757:                return;
        !           758:            }
        !           759: 
        !           760:            /*
        !           761:             * Recherche de la variable globale "EQ"
        !           762:             */
        !           763:            
        !           764:            i = (*s_etat_processus).position_variable_courante;
        !           765:            presence_variable = d_faux;
        !           766: 
        !           767:            while(i >= 0)
        !           768:            {
        !           769:                if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !           770:                        "EQ") == 0) && ((*s_etat_processus)
        !           771:                        .s_liste_variables[i].niveau == 1))
        !           772:                {
        !           773:                    presence_variable = d_vrai;
        !           774:                    break;
        !           775:                }
        !           776: 
        !           777:                i--;
        !           778:            }
        !           779: 
        !           780:            (*s_etat_processus).position_variable_courante = i;
        !           781: 
        !           782:            BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);
        !           783: 
        !           784:            if (presence_variable == d_faux)
        !           785:            {
        !           786:                /*
        !           787:                 * Retrait de la variable INDEP
        !           788:                 */
        !           789: 
        !           790:                (*s_etat_processus).niveau_courant--;
        !           791: 
        !           792:                if (fclose(fichier) != 0)
        !           793:                {
        !           794:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           795:                    return;
        !           796:                }
        !           797: 
        !           798:                if (destruction_fichier(nom_fichier) == d_erreur)
        !           799:                {
        !           800:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           801:                    return;
        !           802:                }
        !           803: 
        !           804:                if (retrait_variable(s_etat_processus, nom_x, 'L')
        !           805:                        == d_erreur)
        !           806:                {
        !           807:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !           808:                    {
        !           809:                        if ((*s_etat_processus).erreur_systeme ==
        !           810:                                d_es_variable_introuvable)
        !           811:                        {
        !           812:                            (*s_etat_processus).erreur_systeme = d_es;
        !           813:                        }
        !           814:                        else
        !           815:                        {
        !           816: 
        !           817:                        /*
        !           818:                         * Erreur système
        !           819:                         */
        !           820: 
        !           821:                            free(nom_fichier);
        !           822:                            return;
        !           823:                        }
        !           824:                    }
        !           825: 
        !           826:                    free(nom_x);
        !           827:                    free(nom_fichier);
        !           828: 
        !           829:                    if (last_valide == d_vrai)
        !           830:                    {
        !           831:                        sf(s_etat_processus, 31);
        !           832:                    }
        !           833: 
        !           834:                    (*s_etat_processus).erreur_execution =
        !           835:                            d_ex_variable_non_definie;
        !           836:                    return;
        !           837:                }
        !           838: 
        !           839:                free(nom_x);
        !           840:                free(nom_fichier);
        !           841: 
        !           842:                if (last_valide == d_vrai)
        !           843:                {
        !           844:                    sf(s_etat_processus, 31);
        !           845:                }
        !           846: 
        !           847:                (*s_etat_processus).erreur_execution =
        !           848:                        d_ex_variable_non_definie;
        !           849:                return;
        !           850:            }
        !           851: 
        !           852:            /*
        !           853:             * Evaluation de la fonction
        !           854:             */
        !           855: 
        !           856:            hauteur_pile = (*s_etat_processus).hauteur_pile_operationnelle;
        !           857:            l_position_normale = (*s_etat_processus).l_base_pile_systeme;
        !           858:            niveau_courant = (*s_etat_processus).niveau_courant;
        !           859:            mode_evaluation_expression = (*s_etat_processus)
        !           860:                    .mode_evaluation_expression;
        !           861:            (*s_etat_processus).mode_evaluation_expression = 'Y';
        !           862: 
        !           863:            (*s_etat_processus).erreur_execution = d_ex;
        !           864:            (*s_etat_processus).exception = d_ep;
        !           865: 
        !           866:            if (evaluation(s_etat_processus, (*s_etat_processus)
        !           867:                    .s_liste_variables[(*s_etat_processus)
        !           868:                    .position_variable_courante].objet, 'N') == d_erreur)
        !           869:            {
        !           870:                (*s_etat_processus).mode_evaluation_expression =
        !           871:                        mode_evaluation_expression;
        !           872: 
        !           873:                if ((*s_etat_processus).erreur_systeme != d_es)
        !           874:                {
        !           875:                    /*
        !           876:                     * Erreur système
        !           877:                     */
        !           878: 
        !           879:                    free(nom_fichier);
        !           880:                    return;
        !           881:                }
        !           882:                else
        !           883:                {
        !           884:                    retour_suite_erreur = d_faux;
        !           885:                    (*s_etat_processus).niveau_courant = niveau_courant;
        !           886: 
        !           887:                    /*
        !           888:                     * Restauration de la pile initiale
        !           889:                     */
        !           890: 
        !           891:                    while((*s_etat_processus).hauteur_pile_operationnelle >
        !           892:                            (unsigned long) hauteur_pile)
        !           893:                    {
        !           894:                        if (depilement(s_etat_processus, &((*s_etat_processus)
        !           895:                                .l_base_pile), &s_objet) == d_erreur)
        !           896:                        {
        !           897:                            (*s_etat_processus).erreur_execution =
        !           898:                                    d_ex_manque_argument;
        !           899:                            retour_suite_erreur = d_vrai;
        !           900:                            break;
        !           901:                        }
        !           902: 
        !           903:                        liberation(s_etat_processus, s_objet);
        !           904:                    }
        !           905: 
        !           906:                    /*
        !           907:                     * Restauration de la pile système
        !           908:                     */
        !           909: 
        !           910:                    while((*s_etat_processus).l_base_pile_systeme !=
        !           911:                            l_position_normale)
        !           912:                    {
        !           913:                        depilement_pile_systeme(s_etat_processus);
        !           914: 
        !           915:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !           916:                        {
        !           917:                            /*
        !           918:                             * Une pile vide provoque une erreur système
        !           919:                             */
        !           920: 
        !           921:                            free(nom_fichier);
        !           922:                            return;
        !           923:                        }
        !           924:                    }
        !           925: 
        !           926:                    if (retour_suite_erreur == d_vrai)
        !           927:                    {
        !           928:                        /*
        !           929:                         * Retrait de la variable INDEP et retour
        !           930:                         */
        !           931: 
        !           932:                        (*s_etat_processus).niveau_courant--;
        !           933: 
        !           934:                        if (fclose(fichier) != 0)
        !           935:                        {
        !           936:                            (*s_etat_processus).erreur_systeme =
        !           937:                                    d_es_erreur_fichier;
        !           938:                            return;
        !           939:                        }
        !           940: 
        !           941:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !           942:                        {
        !           943:                            (*s_etat_processus).erreur_systeme =
        !           944:                                    d_es_erreur_fichier;
        !           945:                            return;
        !           946:                        }
        !           947: 
        !           948:                        if (retrait_variable(s_etat_processus,
        !           949:                                nom_x, 'L') == d_erreur)
        !           950:                        {
        !           951:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !           952:                            {
        !           953:                                if ((*s_etat_processus).erreur_systeme ==
        !           954:                                        d_es_variable_introuvable)
        !           955:                                {
        !           956:                                    (*s_etat_processus).erreur_systeme =
        !           957:                                            d_es;
        !           958:                                }
        !           959:                                else
        !           960:                                {
        !           961: 
        !           962:                                /*
        !           963:                                 * Erreur système
        !           964:                                 */
        !           965: 
        !           966:                                    free(nom_fichier);
        !           967:                                    return;
        !           968:                                }
        !           969:                            }
        !           970: 
        !           971:                            (*s_etat_processus).erreur_execution =
        !           972:                                    d_ex_variable_non_definie;
        !           973:                        }
        !           974: 
        !           975:                        free(nom_x);
        !           976:                        free(nom_fichier);
        !           977: 
        !           978:                        if (last_valide == d_vrai)
        !           979:                        {
        !           980:                            sf(s_etat_processus, 31);
        !           981:                        }
        !           982: 
        !           983:                        return;
        !           984:                    }
        !           985:                }
        !           986: 
        !           987:                (*s_etat_processus).erreur_execution = d_ex;
        !           988:                (*s_etat_processus).exception = d_ep;
        !           989:            }
        !           990:            else
        !           991:            {
        !           992:                (*s_etat_processus).mode_evaluation_expression =
        !           993:                        mode_evaluation_expression;
        !           994: 
        !           995:                /*
        !           996:                 * Donnée valide à écrire dans le fichier
        !           997:                 */
        !           998: 
        !           999:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          1000:                        .l_base_pile), &s_objet) == d_erreur)
        !          1001:                {
        !          1002: 
        !          1003:                    /*
        !          1004:                     * Retrait de la variable INDEP et retour
        !          1005:                     */
        !          1006: 
        !          1007:                    (*s_etat_processus).niveau_courant--;
        !          1008: 
        !          1009:                    if (fclose(fichier) != 0)
        !          1010:                    {
        !          1011:                        (*s_etat_processus).erreur_systeme =
        !          1012:                                d_es_erreur_fichier;
        !          1013:                        return;
        !          1014:                    }
        !          1015: 
        !          1016:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1017:                    {
        !          1018:                        (*s_etat_processus).erreur_systeme =
        !          1019:                                d_es_erreur_fichier;
        !          1020:                        return;
        !          1021:                    }
        !          1022: 
        !          1023:                    if (retrait_variable(s_etat_processus, nom_x,
        !          1024:                            'L') == d_erreur)
        !          1025:                    {
        !          1026:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          1027:                        {
        !          1028:                            if ((*s_etat_processus).erreur_systeme ==
        !          1029:                                    d_es_variable_introuvable)
        !          1030:                            {
        !          1031:                                (*s_etat_processus).erreur_systeme = d_es;
        !          1032:                            }
        !          1033:                            else
        !          1034:                            {
        !          1035: 
        !          1036:                            /*
        !          1037:                             * Erreur système
        !          1038:                             */
        !          1039: 
        !          1040:                                free(nom_fichier);
        !          1041:                                return;
        !          1042:                            }
        !          1043:                        }
        !          1044: 
        !          1045:                        free(nom_x);
        !          1046:                        free(nom_fichier);
        !          1047: 
        !          1048:                        if (last_valide == d_vrai)
        !          1049:                        {
        !          1050:                            sf(s_etat_processus, 31);
        !          1051:                        }
        !          1052: 
        !          1053:                        (*s_etat_processus).erreur_execution =
        !          1054:                                d_ex_variable_non_definie;
        !          1055:                        return;
        !          1056:                    }
        !          1057: 
        !          1058:                    free(nom_x);
        !          1059:                    free(nom_fichier);
        !          1060: 
        !          1061:                    if (last_valide == d_vrai)
        !          1062:                    {
        !          1063:                        sf(s_etat_processus, 31);
        !          1064:                    }
        !          1065: 
        !          1066:                    (*s_etat_processus).erreur_execution =
        !          1067:                            d_ex_manque_argument;
        !          1068:                    return;
        !          1069:                }
        !          1070: 
        !          1071:                if ((*s_objet).type == INT)
        !          1072:                {
        !          1073:                    if (fprintf(fichier, "%f %f\n", x,
        !          1074:                            (double) (*((integer8 *)
        !          1075:                            (*s_objet).objet))) < 0)
        !          1076:                    {
        !          1077:                        (*s_etat_processus).erreur_systeme =
        !          1078:                                d_es_erreur_fichier;
        !          1079:                        return;
        !          1080:                    }
        !          1081:                }
        !          1082:                else if ((*s_objet).type == REL)
        !          1083:                {
        !          1084:                    if (fprintf(fichier, "%f %f\n", x, (*((real8 *)
        !          1085:                            (*s_objet).objet))) < 0)
        !          1086:                    {
        !          1087:                        (*s_etat_processus).erreur_systeme =
        !          1088:                                d_es_erreur_fichier;
        !          1089:                        return;
        !          1090:                    }
        !          1091:                }
        !          1092: 
        !          1093:                liberation(s_etat_processus, s_objet);
        !          1094:            }
        !          1095:        }
        !          1096: 
        !          1097:        /*
        !          1098:         * Retrait de la variable locale
        !          1099:         */
        !          1100: 
        !          1101:        (*s_etat_processus).niveau_courant--;
        !          1102: 
        !          1103:        if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          1104:        {
        !          1105:            if ((*s_etat_processus).erreur_systeme != d_es)
        !          1106:            {
        !          1107:                if ((*s_etat_processus).erreur_systeme ==
        !          1108:                        d_es_variable_introuvable)
        !          1109:                {
        !          1110:                    (*s_etat_processus).erreur_systeme = d_es;
        !          1111:                }
        !          1112:                else
        !          1113:                {
        !          1114:                    /*
        !          1115:                     * Erreur système
        !          1116:                     */
        !          1117: 
        !          1118:                    free(nom_fichier);
        !          1119:                    return;
        !          1120:                }
        !          1121:            }
        !          1122: 
        !          1123:            free(nom_x);
        !          1124:            free(nom_fichier);
        !          1125: 
        !          1126:            if (last_valide == d_vrai)
        !          1127:            {
        !          1128:                sf(s_etat_processus, 31);
        !          1129:            }
        !          1130: 
        !          1131:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !          1132:            return;
        !          1133:        }
        !          1134: 
        !          1135:        free(nom_x);
        !          1136:    }
        !          1137: 
        !          1138:    /*
        !          1139:     * Tracé r=f(t)
        !          1140:     * Les bornes de variation de T sont données par une
        !          1141:     * liste "{ T T_min T_max } INDEP".
        !          1142:     * INDEP et DEPND testent leurs arguments pour que les pointeurs
        !          1143:     * indep et depend désignent des objets de type NOM ou LST à
        !          1144:     * trois éléments.
        !          1145:     */
        !          1146: 
        !          1147:    else if (strcmp((*s_etat_processus).type_trace_eq, "POLAIRE") == 0)
        !          1148:    {
        !          1149:        dimensions = 2;
        !          1150: 
        !          1151:        /*
        !          1152:         * Vérification de la présence de la variable globale EQ
        !          1153:         */
        !          1154:        
        !          1155:        if (recherche_variable(s_etat_processus, "EQ") == d_faux)
        !          1156:        {
        !          1157:            /*
        !          1158:             * Aucune variable "EQ" n'existe.
        !          1159:             */
        !          1160: 
        !          1161:            if (last_valide == d_vrai)
        !          1162:            {
        !          1163:                sf(s_etat_processus, 31);
        !          1164:            }
        !          1165: 
        !          1166:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          1167:            (*s_etat_processus).erreur_systeme = d_es;
        !          1168: 
        !          1169:            return;
        !          1170:        }
        !          1171: 
        !          1172:        /*
        !          1173:         * Recherche de la variable globale "EQ"
        !          1174:         */
        !          1175:        
        !          1176:        i = (*s_etat_processus).position_variable_courante;
        !          1177:        presence_variable = d_faux;
        !          1178: 
        !          1179:        while(i >= 0)
        !          1180:        {
        !          1181:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          1182:                    "EQ") == 0) && ((*s_etat_processus)
        !          1183:                    .s_liste_variables[i].niveau == 1))
        !          1184:            {
        !          1185:                presence_variable = d_vrai;
        !          1186:                break;
        !          1187:            }
        !          1188: 
        !          1189:            i--;
        !          1190:        }
        !          1191: 
        !          1192:        if (presence_variable == d_faux)
        !          1193:        {
        !          1194:            if (last_valide == d_vrai)
        !          1195:            {
        !          1196:                sf(s_etat_processus, 31);
        !          1197:            }
        !          1198: 
        !          1199:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          1200:            return;
        !          1201:        }
        !          1202: 
        !          1203:        if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
        !          1204:        {
        !          1205:            (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
        !          1206:            return;
        !          1207:        }
        !          1208: 
        !          1209:        /*
        !          1210:         * Création du fichier graphique temporaire
        !          1211:         */
        !          1212: 
        !          1213:        if ((nom_fichier = creation_nom_fichier(s_etat_processus,
        !          1214:                (*s_etat_processus).chemin_fichiers_temporaires)) == NULL)
        !          1215:        {
        !          1216:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1217:            return;
        !          1218:        }
        !          1219: 
        !          1220:        if ((fichier = fopen(nom_fichier, "w+")) == NULL)
        !          1221:        {
        !          1222:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1223:            return;
        !          1224:        }
        !          1225: 
        !          1226:        /*
        !          1227:         * Récupération du domaine de variation de x
        !          1228:         */
        !          1229: 
        !          1230:        if ((*(*s_etat_processus).indep).type == LST)
        !          1231:        {
        !          1232:            l_element_courant = (*(*s_etat_processus).indep).objet;
        !          1233: 
        !          1234:            if ((s_variable_x.nom = malloc((strlen((*((struct_nom *)
        !          1235:                    (*(*l_element_courant).donnee).objet)).nom) + 1) *
        !          1236:                    sizeof(unsigned char))) == NULL)
        !          1237:            {
        !          1238:                if (fclose(fichier) != 0)
        !          1239:                {
        !          1240:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1241:                    return;
        !          1242:                }
        !          1243: 
        !          1244:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          1245:                {
        !          1246:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1247:                    return;
        !          1248:                }
        !          1249: 
        !          1250:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1251:                return;
        !          1252:            }
        !          1253: 
        !          1254:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*l_element_courant)
        !          1255:                    .donnee).objet)).nom);
        !          1256: 
        !          1257:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1) *
        !          1258:                    sizeof(unsigned char))) == NULL)
        !          1259:            {
        !          1260:                if (fclose(fichier) != 0)
        !          1261:                {
        !          1262:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1263:                    return;
        !          1264:                }
        !          1265: 
        !          1266:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          1267:                {
        !          1268:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1269:                    return;
        !          1270:                }
        !          1271: 
        !          1272:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1273:                return;
        !          1274:            }
        !          1275: 
        !          1276:            strcpy(nom_x, s_variable_x.nom);
        !          1277: 
        !          1278:            l_element_courant = (*l_element_courant).suivant;
        !          1279: 
        !          1280:            if ((*(*l_element_courant).donnee).type == INT)
        !          1281:            {
        !          1282:                borne_minimale_x = (real8) (*((integer8 *)
        !          1283:                        (*(*l_element_courant).donnee).objet));
        !          1284:            }
        !          1285:            else if ((*(*l_element_courant).donnee).type == REL)
        !          1286:            {
        !          1287:                borne_minimale_x = (*((real8 *) (*(*l_element_courant)
        !          1288:                        .donnee).objet));
        !          1289:            }
        !          1290:            else
        !          1291:            {
        !          1292:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          1293:                        'N') == d_erreur)
        !          1294:                {
        !          1295:                    free(s_variable_x.nom);
        !          1296:                    free(nom_x);
        !          1297: 
        !          1298:                    if (fclose(fichier) != 0)
        !          1299:                    {
        !          1300:                        (*s_etat_processus).erreur_systeme =
        !          1301:                                d_es_erreur_fichier;
        !          1302:                        return;
        !          1303:                    }
        !          1304: 
        !          1305:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1306:                    {
        !          1307:                        (*s_etat_processus).erreur_systeme =
        !          1308:                                d_es_erreur_fichier;
        !          1309:                        return;
        !          1310:                    }
        !          1311: 
        !          1312:                    if (last_valide == d_vrai)
        !          1313:                    {
        !          1314:                        sf(s_etat_processus, 31);
        !          1315:                    }
        !          1316: 
        !          1317:                    free(nom_fichier);
        !          1318:                    return;
        !          1319:                }
        !          1320: 
        !          1321:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          1322:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          1323:                {
        !          1324:                    free(s_variable_x.nom);
        !          1325:                    free(nom_x);
        !          1326: 
        !          1327:                    if (fclose(fichier) != 0)
        !          1328:                    {
        !          1329:                        (*s_etat_processus).erreur_systeme =
        !          1330:                                d_es_erreur_fichier;
        !          1331:                        return;
        !          1332:                    }
        !          1333: 
        !          1334:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1335:                    {
        !          1336:                        (*s_etat_processus).erreur_systeme =
        !          1337:                                d_es_erreur_fichier;
        !          1338:                        return;
        !          1339:                    }
        !          1340: 
        !          1341:                    (*s_etat_processus).erreur_execution =
        !          1342:                            d_ex_manque_argument;
        !          1343: 
        !          1344:                    if (last_valide == d_vrai)
        !          1345:                    {
        !          1346:                        sf(s_etat_processus, 31);
        !          1347:                    }
        !          1348: 
        !          1349:                    free(nom_fichier);
        !          1350:                    return;
        !          1351:                }
        !          1352: 
        !          1353:                if ((*s_objet_evalue).type == INT)
        !          1354:                {
        !          1355:                    borne_minimale_x = (real8) (*((integer8 *)
        !          1356:                            (*s_objet_evalue).objet));
        !          1357:                }
        !          1358:                else if ((*s_objet_evalue).type == REL)
        !          1359:                {
        !          1360:                    borne_minimale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          1361:                }
        !          1362:                else
        !          1363:                {
        !          1364:                    if (fclose(fichier) != 0)
        !          1365:                    {
        !          1366:                        (*s_etat_processus).erreur_systeme =
        !          1367:                                d_es_erreur_fichier;
        !          1368:                        return;
        !          1369:                    }
        !          1370: 
        !          1371:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1372:                    {
        !          1373:                        (*s_etat_processus).erreur_systeme =
        !          1374:                                d_es_erreur_fichier;
        !          1375:                        return;
        !          1376:                    }
        !          1377: 
        !          1378:                    free(s_variable_x.nom);
        !          1379:                    free(nom_x);
        !          1380:                    liberation(s_etat_processus, s_objet_evalue);
        !          1381: 
        !          1382:                    (*s_etat_processus).erreur_execution =
        !          1383:                            d_ex_erreur_type_argument;
        !          1384: 
        !          1385:                    if (last_valide == d_vrai)
        !          1386:                    {
        !          1387:                        sf(s_etat_processus, 31);
        !          1388:                    }
        !          1389: 
        !          1390:                    free(nom_fichier);
        !          1391:                    return;
        !          1392:                }
        !          1393: 
        !          1394:                liberation(s_etat_processus, s_objet_evalue);
        !          1395:            }
        !          1396: 
        !          1397:            l_element_courant = (*l_element_courant).suivant;
        !          1398: 
        !          1399:            if ((*(*l_element_courant).donnee).type == INT)
        !          1400:            {
        !          1401:                borne_maximale_x = (real8) (*((integer8 *)
        !          1402:                        (*(*l_element_courant).donnee).objet));
        !          1403:            }
        !          1404:            else if ((*(*l_element_courant).donnee).type == REL)
        !          1405:            {
        !          1406:                borne_maximale_x = (*((real8 *) (*(*l_element_courant)
        !          1407:                        .donnee).objet));
        !          1408:            }
        !          1409:            else
        !          1410:            {
        !          1411:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          1412:                        'N') == d_erreur)
        !          1413:                {
        !          1414:                    free(s_variable_x.nom);
        !          1415:                    free(nom_x);
        !          1416: 
        !          1417:                    if (fclose(fichier) != 0)
        !          1418:                    {
        !          1419:                        (*s_etat_processus).erreur_systeme =
        !          1420:                                d_es_erreur_fichier;
        !          1421:                        return;
        !          1422:                    }
        !          1423: 
        !          1424:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1425:                    {
        !          1426:                        (*s_etat_processus).erreur_systeme =
        !          1427:                                d_es_erreur_fichier;
        !          1428:                        return;
        !          1429:                    }
        !          1430: 
        !          1431:                    if (last_valide == d_vrai)
        !          1432:                    {
        !          1433:                        sf(s_etat_processus, 31);
        !          1434:                    }
        !          1435: 
        !          1436:                    free(nom_fichier);
        !          1437:                    return;
        !          1438:                }
        !          1439: 
        !          1440:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          1441:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          1442:                {
        !          1443:                    free(s_variable_x.nom);
        !          1444:                    free(nom_x);
        !          1445: 
        !          1446:                    if (fclose(fichier) != 0)
        !          1447:                    {
        !          1448:                        (*s_etat_processus).erreur_systeme =
        !          1449:                                d_es_erreur_fichier;
        !          1450:                        return;
        !          1451:                    }
        !          1452: 
        !          1453:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1454:                    {
        !          1455:                        (*s_etat_processus).erreur_systeme =
        !          1456:                                d_es_erreur_fichier;
        !          1457:                        return;
        !          1458:                    }
        !          1459: 
        !          1460:                    (*s_etat_processus).erreur_execution =
        !          1461:                            d_ex_manque_argument;
        !          1462: 
        !          1463:                    if (last_valide == d_vrai)
        !          1464:                    {
        !          1465:                        sf(s_etat_processus, 31);
        !          1466:                    }
        !          1467: 
        !          1468:                    free(nom_fichier);
        !          1469:                    return;
        !          1470:                }
        !          1471: 
        !          1472:                if ((*s_objet_evalue).type == INT)
        !          1473:                {
        !          1474:                    borne_maximale_x = (real8) (*((integer8 *)
        !          1475:                            (*s_objet_evalue).objet));
        !          1476:                }
        !          1477:                else if ((*s_objet_evalue).type == REL)
        !          1478:                {
        !          1479:                    borne_maximale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          1480:                }
        !          1481:                else
        !          1482:                {
        !          1483:                    free(s_variable_x.nom);
        !          1484:                    free(nom_x);
        !          1485: 
        !          1486:                    if (fclose(fichier) != 0)
        !          1487:                    {
        !          1488:                        (*s_etat_processus).erreur_systeme =
        !          1489:                                d_es_erreur_fichier;
        !          1490:                        return;
        !          1491:                    }
        !          1492: 
        !          1493:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1494:                    {
        !          1495:                        (*s_etat_processus).erreur_systeme =
        !          1496:                                d_es_erreur_fichier;
        !          1497:                        return;
        !          1498:                    }
        !          1499: 
        !          1500:                    liberation(s_etat_processus, s_objet_evalue);
        !          1501: 
        !          1502:                    (*s_etat_processus).erreur_execution =
        !          1503:                            d_ex_erreur_type_argument;
        !          1504: 
        !          1505:                    if (last_valide == d_vrai)
        !          1506:                    {
        !          1507:                        sf(s_etat_processus, 31);
        !          1508:                    }
        !          1509: 
        !          1510:                    free(nom_fichier);
        !          1511:                    return;
        !          1512:                }
        !          1513: 
        !          1514:                liberation(s_etat_processus, s_objet_evalue);
        !          1515:            }
        !          1516:        }
        !          1517:        else
        !          1518:        {
        !          1519:            if (fclose(fichier) != 0)
        !          1520:            {
        !          1521:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1522:                return;
        !          1523:            }
        !          1524: 
        !          1525:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          1526:            {
        !          1527:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1528:                return;
        !          1529:            }
        !          1530: 
        !          1531:            (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1532: 
        !          1533:            if (last_valide == d_vrai)
        !          1534:            {
        !          1535:                sf(s_etat_processus, 31);
        !          1536:            }
        !          1537: 
        !          1538:            free(nom_fichier);
        !          1539:            return;
        !          1540:        }
        !          1541: 
        !          1542:        /*
        !          1543:         * Création d'une variable locale du nom pointé par INDEP
        !          1544:         */
        !          1545: 
        !          1546:        (*s_etat_processus).niveau_courant++;
        !          1547:        s_variable_x.niveau = (*s_etat_processus).niveau_courant;
        !          1548: 
        !          1549:        if ((s_variable_x.objet = allocation(s_etat_processus, REL)) == NULL)
        !          1550:        {
        !          1551:            if (fclose(fichier) != 0)
        !          1552:            {
        !          1553:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1554:                return;
        !          1555:            }
        !          1556: 
        !          1557:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          1558:            {
        !          1559:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1560:                return;
        !          1561:            }
        !          1562: 
        !          1563:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1564:            return;
        !          1565:        }
        !          1566: 
        !          1567:        if (creation_variable(s_etat_processus, &s_variable_x, 'V', 'P')
        !          1568:                == d_erreur)
        !          1569:        {
        !          1570:            if (fclose(fichier) != 0)
        !          1571:            {
        !          1572:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1573:                return;
        !          1574:            }
        !          1575: 
        !          1576:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          1577:            {
        !          1578:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1579:                return;
        !          1580:            }
        !          1581: 
        !          1582:            /*
        !          1583:             * L'erreur retournée ne peut être qu'une erreur système
        !          1584:             */
        !          1585: 
        !          1586:            free(nom_fichier);
        !          1587:            return;
        !          1588:        }
        !          1589: 
        !          1590:        /*
        !          1591:         * Boucle de calcul des points de la fonction
        !          1592:         */
        !          1593: 
        !          1594:        if (borne_maximale_x < borne_minimale_x)
        !          1595:        {
        !          1596:            t = borne_maximale_x;
        !          1597:            borne_maximale_x = borne_minimale_x;
        !          1598:            borne_minimale_x = t;
        !          1599:        }
        !          1600: 
        !          1601:        for(t = borne_minimale_x; t <= borne_maximale_x;
        !          1602:                t += (*s_etat_processus).resolution)
        !          1603:        {
        !          1604:            if (recherche_variable(s_etat_processus, nom_x) == d_vrai)
        !          1605:            {
        !          1606:                // La variable étant créée localement, elle n'est jamais
        !          1607:                // ni verrouillée ni partagée.
        !          1608: 
        !          1609:                BUG((*s_etat_processus).s_liste_variables
        !          1610:                        [(*s_etat_processus).position_variable_courante]
        !          1611:                        .objet == NULL);
        !          1612: 
        !          1613:                if ((*((*s_etat_processus).s_liste_variables
        !          1614:                        [(*s_etat_processus).position_variable_courante])
        !          1615:                        .objet).type != REL)
        !          1616:                {
        !          1617:                    liberation(s_etat_processus,
        !          1618:                            ((*s_etat_processus).s_liste_variables
        !          1619:                            [(*s_etat_processus).position_variable_courante])
        !          1620:                            .objet);
        !          1621: 
        !          1622:                    if ((((*s_etat_processus).s_liste_variables
        !          1623:                            [(*s_etat_processus).position_variable_courante])
        !          1624:                            .objet = allocation(s_etat_processus, REL))
        !          1625:                            == NULL)
        !          1626:                    {
        !          1627:                        (*s_etat_processus).erreur_systeme =
        !          1628:                                d_es_allocation_memoire;
        !          1629:                        return;
        !          1630:                    }
        !          1631:                }
        !          1632: 
        !          1633:                (*((real8 *) (*((*s_etat_processus).s_liste_variables
        !          1634:                        [(*s_etat_processus).position_variable_courante])
        !          1635:                        .objet).objet)) = t;
        !          1636:            }
        !          1637:            else
        !          1638:            {
        !          1639:                /*
        !          1640:                 * La variable créée étant locale, l'utilisateur ne peut
        !          1641:                 * pas l'effacer. On ne doit donc jamais passer par ici. Si
        !          1642:                 * c'est néanmoins le cas, une erreur système est générée
        !          1643:                 * provoquant l'arrêt du programme même dans une
        !          1644:                 * structure IFERR.
        !          1645:                 */
        !          1646: 
        !          1647:                if (fclose(fichier) != 0)
        !          1648:                {
        !          1649:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1650:                    return;
        !          1651:                }
        !          1652: 
        !          1653:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          1654:                {
        !          1655:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1656:                    return;
        !          1657:                }
        !          1658: 
        !          1659:                if (last_valide == d_vrai)
        !          1660:                {
        !          1661:                    sf(s_etat_processus, 31);
        !          1662:                }
        !          1663: 
        !          1664:                free(nom_fichier);
        !          1665:                return;
        !          1666:            }
        !          1667: 
        !          1668:            if (recherche_variable(s_etat_processus, "EQ")
        !          1669:                    == d_faux)
        !          1670:            {
        !          1671:                /*
        !          1672:                 * Aucune variable "EQ" n'existe.
        !          1673:                 */
        !          1674: 
        !          1675:                (*s_etat_processus).erreur_execution =
        !          1676:                        d_ex_variable_non_definie;
        !          1677: 
        !          1678:                /*
        !          1679:                 * Retrait de la variable INDEP
        !          1680:                 */
        !          1681: 
        !          1682:                (*s_etat_processus).niveau_courant--;
        !          1683: 
        !          1684:                if (fclose(fichier) != 0)
        !          1685:                {
        !          1686:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1687:                    return;
        !          1688:                }
        !          1689: 
        !          1690:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          1691:                {
        !          1692:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1693:                    return;
        !          1694:                }
        !          1695: 
        !          1696:                if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          1697:                {
        !          1698:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !          1699:                    {
        !          1700:                        if ((*s_etat_processus).erreur_systeme ==
        !          1701:                                d_es_variable_introuvable)
        !          1702:                        {
        !          1703:                            (*s_etat_processus).erreur_systeme = d_es;
        !          1704:                        }
        !          1705:                        else
        !          1706:                        {
        !          1707: 
        !          1708:                        /*
        !          1709:                         * Erreur système
        !          1710:                         */
        !          1711: 
        !          1712:                            free(nom_fichier);
        !          1713:                            return;
        !          1714:                        }
        !          1715:                    }
        !          1716: 
        !          1717:                    free(nom_x);
        !          1718:                    free(nom_fichier);
        !          1719: 
        !          1720:                    if (last_valide == d_vrai)
        !          1721:                    {
        !          1722:                        sf(s_etat_processus, 31);
        !          1723:                    }
        !          1724: 
        !          1725:                    (*s_etat_processus).erreur_execution =
        !          1726:                            d_ex_variable_non_definie;
        !          1727:                    return;
        !          1728:                }
        !          1729: 
        !          1730:                if (last_valide == d_vrai)
        !          1731:                {
        !          1732:                    sf(s_etat_processus, 31);
        !          1733:                }
        !          1734: 
        !          1735:                free(nom_x);
        !          1736:                free(nom_fichier);
        !          1737:                return;
        !          1738:            }
        !          1739: 
        !          1740:            /*
        !          1741:             * Recherche de la variable globale "EQ"
        !          1742:             */
        !          1743:            
        !          1744:            i = (*s_etat_processus).position_variable_courante;
        !          1745:            presence_variable = d_faux;
        !          1746: 
        !          1747:            while(i >= 0)
        !          1748:            {
        !          1749:                if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          1750:                        "EQ") == 0) && ((*s_etat_processus)
        !          1751:                        .s_liste_variables[i].niveau == 1))
        !          1752:                {
        !          1753:                    presence_variable = d_vrai;
        !          1754:                    break;
        !          1755:                }
        !          1756: 
        !          1757:                i--;
        !          1758:            }
        !          1759: 
        !          1760:            (*s_etat_processus).position_variable_courante = i;
        !          1761: 
        !          1762:            BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);
        !          1763: 
        !          1764:            if (presence_variable == d_faux)
        !          1765:            {
        !          1766:                /*
        !          1767:                 * Retrait de la variable INDEP
        !          1768:                 */
        !          1769: 
        !          1770:                (*s_etat_processus).niveau_courant--;
        !          1771: 
        !          1772:                if (fclose(fichier) != 0)
        !          1773:                {
        !          1774:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1775:                    return;
        !          1776:                }
        !          1777: 
        !          1778:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          1779:                {
        !          1780:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          1781:                    return;
        !          1782:                }
        !          1783: 
        !          1784:                if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          1785:                {
        !          1786:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !          1787:                    {
        !          1788:                        if ((*s_etat_processus).erreur_systeme ==
        !          1789:                                d_es_variable_introuvable)
        !          1790:                        {
        !          1791:                            (*s_etat_processus).erreur_systeme = d_es;
        !          1792:                        }
        !          1793:                        else
        !          1794:                        {
        !          1795: 
        !          1796:                        /*
        !          1797:                         * Erreur système
        !          1798:                         */
        !          1799: 
        !          1800:                            free(nom_fichier);
        !          1801:                            return;
        !          1802:                        }
        !          1803:                    }
        !          1804: 
        !          1805:                    free(nom_x);
        !          1806:                    free(nom_fichier);
        !          1807: 
        !          1808:                    if (last_valide == d_vrai)
        !          1809:                    {
        !          1810:                        sf(s_etat_processus, 31);
        !          1811:                    }
        !          1812: 
        !          1813:                    (*s_etat_processus).erreur_execution =
        !          1814:                            d_ex_variable_non_definie;
        !          1815:                    return;
        !          1816:                }
        !          1817: 
        !          1818:                (*s_etat_processus).erreur_execution =
        !          1819:                        d_ex_variable_non_definie;
        !          1820: 
        !          1821:                if (last_valide == d_vrai)
        !          1822:                {
        !          1823:                    sf(s_etat_processus, 31);
        !          1824:                }
        !          1825: 
        !          1826:                free(nom_fichier);
        !          1827:                return;
        !          1828:            }
        !          1829: 
        !          1830:            /*
        !          1831:             * Evaluation de la fonction
        !          1832:             */
        !          1833: 
        !          1834:            hauteur_pile = (*s_etat_processus).hauteur_pile_operationnelle;
        !          1835:            l_position_normale = (*s_etat_processus).l_base_pile_systeme;
        !          1836:            niveau_courant = (*s_etat_processus).niveau_courant;
        !          1837: 
        !          1838:            (*s_etat_processus).erreur_execution = d_ex;
        !          1839:            (*s_etat_processus).exception = d_ep;
        !          1840: 
        !          1841:            if (evaluation(s_etat_processus, (*s_etat_processus)
        !          1842:                    .s_liste_variables[(*s_etat_processus)
        !          1843:                    .position_variable_courante].objet, 'N') == d_erreur)
        !          1844:            {
        !          1845:                if ((*s_etat_processus).erreur_systeme != d_es)
        !          1846:                {
        !          1847:                    /*
        !          1848:                     * Erreur système
        !          1849:                     */
        !          1850: 
        !          1851:                    free(nom_fichier);
        !          1852:                    return;
        !          1853:                }
        !          1854:                else
        !          1855:                {
        !          1856:                    retour_suite_erreur = d_faux;
        !          1857:                    (*s_etat_processus).niveau_courant = niveau_courant;
        !          1858: 
        !          1859:                    /*
        !          1860:                     * Restauration de la pile initiale
        !          1861:                     */
        !          1862: 
        !          1863:                    while((*s_etat_processus).hauteur_pile_operationnelle >
        !          1864:                            (unsigned long) hauteur_pile)
        !          1865:                    {
        !          1866:                        if (depilement(s_etat_processus, &((*s_etat_processus)
        !          1867:                                .l_base_pile), &s_objet) == d_erreur)
        !          1868:                        {
        !          1869:                            (*s_etat_processus).erreur_execution =
        !          1870:                                    d_ex_manque_argument;
        !          1871:                            retour_suite_erreur = d_vrai;
        !          1872:                            break;
        !          1873:                        }
        !          1874: 
        !          1875:                        liberation(s_etat_processus, s_objet);
        !          1876:                    }
        !          1877: 
        !          1878:                    /*
        !          1879:                     * Restauration de la pile système
        !          1880:                     */
        !          1881: 
        !          1882:                    while((*s_etat_processus).l_base_pile_systeme !=
        !          1883:                            l_position_normale)
        !          1884:                    {
        !          1885:                        depilement_pile_systeme(s_etat_processus);
        !          1886: 
        !          1887:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          1888:                        {
        !          1889:                            /*
        !          1890:                             * Une pile vide provoque une erreur système
        !          1891:                             */
        !          1892: 
        !          1893:                            free(nom_fichier);
        !          1894:                            return;
        !          1895:                        }
        !          1896:                    }
        !          1897: 
        !          1898:                    if (retour_suite_erreur == d_vrai)
        !          1899:                    {
        !          1900:                        /*
        !          1901:                         * Retrait de la variable INDEP et retour
        !          1902:                         */
        !          1903: 
        !          1904:                        (*s_etat_processus).niveau_courant--;
        !          1905: 
        !          1906:                        if (fclose(fichier) != 0)
        !          1907:                        {
        !          1908:                            (*s_etat_processus).erreur_systeme =
        !          1909:                                    d_es_erreur_fichier;
        !          1910:                            return;
        !          1911:                        }
        !          1912: 
        !          1913:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          1914:                        {
        !          1915:                            (*s_etat_processus).erreur_systeme =
        !          1916:                                    d_es_erreur_fichier;
        !          1917:                            return;
        !          1918:                        }
        !          1919: 
        !          1920:                        if (retrait_variable(s_etat_processus,
        !          1921:                                nom_x, 'L') == d_erreur)
        !          1922:                        {
        !          1923:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !          1924:                            {
        !          1925:                                if ((*s_etat_processus).erreur_systeme ==
        !          1926:                                        d_es_variable_introuvable)
        !          1927:                                {
        !          1928:                                    (*s_etat_processus).erreur_systeme =
        !          1929:                                            d_es;
        !          1930:                                }
        !          1931:                                else
        !          1932:                                {
        !          1933: 
        !          1934:                                /*
        !          1935:                                 * Erreur système
        !          1936:                                 */
        !          1937: 
        !          1938:                                    free(nom_fichier);
        !          1939:                                    return;
        !          1940:                                }
        !          1941:                            }
        !          1942: 
        !          1943:                            (*s_etat_processus).erreur_execution =
        !          1944:                                    d_ex_variable_non_definie;
        !          1945:                        }
        !          1946: 
        !          1947:                        if (last_valide == d_vrai)
        !          1948:                        {
        !          1949:                            sf(s_etat_processus, 31);
        !          1950:                        }
        !          1951: 
        !          1952:                        free(nom_x);
        !          1953:                        free(nom_fichier);
        !          1954: 
        !          1955:                        return;
        !          1956:                    }
        !          1957:                }
        !          1958: 
        !          1959:                (*s_etat_processus).erreur_execution = d_ex;
        !          1960:                (*s_etat_processus).exception = d_ep;
        !          1961:            }
        !          1962:            else
        !          1963:            {
        !          1964:                /*
        !          1965:                 * Donnée valide à écrire dans le fichier
        !          1966:                 */
        !          1967: 
        !          1968:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          1969:                        .l_base_pile), &s_objet) == d_erreur)
        !          1970:                {
        !          1971: 
        !          1972:                    /*
        !          1973:                     * Retrait de la variable INDEP et retour
        !          1974:                     */
        !          1975: 
        !          1976:                    (*s_etat_processus).niveau_courant--;
        !          1977: 
        !          1978:                    if (fclose(fichier) != 0)
        !          1979:                    {
        !          1980:                        (*s_etat_processus).erreur_systeme =
        !          1981:                                d_es_erreur_fichier;
        !          1982:                        return;
        !          1983:                    }
        !          1984: 
        !          1985:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          1986:                    {
        !          1987:                        (*s_etat_processus).erreur_systeme =
        !          1988:                                d_es_erreur_fichier;
        !          1989:                        return;
        !          1990:                    }
        !          1991: 
        !          1992:                    if (retrait_variable(s_etat_processus, nom_x,
        !          1993:                            'L') == d_erreur)
        !          1994:                    {
        !          1995:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          1996:                        {
        !          1997:                            if ((*s_etat_processus).erreur_systeme ==
        !          1998:                                    d_es_variable_introuvable)
        !          1999:                            {
        !          2000:                                (*s_etat_processus).erreur_systeme = d_es;
        !          2001:                            }
        !          2002:                            else
        !          2003:                            {
        !          2004: 
        !          2005:                            /*
        !          2006:                             * Erreur système
        !          2007:                             */
        !          2008: 
        !          2009:                                free(nom_fichier);
        !          2010:                                return;
        !          2011:                            }
        !          2012:                        }
        !          2013: 
        !          2014:                        free(nom_x);
        !          2015:                        free(nom_fichier);
        !          2016: 
        !          2017:                        if (last_valide == d_vrai)
        !          2018:                        {
        !          2019:                            sf(s_etat_processus, 31);
        !          2020:                        }
        !          2021: 
        !          2022:                        (*s_etat_processus).erreur_execution =
        !          2023:                                d_ex_variable_non_definie;
        !          2024:                        return;
        !          2025:                    }
        !          2026: 
        !          2027:                    free(nom_x);
        !          2028:                    free(nom_fichier);
        !          2029: 
        !          2030:                    if (last_valide == d_vrai)
        !          2031:                    {
        !          2032:                        sf(s_etat_processus, 31);
        !          2033:                    }
        !          2034: 
        !          2035:                    (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          2036:                    return;
        !          2037:                }
        !          2038: 
        !          2039:                if ((*s_objet).type == INT)
        !          2040:                {
        !          2041:                    r = (double) (*((integer8 *) (*s_objet).objet));
        !          2042: 
        !          2043:                    if (fprintf(fichier, "%f %f\n", r * cos(t), r * sin(t)) < 0)
        !          2044:                    {
        !          2045:                        (*s_etat_processus).erreur_systeme =
        !          2046:                                d_es_erreur_fichier;
        !          2047:                        return;
        !          2048:                    }
        !          2049:                }
        !          2050:                else if ((*s_objet).type == REL)
        !          2051:                {
        !          2052:                    r = (double) (*((real8 *) (*s_objet).objet));
        !          2053: 
        !          2054:                    if (fprintf(fichier, "%f %f\n", r * cos(t), r * sin(t)) < 0)
        !          2055:                    {
        !          2056:                        (*s_etat_processus).erreur_systeme =
        !          2057:                                d_es_erreur_fichier;
        !          2058:                        return;
        !          2059:                    }
        !          2060:                }
        !          2061: 
        !          2062:                liberation(s_etat_processus, s_objet);
        !          2063:            }
        !          2064:        }
        !          2065: 
        !          2066:        /*
        !          2067:         * Retrait de la variable locale
        !          2068:         */
        !          2069: 
        !          2070:        (*s_etat_processus).niveau_courant--;
        !          2071: 
        !          2072:        if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          2073:        {
        !          2074:            if ((*s_etat_processus).erreur_systeme != d_es)
        !          2075:            {
        !          2076:                if ((*s_etat_processus).erreur_systeme ==
        !          2077:                        d_es_variable_introuvable)
        !          2078:                {
        !          2079:                    (*s_etat_processus).erreur_systeme = d_es;
        !          2080:                }
        !          2081:                else
        !          2082:                {
        !          2083:                    /*
        !          2084:                     * Erreur système
        !          2085:                     */
        !          2086: 
        !          2087:                    free(nom_fichier);
        !          2088:                    return;
        !          2089:                }
        !          2090:            }
        !          2091: 
        !          2092:            free(nom_x);
        !          2093:            free(nom_fichier);
        !          2094: 
        !          2095:            if (last_valide == d_vrai)
        !          2096:            {
        !          2097:                sf(s_etat_processus, 31);
        !          2098:            }
        !          2099: 
        !          2100:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !          2101:            return;
        !          2102:        }
        !          2103: 
        !          2104:        free(nom_x);
        !          2105:    }
        !          2106: 
        !          2107:    /*
        !          2108:     * Tracé { x=RE(f(t)), y=IM(f(t)) }
        !          2109:     * Les bornes de variation de T sont données par une
        !          2110:     * liste "{ T T_min T_max } INDEP".
        !          2111:     * INDEP et DEPND testent leurs arguments pour que les pointeurs
        !          2112:     * indep et depend désignent des objets de type NOM ou LST à
        !          2113:     * trois éléments.
        !          2114:     */
        !          2115: 
        !          2116:    else if (strcmp((*s_etat_processus).type_trace_eq, "PARAMETRIQUE") == 0)
        !          2117:    {
        !          2118:        dimensions = 2;
        !          2119: 
        !          2120:        /*
        !          2121:         * Vérification de la présence de la variable globale EQ
        !          2122:         */
        !          2123:        
        !          2124:        if (recherche_variable(s_etat_processus, "EQ") == d_faux)
        !          2125:        {
        !          2126:            /*
        !          2127:             * Aucune variable "EQ" n'existe.
        !          2128:             */
        !          2129: 
        !          2130:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          2131:            (*s_etat_processus).erreur_systeme = d_es;
        !          2132: 
        !          2133:            if (last_valide == d_vrai)
        !          2134:            {
        !          2135:                sf(s_etat_processus, 31);
        !          2136:            }
        !          2137: 
        !          2138:            return;
        !          2139:        }
        !          2140: 
        !          2141:        /*
        !          2142:         * Recherche de la variable globale "EQ"
        !          2143:         */
        !          2144:        
        !          2145:        i = (*s_etat_processus).position_variable_courante;
        !          2146:        presence_variable = d_faux;
        !          2147: 
        !          2148:        while(i >= 0)
        !          2149:        {
        !          2150:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          2151:                    "EQ") == 0) && ((*s_etat_processus)
        !          2152:                    .s_liste_variables[i].niveau == 1))
        !          2153:            {
        !          2154:                presence_variable = d_vrai;
        !          2155:                break;
        !          2156:            }
        !          2157: 
        !          2158:            i--;
        !          2159:        }
        !          2160: 
        !          2161:        if (presence_variable == d_faux)
        !          2162:        {
        !          2163:            if (last_valide == d_vrai)
        !          2164:            {
        !          2165:                sf(s_etat_processus, 31);
        !          2166:            }
        !          2167: 
        !          2168:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          2169:            return;
        !          2170:        }
        !          2171: 
        !          2172:        if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
        !          2173:        {
        !          2174:            (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
        !          2175:            return;
        !          2176:        }
        !          2177: 
        !          2178:        /*
        !          2179:         * Création du fichier graphique temporaire
        !          2180:         */
        !          2181: 
        !          2182:        if ((nom_fichier = creation_nom_fichier(s_etat_processus,
        !          2183:                (*s_etat_processus).chemin_fichiers_temporaires)) == NULL)
        !          2184:        {
        !          2185:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2186:            return;
        !          2187:        }
        !          2188: 
        !          2189:        if ((fichier = fopen(nom_fichier, "w+")) == NULL)
        !          2190:        {
        !          2191:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2192:            return;
        !          2193:        }
        !          2194: 
        !          2195:        /*
        !          2196:         * Récupération du domaine de variation de x
        !          2197:         */
        !          2198: 
        !          2199:        if ((*(*s_etat_processus).indep).type == LST)
        !          2200:        {
        !          2201:            l_element_courant = (*(*s_etat_processus).indep).objet;
        !          2202: 
        !          2203:            if ((s_variable_x.nom = malloc((strlen((*((struct_nom *)
        !          2204:                    (*(*l_element_courant).donnee).objet)).nom) + 1) *
        !          2205:                    sizeof(unsigned char))) == NULL)
        !          2206:            {
        !          2207:                if (fclose(fichier) != 0)
        !          2208:                {
        !          2209:                    (*s_etat_processus).erreur_systeme =
        !          2210:                            d_es_erreur_fichier;
        !          2211:                    return;
        !          2212:                }
        !          2213: 
        !          2214:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          2215:                {
        !          2216:                    (*s_etat_processus).erreur_systeme =
        !          2217:                            d_es_erreur_fichier;
        !          2218:                    return;
        !          2219:                }
        !          2220: 
        !          2221:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2222:                return;
        !          2223:            }
        !          2224: 
        !          2225:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*l_element_courant)
        !          2226:                    .donnee).objet)).nom);
        !          2227: 
        !          2228:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1) *
        !          2229:                    sizeof(unsigned char))) == NULL)
        !          2230:            {
        !          2231:                if (fclose(fichier) != 0)
        !          2232:                {
        !          2233:                    (*s_etat_processus).erreur_systeme =
        !          2234:                            d_es_erreur_fichier;
        !          2235:                    return;
        !          2236:                }
        !          2237: 
        !          2238:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          2239:                {
        !          2240:                    (*s_etat_processus).erreur_systeme =
        !          2241:                            d_es_erreur_fichier;
        !          2242:                    return;
        !          2243:                }
        !          2244: 
        !          2245:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2246:                return;
        !          2247:            }
        !          2248: 
        !          2249:            strcpy(nom_x, s_variable_x.nom);
        !          2250: 
        !          2251:            l_element_courant = (*l_element_courant).suivant;
        !          2252: 
        !          2253:            if ((*(*l_element_courant).donnee).type == INT)
        !          2254:            {
        !          2255:                borne_minimale_x = (real8) (*((integer8 *)
        !          2256:                        (*(*l_element_courant).donnee).objet));
        !          2257:            }
        !          2258:            else if ((*(*l_element_courant).donnee).type == INT)
        !          2259:            {
        !          2260:                borne_minimale_x = (*((real8 *) (*(*l_element_courant)
        !          2261:                        .donnee).objet));
        !          2262:            }
        !          2263:            else
        !          2264:            {
        !          2265:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          2266:                        'N') == d_erreur)
        !          2267:                {
        !          2268:                    free(s_variable_x.nom);
        !          2269:                    free(nom_x);
        !          2270: 
        !          2271:                    if (fclose(fichier) != 0)
        !          2272:                    {
        !          2273:                        (*s_etat_processus).erreur_systeme =
        !          2274:                                d_es_erreur_fichier;
        !          2275:                        return;
        !          2276:                    }
        !          2277: 
        !          2278:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2279:                    {
        !          2280:                        (*s_etat_processus).erreur_systeme =
        !          2281:                                d_es_erreur_fichier;
        !          2282:                        return;
        !          2283:                    }
        !          2284: 
        !          2285:                    if (last_valide == d_vrai)
        !          2286:                    {
        !          2287:                        sf(s_etat_processus, 31);
        !          2288:                    }
        !          2289: 
        !          2290:                    free(nom_fichier);
        !          2291:                    return;
        !          2292:                }
        !          2293: 
        !          2294:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          2295:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          2296:                {
        !          2297:                    free(s_variable_x.nom);
        !          2298:                    free(nom_x);
        !          2299: 
        !          2300:                    if (fclose(fichier) != 0)
        !          2301:                    {
        !          2302:                        (*s_etat_processus).erreur_systeme =
        !          2303:                                d_es_erreur_fichier;
        !          2304:                        return;
        !          2305:                    }
        !          2306: 
        !          2307:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2308:                    {
        !          2309:                        (*s_etat_processus).erreur_systeme =
        !          2310:                                d_es_erreur_fichier;
        !          2311:                        return;
        !          2312:                    }
        !          2313: 
        !          2314:                    (*s_etat_processus).erreur_execution =
        !          2315:                            d_ex_manque_argument;
        !          2316: 
        !          2317:                    if (last_valide == d_vrai)
        !          2318:                    {
        !          2319:                        sf(s_etat_processus, 31);
        !          2320:                    }
        !          2321: 
        !          2322:                    free(nom_fichier);
        !          2323:                    return;
        !          2324:                }
        !          2325: 
        !          2326:                if ((*s_objet_evalue).type == INT)
        !          2327:                {
        !          2328:                    borne_minimale_x = (real8) (*((integer8 *)
        !          2329:                            (*s_objet_evalue).objet));
        !          2330:                }
        !          2331:                else if ((*s_objet_evalue).type == REL)
        !          2332:                {
        !          2333:                    borne_minimale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          2334:                }
        !          2335:                else
        !          2336:                {
        !          2337:                    if (fclose(fichier) != 0)
        !          2338:                    {
        !          2339:                        (*s_etat_processus).erreur_systeme =
        !          2340:                                d_es_erreur_fichier;
        !          2341:                        return;
        !          2342:                    }
        !          2343: 
        !          2344:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2345:                    {
        !          2346:                        (*s_etat_processus).erreur_systeme =
        !          2347:                                d_es_erreur_fichier;
        !          2348:                        return;
        !          2349:                    }
        !          2350: 
        !          2351:                    free(s_variable_x.nom);
        !          2352:                    free(nom_x);
        !          2353:                    liberation(s_etat_processus, s_objet_evalue);
        !          2354: 
        !          2355:                    (*s_etat_processus).erreur_execution =
        !          2356:                            d_ex_erreur_type_argument;
        !          2357: 
        !          2358:                    if (last_valide == d_vrai)
        !          2359:                    {
        !          2360:                        sf(s_etat_processus, 31);
        !          2361:                    }
        !          2362: 
        !          2363:                    free(nom_fichier);
        !          2364:                    return;
        !          2365:                }
        !          2366: 
        !          2367:                liberation(s_etat_processus, s_objet_evalue);
        !          2368:            }
        !          2369: 
        !          2370:            l_element_courant = (*l_element_courant).suivant;
        !          2371: 
        !          2372:            if ((*(*l_element_courant).donnee).type == INT)
        !          2373:            {
        !          2374:                borne_maximale_x = (real8) (*((integer8 *)
        !          2375:                        (*(*l_element_courant).donnee).objet));
        !          2376:            }
        !          2377:            else if ((*(*l_element_courant).donnee).type == REL)
        !          2378:            {
        !          2379:                borne_maximale_x = (*((real8 *) (*(*l_element_courant)
        !          2380:                        .donnee).objet));
        !          2381:            }
        !          2382:            else
        !          2383:            {
        !          2384:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          2385:                        'N') == d_erreur)
        !          2386:                {
        !          2387:                    free(s_variable_x.nom);
        !          2388:                    free(nom_x);
        !          2389: 
        !          2390:                    if (fclose(fichier) != 0)
        !          2391:                    {
        !          2392:                        (*s_etat_processus).erreur_systeme =
        !          2393:                                d_es_erreur_fichier;
        !          2394:                        return;
        !          2395:                    }
        !          2396: 
        !          2397:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2398:                    {
        !          2399:                        (*s_etat_processus).erreur_systeme =
        !          2400:                                d_es_erreur_fichier;
        !          2401:                        return;
        !          2402:                    }
        !          2403: 
        !          2404:                    if (last_valide == d_vrai)
        !          2405:                    {
        !          2406:                        sf(s_etat_processus, 31);
        !          2407:                    }
        !          2408: 
        !          2409:                    free(nom_fichier);
        !          2410:                    return;
        !          2411:                }
        !          2412: 
        !          2413:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          2414:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          2415:                {
        !          2416:                    free(s_variable_x.nom);
        !          2417:                    free(nom_x);
        !          2418: 
        !          2419:                    if (fclose(fichier) != 0)
        !          2420:                    {
        !          2421:                        (*s_etat_processus).erreur_systeme =
        !          2422:                                d_es_erreur_fichier;
        !          2423:                        return;
        !          2424:                    }
        !          2425: 
        !          2426:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2427:                    {
        !          2428:                        (*s_etat_processus).erreur_systeme =
        !          2429:                                d_es_erreur_fichier;
        !          2430:                        return;
        !          2431:                    }
        !          2432: 
        !          2433:                    (*s_etat_processus).erreur_execution =
        !          2434:                            d_ex_manque_argument;
        !          2435: 
        !          2436:                    if (last_valide == d_vrai)
        !          2437:                    {
        !          2438:                        sf(s_etat_processus, 31);
        !          2439:                    }
        !          2440: 
        !          2441:                    free(nom_fichier);
        !          2442:                    return;
        !          2443:                }
        !          2444: 
        !          2445:                if ((*s_objet_evalue).type == INT)
        !          2446:                {
        !          2447:                    borne_maximale_x = (real8) (*((integer8 *)
        !          2448:                            (*s_objet_evalue).objet));
        !          2449:                }
        !          2450:                else if ((*s_objet_evalue).type == REL)
        !          2451:                {
        !          2452:                    borne_maximale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          2453:                }
        !          2454:                else
        !          2455:                {
        !          2456:                    free(s_variable_x.nom);
        !          2457:                    free(nom_x);
        !          2458: 
        !          2459:                    if (fclose(fichier) != 0)
        !          2460:                    {
        !          2461:                        (*s_etat_processus).erreur_systeme =
        !          2462:                                d_es_erreur_fichier;
        !          2463:                        return;
        !          2464:                    }
        !          2465: 
        !          2466:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2467:                    {
        !          2468:                        (*s_etat_processus).erreur_systeme =
        !          2469:                                d_es_erreur_fichier;
        !          2470:                        return;
        !          2471:                    }
        !          2472: 
        !          2473:                    liberation(s_etat_processus, s_objet_evalue);
        !          2474: 
        !          2475:                    (*s_etat_processus).erreur_execution =
        !          2476:                            d_ex_erreur_type_argument;
        !          2477: 
        !          2478:                    if (last_valide == d_vrai)
        !          2479:                    {
        !          2480:                        sf(s_etat_processus, 31);
        !          2481:                    }
        !          2482: 
        !          2483:                    free(nom_fichier);
        !          2484:                    return;
        !          2485:                }
        !          2486: 
        !          2487:                liberation(s_etat_processus, s_objet_evalue);
        !          2488:            }
        !          2489:        }
        !          2490:        else
        !          2491:        {
        !          2492:            if (fclose(fichier) != 0)
        !          2493:            {
        !          2494:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2495:                return;
        !          2496:            }
        !          2497: 
        !          2498:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          2499:            {
        !          2500:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2501:                return;
        !          2502:            }
        !          2503: 
        !          2504:            if (last_valide == d_vrai)
        !          2505:            {
        !          2506:                sf(s_etat_processus, 31);
        !          2507:            }
        !          2508: 
        !          2509:            (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          2510: 
        !          2511:            free(nom_fichier);
        !          2512:            return;
        !          2513:        }
        !          2514: 
        !          2515:        /*
        !          2516:         * Création d'une variable locale du nom pointé par INDEP
        !          2517:         */
        !          2518: 
        !          2519:        (*s_etat_processus).niveau_courant++;
        !          2520:        s_variable_x.niveau = (*s_etat_processus).niveau_courant;
        !          2521: 
        !          2522:        if ((s_variable_x.objet = allocation(s_etat_processus, REL)) == NULL)
        !          2523:        {
        !          2524:            if (fclose(fichier) != 0)
        !          2525:            {
        !          2526:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2527:                return;
        !          2528:            }
        !          2529: 
        !          2530:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          2531:            {
        !          2532:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2533:                return;
        !          2534:            }
        !          2535: 
        !          2536:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2537:            return;
        !          2538:        }
        !          2539: 
        !          2540:        if (creation_variable(s_etat_processus, &s_variable_x, 'V', 'P')
        !          2541:                == d_erreur)
        !          2542:        {
        !          2543:            if (fclose(fichier) != 0)
        !          2544:            {
        !          2545:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2546:                return;
        !          2547:            }
        !          2548: 
        !          2549:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          2550:            {
        !          2551:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2552:                return;
        !          2553:            }
        !          2554: 
        !          2555:            /*
        !          2556:             * L'erreur retournée ne peut être qu'une erreur système
        !          2557:             */
        !          2558: 
        !          2559:            free(nom_fichier);
        !          2560:            return;
        !          2561:        }
        !          2562: 
        !          2563:        /*
        !          2564:         * Boucle de calcul des points de la fonction
        !          2565:         */
        !          2566: 
        !          2567:        if (borne_maximale_x < borne_minimale_x)
        !          2568:        {
        !          2569:            t = borne_maximale_x;
        !          2570:            borne_maximale_x = borne_minimale_x;
        !          2571:            borne_minimale_x = t;
        !          2572:        }
        !          2573: 
        !          2574:        for(t = borne_minimale_x; t <= borne_maximale_x;
        !          2575:                t += (*s_etat_processus).resolution)
        !          2576:        {
        !          2577:            if (recherche_variable(s_etat_processus, nom_x) == d_vrai)
        !          2578:            {
        !          2579:                // La variable étant créée localement, elle n'est jamais
        !          2580:                // ni verrouillée ni partagée.
        !          2581: 
        !          2582:                BUG(((*s_etat_processus).s_liste_variables
        !          2583:                        [(*s_etat_processus).position_variable_courante])
        !          2584:                        .objet == NULL);
        !          2585: 
        !          2586:                if ((*((*s_etat_processus).s_liste_variables
        !          2587:                        [(*s_etat_processus).position_variable_courante])
        !          2588:                        .objet).type != REL)
        !          2589:                {
        !          2590:                    liberation(s_etat_processus,
        !          2591:                            ((*s_etat_processus).s_liste_variables
        !          2592:                            [(*s_etat_processus).position_variable_courante])
        !          2593:                            .objet);
        !          2594: 
        !          2595:                    if ((((*s_etat_processus).s_liste_variables
        !          2596:                            [(*s_etat_processus).position_variable_courante])
        !          2597:                            .objet = allocation(s_etat_processus, REL))
        !          2598:                            == NULL)
        !          2599:                    {
        !          2600:                        (*s_etat_processus).erreur_systeme =
        !          2601:                                d_es_allocation_memoire;
        !          2602:                        return;
        !          2603:                    }
        !          2604:                }
        !          2605: 
        !          2606:                (*((real8 *) (*((*s_etat_processus).s_liste_variables
        !          2607:                        [(*s_etat_processus).position_variable_courante])
        !          2608:                        .objet).objet)) = t;
        !          2609:            }
        !          2610:            else
        !          2611:            {
        !          2612:                /*
        !          2613:                 * La variable créée étant locale, l'utilisateur ne peut
        !          2614:                 * pas l'effacer. On ne doit donc jamais passer par ici. Si
        !          2615:                 * c'est néanmoins le cas, une erreur système est générée
        !          2616:                 * provoquant l'arrêt du programme même dans une
        !          2617:                 * structure IFERR.
        !          2618:                 */
        !          2619: 
        !          2620:                if (fclose(fichier) != 0)
        !          2621:                {
        !          2622:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2623:                    return;
        !          2624:                }
        !          2625: 
        !          2626:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          2627:                {
        !          2628:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2629:                    return;
        !          2630:                }
        !          2631: 
        !          2632:                if (last_valide == d_vrai)
        !          2633:                {
        !          2634:                    sf(s_etat_processus, 31);
        !          2635:                }
        !          2636: 
        !          2637:                free(nom_fichier);
        !          2638:                return;
        !          2639:            }
        !          2640: 
        !          2641:            if (recherche_variable(s_etat_processus, "EQ")
        !          2642:                    == d_faux)
        !          2643:            {
        !          2644:                /*
        !          2645:                 * Aucune variable "EQ" n'existe.
        !          2646:                 */
        !          2647: 
        !          2648:                (*s_etat_processus).erreur_execution =
        !          2649:                        d_ex_variable_non_definie;
        !          2650: 
        !          2651:                /*
        !          2652:                 * Retrait de la variable INDEP
        !          2653:                 */
        !          2654: 
        !          2655:                (*s_etat_processus).niveau_courant--;
        !          2656: 
        !          2657:                if (fclose(fichier) != 0)
        !          2658:                {
        !          2659:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2660:                    return;
        !          2661:                }
        !          2662: 
        !          2663:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          2664:                {
        !          2665:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2666:                    return;
        !          2667:                }
        !          2668: 
        !          2669:                if (retrait_variable(s_etat_processus, nom_x, 'L')
        !          2670:                        == d_erreur)
        !          2671:                {
        !          2672:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !          2673:                    {
        !          2674:                        if ((*s_etat_processus).erreur_systeme ==
        !          2675:                                d_es_variable_introuvable)
        !          2676:                        {
        !          2677:                            (*s_etat_processus).erreur_systeme = d_es;
        !          2678:                        }
        !          2679:                        else
        !          2680:                        {
        !          2681: 
        !          2682:                        /*
        !          2683:                         * Erreur système
        !          2684:                         */
        !          2685: 
        !          2686:                            free(nom_fichier);
        !          2687:                            return;
        !          2688:                        }
        !          2689:                    }
        !          2690: 
        !          2691:                    free(nom_x);
        !          2692:                    free(nom_fichier);
        !          2693: 
        !          2694:                    if (last_valide == d_vrai)
        !          2695:                    {
        !          2696:                        sf(s_etat_processus, 31);
        !          2697:                    }
        !          2698: 
        !          2699:                    (*s_etat_processus).erreur_execution =
        !          2700:                            d_ex_variable_non_definie;
        !          2701:                    return;
        !          2702:                }
        !          2703: 
        !          2704:                if (last_valide == d_vrai)
        !          2705:                {
        !          2706:                    sf(s_etat_processus, 31);
        !          2707:                }
        !          2708: 
        !          2709:                free(nom_x);
        !          2710:                free(nom_fichier);
        !          2711:                return;
        !          2712:            }
        !          2713: 
        !          2714:            /*
        !          2715:             * Recherche de la variable globale "EQ"
        !          2716:             */
        !          2717:            
        !          2718:            i = (*s_etat_processus).position_variable_courante;
        !          2719:            presence_variable = d_faux;
        !          2720: 
        !          2721:            while(i >= 0)
        !          2722:            {
        !          2723:                if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          2724:                        "EQ") == 0) && ((*s_etat_processus)
        !          2725:                        .s_liste_variables[i].niveau == 1))
        !          2726:                {
        !          2727:                    presence_variable = d_vrai;
        !          2728:                    break;
        !          2729:                }
        !          2730: 
        !          2731:                i--;
        !          2732:            }
        !          2733: 
        !          2734:            (*s_etat_processus).position_variable_courante = i;
        !          2735: 
        !          2736:            BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);
        !          2737: 
        !          2738:            if (presence_variable == d_faux)
        !          2739:            {
        !          2740:                /*
        !          2741:                 * Retrait de la variable INDEP
        !          2742:                 */
        !          2743: 
        !          2744:                (*s_etat_processus).niveau_courant--;
        !          2745: 
        !          2746:                if (fclose(fichier) != 0)
        !          2747:                {
        !          2748:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2749:                    return;
        !          2750:                }
        !          2751: 
        !          2752:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          2753:                {
        !          2754:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          2755:                    return;
        !          2756:                }
        !          2757: 
        !          2758:                if (retrait_variable(s_etat_processus, nom_x, 'L')
        !          2759:                        == d_erreur)
        !          2760:                {
        !          2761:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !          2762:                    {
        !          2763:                        if ((*s_etat_processus).erreur_systeme ==
        !          2764:                                d_es_variable_introuvable)
        !          2765:                        {
        !          2766:                            (*s_etat_processus).erreur_systeme = d_es;
        !          2767:                        }
        !          2768:                        else
        !          2769:                        {
        !          2770: 
        !          2771:                        /*
        !          2772:                         * Erreur système
        !          2773:                         */
        !          2774: 
        !          2775:                            free(nom_fichier);
        !          2776:                            return;
        !          2777:                        }
        !          2778:                    }
        !          2779: 
        !          2780:                    free(nom_x);
        !          2781:                    free(nom_fichier);
        !          2782: 
        !          2783:                    if (last_valide == d_vrai)
        !          2784:                    {
        !          2785:                        sf(s_etat_processus, 31);
        !          2786:                    }
        !          2787: 
        !          2788:                    (*s_etat_processus).erreur_execution =
        !          2789:                            d_ex_variable_non_definie;
        !          2790:                    return;
        !          2791:                }
        !          2792: 
        !          2793:                free(nom_x);
        !          2794:                free(nom_fichier);
        !          2795: 
        !          2796:                if (last_valide == d_vrai)
        !          2797:                {
        !          2798:                    sf(s_etat_processus, 31);
        !          2799:                }
        !          2800: 
        !          2801:                (*s_etat_processus).erreur_execution =
        !          2802:                        d_ex_variable_non_definie;
        !          2803:                return;
        !          2804:            }
        !          2805: 
        !          2806:            /*
        !          2807:             * Evaluation de la fonction
        !          2808:             */
        !          2809: 
        !          2810:            hauteur_pile = (*s_etat_processus).hauteur_pile_operationnelle;
        !          2811:            l_position_normale = (*s_etat_processus).l_base_pile_systeme;
        !          2812:            niveau_courant = (*s_etat_processus).niveau_courant;
        !          2813: 
        !          2814:            (*s_etat_processus).erreur_execution = d_ex;
        !          2815:            (*s_etat_processus).exception = d_ep;
        !          2816: 
        !          2817:            if (evaluation(s_etat_processus, (*s_etat_processus)
        !          2818:                    .s_liste_variables[(*s_etat_processus)
        !          2819:                    .position_variable_courante].objet, 'N') == d_erreur)
        !          2820:            {
        !          2821:                if ((*s_etat_processus).erreur_systeme != d_es)
        !          2822:                {
        !          2823:                    /*
        !          2824:                     * Erreur système
        !          2825:                     */
        !          2826: 
        !          2827:                    free(nom_fichier);
        !          2828:                    return;
        !          2829:                }
        !          2830:                else
        !          2831:                {
        !          2832:                    retour_suite_erreur = d_faux;
        !          2833:                    (*s_etat_processus).niveau_courant = niveau_courant;
        !          2834: 
        !          2835:                    /*
        !          2836:                     * Restauration de la pile initiale
        !          2837:                     */
        !          2838: 
        !          2839:                    while((*s_etat_processus).hauteur_pile_operationnelle >
        !          2840:                            (unsigned long) hauteur_pile)
        !          2841:                    {
        !          2842:                        if (depilement(s_etat_processus, &((*s_etat_processus)
        !          2843:                                .l_base_pile), &s_objet) == d_erreur)
        !          2844:                        {
        !          2845:                            (*s_etat_processus).erreur_execution =
        !          2846:                                    d_ex_manque_argument;
        !          2847:                            retour_suite_erreur = d_vrai;
        !          2848:                            break;
        !          2849:                        }
        !          2850: 
        !          2851:                        liberation(s_etat_processus, s_objet);
        !          2852:                    }
        !          2853: 
        !          2854:                    /*
        !          2855:                     * Restauration de la pile système
        !          2856:                     */
        !          2857: 
        !          2858:                    while((*s_etat_processus).l_base_pile_systeme !=
        !          2859:                            l_position_normale)
        !          2860:                    {
        !          2861:                        depilement_pile_systeme(s_etat_processus);
        !          2862: 
        !          2863:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          2864:                        {
        !          2865:                            /*
        !          2866:                             * Une pile vide provoque une erreur système
        !          2867:                             */
        !          2868: 
        !          2869:                            free(nom_fichier);
        !          2870:                            return;
        !          2871:                        }
        !          2872:                    }
        !          2873: 
        !          2874:                    if (retour_suite_erreur == d_vrai)
        !          2875:                    {
        !          2876:                        /*
        !          2877:                         * Retrait de la variable INDEP et retour
        !          2878:                         */
        !          2879: 
        !          2880:                        (*s_etat_processus).niveau_courant--;
        !          2881: 
        !          2882:                        if (fclose(fichier) != 0)
        !          2883:                        {
        !          2884:                            (*s_etat_processus).erreur_systeme =
        !          2885:                                    d_es_erreur_fichier;
        !          2886:                            return;
        !          2887:                        }
        !          2888: 
        !          2889:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          2890:                        {
        !          2891:                            (*s_etat_processus).erreur_systeme =
        !          2892:                                    d_es_erreur_fichier;
        !          2893:                            return;
        !          2894:                        }
        !          2895: 
        !          2896:                        if (retrait_variable(s_etat_processus,
        !          2897:                                nom_x, 'L') == d_erreur)
        !          2898:                        {
        !          2899:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !          2900:                            {
        !          2901:                                if ((*s_etat_processus).erreur_systeme ==
        !          2902:                                        d_es_variable_introuvable)
        !          2903:                                {
        !          2904:                                    (*s_etat_processus).erreur_systeme =
        !          2905:                                            d_es;
        !          2906:                                }
        !          2907:                                else
        !          2908:                                {
        !          2909: 
        !          2910:                                /*
        !          2911:                                 * Erreur système
        !          2912:                                 */
        !          2913: 
        !          2914:                                    free(nom_fichier);
        !          2915:                                    return;
        !          2916:                                }
        !          2917:                            }
        !          2918: 
        !          2919:                            (*s_etat_processus).erreur_execution =
        !          2920:                                    d_ex_variable_non_definie;
        !          2921:                        }
        !          2922: 
        !          2923:                        if (last_valide == d_vrai)
        !          2924:                        {
        !          2925:                            sf(s_etat_processus, 31);
        !          2926:                        }
        !          2927: 
        !          2928:                        free(nom_x);
        !          2929:                        free(nom_fichier);
        !          2930:                        return;
        !          2931:                    }
        !          2932:                }
        !          2933: 
        !          2934:                (*s_etat_processus).erreur_execution = d_ex;
        !          2935:                (*s_etat_processus).exception = d_ep;
        !          2936:            }
        !          2937:            else
        !          2938:            {
        !          2939:                /*
        !          2940:                 * Donnée valide à écrire dans le fichier
        !          2941:                 */
        !          2942: 
        !          2943:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          2944:                        .l_base_pile), &s_objet) == d_erreur)
        !          2945:                {
        !          2946: 
        !          2947:                    /*
        !          2948:                     * Retrait de la variable INDEP et retour
        !          2949:                     */
        !          2950: 
        !          2951:                    (*s_etat_processus).niveau_courant--;
        !          2952: 
        !          2953:                    if (fclose(fichier) != 0)
        !          2954:                    {
        !          2955:                        (*s_etat_processus).erreur_systeme =
        !          2956:                                d_es_erreur_fichier;
        !          2957:                        return;
        !          2958:                    }
        !          2959: 
        !          2960:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          2961:                    {
        !          2962:                        (*s_etat_processus).erreur_systeme =
        !          2963:                                d_es_erreur_fichier;
        !          2964:                        return;
        !          2965:                    }
        !          2966: 
        !          2967:                    if (retrait_variable(s_etat_processus, nom_x,
        !          2968:                            'L') == d_erreur)
        !          2969:                    {
        !          2970:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          2971:                        {
        !          2972:                            if ((*s_etat_processus).erreur_systeme ==
        !          2973:                                    d_es_variable_introuvable)
        !          2974:                            {
        !          2975:                                (*s_etat_processus).erreur_systeme = d_es;
        !          2976:                            }
        !          2977:                            else
        !          2978:                            {
        !          2979: 
        !          2980:                            /*
        !          2981:                             * Erreur système
        !          2982:                             */
        !          2983: 
        !          2984:                                free(nom_fichier);
        !          2985:                                return;
        !          2986:                            }
        !          2987:                        }
        !          2988: 
        !          2989:                        free(nom_x);
        !          2990:                        free(nom_fichier);
        !          2991: 
        !          2992:                        if (last_valide == d_vrai)
        !          2993:                        {
        !          2994:                            sf(s_etat_processus, 31);
        !          2995:                        }
        !          2996: 
        !          2997:                        (*s_etat_processus).erreur_execution =
        !          2998:                                d_ex_variable_non_definie;
        !          2999:                        return;
        !          3000:                    }
        !          3001: 
        !          3002:                    free(nom_x);
        !          3003:                    free(nom_fichier);
        !          3004: 
        !          3005:                    if (last_valide == d_vrai)
        !          3006:                    {
        !          3007:                        sf(s_etat_processus, 31);
        !          3008:                    }
        !          3009: 
        !          3010:                    (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          3011:                    return;
        !          3012:                }
        !          3013: 
        !          3014:                if ((*s_objet).type == INT)
        !          3015:                {
        !          3016:                    x = (double) (*((integer8 *) (*s_objet).objet));
        !          3017:                    y = 0;
        !          3018: 
        !          3019:                    if (fprintf(fichier, "%f %f\n", x, y) < 0)
        !          3020:                    {
        !          3021:                        (*s_etat_processus).erreur_systeme =
        !          3022:                                d_es_erreur_fichier;
        !          3023:                        return;
        !          3024:                    }
        !          3025:                }
        !          3026:                else if ((*s_objet).type == REL)
        !          3027:                {
        !          3028:                    x = (double) (*((real8 *) (*s_objet).objet));
        !          3029:                    y = 0;
        !          3030: 
        !          3031:                    if (fprintf(fichier, "%f %f\n", x, y) < 0)
        !          3032:                    {
        !          3033:                        (*s_etat_processus).erreur_systeme =
        !          3034:                                d_es_erreur_fichier;
        !          3035:                        return;
        !          3036:                    }
        !          3037:                }
        !          3038:                else if ((*s_objet).type == CPL)
        !          3039:                {
        !          3040:                    x = (*((complex16 *) (*s_objet).objet)).partie_reelle;
        !          3041:                    y = (*((complex16 *) (*s_objet).objet)).partie_imaginaire;
        !          3042: 
        !          3043:                    if (fprintf(fichier, "%f %f\n", x, y) < 0)
        !          3044:                    {
        !          3045:                        (*s_etat_processus).erreur_systeme =
        !          3046:                                d_es_erreur_fichier;
        !          3047:                        return;
        !          3048:                    }
        !          3049:                }
        !          3050: 
        !          3051:                liberation(s_etat_processus, s_objet);
        !          3052:            }
        !          3053:        }
        !          3054: 
        !          3055:        /*
        !          3056:         * Retrait de la variable locale
        !          3057:         */
        !          3058: 
        !          3059:        (*s_etat_processus).niveau_courant--;
        !          3060: 
        !          3061:        if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          3062:        {
        !          3063:            if ((*s_etat_processus).erreur_systeme != d_es)
        !          3064:            {
        !          3065:                if ((*s_etat_processus).erreur_systeme ==
        !          3066:                        d_es_variable_introuvable)
        !          3067:                {
        !          3068:                    (*s_etat_processus).erreur_systeme = d_es;
        !          3069:                }
        !          3070:                else
        !          3071:                {
        !          3072:                    /*
        !          3073:                     * Erreur système
        !          3074:                     */
        !          3075: 
        !          3076:                    free(nom_fichier);
        !          3077:                    return;
        !          3078:                }
        !          3079:            }
        !          3080: 
        !          3081:            free(nom_x);
        !          3082:            free(nom_fichier);
        !          3083: 
        !          3084:            if (last_valide == d_vrai)
        !          3085:            {
        !          3086:                sf(s_etat_processus, 31);
        !          3087:            }
        !          3088: 
        !          3089:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !          3090:            return;
        !          3091:        }
        !          3092: 
        !          3093:        free(nom_x);
        !          3094:    }
        !          3095: 
        !          3096:    /*
        !          3097:     * Tracé z=f(x,y)
        !          3098:     * Les bornes de variation de X sont données dans l'ordre
        !          3099:     * - soit sous la forme "{ X X_min X_max } INDEP" ;
        !          3100:     * - soit par les parties réelles de PMIN et PMAX.
        !          3101:     * Les bornes de variation de Y sont données dans l'ordre
        !          3102:     * - soit sous la forme "{ Y Y_min Y_max } DEPND" ;
        !          3103:     * - soit par les parties imaginaires de PMIN et PMAX.
        !          3104:     * INDEP et DEPND testent leurs arguments pour que les pointeurs
        !          3105:     * indep et depend désignent des objets de type NOM ou LST à
        !          3106:     * trois éléments.
        !          3107:     */
        !          3108: 
        !          3109:    else if ((strcmp((*s_etat_processus).type_trace_eq, "GRILLE 3D") == 0) ||
        !          3110:            (strcmp((*s_etat_processus).type_trace_eq, "COURBES DE NIVEAU")
        !          3111:            == 0))
        !          3112:    {
        !          3113:        premiere_iteration = d_vrai;
        !          3114: 
        !          3115:        /*
        !          3116:         * Vérification de la présence de la variable globale EQ
        !          3117:         */
        !          3118:        
        !          3119:        if (recherche_variable(s_etat_processus, "EQ") == d_faux)
        !          3120:        {
        !          3121:            /*
        !          3122:             * Aucune variable "EQ" n'existe.
        !          3123:             */
        !          3124: 
        !          3125:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          3126:            (*s_etat_processus).erreur_systeme = d_es;
        !          3127: 
        !          3128:            return;
        !          3129:        }
        !          3130: 
        !          3131:        /*
        !          3132:         * Recherche de la variable globale "EQ"
        !          3133:         */
        !          3134:        
        !          3135:        i = (*s_etat_processus).position_variable_courante;
        !          3136:        presence_variable = d_faux;
        !          3137: 
        !          3138:        while(i >= 0)
        !          3139:        {
        !          3140:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          3141:                    "EQ") == 0) && ((*s_etat_processus)
        !          3142:                    .s_liste_variables[i].niveau == 1))
        !          3143:            {
        !          3144:                presence_variable = d_vrai;
        !          3145:                break;
        !          3146:            }
        !          3147: 
        !          3148:            i--;
        !          3149:        }
        !          3150: 
        !          3151:        if (presence_variable == d_faux)
        !          3152:        {
        !          3153:            if (last_valide == d_vrai)
        !          3154:            {
        !          3155:                sf(s_etat_processus, 31);
        !          3156:            }
        !          3157: 
        !          3158:            (*s_etat_processus).erreur_execution = d_ex_absence_equation;
        !          3159:            return;
        !          3160:        }
        !          3161: 
        !          3162:        if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
        !          3163:        {
        !          3164:            (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
        !          3165:            return;
        !          3166:        }
        !          3167: 
        !          3168:        /*
        !          3169:         * Création du fichier graphique temporaire
        !          3170:         */
        !          3171: 
        !          3172:        if ((nom_fichier = creation_nom_fichier(s_etat_processus,
        !          3173:                (*s_etat_processus).chemin_fichiers_temporaires)) == NULL)
        !          3174:        {
        !          3175:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3176:            return;
        !          3177:        }
        !          3178: 
        !          3179:        if ((fichier = fopen(nom_fichier, "w+")) == NULL)
        !          3180:        {
        !          3181:            (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3182:            return;
        !          3183:        }
        !          3184: 
        !          3185:        /*
        !          3186:         * Récupération du domaine de variation de x
        !          3187:         */
        !          3188: 
        !          3189:        if ((*(*s_etat_processus).indep).type == LST)
        !          3190:        {
        !          3191:            l_element_courant = (*(*s_etat_processus).indep).objet;
        !          3192: 
        !          3193:            if ((s_variable_x.nom = malloc((strlen((*((struct_nom *)
        !          3194:                    (*(*l_element_courant).donnee).objet)).nom) + 1) *
        !          3195:                    sizeof(unsigned char))) == NULL)
        !          3196:            {
        !          3197:                if (fclose(fichier) != 0)
        !          3198:                {
        !          3199:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3200:                    return;
        !          3201:                }
        !          3202: 
        !          3203:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          3204:                {
        !          3205:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3206:                    return;
        !          3207:                }
        !          3208: 
        !          3209:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3210:                return;
        !          3211:            }
        !          3212: 
        !          3213:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*l_element_courant)
        !          3214:                    .donnee).objet)).nom);
        !          3215: 
        !          3216:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1) *
        !          3217:                    sizeof(unsigned char))) == NULL)
        !          3218:            {
        !          3219:                if (fclose(fichier) != 0)
        !          3220:                {
        !          3221:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3222:                    return;
        !          3223:                }
        !          3224: 
        !          3225:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          3226:                {
        !          3227:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3228:                    return;
        !          3229:                }
        !          3230: 
        !          3231:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3232:                return;
        !          3233:            }
        !          3234: 
        !          3235:            strcpy(nom_x, s_variable_x.nom);
        !          3236: 
        !          3237:            l_element_courant = (*l_element_courant).suivant;
        !          3238: 
        !          3239:            if ((*(*l_element_courant).donnee).type == INT)
        !          3240:            {
        !          3241:                borne_minimale_x = (real8) (*((integer8 *)
        !          3242:                        (*(*l_element_courant).donnee).objet));
        !          3243:            }
        !          3244:            else if ((*(*l_element_courant).donnee).type == REL)
        !          3245:            {
        !          3246:                borne_minimale_x = (*((real8 *) (*(*l_element_courant)
        !          3247:                        .donnee).objet));
        !          3248:            }
        !          3249:            else
        !          3250:            {
        !          3251:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          3252:                        'N') == d_erreur)
        !          3253:                {
        !          3254:                    free(s_variable_x.nom);
        !          3255:                    free(nom_x);
        !          3256: 
        !          3257:                    if (fclose(fichier) != 0)
        !          3258:                    {
        !          3259:                        (*s_etat_processus).erreur_systeme =
        !          3260:                                d_es_erreur_fichier;
        !          3261:                        return;
        !          3262:                    }
        !          3263: 
        !          3264:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3265:                    {
        !          3266:                        (*s_etat_processus).erreur_systeme =
        !          3267:                                d_es_erreur_fichier;
        !          3268:                        return;
        !          3269:                    }
        !          3270: 
        !          3271:                    if (last_valide == d_vrai)
        !          3272:                    {
        !          3273:                        sf(s_etat_processus, 31);
        !          3274:                    }
        !          3275: 
        !          3276:                    free(nom_fichier);
        !          3277:                    return;
        !          3278:                }
        !          3279: 
        !          3280:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          3281:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          3282:                {
        !          3283:                    free(s_variable_x.nom);
        !          3284:                    free(nom_x);
        !          3285: 
        !          3286:                    if (fclose(fichier) != 0)
        !          3287:                    {
        !          3288:                        (*s_etat_processus).erreur_systeme =
        !          3289:                                d_es_erreur_fichier;
        !          3290:                        return;
        !          3291:                    }
        !          3292: 
        !          3293:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3294:                    {
        !          3295:                        (*s_etat_processus).erreur_systeme =
        !          3296:                                d_es_erreur_fichier;
        !          3297:                        return;
        !          3298:                    }
        !          3299: 
        !          3300:                    (*s_etat_processus).erreur_execution =
        !          3301:                            d_ex_manque_argument;
        !          3302: 
        !          3303:                    if (last_valide == d_vrai)
        !          3304:                    {
        !          3305:                        sf(s_etat_processus, 31);
        !          3306:                    }
        !          3307: 
        !          3308:                    free(nom_fichier);
        !          3309:                    return;
        !          3310:                }
        !          3311: 
        !          3312:                if ((*s_objet_evalue).type == INT)
        !          3313:                {
        !          3314:                    borne_minimale_x = (real8) (*((integer8 *)
        !          3315:                            (*s_objet_evalue).objet));
        !          3316:                }
        !          3317:                else if ((*s_objet_evalue).type == REL)
        !          3318:                {
        !          3319:                    borne_minimale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          3320:                }
        !          3321:                else
        !          3322:                {
        !          3323:                    if (fclose(fichier) != 0)
        !          3324:                    {
        !          3325:                        (*s_etat_processus).erreur_systeme =
        !          3326:                                d_es_erreur_fichier;
        !          3327:                        return;
        !          3328:                    }
        !          3329: 
        !          3330:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3331:                    {
        !          3332:                        (*s_etat_processus).erreur_systeme =
        !          3333:                                d_es_erreur_fichier;
        !          3334:                        return;
        !          3335:                    }
        !          3336: 
        !          3337:                    free(s_variable_x.nom);
        !          3338:                    free(nom_x);
        !          3339:                    free(nom_fichier);
        !          3340:                    liberation(s_etat_processus, s_objet_evalue);
        !          3341: 
        !          3342:                    if (last_valide == d_vrai)
        !          3343:                    {
        !          3344:                        sf(s_etat_processus, 31);
        !          3345:                    }
        !          3346: 
        !          3347:                    (*s_etat_processus).erreur_execution =
        !          3348:                            d_ex_erreur_type_argument;
        !          3349:                    return;
        !          3350:                }
        !          3351: 
        !          3352:                liberation(s_etat_processus, s_objet_evalue);
        !          3353:            }
        !          3354: 
        !          3355:            l_element_courant = (*l_element_courant).suivant;
        !          3356: 
        !          3357:            if ((*(*l_element_courant).donnee).type == INT)
        !          3358:            {
        !          3359:                borne_maximale_x = (real8) (*((integer8 *)
        !          3360:                        (*(*l_element_courant).donnee).objet));
        !          3361:            }
        !          3362:            else if ((*(*l_element_courant).donnee).type == REL)
        !          3363:            {
        !          3364:                borne_maximale_x = (*((real8 *) (*(*l_element_courant)
        !          3365:                        .donnee).objet));
        !          3366:            }
        !          3367:            else
        !          3368:            {
        !          3369:                if (evaluation(s_etat_processus, (*l_element_courant).donnee,
        !          3370:                        'N') == d_erreur)
        !          3371:                {
        !          3372:                    free(s_variable_x.nom);
        !          3373:                    free(nom_x);
        !          3374: 
        !          3375:                    if (fclose(fichier) != 0)
        !          3376:                    {
        !          3377:                        (*s_etat_processus).erreur_systeme =
        !          3378:                                d_es_erreur_fichier;
        !          3379:                        return;
        !          3380:                    }
        !          3381: 
        !          3382:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3383:                    {
        !          3384:                        (*s_etat_processus).erreur_systeme =
        !          3385:                                d_es_erreur_fichier;
        !          3386:                        return;
        !          3387:                    }
        !          3388: 
        !          3389:                    if (last_valide == d_vrai)
        !          3390:                    {
        !          3391:                        sf(s_etat_processus, 31);
        !          3392:                    }
        !          3393: 
        !          3394:                    free(nom_fichier);
        !          3395:                    return;
        !          3396:                }
        !          3397: 
        !          3398:                if (depilement(s_etat_processus, &((*s_etat_processus)
        !          3399:                        .l_base_pile), &s_objet_evalue) == d_erreur)
        !          3400:                {
        !          3401:                    free(s_variable_x.nom);
        !          3402:                    free(nom_x);
        !          3403: 
        !          3404:                    if (fclose(fichier) != 0)
        !          3405:                    {
        !          3406:                        (*s_etat_processus).erreur_systeme =
        !          3407:                                d_es_erreur_fichier;
        !          3408:                        return;
        !          3409:                    }
        !          3410: 
        !          3411:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3412:                    {
        !          3413:                        (*s_etat_processus).erreur_systeme =
        !          3414:                                d_es_erreur_fichier;
        !          3415:                        return;
        !          3416:                    }
        !          3417: 
        !          3418:                    (*s_etat_processus).erreur_execution =
        !          3419:                            d_ex_manque_argument;
        !          3420: 
        !          3421:                    if (last_valide == d_vrai)
        !          3422:                    {
        !          3423:                        sf(s_etat_processus, 31);
        !          3424:                    }
        !          3425: 
        !          3426:                    free(nom_fichier);
        !          3427:                    return;
        !          3428:                }
        !          3429: 
        !          3430:                if ((*s_objet_evalue).type == INT)
        !          3431:                {
        !          3432:                    borne_maximale_x = (real8) (*((integer8 *)
        !          3433:                            (*s_objet_evalue).objet));
        !          3434:                }
        !          3435:                else if ((*s_objet_evalue).type == REL)
        !          3436:                {
        !          3437:                    borne_maximale_x = (*((real8 *) (*s_objet_evalue).objet));
        !          3438:                }
        !          3439:                else
        !          3440:                {
        !          3441:                    free(s_variable_x.nom);
        !          3442:                    free(nom_x);
        !          3443: 
        !          3444:                    if (fclose(fichier) != 0)
        !          3445:                    {
        !          3446:                        (*s_etat_processus).erreur_systeme =
        !          3447:                                d_es_erreur_fichier;
        !          3448:                        return;
        !          3449:                    }
        !          3450: 
        !          3451:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3452:                    {
        !          3453:                        (*s_etat_processus).erreur_systeme =
        !          3454:                                d_es_erreur_fichier;
        !          3455:                        return;
        !          3456:                    }
        !          3457: 
        !          3458:                    liberation(s_etat_processus, s_objet_evalue);
        !          3459: 
        !          3460:                    (*s_etat_processus).erreur_execution =
        !          3461:                            d_ex_erreur_type_argument;
        !          3462: 
        !          3463:                    if (last_valide == d_vrai)
        !          3464:                    {
        !          3465:                        sf(s_etat_processus, 31);
        !          3466:                    }
        !          3467: 
        !          3468:                    free(nom_fichier);
        !          3469:                    return;
        !          3470:                }
        !          3471: 
        !          3472:                liberation(s_etat_processus, s_objet_evalue);
        !          3473:            }
        !          3474:        }
        !          3475:        else
        !          3476:        {
        !          3477:            if ((s_variable_x.nom =
        !          3478:                    malloc((strlen((*((struct_nom *) (*(*s_etat_processus)
        !          3479:                    .indep).objet)).nom) + 1) * sizeof(unsigned char))) == NULL)
        !          3480:            {
        !          3481:                if (fclose(fichier) != 0)
        !          3482:                {
        !          3483:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3484:                    return;
        !          3485:                }
        !          3486: 
        !          3487:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          3488:                {
        !          3489:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3490:                    return;
        !          3491:                }
        !          3492: 
        !          3493:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3494:                return;
        !          3495:            }
        !          3496: 
        !          3497:            strcpy(s_variable_x.nom, (*((struct_nom *) (*(*s_etat_processus)
        !          3498:                    .indep).objet)).nom);
        !          3499: 
        !          3500:            if ((nom_x = malloc((strlen(s_variable_x.nom) + 1) *
        !          3501:                    sizeof(unsigned char))) == NULL)
        !          3502:            {
        !          3503:                if (fclose(fichier) != 0)
        !          3504:                {
        !          3505:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3506:                    return;
        !          3507:                }
        !          3508: 
        !          3509:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          3510:                {
        !          3511:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3512:                    return;
        !          3513:                }
        !          3514: 
        !          3515:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3516:                return;
        !          3517:            }
        !          3518: 
        !          3519:            strcpy(nom_x, s_variable_x.nom);
        !          3520: 
        !          3521:            if ((*s_etat_processus).systeme_axes == 0)
        !          3522:            {
        !          3523:                borne_minimale_x = (*s_etat_processus).x_min;
        !          3524:                borne_maximale_x = (*s_etat_processus).x_max;
        !          3525:            }
        !          3526:            else
        !          3527:            {
        !          3528:                borne_minimale_x = (*s_etat_processus).x2_min;
        !          3529:                borne_maximale_x = (*s_etat_processus).x2_max;
        !          3530:            }
        !          3531:        }
        !          3532: 
        !          3533:        /*
        !          3534:         * Création d'une variable locale du nom pointé par INDEP
        !          3535:         */
        !          3536: 
        !          3537:        (*s_etat_processus).niveau_courant++;
        !          3538:        s_variable_x.niveau = (*s_etat_processus).niveau_courant;
        !          3539: 
        !          3540:        if ((s_variable_x.objet = allocation(s_etat_processus, REL)) == NULL)
        !          3541:        {
        !          3542:            if (fclose(fichier) != 0)
        !          3543:            {
        !          3544:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3545:                return;
        !          3546:            }
        !          3547: 
        !          3548:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          3549:            {
        !          3550:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3551:                return;
        !          3552:            }
        !          3553: 
        !          3554:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3555:            return;
        !          3556:        }
        !          3557: 
        !          3558:        if (creation_variable(s_etat_processus, &s_variable_x, 'V', 'P')
        !          3559:                == d_erreur)
        !          3560:        {
        !          3561:            if (fclose(fichier) != 0)
        !          3562:            {
        !          3563:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3564:                return;
        !          3565:            }
        !          3566: 
        !          3567:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          3568:            {
        !          3569:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3570:                return;
        !          3571:            }
        !          3572: 
        !          3573:            /*
        !          3574:             * L'erreur retournée ne peut être qu'une erreur système
        !          3575:             */
        !          3576: 
        !          3577:            free(nom_fichier);
        !          3578:            return;
        !          3579:        }
        !          3580: 
        !          3581:        /*
        !          3582:         * Boucle de calcul des points de la fonction
        !          3583:         */
        !          3584: 
        !          3585:        if (borne_maximale_x < borne_minimale_x)
        !          3586:        {
        !          3587:            x = borne_maximale_x;
        !          3588:            borne_maximale_x = borne_minimale_x;
        !          3589:            borne_minimale_x = x;
        !          3590:        }
        !          3591: 
        !          3592:        dernier_point_valide[0] = 0;
        !          3593:        dernier_point_valide[1] = 0;
        !          3594:        dernier_point_valide[2] = 0;
        !          3595: 
        !          3596:        for(x = borne_minimale_x; x <= borne_maximale_x;
        !          3597:                x += (*s_etat_processus).resolution)
        !          3598:        {
        !          3599:            /*
        !          3600:             * Récupération du domaine de variation de y, celui-ci peut dépendre
        !          3601:             * du domaine de variation de x.
        !          3602:             */
        !          3603: 
        !          3604:            if ((*(*s_etat_processus).depend).type == LST)
        !          3605:            {
        !          3606:                l_element_courant = (*(*s_etat_processus).depend).objet;
        !          3607: 
        !          3608:                if ((s_variable_y.nom = malloc((strlen((*((struct_nom *)
        !          3609:                        (*(*l_element_courant).donnee).objet)).nom) + 1) *
        !          3610:                        sizeof(unsigned char))) == NULL)
        !          3611:                {
        !          3612:                    if (fclose(fichier) != 0)
        !          3613:                    {
        !          3614:                        (*s_etat_processus).erreur_systeme =
        !          3615:                                d_es_erreur_fichier;
        !          3616:                        return;
        !          3617:                    }
        !          3618: 
        !          3619:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3620:                    {
        !          3621:                        (*s_etat_processus).erreur_systeme =
        !          3622:                                d_es_erreur_fichier;
        !          3623:                        return;
        !          3624:                    }
        !          3625: 
        !          3626:                    (*s_etat_processus).erreur_systeme =
        !          3627:                            d_es_allocation_memoire;
        !          3628:                    return;
        !          3629:                }
        !          3630: 
        !          3631:                strcpy(s_variable_y.nom, (*((struct_nom *)
        !          3632:                        (*(*l_element_courant).donnee).objet)).nom);
        !          3633: 
        !          3634:                if ((nom_y = malloc((strlen(s_variable_y.nom) + 1) *
        !          3635:                        sizeof(unsigned char))) == NULL)
        !          3636:                {
        !          3637:                    if (fclose(fichier) != 0)
        !          3638:                    {
        !          3639:                        (*s_etat_processus).erreur_systeme =
        !          3640:                                d_es_erreur_fichier;
        !          3641:                        return;
        !          3642:                    }
        !          3643: 
        !          3644:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3645:                    {
        !          3646:                        (*s_etat_processus).erreur_systeme =
        !          3647:                                d_es_erreur_fichier;
        !          3648:                        return;
        !          3649:                    }
        !          3650: 
        !          3651:                    (*s_etat_processus).erreur_systeme =
        !          3652:                            d_es_allocation_memoire;
        !          3653:                    return;
        !          3654:                }
        !          3655: 
        !          3656:                strcpy(nom_y, s_variable_y.nom);
        !          3657: 
        !          3658:                l_element_courant = (*l_element_courant).suivant;
        !          3659: 
        !          3660:                if ((*(*l_element_courant).donnee).type == INT)
        !          3661:                {
        !          3662:                    borne_minimale_y = (real8) (*((integer8 *)
        !          3663:                            (*(*l_element_courant).donnee).objet));
        !          3664:                }
        !          3665:                else if ((*(*l_element_courant).donnee).type == REL)
        !          3666:                {
        !          3667:                    borne_minimale_y = (*((real8 *) (*(*l_element_courant)
        !          3668:                            .donnee).objet));
        !          3669:                }
        !          3670:                else
        !          3671:                {
        !          3672:                    if (evaluation(s_etat_processus,
        !          3673:                            (*l_element_courant).donnee, 'N') == d_erreur)
        !          3674:                    {
        !          3675:                        free(s_variable_y.nom);
        !          3676:                        free(nom_y);
        !          3677: 
        !          3678:                        free(s_variable_x.nom);
        !          3679:                        free(nom_x);
        !          3680: 
        !          3681:                        if (fclose(fichier) != 0)
        !          3682:                        {
        !          3683:                            (*s_etat_processus).erreur_systeme =
        !          3684:                                    d_es_erreur_fichier;
        !          3685:                            return;
        !          3686:                        }
        !          3687: 
        !          3688:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3689:                        {
        !          3690:                            (*s_etat_processus).erreur_systeme =
        !          3691:                                    d_es_erreur_fichier;
        !          3692:                            return;
        !          3693:                        }
        !          3694: 
        !          3695:                        if (last_valide == d_vrai)
        !          3696:                        {
        !          3697:                            sf(s_etat_processus, 31);
        !          3698:                        }
        !          3699: 
        !          3700:                        free(nom_fichier);
        !          3701:                        return;
        !          3702:                    }
        !          3703: 
        !          3704:                    if (depilement(s_etat_processus, &((*s_etat_processus)
        !          3705:                            .l_base_pile), &s_objet_evalue) == d_erreur)
        !          3706:                    {
        !          3707:                        free(s_variable_y.nom);
        !          3708:                        free(nom_y);
        !          3709: 
        !          3710:                        free(s_variable_x.nom);
        !          3711:                        free(nom_x);
        !          3712: 
        !          3713:                        if (fclose(fichier) != 0)
        !          3714:                        {
        !          3715:                            (*s_etat_processus).erreur_systeme =
        !          3716:                                    d_es_erreur_fichier;
        !          3717:                            return;
        !          3718:                        }
        !          3719: 
        !          3720:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3721:                        {
        !          3722:                            (*s_etat_processus).erreur_systeme =
        !          3723:                                    d_es_erreur_fichier;
        !          3724:                            return;
        !          3725:                        }
        !          3726: 
        !          3727:                        (*s_etat_processus).erreur_execution =
        !          3728:                                d_ex_manque_argument;
        !          3729: 
        !          3730:                        if (last_valide == d_vrai)
        !          3731:                        {
        !          3732:                            sf(s_etat_processus, 31);
        !          3733:                        }
        !          3734: 
        !          3735:                        free(nom_fichier);
        !          3736:                        return;
        !          3737:                    }
        !          3738: 
        !          3739:                    if ((*s_objet_evalue).type == INT)
        !          3740:                    {
        !          3741:                        borne_minimale_y = (real8) (*((integer8 *)
        !          3742:                                (*s_objet_evalue).objet));
        !          3743:                    }
        !          3744:                    else if ((*s_objet_evalue).type == REL)
        !          3745:                    {
        !          3746:                        borne_minimale_y = (*((real8 *)
        !          3747:                                (*s_objet_evalue).objet));
        !          3748:                    }
        !          3749:                    else
        !          3750:                    {
        !          3751:                        if (fclose(fichier) != 0)
        !          3752:                        {
        !          3753:                            (*s_etat_processus).erreur_systeme =
        !          3754:                                    d_es_erreur_fichier;
        !          3755:                            return;
        !          3756:                        }
        !          3757: 
        !          3758:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3759:                        {
        !          3760:                            (*s_etat_processus).erreur_systeme =
        !          3761:                                    d_es_erreur_fichier;
        !          3762:                            return;
        !          3763:                        }
        !          3764: 
        !          3765:                        free(s_variable_y.nom);
        !          3766:                        free(nom_y);
        !          3767:                        free(s_variable_x.nom);
        !          3768:                        free(nom_x);
        !          3769:                        free(nom_fichier);
        !          3770:                        liberation(s_etat_processus, s_objet_evalue);
        !          3771: 
        !          3772:                        if (last_valide == d_vrai)
        !          3773:                        {
        !          3774:                            sf(s_etat_processus, 31);
        !          3775:                        }
        !          3776: 
        !          3777:                        (*s_etat_processus).erreur_execution =
        !          3778:                                d_ex_erreur_type_argument;
        !          3779:                        return;
        !          3780:                    }
        !          3781: 
        !          3782:                    liberation(s_etat_processus, s_objet_evalue);
        !          3783:                }
        !          3784: 
        !          3785:                l_element_courant = (*l_element_courant).suivant;
        !          3786: 
        !          3787:                if ((*(*l_element_courant).donnee).type == INT)
        !          3788:                {
        !          3789:                    borne_maximale_y = (real8) (*((integer8 *)
        !          3790:                            (*(*l_element_courant).donnee).objet));
        !          3791:                }
        !          3792:                else if ((*(*l_element_courant).donnee).type == REL)
        !          3793:                {
        !          3794:                    borne_maximale_y = (*((real8 *) (*(*l_element_courant)
        !          3795:                            .donnee).objet));
        !          3796:                }
        !          3797:                else
        !          3798:                {
        !          3799:                    if (evaluation(s_etat_processus,
        !          3800:                            (*l_element_courant).donnee, 'N') == d_erreur)
        !          3801:                    {
        !          3802:                        free(s_variable_y.nom);
        !          3803:                        free(nom_y);
        !          3804:                        free(s_variable_x.nom);
        !          3805:                        free(nom_x);
        !          3806: 
        !          3807:                        if (fclose(fichier) != 0)
        !          3808:                        {
        !          3809:                            (*s_etat_processus).erreur_systeme =
        !          3810:                                    d_es_erreur_fichier;
        !          3811:                            return;
        !          3812:                        }
        !          3813: 
        !          3814:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3815:                        {
        !          3816:                            (*s_etat_processus).erreur_systeme =
        !          3817:                                    d_es_erreur_fichier;
        !          3818:                            return;
        !          3819:                        }
        !          3820: 
        !          3821:                        if (last_valide == d_vrai)
        !          3822:                        {
        !          3823:                            sf(s_etat_processus, 31);
        !          3824:                        }
        !          3825: 
        !          3826:                        free(nom_fichier);
        !          3827:                        return;
        !          3828:                    }
        !          3829: 
        !          3830:                    if (depilement(s_etat_processus, &((*s_etat_processus)
        !          3831:                            .l_base_pile), &s_objet_evalue) == d_erreur)
        !          3832:                    {
        !          3833:                        free(s_variable_y.nom);
        !          3834:                        free(nom_y);
        !          3835:                        free(s_variable_x.nom);
        !          3836:                        free(nom_x);
        !          3837: 
        !          3838:                        if (fclose(fichier) != 0)
        !          3839:                        {
        !          3840:                            (*s_etat_processus).erreur_systeme =
        !          3841:                                    d_es_erreur_fichier;
        !          3842:                            return;
        !          3843:                        }
        !          3844: 
        !          3845:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3846:                        {
        !          3847:                            (*s_etat_processus).erreur_systeme =
        !          3848:                                    d_es_erreur_fichier;
        !          3849:                            return;
        !          3850:                        }
        !          3851: 
        !          3852:                        (*s_etat_processus).erreur_execution =
        !          3853:                                d_ex_manque_argument;
        !          3854: 
        !          3855:                        if (last_valide == d_vrai)
        !          3856:                        {
        !          3857:                            sf(s_etat_processus, 31);
        !          3858:                        }
        !          3859: 
        !          3860:                        free(nom_fichier);
        !          3861:                        return;
        !          3862:                    }
        !          3863: 
        !          3864:                    if ((*s_objet_evalue).type == INT)
        !          3865:                    {
        !          3866:                        borne_maximale_y = (real8) (*((integer8 *)
        !          3867:                                (*s_objet_evalue).objet));
        !          3868:                    }
        !          3869:                    else if ((*s_objet_evalue).type == REL)
        !          3870:                    {
        !          3871:                        borne_maximale_y = (*((real8 *)
        !          3872:                                (*s_objet_evalue).objet));
        !          3873:                    }
        !          3874:                    else
        !          3875:                    {
        !          3876:                        free(s_variable_y.nom);
        !          3877:                        free(nom_y);
        !          3878:                        free(s_variable_x.nom);
        !          3879:                        free(nom_x);
        !          3880: 
        !          3881:                        if (fclose(fichier) != 0)
        !          3882:                        {
        !          3883:                            (*s_etat_processus).erreur_systeme =
        !          3884:                                    d_es_erreur_fichier;
        !          3885:                            return;
        !          3886:                        }
        !          3887: 
        !          3888:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          3889:                        {
        !          3890:                            (*s_etat_processus).erreur_systeme =
        !          3891:                                    d_es_erreur_fichier;
        !          3892:                            return;
        !          3893:                        }
        !          3894: 
        !          3895:                        liberation(s_etat_processus, s_objet_evalue);
        !          3896: 
        !          3897:                        (*s_etat_processus).erreur_execution =
        !          3898:                                d_ex_erreur_type_argument;
        !          3899: 
        !          3900:                        if (last_valide == d_vrai)
        !          3901:                        {
        !          3902:                            sf(s_etat_processus, 31);
        !          3903:                        }
        !          3904: 
        !          3905:                        free(nom_fichier);
        !          3906:                        return;
        !          3907:                    }
        !          3908: 
        !          3909:                    liberation(s_etat_processus, s_objet_evalue);
        !          3910:                }
        !          3911:            }
        !          3912:            else
        !          3913:            {
        !          3914:                if ((s_variable_y.nom =
        !          3915:                        malloc((strlen((*((struct_nom *) (*(*s_etat_processus)
        !          3916:                        .depend).objet)).nom) + 1) * sizeof(unsigned char)))
        !          3917:                        == NULL)
        !          3918:                {
        !          3919:                    if (fclose(fichier) != 0)
        !          3920:                    {
        !          3921:                        (*s_etat_processus).erreur_systeme =
        !          3922:                                d_es_erreur_fichier;
        !          3923:                        return;
        !          3924:                    }
        !          3925: 
        !          3926:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3927:                    {
        !          3928:                        (*s_etat_processus).erreur_systeme =
        !          3929:                                d_es_erreur_fichier;
        !          3930:                        return;
        !          3931:                    }
        !          3932: 
        !          3933:                    (*s_etat_processus).erreur_systeme =
        !          3934:                            d_es_allocation_memoire;
        !          3935:                    return;
        !          3936:                }
        !          3937: 
        !          3938:                strcpy(s_variable_y.nom, (*((struct_nom *) (*(*s_etat_processus)
        !          3939:                        .depend).objet)).nom);
        !          3940: 
        !          3941:                if ((nom_y = malloc((strlen(s_variable_y.nom) + 1) *
        !          3942:                        sizeof(unsigned char))) == NULL)
        !          3943:                {
        !          3944:                    if (fclose(fichier) != 0)
        !          3945:                    {
        !          3946:                        (*s_etat_processus).erreur_systeme =
        !          3947:                                d_es_erreur_fichier;
        !          3948:                        return;
        !          3949:                    }
        !          3950: 
        !          3951:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          3952:                    {
        !          3953:                        (*s_etat_processus).erreur_systeme =
        !          3954:                                d_es_erreur_fichier;
        !          3955:                        return;
        !          3956:                    }
        !          3957: 
        !          3958:                    (*s_etat_processus).erreur_systeme =
        !          3959:                            d_es_allocation_memoire;
        !          3960:                    return;
        !          3961:                }
        !          3962: 
        !          3963:                strcpy(nom_y, s_variable_y.nom);
        !          3964: 
        !          3965:                if ((*s_etat_processus).systeme_axes == 0)
        !          3966:                {
        !          3967:                    borne_minimale_y = (*s_etat_processus).y_min;
        !          3968:                    borne_maximale_y = (*s_etat_processus).y_max;
        !          3969:                }
        !          3970:                else
        !          3971:                {
        !          3972:                    borne_minimale_y = (*s_etat_processus).y2_min;
        !          3973:                    borne_maximale_y = (*s_etat_processus).y2_max;
        !          3974:                }
        !          3975:            }
        !          3976: 
        !          3977:            /*
        !          3978:             * Création d'une variable locale du nom pointé par DEPEND
        !          3979:             */
        !          3980: 
        !          3981:            s_variable_y.niveau = (*s_etat_processus).niveau_courant;
        !          3982: 
        !          3983:            if ((s_variable_y.objet = allocation(s_etat_processus, REL))
        !          3984:                    == NULL)
        !          3985:            {
        !          3986:                if (fclose(fichier) != 0)
        !          3987:                {
        !          3988:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3989:                    return;
        !          3990:                }
        !          3991: 
        !          3992:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          3993:                {
        !          3994:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          3995:                    return;
        !          3996:                }
        !          3997: 
        !          3998:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          3999:                return;
        !          4000:            }
        !          4001: 
        !          4002:            if (creation_variable(s_etat_processus, &s_variable_y, 'V', 'P')
        !          4003:                    == d_erreur)
        !          4004:            {
        !          4005:                if (fclose(fichier) != 0)
        !          4006:                {
        !          4007:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          4008:                    return;
        !          4009:                }
        !          4010: 
        !          4011:                if (destruction_fichier(nom_fichier) == d_erreur)
        !          4012:                {
        !          4013:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          4014:                    return;
        !          4015:                }
        !          4016: 
        !          4017:                /*
        !          4018:                 * L'erreur retournée ne peut être qu'une erreur système
        !          4019:                 */
        !          4020: 
        !          4021:                free(nom_fichier);
        !          4022:                return;
        !          4023:            }
        !          4024: 
        !          4025:            if (borne_maximale_y < borne_minimale_y)
        !          4026:            {
        !          4027:                y = borne_maximale_y;
        !          4028:                borne_maximale_y = borne_minimale_y;
        !          4029:                borne_minimale_y = y;
        !          4030:            }
        !          4031: 
        !          4032:            if (premiere_iteration == d_vrai)
        !          4033:            {
        !          4034:                dernier_point_valide[0] = borne_minimale_x;
        !          4035:                dernier_point_valide[1] = borne_minimale_y;
        !          4036:                dernier_point_valide[2] = 0;
        !          4037: 
        !          4038:                premiere_iteration = d_faux;
        !          4039:            }
        !          4040: 
        !          4041:            for(y = borne_minimale_y; y <= borne_maximale_y;
        !          4042:                    y += (*s_etat_processus).resolution)
        !          4043:            {
        !          4044:                if (recherche_variable(s_etat_processus, nom_x) == d_vrai)
        !          4045:                {
        !          4046:                    // La variable étant créée localement, elle n'est jamais
        !          4047:                    // ni verrouillée ni partagee.
        !          4048: 
        !          4049:                    BUG((*s_etat_processus).s_liste_variables
        !          4050:                            [(*s_etat_processus).position_variable_courante]
        !          4051:                            .objet == NULL);
        !          4052: 
        !          4053:                    if ((*((*s_etat_processus).s_liste_variables
        !          4054:                            [(*s_etat_processus).position_variable_courante])
        !          4055:                            .objet).type != REL)
        !          4056:                    {
        !          4057:                        liberation(s_etat_processus,
        !          4058:                                ((*s_etat_processus).s_liste_variables
        !          4059:                                [(*s_etat_processus)
        !          4060:                                .position_variable_courante]).objet);
        !          4061: 
        !          4062:                        if ((((*s_etat_processus).s_liste_variables
        !          4063:                                [(*s_etat_processus)
        !          4064:                                .position_variable_courante]).objet =
        !          4065:                                allocation(s_etat_processus, REL)) == NULL)
        !          4066:                        {
        !          4067:                            (*s_etat_processus).erreur_systeme =
        !          4068:                                    d_es_allocation_memoire;
        !          4069:                            return;
        !          4070:                        }
        !          4071:                    }
        !          4072: 
        !          4073:                    (*((real8 *) (*((*s_etat_processus).s_liste_variables
        !          4074:                            [(*s_etat_processus).position_variable_courante])
        !          4075:                            .objet).objet)) = x;
        !          4076:                }
        !          4077:                else
        !          4078:                {
        !          4079:                    /*
        !          4080:                     * La variable créée étant locale, l'utilisateur ne peut
        !          4081:                     * pas l'effacer. On ne doit donc jamais passer par ici. Si
        !          4082:                     * c'est néanmoins le cas, une erreur système est générée
        !          4083:                     * provoquant l'arrêt du programme même dans une
        !          4084:                     * structure IFERR.
        !          4085:                     */
        !          4086: 
        !          4087:                    if (fclose(fichier) != 0)
        !          4088:                    {
        !          4089:                        (*s_etat_processus).erreur_systeme =
        !          4090:                                d_es_erreur_fichier;
        !          4091:                        return;
        !          4092:                    }
        !          4093: 
        !          4094:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          4095:                    {
        !          4096:                        (*s_etat_processus).erreur_systeme =
        !          4097:                                d_es_erreur_fichier;
        !          4098:                        return;
        !          4099:                    }
        !          4100: 
        !          4101:                    if (last_valide == d_vrai)
        !          4102:                    {
        !          4103:                        sf(s_etat_processus, 31);
        !          4104:                    }
        !          4105: 
        !          4106:                    free(nom_fichier);
        !          4107:                    return;
        !          4108:                }
        !          4109: 
        !          4110:                if (recherche_variable(s_etat_processus, nom_y) == d_vrai)
        !          4111:                {
        !          4112:                    // La variable étant créée localement, elle n'est jamais
        !          4113:                    // ni verrouillée ni partagée.
        !          4114: 
        !          4115:                    BUG((*s_etat_processus).s_liste_variables
        !          4116:                            [(*s_etat_processus).position_variable_courante]
        !          4117:                            .objet == NULL);
        !          4118: 
        !          4119:                    if ((*((*s_etat_processus).s_liste_variables
        !          4120:                            [(*s_etat_processus).position_variable_courante])
        !          4121:                            .objet).type != REL)
        !          4122:                    {
        !          4123:                        liberation(s_etat_processus,
        !          4124:                                ((*s_etat_processus).s_liste_variables
        !          4125:                                [(*s_etat_processus)
        !          4126:                                .position_variable_courante]).objet);
        !          4127: 
        !          4128:                        if ((((*s_etat_processus).s_liste_variables
        !          4129:                                [(*s_etat_processus)
        !          4130:                                .position_variable_courante]).objet =
        !          4131:                                allocation(s_etat_processus, REL)) == NULL)
        !          4132:                        {
        !          4133:                            (*s_etat_processus).erreur_systeme =
        !          4134:                                    d_es_allocation_memoire;
        !          4135:                            return;
        !          4136:                        }
        !          4137:                    }
        !          4138: 
        !          4139:                    (*((real8 *) (*((*s_etat_processus).s_liste_variables
        !          4140:                            [(*s_etat_processus).position_variable_courante])
        !          4141:                            .objet).objet)) = y;
        !          4142:                }
        !          4143:                else
        !          4144:                {
        !          4145:                    /*
        !          4146:                     * La variable créée étant locale, l'utilisateur ne peut
        !          4147:                     * pas l'effacer. On ne doit donc jamais passer par ici. Si
        !          4148:                     * c'est néanmoins le cas, une erreur système est générée
        !          4149:                     * provoquant l'arrêt du programme même dans une
        !          4150:                     * structure IFERR.
        !          4151:                     */
        !          4152: 
        !          4153:                    if (fclose(fichier) != 0)
        !          4154:                    {
        !          4155:                        (*s_etat_processus).erreur_systeme =
        !          4156:                                d_es_erreur_fichier;
        !          4157:                        return;
        !          4158:                    }
        !          4159: 
        !          4160:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          4161:                    {
        !          4162:                        (*s_etat_processus).erreur_systeme =
        !          4163:                                d_es_erreur_fichier;
        !          4164:                        return;
        !          4165:                    }
        !          4166: 
        !          4167:                    if (last_valide == d_vrai)
        !          4168:                    {
        !          4169:                        sf(s_etat_processus, 31);
        !          4170:                    }
        !          4171: 
        !          4172:                    free(nom_fichier);
        !          4173:                    return;
        !          4174:                }
        !          4175: 
        !          4176:                if (recherche_variable(s_etat_processus, "EQ")
        !          4177:                        == d_faux)
        !          4178:                {
        !          4179:                    /*
        !          4180:                     * Aucune variable "EQ" n'existe.
        !          4181:                     */
        !          4182: 
        !          4183:                    (*s_etat_processus).erreur_execution =
        !          4184:                            d_ex_variable_non_definie;
        !          4185: 
        !          4186:                    /*
        !          4187:                     * Retrait des variables INDEP et DEPND
        !          4188:                     */
        !          4189: 
        !          4190:                    (*s_etat_processus).niveau_courant--;
        !          4191: 
        !          4192:                    if (fclose(fichier) != 0)
        !          4193:                    {
        !          4194:                        (*s_etat_processus).erreur_systeme =
        !          4195:                                d_es_erreur_fichier;
        !          4196:                        return;
        !          4197:                    }
        !          4198: 
        !          4199:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          4200:                    {
        !          4201:                        (*s_etat_processus).erreur_systeme =
        !          4202:                                d_es_erreur_fichier;
        !          4203:                        return;
        !          4204:                    }
        !          4205: 
        !          4206:                    if (retrait_variable(s_etat_processus, nom_x, 'L')
        !          4207:                            == d_erreur)
        !          4208:                    {
        !          4209:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          4210:                        {
        !          4211:                            if ((*s_etat_processus).erreur_systeme ==
        !          4212:                                    d_es_variable_introuvable)
        !          4213:                            {
        !          4214:                                (*s_etat_processus).erreur_systeme = d_es;
        !          4215:                            }
        !          4216:                            else
        !          4217:                            {
        !          4218: 
        !          4219:                            /*
        !          4220:                             * Erreur système
        !          4221:                             */
        !          4222: 
        !          4223:                                free(nom_fichier);
        !          4224:                                return;
        !          4225:                            }
        !          4226:                        }
        !          4227: 
        !          4228:                        free(nom_x);
        !          4229:                        free(nom_y);
        !          4230:                        free(nom_fichier);
        !          4231: 
        !          4232:                        if (last_valide == d_vrai)
        !          4233:                        {
        !          4234:                            sf(s_etat_processus, 31);
        !          4235:                        }
        !          4236: 
        !          4237:                        (*s_etat_processus).erreur_execution =
        !          4238:                                d_ex_variable_non_definie;
        !          4239:                        return;
        !          4240:                    }
        !          4241: 
        !          4242:                    if (retrait_variable(s_etat_processus, nom_y, 'L')
        !          4243:                            == d_erreur)
        !          4244:                    {
        !          4245:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          4246:                        {
        !          4247:                            if ((*s_etat_processus).erreur_systeme ==
        !          4248:                                    d_es_variable_introuvable)
        !          4249:                            {
        !          4250:                                (*s_etat_processus).erreur_systeme = d_es;
        !          4251:                            }
        !          4252:                            else
        !          4253:                            {
        !          4254: 
        !          4255:                            /*
        !          4256:                             * Erreur système
        !          4257:                             */
        !          4258: 
        !          4259:                                free(nom_fichier);
        !          4260:                                return;
        !          4261:                            }
        !          4262:                        }
        !          4263: 
        !          4264:                        free(nom_x);
        !          4265:                        free(nom_y);
        !          4266:                        free(nom_fichier);
        !          4267: 
        !          4268:                        if (last_valide == d_vrai)
        !          4269:                        {
        !          4270:                            sf(s_etat_processus, 31);
        !          4271:                        }
        !          4272: 
        !          4273:                        (*s_etat_processus).erreur_execution =
        !          4274:                                d_ex_variable_non_definie;
        !          4275:                        return;
        !          4276:                    }
        !          4277: 
        !          4278:                    if (last_valide == d_vrai)
        !          4279:                    {
        !          4280:                        sf(s_etat_processus, 31);
        !          4281:                    }
        !          4282: 
        !          4283:                    free(nom_x);
        !          4284:                    free(nom_y);
        !          4285:                    free(nom_fichier);
        !          4286:                    return;
        !          4287:                }
        !          4288: 
        !          4289:                /*
        !          4290:                 * Recherche de la variable globale "EQ"
        !          4291:                 */
        !          4292:                
        !          4293:                i = (*s_etat_processus).position_variable_courante;
        !          4294:                presence_variable = d_faux;
        !          4295: 
        !          4296:                while(i >= 0)
        !          4297:                {
        !          4298:                    if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          4299:                            "EQ") == 0) && ((*s_etat_processus)
        !          4300:                            .s_liste_variables[i].niveau == 1))
        !          4301:                    {
        !          4302:                        presence_variable = d_vrai;
        !          4303:                        break;
        !          4304:                    }
        !          4305: 
        !          4306:                    i--;
        !          4307:                }
        !          4308: 
        !          4309:                (*s_etat_processus).position_variable_courante = i;
        !          4310: 
        !          4311:                BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);
        !          4312: 
        !          4313:                if (presence_variable == d_faux)
        !          4314:                {
        !          4315:                    /*
        !          4316:                     * Retrait des variables INDEP et DEPND
        !          4317:                     */
        !          4318: 
        !          4319:                    (*s_etat_processus).niveau_courant--;
        !          4320: 
        !          4321:                    if (fclose(fichier) != 0)
        !          4322:                    {
        !          4323:                        (*s_etat_processus).erreur_systeme =
        !          4324:                                d_es_erreur_fichier;
        !          4325:                        return;
        !          4326:                    }
        !          4327: 
        !          4328:                    if (destruction_fichier(nom_fichier) == d_erreur)
        !          4329:                    {
        !          4330:                        (*s_etat_processus).erreur_systeme =
        !          4331:                                d_es_erreur_fichier;
        !          4332:                        return;
        !          4333:                    }
        !          4334: 
        !          4335:                    if (retrait_variable(s_etat_processus, nom_x, 'L')
        !          4336:                            == d_erreur)
        !          4337:                    {
        !          4338:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          4339:                        {
        !          4340:                            if ((*s_etat_processus).erreur_systeme ==
        !          4341:                                    d_es_variable_introuvable)
        !          4342:                            {
        !          4343:                                (*s_etat_processus).erreur_systeme = d_es;
        !          4344:                            }
        !          4345:                            else
        !          4346:                            {
        !          4347: 
        !          4348:                            /*
        !          4349:                             * Erreur système
        !          4350:                             */
        !          4351: 
        !          4352:                                free(nom_fichier);
        !          4353:                                return;
        !          4354:                            }
        !          4355:                        }
        !          4356: 
        !          4357:                        free(nom_x);
        !          4358:                        free(nom_y);
        !          4359:                        free(nom_fichier);
        !          4360: 
        !          4361:                        if (last_valide == d_vrai)
        !          4362:                        {
        !          4363:                            sf(s_etat_processus, 31);
        !          4364:                        }
        !          4365: 
        !          4366:                        (*s_etat_processus).erreur_execution =
        !          4367:                                d_ex_variable_non_definie;
        !          4368:                        return;
        !          4369:                    }
        !          4370: 
        !          4371:                    if (retrait_variable(s_etat_processus, nom_y, 'L')
        !          4372:                            == d_erreur)
        !          4373:                    {
        !          4374:                        if ((*s_etat_processus).erreur_systeme != d_es)
        !          4375:                        {
        !          4376:                            if ((*s_etat_processus).erreur_systeme ==
        !          4377:                                    d_es_variable_introuvable)
        !          4378:                            {
        !          4379:                                (*s_etat_processus).erreur_systeme = d_es;
        !          4380:                            }
        !          4381:                            else
        !          4382:                            {
        !          4383: 
        !          4384:                            /*
        !          4385:                             * Erreur système
        !          4386:                             */
        !          4387: 
        !          4388:                                free(nom_fichier);
        !          4389:                                return;
        !          4390:                            }
        !          4391:                        }
        !          4392: 
        !          4393:                        free(nom_x);
        !          4394:                        free(nom_y);
        !          4395:                        free(nom_fichier);
        !          4396: 
        !          4397:                        if (last_valide == d_vrai)
        !          4398:                        {
        !          4399:                            sf(s_etat_processus, 31);
        !          4400:                        }
        !          4401: 
        !          4402:                        (*s_etat_processus).erreur_execution =
        !          4403:                                d_ex_variable_non_definie;
        !          4404:                        return;
        !          4405:                    }
        !          4406: 
        !          4407:                    free(nom_x);
        !          4408:                    free(nom_y);
        !          4409:                    free(nom_fichier);
        !          4410: 
        !          4411:                    if (last_valide == d_vrai)
        !          4412:                    {
        !          4413:                        sf(s_etat_processus, 31);
        !          4414:                    }
        !          4415: 
        !          4416:                    (*s_etat_processus).erreur_execution =
        !          4417:                            d_ex_variable_non_definie;
        !          4418:                    return;
        !          4419:                }
        !          4420: 
        !          4421:                /*
        !          4422:                 * Evaluation de la fonction
        !          4423:                 */
        !          4424: 
        !          4425:                hauteur_pile = (*s_etat_processus).hauteur_pile_operationnelle;
        !          4426:                l_position_normale = (*s_etat_processus).l_base_pile_systeme;
        !          4427:                niveau_courant = (*s_etat_processus).niveau_courant;
        !          4428: 
        !          4429:                (*s_etat_processus).erreur_execution = d_ex;
        !          4430:                (*s_etat_processus).exception = d_ep;
        !          4431: 
        !          4432:                if (evaluation(s_etat_processus, (*s_etat_processus)
        !          4433:                        .s_liste_variables[(*s_etat_processus)
        !          4434:                        .position_variable_courante].objet, 'N') == d_erreur)
        !          4435:                {
        !          4436:                    if ((*s_etat_processus).erreur_systeme != d_es)
        !          4437:                    {
        !          4438:                        /*
        !          4439:                         * Erreur système
        !          4440:                         */
        !          4441: 
        !          4442:                        free(nom_fichier);
        !          4443:                        return;
        !          4444:                    }
        !          4445:                    else
        !          4446:                    {
        !          4447:                        retour_suite_erreur = d_faux;
        !          4448:                        (*s_etat_processus).niveau_courant = niveau_courant;
        !          4449: 
        !          4450:                        /*
        !          4451:                         * Restauration de la pile initiale
        !          4452:                         */
        !          4453: 
        !          4454:                        while((*s_etat_processus).hauteur_pile_operationnelle >
        !          4455:                                (unsigned long) hauteur_pile)
        !          4456:                        {
        !          4457:                            if (depilement(s_etat_processus,
        !          4458:                                    &((*s_etat_processus)
        !          4459:                                    .l_base_pile), &s_objet) == d_erreur)
        !          4460:                            {
        !          4461:                                (*s_etat_processus).erreur_execution =
        !          4462:                                        d_ex_manque_argument;
        !          4463:                                retour_suite_erreur = d_vrai;
        !          4464:                                break;
        !          4465:                            }
        !          4466: 
        !          4467:                            liberation(s_etat_processus, s_objet);
        !          4468:                        }
        !          4469: 
        !          4470:                        /*
        !          4471:                         * Restauration de la pile système
        !          4472:                         */
        !          4473: 
        !          4474:                        while((*s_etat_processus).l_base_pile_systeme !=
        !          4475:                                l_position_normale)
        !          4476:                        {
        !          4477:                            depilement_pile_systeme(s_etat_processus);
        !          4478: 
        !          4479:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !          4480:                            {
        !          4481:                                /*
        !          4482:                                 * Une pile vide provoque une erreur système
        !          4483:                                 */
        !          4484: 
        !          4485:                                free(nom_fichier);
        !          4486:                                return;
        !          4487:                            }
        !          4488:                        }
        !          4489: 
        !          4490:                        if (retour_suite_erreur == d_vrai)
        !          4491:                        {
        !          4492:                            /*
        !          4493:                             * Retrait des variables INDEP, DEPND et retour
        !          4494:                             */
        !          4495: 
        !          4496:                            (*s_etat_processus).niveau_courant--;
        !          4497: 
        !          4498:                            if (fclose(fichier) != 0)
        !          4499:                            {
        !          4500:                                (*s_etat_processus).erreur_systeme =
        !          4501:                                        d_es_erreur_fichier;
        !          4502:                                return;
        !          4503:                            }
        !          4504: 
        !          4505:                            if (destruction_fichier(nom_fichier) == d_erreur)
        !          4506:                            {
        !          4507:                                (*s_etat_processus).erreur_systeme =
        !          4508:                                        d_es_erreur_fichier;
        !          4509:                                return;
        !          4510:                            }
        !          4511: 
        !          4512:                            if (retrait_variable(s_etat_processus,
        !          4513:                                    nom_x, 'L') == d_erreur)
        !          4514:                            {
        !          4515:                                if ((*s_etat_processus).erreur_systeme != d_es)
        !          4516:                                {
        !          4517:                                    if ((*s_etat_processus).erreur_systeme ==
        !          4518:                                            d_es_variable_introuvable)
        !          4519:                                    {
        !          4520:                                        (*s_etat_processus).erreur_systeme =
        !          4521:                                                d_es;
        !          4522:                                    }
        !          4523:                                    else
        !          4524:                                    {
        !          4525: 
        !          4526:                                    /*
        !          4527:                                     * Erreur système
        !          4528:                                     */
        !          4529: 
        !          4530:                                        free(nom_fichier);
        !          4531:                                        return;
        !          4532:                                    }
        !          4533:                                }
        !          4534: 
        !          4535:                                (*s_etat_processus).erreur_execution =
        !          4536:                                        d_ex_variable_non_definie;
        !          4537:                            }
        !          4538: 
        !          4539:                            if (retrait_variable(s_etat_processus,
        !          4540:                                    nom_y, 'L') == d_erreur)
        !          4541:                            {
        !          4542:                                if ((*s_etat_processus).erreur_systeme != d_es)
        !          4543:                                {
        !          4544:                                    if ((*s_etat_processus).erreur_systeme ==
        !          4545:                                            d_es_variable_introuvable)
        !          4546:                                    {
        !          4547:                                        (*s_etat_processus).erreur_systeme =
        !          4548:                                                d_es;
        !          4549:                                    }
        !          4550:                                    else
        !          4551:                                    {
        !          4552: 
        !          4553:                                    /*
        !          4554:                                     * Erreur système
        !          4555:                                     */
        !          4556: 
        !          4557:                                        free(nom_fichier);
        !          4558:                                        return;
        !          4559:                                    }
        !          4560:                                }
        !          4561: 
        !          4562:                                (*s_etat_processus).erreur_execution =
        !          4563:                                        d_ex_variable_non_definie;
        !          4564:                            }
        !          4565: 
        !          4566:                            free(nom_x);
        !          4567:                            free(nom_y);
        !          4568:                            free(nom_fichier);
        !          4569: 
        !          4570:                            if (last_valide == d_vrai)
        !          4571:                            {
        !          4572:                                sf(s_etat_processus, 31);
        !          4573:                            }
        !          4574: 
        !          4575:                            return;
        !          4576:                        }
        !          4577:                    }
        !          4578: 
        !          4579:                    (*s_etat_processus).erreur_execution = d_ex;
        !          4580:                    (*s_etat_processus).exception = d_ep;
        !          4581: 
        !          4582:                    if (fprintf(fichier, "%f %f %f\n",
        !          4583:                            dernier_point_valide[0],
        !          4584:                            dernier_point_valide[1],
        !          4585:                            dernier_point_valide[2]) < 0)
        !          4586:                    {
        !          4587:                        (*s_etat_processus).erreur_systeme =
        !          4588:                                d_es_erreur_fichier;
        !          4589:                        return;
        !          4590:                    }
        !          4591:                }
        !          4592:                else
        !          4593:                {
        !          4594:                    /*
        !          4595:                     * Donnée valide à écrire dans le fichier
        !          4596:                     */
        !          4597: 
        !          4598:                    if (depilement(s_etat_processus, &((*s_etat_processus)
        !          4599:                            .l_base_pile), &s_objet) == d_erreur)
        !          4600:                    {
        !          4601: 
        !          4602:                    /*
        !          4603:                     * Retrait des variables INDEP et DEPND et retour
        !          4604:                     */
        !          4605: 
        !          4606:                        (*s_etat_processus).niveau_courant--;
        !          4607: 
        !          4608:                        if (fclose(fichier) != 0)
        !          4609:                        {
        !          4610:                            (*s_etat_processus).erreur_systeme =
        !          4611:                                    d_es_erreur_fichier;
        !          4612:                            return;
        !          4613:                        }
        !          4614: 
        !          4615:                        if (destruction_fichier(nom_fichier) == d_erreur)
        !          4616:                        {
        !          4617:                            (*s_etat_processus).erreur_systeme =
        !          4618:                                    d_es_erreur_fichier;
        !          4619:                            return;
        !          4620:                        }
        !          4621: 
        !          4622:                        if (retrait_variable(s_etat_processus, nom_x,
        !          4623:                                'L') == d_erreur)
        !          4624:                        {
        !          4625:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !          4626:                            {
        !          4627:                                if ((*s_etat_processus).erreur_systeme ==
        !          4628:                                        d_es_variable_introuvable)
        !          4629:                                {
        !          4630:                                    (*s_etat_processus).erreur_systeme = d_es;
        !          4631:                                }
        !          4632:                                else
        !          4633:                                {
        !          4634: 
        !          4635:                                /*
        !          4636:                                 * Erreur système
        !          4637:                                 */
        !          4638: 
        !          4639:                                    free(nom_fichier);
        !          4640:                                    return;
        !          4641:                                }
        !          4642:                            }
        !          4643: 
        !          4644:                            free(nom_x);
        !          4645:                            free(nom_y);
        !          4646:                            free(nom_fichier);
        !          4647: 
        !          4648:                            if (last_valide == d_vrai)
        !          4649:                            {
        !          4650:                                sf(s_etat_processus, 31);
        !          4651:                            }
        !          4652: 
        !          4653:                            (*s_etat_processus).erreur_execution =
        !          4654:                                    d_ex_variable_non_definie;
        !          4655:                            return;
        !          4656:                        }
        !          4657: 
        !          4658:                        if (retrait_variable(s_etat_processus, nom_y,
        !          4659:                                'L') == d_erreur)
        !          4660:                        {
        !          4661:                            if ((*s_etat_processus).erreur_systeme != d_es)
        !          4662:                            {
        !          4663:                                if ((*s_etat_processus).erreur_systeme ==
        !          4664:                                        d_es_variable_introuvable)
        !          4665:                                {
        !          4666:                                    (*s_etat_processus).erreur_systeme = d_es;
        !          4667:                                }
        !          4668:                                else
        !          4669:                                {
        !          4670: 
        !          4671:                                /*
        !          4672:                                 * Erreur système
        !          4673:                                 */
        !          4674: 
        !          4675:                                    free(nom_fichier);
        !          4676:                                    return;
        !          4677:                                }
        !          4678:                            }
        !          4679: 
        !          4680:                            free(nom_x);
        !          4681:                            free(nom_y);
        !          4682:                            free(nom_fichier);
        !          4683: 
        !          4684:                            if (last_valide == d_vrai)
        !          4685:                            {
        !          4686:                                sf(s_etat_processus, 31);
        !          4687:                            }
        !          4688: 
        !          4689:                            (*s_etat_processus).erreur_execution =
        !          4690:                                    d_ex_variable_non_definie;
        !          4691:                            return;
        !          4692:                        }
        !          4693: 
        !          4694:                        free(nom_x);
        !          4695:                        free(nom_y);
        !          4696:                        free(nom_fichier);
        !          4697: 
        !          4698:                        if (last_valide == d_vrai)
        !          4699:                        {
        !          4700:                            sf(s_etat_processus, 31);
        !          4701:                        }
        !          4702: 
        !          4703:                        (*s_etat_processus).erreur_execution =
        !          4704:                                d_ex_manque_argument;
        !          4705:                        return;
        !          4706:                    }
        !          4707: 
        !          4708:                    if ((*s_objet).type == INT)
        !          4709:                    {
        !          4710:                        dernier_point_valide[0] = x;
        !          4711:                        dernier_point_valide[1] = y;
        !          4712:                        dernier_point_valide[2] = (real8) (*((integer8 *)
        !          4713:                                (*s_objet).objet));
        !          4714: 
        !          4715:                        if (fprintf(fichier, "%f %f %f\n", x, y,
        !          4716:                                (double) (*((integer8 *)
        !          4717:                                (*s_objet).objet))) < 0)
        !          4718:                        {
        !          4719:                            (*s_etat_processus).erreur_systeme =
        !          4720:                                    d_es_erreur_fichier;
        !          4721:                            return;
        !          4722:                        }
        !          4723:                    }
        !          4724:                    else if ((*s_objet).type == REL)
        !          4725:                    {
        !          4726:                        dernier_point_valide[0] = x;
        !          4727:                        dernier_point_valide[1] = y;
        !          4728:                        dernier_point_valide[2] = (*((real8 *)
        !          4729:                                (*s_objet).objet));
        !          4730: 
        !          4731:                        if (fprintf(fichier, "%f %f %f\n", x, y,
        !          4732:                                (*((real8 *) (*s_objet).objet))) < 0)
        !          4733:                        {
        !          4734:                            (*s_etat_processus).erreur_systeme =
        !          4735:                                    d_es_erreur_fichier;
        !          4736:                            return;
        !          4737:                        }
        !          4738:                    }
        !          4739: 
        !          4740:                    liberation(s_etat_processus, s_objet);
        !          4741:                }
        !          4742:            }
        !          4743: 
        !          4744:            /*
        !          4745:             * Retrait de la variable locale DEPND
        !          4746:             */
        !          4747: 
        !          4748:            if (retrait_variable(s_etat_processus, nom_y, 'L') == d_erreur)
        !          4749:            {
        !          4750:                if ((*s_etat_processus).erreur_systeme != d_es)
        !          4751:                {
        !          4752:                    if ((*s_etat_processus).erreur_systeme ==
        !          4753:                            d_es_variable_introuvable)
        !          4754:                    {
        !          4755:                        (*s_etat_processus).erreur_systeme = d_es;
        !          4756:                    }
        !          4757:                    else
        !          4758:                    {
        !          4759:                        /*
        !          4760:                         * Erreur système
        !          4761:                         */
        !          4762: 
        !          4763:                        free(nom_fichier);
        !          4764:                        return;
        !          4765:                    }
        !          4766:                }
        !          4767: 
        !          4768:                free(nom_x);
        !          4769:                free(nom_y);
        !          4770:                free(nom_fichier);
        !          4771: 
        !          4772:                if (last_valide == d_vrai)
        !          4773:                {
        !          4774:                    sf(s_etat_processus, 31);
        !          4775:                }
        !          4776: 
        !          4777:                (*s_etat_processus).erreur_execution =
        !          4778:                        d_ex_variable_non_definie;
        !          4779:                return;
        !          4780:            }
        !          4781: 
        !          4782:            free(nom_y);
        !          4783: 
        !          4784:            /*
        !          4785:             * Saut de ligne dans le fichier pour commencer une nouvelle
        !          4786:             * trace.
        !          4787:             */
        !          4788: 
        !          4789:            if (fprintf(fichier, "\n") < 0)
        !          4790:            {
        !          4791:                (*s_etat_processus).erreur_systeme =
        !          4792:                        d_es_erreur_fichier;
        !          4793:                return;
        !          4794:            }
        !          4795:        }
        !          4796: 
        !          4797:        /*
        !          4798:         * Retrait de la variable locale INDEP
        !          4799:         */
        !          4800: 
        !          4801:        (*s_etat_processus).niveau_courant--;
        !          4802: 
        !          4803:        if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)
        !          4804:        {
        !          4805:            if ((*s_etat_processus).erreur_systeme != d_es)
        !          4806:            {
        !          4807:                if ((*s_etat_processus).erreur_systeme ==
        !          4808:                        d_es_variable_introuvable)
        !          4809:                {
        !          4810:                    (*s_etat_processus).erreur_systeme = d_es;
        !          4811:                }
        !          4812:                else
        !          4813:                {
        !          4814:                    /*
        !          4815:                     * Erreur système
        !          4816:                     */
        !          4817: 
        !          4818:                    free(nom_fichier);
        !          4819:                    return;
        !          4820:                }
        !          4821:            }
        !          4822: 
        !          4823:            free(nom_x);
        !          4824:            free(nom_fichier);
        !          4825: 
        !          4826:            if (last_valide == d_vrai)
        !          4827:            {
        !          4828:                sf(s_etat_processus, 31);
        !          4829:            }
        !          4830: 
        !          4831:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !          4832:            return;
        !          4833:        }
        !          4834: 
        !          4835:        free(nom_x);
        !          4836: 
        !          4837:        if (strcmp((*s_etat_processus).type_trace_eq, "COURBES DE NIVEAU") == 0)
        !          4838:        {
        !          4839:            // Conversion du graphe
        !          4840:            dimensions = 2;
        !          4841: 
        !          4842:            if (fclose(fichier) != 0)
        !          4843:            {
        !          4844:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          4845:                return;
        !          4846:            }
        !          4847: 
        !          4848:            if ((entree_standard =  popen("gnuplot", "w")) == NULL)
        !          4849:            {
        !          4850:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          4851:                return;
        !          4852:            }
        !          4853: 
        !          4854:            if (fprintf(entree_standard, "set nosurface\n") < 0)
        !          4855:            {
        !          4856:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4857:                return;
        !          4858:            }
        !          4859: 
        !          4860:            if (fprintf(entree_standard, "set contour\n") < 0)
        !          4861:            {
        !          4862:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4863:                return;
        !          4864:            }
        !          4865: 
        !          4866:            if (fprintf(entree_standard, "set cntrparam level ") < 0)
        !          4867:            {
        !          4868:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4869:                return;
        !          4870:            }
        !          4871: 
        !          4872:            l_element_courant = (struct_liste_chainee *) (*(*s_etat_processus)
        !          4873:                    .parametres_courbes_de_niveau).objet;
        !          4874: 
        !          4875:            if (l_element_courant != NULL)
        !          4876:            {
        !          4877:                if ((*(*l_element_courant).donnee).type == CHN)
        !          4878:                {
        !          4879:                    if (strcmp((unsigned char *) (*(*l_element_courant).donnee)
        !          4880:                            .objet, "AUTOMATIC") == 0)
        !          4881:                    {
        !          4882:                        if (fprintf(entree_standard, "auto") < 0)
        !          4883:                        {
        !          4884:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4885:                            return;
        !          4886:                        }
        !          4887:                    }
        !          4888:                    else if (strcmp((unsigned char *) (*(*l_element_courant)
        !          4889:                            .donnee).objet, "DISCRETE") == 0)
        !          4890:                    {
        !          4891:                        if (fprintf(entree_standard, "discrete") < 0)
        !          4892:                        {
        !          4893:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4894:                            return;
        !          4895:                        }
        !          4896:                    }
        !          4897:                    else
        !          4898:                    {
        !          4899:                        if (fprintf(entree_standard, "incremental") < 0)
        !          4900:                        {
        !          4901:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4902:                            return;
        !          4903:                        }
        !          4904:                    }
        !          4905:                }
        !          4906: 
        !          4907:                l_element_courant = (*l_element_courant).suivant;
        !          4908: 
        !          4909:                if (l_element_courant != NULL)
        !          4910:                {
        !          4911:                    if (fprintf(entree_standard, " ") < 0)
        !          4912:                    {
        !          4913:                        (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4914:                        return;
        !          4915:                    }
        !          4916:                }
        !          4917: 
        !          4918:                while(l_element_courant != NULL)
        !          4919:                {
        !          4920:                    if ((*(*l_element_courant).donnee).type == INT)
        !          4921:                    {
        !          4922:                        if (fprintf(entree_standard, "%f", (double)
        !          4923:                                (*((integer8 *) (*(*l_element_courant).donnee)
        !          4924:                                .objet))) < 0)
        !          4925:                        {
        !          4926:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4927:                            return;
        !          4928:                        }
        !          4929:                    }
        !          4930:                    else
        !          4931:                    {
        !          4932:                        if (fprintf(entree_standard, "%f", (double)
        !          4933:                                (*((real8 *) (*(*l_element_courant).donnee)
        !          4934:                                .objet))) < 0)
        !          4935:                        {
        !          4936:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4937:                            return;
        !          4938:                        }
        !          4939:                    }
        !          4940: 
        !          4941:                    l_element_courant = (*l_element_courant).suivant;
        !          4942: 
        !          4943:                    if (l_element_courant != NULL)
        !          4944:                    {
        !          4945:                        if (fprintf(entree_standard, ",") < 0)
        !          4946:                        {
        !          4947:                            (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4948:                            return;
        !          4949:                        }
        !          4950:                    }
        !          4951:                }
        !          4952: 
        !          4953:                if (fprintf(entree_standard, "\n") < 0)
        !          4954:                {
        !          4955:                    (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4956:                    return;
        !          4957:                }
        !          4958:            }
        !          4959: 
        !          4960:            if (fprintf(entree_standard, "set terminal table\n") < 0)
        !          4961:            {
        !          4962:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4963:                return;
        !          4964:            }
        !          4965: 
        !          4966:            if ((nom_fichier_converti = creation_nom_fichier(
        !          4967:                    s_etat_processus, (*s_etat_processus)
        !          4968:                    .chemin_fichiers_temporaires)) == NULL)
        !          4969:            {
        !          4970:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          4971:                return;
        !          4972:            }
        !          4973: 
        !          4974:            if (fprintf(entree_standard, "set output '%s'\n",
        !          4975:                    nom_fichier_converti) < 0)
        !          4976:            {
        !          4977:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4978:                return;
        !          4979:            }
        !          4980: 
        !          4981:            if (fprintf(entree_standard, "splot '%s'\n", nom_fichier) < 0)
        !          4982:            {
        !          4983:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4984:                return;
        !          4985:            }
        !          4986: 
        !          4987:            if (fprintf(entree_standard, "set output\n") < 0)
        !          4988:            {
        !          4989:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4990:                return;
        !          4991:            }
        !          4992: 
        !          4993:            if (fprintf(entree_standard, "quit\n") < 0)
        !          4994:            {
        !          4995:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          4996:                return;
        !          4997:            }
        !          4998: 
        !          4999:            if (pclose(entree_standard) != 0)
        !          5000:            {
        !          5001:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !          5002:                return;
        !          5003:            }
        !          5004: 
        !          5005:            if (destruction_fichier(nom_fichier) == d_erreur)
        !          5006:            {
        !          5007:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          5008:                return;
        !          5009:            }
        !          5010: 
        !          5011:            if ((fichier = fopen(nom_fichier_converti, "r")) == NULL)
        !          5012:            {
        !          5013:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          5014:                return;
        !          5015:            }
        !          5016: 
        !          5017:            free(nom_fichier);
        !          5018:            nom_fichier = nom_fichier_converti;
        !          5019:        }
        !          5020:        else
        !          5021:        {
        !          5022:            dimensions = 3;
        !          5023:        }
        !          5024: 
        !          5025:    }
        !          5026: 
        !          5027:    /*
        !          5028:     * Type de tracé invalide
        !          5029:     */
        !          5030: 
        !          5031:    else
        !          5032:    {
        !          5033:        if (last_valide == d_vrai)
        !          5034:        {
        !          5035:            sf(s_etat_processus, 31);
        !          5036:        }
        !          5037: 
        !          5038:        (*s_etat_processus).erreur_execution = d_ex_type_trace_invalide;
        !          5039:        return;
        !          5040:    }
        !          5041: 
        !          5042:    /*
        !          5043:     * Fermeture du fichier graphique
        !          5044:     */
        !          5045: 
        !          5046:    if (fclose(fichier) != 0)
        !          5047:    {
        !          5048:        (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !          5049:        return;
        !          5050:    }
        !          5051: 
        !          5052:    /*
        !          5053:     * Chaînage du fichier temporaire à la liste des fichiers graphiques
        !          5054:     */
        !          5055: 
        !          5056:    l_fichier_courant = (*s_etat_processus).fichiers_graphiques;
        !          5057: 
        !          5058:    if (l_fichier_courant == NULL)
        !          5059:    {
        !          5060:        if (((*s_etat_processus).fichiers_graphiques = malloc(
        !          5061:                sizeof(struct_fichier_graphique))) == NULL)
        !          5062:        {
        !          5063:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          5064:            return;
        !          5065:        }
        !          5066: 
        !          5067:        (*(*s_etat_processus).fichiers_graphiques).suivant = NULL;
        !          5068:        (*(*s_etat_processus).fichiers_graphiques).nom = nom_fichier;
        !          5069:        (*(*s_etat_processus).fichiers_graphiques).legende = NULL;
        !          5070:        (*(*s_etat_processus).fichiers_graphiques).dimensions = dimensions;
        !          5071:        (*(*s_etat_processus).fichiers_graphiques).presence_axes = d_faux;
        !          5072:        (*(*s_etat_processus).fichiers_graphiques).systeme_axes =
        !          5073:                (*s_etat_processus).systeme_axes;
        !          5074:        strcpy((*(*s_etat_processus).fichiers_graphiques).type,
        !          5075:                (*s_etat_processus).type_trace_eq);
        !          5076:    }
        !          5077:    else
        !          5078:    {
        !          5079:        while(l_fichier_courant != NULL)
        !          5080:        {
        !          5081:            if ((*l_fichier_courant).dimensions != dimensions)
        !          5082:            {
        !          5083:                if (last_valide == d_vrai)
        !          5084:                {
        !          5085:                    sf(s_etat_processus, 31);
        !          5086:                }
        !          5087: 
        !          5088:                (*s_etat_processus).erreur_execution =
        !          5089:                        d_ex_dimensions_differentes;
        !          5090:                return;
        !          5091:            }
        !          5092: 
        !          5093:            l_fichier_precedent = l_fichier_courant;
        !          5094:            l_fichier_courant = (*l_fichier_courant).suivant;
        !          5095:        }
        !          5096: 
        !          5097:        l_fichier_courant = l_fichier_precedent;
        !          5098: 
        !          5099:        if (((*l_fichier_courant).suivant = malloc(
        !          5100:                sizeof(struct_fichier_graphique))) == NULL)
        !          5101:        {
        !          5102:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          5103:            return;
        !          5104:        }
        !          5105: 
        !          5106:        l_fichier_courant = (*l_fichier_courant).suivant;
        !          5107: 
        !          5108:        (*l_fichier_courant).suivant = NULL;
        !          5109:        (*l_fichier_courant).nom = nom_fichier;
        !          5110:        (*l_fichier_courant).legende = NULL;
        !          5111:        (*l_fichier_courant).dimensions = dimensions;
        !          5112:        (*l_fichier_courant).presence_axes = d_faux;
        !          5113:        (*l_fichier_courant).systeme_axes = (*s_etat_processus).systeme_axes;
        !          5114:        strcpy((*l_fichier_courant).type, (*s_etat_processus).type_trace_eq);
        !          5115:    }
        !          5116: 
        !          5117:    /*
        !          5118:     * Affichage du graphique
        !          5119:     */
        !          5120: 
        !          5121:    appel_gnuplot(s_etat_processus, 'N');
        !          5122:    (*s_etat_processus).erreur_execution = d_ex;
        !          5123:    (*s_etat_processus).exception = d_ep;
        !          5124: 
        !          5125:    if (last_valide == d_vrai)
        !          5126:    {
        !          5127:        sf(s_etat_processus, 31);
        !          5128:    }
        !          5129: 
        !          5130:    return;
        !          5131: }
        !          5132: 
        !          5133: 
        !          5134: /*
        !          5135: ================================================================================
        !          5136:   Fonction 'drax'
        !          5137: ================================================================================
        !          5138:   Entrées : pointeur sur une structure struct_processus
        !          5139: --------------------------------------------------------------------------------
        !          5140:   Sorties :
        !          5141: --------------------------------------------------------------------------------
        !          5142:   Effets de bord : néant
        !          5143: ================================================================================
        !          5144: */
        !          5145: 
        !          5146: void
        !          5147: instruction_drax(struct_processus *s_etat_processus)
        !          5148: {
        !          5149:    struct_fichier_graphique        *l_fichier_courant;
        !          5150: 
        !          5151:    (*s_etat_processus).erreur_execution = d_ex;
        !          5152: 
        !          5153:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          5154:    {
        !          5155:        printf("\n  DRAX ");
        !          5156: 
        !          5157:        if ((*s_etat_processus).langue == 'F')
        !          5158:        {
        !          5159:            printf("(trace les axes)\n\n");
        !          5160:            printf("  Aucun argument\n");
        !          5161:        }
        !          5162:        else
        !          5163:        {
        !          5164:            printf("(plot axes)\n\n");
        !          5165:            printf("  No argument\n");
        !          5166:        }
        !          5167: 
        !          5168:        return;
        !          5169:    }
        !          5170:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          5171:    {
        !          5172:        (*s_etat_processus).nombre_arguments = -1;
        !          5173:        return;
        !          5174:    }
        !          5175: 
        !          5176:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          5177:    {
        !          5178:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          5179:        {
        !          5180:            return;
        !          5181:        }
        !          5182:    }
        !          5183: 
        !          5184:    if ((*s_etat_processus).fichiers_graphiques != NULL)
        !          5185:    {
        !          5186:        l_fichier_courant = (*s_etat_processus).fichiers_graphiques;
        !          5187: 
        !          5188:        if (l_fichier_courant != NULL)
        !          5189:        {
        !          5190:            while((*l_fichier_courant).suivant != NULL)
        !          5191:            {
        !          5192:                l_fichier_courant = (*l_fichier_courant).suivant;
        !          5193:            }
        !          5194: 
        !          5195:            (*l_fichier_courant).presence_axes = d_vrai;
        !          5196:        }
        !          5197:    }
        !          5198: 
        !          5199:    if (test_cfsf(s_etat_processus, 52) == d_faux)
        !          5200:    {
        !          5201:        if ((*s_etat_processus).fichiers_graphiques != NULL)
        !          5202:        {
        !          5203:            appel_gnuplot(s_etat_processus, 'N');
        !          5204:        }
        !          5205:    }
        !          5206: 
        !          5207:    return;
        !          5208: }
        !          5209: 
        !          5210: 
        !          5211: /*
        !          5212: ================================================================================
        !          5213:   Fonction 'depnd'
        !          5214: ================================================================================
        !          5215:   Entrées : pointeur sur une structure struct_processus
        !          5216: --------------------------------------------------------------------------------
        !          5217:   Sorties :
        !          5218: --------------------------------------------------------------------------------
        !          5219:   Effets de bord : néant
        !          5220: ================================================================================
        !          5221: */
        !          5222: 
        !          5223: void
        !          5224: instruction_depnd(struct_processus *s_etat_processus)
        !          5225: {
        !          5226:    struct_liste_chainee            *l_element_courant;
        !          5227: 
        !          5228:    struct_objet                    *s_objet;
        !          5229: 
        !          5230:    (*s_etat_processus).erreur_execution = d_ex;
        !          5231: 
        !          5232:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          5233:    {
        !          5234:        printf("\n  DEPND ");
        !          5235: 
        !          5236:        if ((*s_etat_processus).langue == 'F')
        !          5237:        {
        !          5238:            printf("(indication de la variable dépendante)\n\n");
        !          5239:        }
        !          5240:        else
        !          5241:        {
        !          5242:            printf("(set dependant variable)\n\n");
        !          5243:        }
        !          5244: 
        !          5245:        printf("    1: %s, %s\n", d_NOM, d_LST);
        !          5246: 
        !          5247:        return;
        !          5248:    }
        !          5249:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          5250:    {
        !          5251:        (*s_etat_processus).nombre_arguments = -1;
        !          5252:        return;
        !          5253:    }
        !          5254: 
        !          5255:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          5256:    {
        !          5257:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          5258:        {
        !          5259:            return;
        !          5260:        }
        !          5261:    }
        !          5262: 
        !          5263:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          5264:            &s_objet) == d_erreur)
        !          5265:    {
        !          5266:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          5267:        return;
        !          5268:    }
        !          5269: 
        !          5270:    if ((*s_objet).type == NOM)
        !          5271:    {
        !          5272:        liberation(s_etat_processus, (*s_etat_processus).depend);
        !          5273:        (*s_etat_processus).depend = s_objet;
        !          5274:    }
        !          5275:    else if ((*s_objet).type == LST)
        !          5276:    {
        !          5277:        l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
        !          5278: 
        !          5279:        if ((*(*l_element_courant).donnee).type != NOM)
        !          5280:        {
        !          5281:            liberation(s_etat_processus, s_objet);
        !          5282: 
        !          5283:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          5284:            return;
        !          5285:        }
        !          5286: 
        !          5287:        (*((struct_nom *) (*(*l_element_courant).donnee).objet)).symbole =
        !          5288:                d_vrai;
        !          5289: 
        !          5290:        l_element_courant = (*l_element_courant).suivant;
        !          5291: 
        !          5292:        if (!(((*(*l_element_courant).donnee).type == INT) ||
        !          5293:                ((*(*l_element_courant).donnee).type == REL) ||
        !          5294:                ((*(*l_element_courant).donnee).type == NOM) ||
        !          5295:                ((*(*l_element_courant).donnee).type == ALG) ||
        !          5296:                ((*(*l_element_courant).donnee).type == RPN)))
        !          5297:        {
        !          5298:            liberation(s_etat_processus, s_objet);
        !          5299: 
        !          5300:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          5301:            return;
        !          5302:        }
        !          5303: 
        !          5304:        l_element_courant = (*l_element_courant).suivant;
        !          5305: 
        !          5306:        if (!(((*(*l_element_courant).donnee).type == INT) ||
        !          5307:                ((*(*l_element_courant).donnee).type == REL) ||
        !          5308:                ((*(*l_element_courant).donnee).type == NOM) ||
        !          5309:                ((*(*l_element_courant).donnee).type == ALG) ||
        !          5310:                ((*(*l_element_courant).donnee).type == RPN)))
        !          5311:        {
        !          5312:            liberation(s_etat_processus, s_objet);
        !          5313: 
        !          5314:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          5315:            return;
        !          5316:        }
        !          5317: 
        !          5318:        l_element_courant = (*l_element_courant).suivant;
        !          5319: 
        !          5320:        if (l_element_courant != NULL)
        !          5321:        {
        !          5322:            liberation(s_etat_processus, s_objet);
        !          5323: 
        !          5324:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          5325:            return;
        !          5326:        }
        !          5327: 
        !          5328:        liberation(s_etat_processus, (*s_etat_processus).depend);
        !          5329:        (*s_etat_processus).depend = s_objet;
        !          5330:    }
        !          5331:    else
        !          5332:    {
        !          5333:        liberation(s_etat_processus, s_objet);
        !          5334: 
        !          5335:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          5336:        return;
        !          5337:    }
        !          5338: 
        !          5339:    return;
        !          5340: }
        !          5341: 
        !          5342: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>