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

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

CVSweb interface <joel.bertrand@systella.fr>