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

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

CVSweb interface <joel.bertrand@systella.fr>