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

1.1       bertrand    1: /*
                      2: ================================================================================
1.14    ! bertrand    3:   RPL/2 (R) version 4.0.20
1.1       bertrand    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: 
1.11      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   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>