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

1.1     ! bertrand    1: /*
        !             2: ================================================================================
        !             3:   RPL/2 (R) version 4.0.9
        !             4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
        !             5: 
        !             6:   This file is part of RPL/2.
        !             7: 
        !             8:   RPL/2 is free software; you can redistribute it and/or modify it
        !             9:   under the terms of the CeCILL V2 License as published by the french
        !            10:   CEA, CNRS and INRIA.
        !            11:  
        !            12:   RPL/2 is distributed in the hope that it will be useful, but WITHOUT
        !            13:   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
        !            14:   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
        !            15:   for more details.
        !            16:  
        !            17:   You should have received a copy of the CeCILL License
        !            18:   along with RPL/2. If not, write to info@cecill.info.
        !            19: ================================================================================
        !            20: */
        !            21: 
        !            22: 
        !            23: #include "rpl.conv.h"
        !            24: 
        !            25: 
        !            26: /*
        !            27: ================================================================================
        !            28:   Fonction 'list->'
        !            29: ================================================================================
        !            30:   Entrées : structure processus
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_list_fleche(struct_processus *s_etat_processus)
        !            40: {
        !            41:    struct_liste_chainee            *l_element_courant;
        !            42:    struct_liste_chainee            *l_element_precedent;
        !            43: 
        !            44:    struct_objet                    *s_copie_objet;
        !            45:    struct_objet                    *s_objet;
        !            46: 
        !            47:    unsigned long                   nombre_elements;
        !            48: 
        !            49:    (*s_etat_processus).erreur_execution = d_ex;
        !            50: 
        !            51:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            52:    {
        !            53:        printf("\n  LIST-> ");
        !            54: 
        !            55:        if ((*s_etat_processus).langue == 'F')
        !            56:        {
        !            57:            printf("(expansion d'une liste)\n\n");
        !            58:        }
        !            59:        else
        !            60:        {
        !            61:            printf("(expand list)\n\n");
        !            62:        }
        !            63: 
        !            64:        printf("    1: %s\n", d_LST);
        !            65:        printf("->  n: %s, %s, %s, %s, %s, %s,\n"
        !            66:                "       %s, %s, %s, %s, %s,\n"
        !            67:                "       %s, %s, %s, %s, %s,\n"
        !            68:                "       %s, %s\n",
        !            69:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !            70:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !            71:        printf("    ...\n");
        !            72:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !            73:                "       %s, %s, %s, %s, %s,\n"
        !            74:                "       %s, %s, %s, %s, %s,\n"
        !            75:                "       %s, %s\n",
        !            76:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !            77:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !            78:        printf("    1: %s\n", d_INT);
        !            79: 
        !            80:        return;
        !            81:    }
        !            82:    else if ((*s_etat_processus).test_instruction == 'Y')
        !            83:    {
        !            84:        (*s_etat_processus).nombre_arguments = -1;
        !            85:        return;
        !            86:    }
        !            87: 
        !            88:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !            89:    {
        !            90:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !            91:        {
        !            92:            return;
        !            93:        }
        !            94:    }
        !            95: 
        !            96:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !            97:            &s_objet) == d_erreur)
        !            98:    {
        !            99:        return;
        !           100:    }
        !           101: 
        !           102:    if ((*s_objet).type != LST)
        !           103:    {
        !           104:        liberation(s_etat_processus, s_objet);
        !           105: 
        !           106:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           107:        return;
        !           108:    }
        !           109: 
        !           110:    if ((s_copie_objet = copie_objet(s_etat_processus, s_objet, 'N')) == NULL)
        !           111:    {
        !           112:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           113:        return;
        !           114:    }
        !           115: 
        !           116:    liberation(s_etat_processus, s_objet);
        !           117:    s_objet = s_copie_objet;
        !           118: 
        !           119:    l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
        !           120:    nombre_elements = 0;
        !           121: 
        !           122:    while(l_element_courant != NULL)
        !           123:    {
        !           124:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           125:                (*l_element_courant).donnee) == d_erreur)
        !           126:        {
        !           127:            return;
        !           128:        }
        !           129: 
        !           130:        l_element_precedent = l_element_courant;
        !           131:        l_element_courant = (*l_element_courant).suivant;
        !           132: 
        !           133:        free(l_element_precedent);
        !           134: 
        !           135:        nombre_elements++;
        !           136:    }
        !           137: 
        !           138:    free(s_objet);
        !           139: 
        !           140:    if ((s_objet = allocation(s_etat_processus, INT)) == NULL)
        !           141:    {
        !           142:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           143:        return;
        !           144:    }
        !           145: 
        !           146:    (*((integer8 *) ((*s_objet).objet))) = (integer8) nombre_elements;
        !           147: 
        !           148:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           149:            s_objet) == d_erreur)
        !           150:    {
        !           151:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           152:        return;
        !           153:    }
        !           154: 
        !           155:    return;
        !           156: }
        !           157: 
        !           158: 
        !           159: /*
        !           160: ================================================================================
        !           161:   Fonction '<='
        !           162: ================================================================================
        !           163:   Entrées :
        !           164: --------------------------------------------------------------------------------
        !           165:   Sorties :
        !           166: --------------------------------------------------------------------------------
        !           167:   Effets de bord : néant
        !           168: ================================================================================
        !           169: */
        !           170: 
        !           171: void
        !           172: instruction_le(struct_processus *s_etat_processus)
        !           173: {
        !           174:    struct_liste_chainee        *l_element_courant;
        !           175:    struct_liste_chainee        *l_element_precedent;
        !           176: 
        !           177:    struct_objet                *s_copie_argument_1;
        !           178:    struct_objet                *s_copie_argument_2;
        !           179:    struct_objet                *s_objet_argument_1;
        !           180:    struct_objet                *s_objet_argument_2;
        !           181:    struct_objet                *s_objet_resultat;
        !           182: 
        !           183:    unsigned long               nombre_elements;
        !           184: 
        !           185:    (*s_etat_processus).erreur_execution = d_ex;
        !           186: 
        !           187:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           188:    {
        !           189:        printf("\n  <= ");
        !           190: 
        !           191:        if ((*s_etat_processus).langue == 'F')
        !           192:        {
        !           193:            printf("(opérateur inférieur ou égal)\n\n");
        !           194:        }
        !           195:        else
        !           196:        {
        !           197:            printf("(less or equal)\n\n");
        !           198:        }
        !           199: 
        !           200:        printf("    2: %s, %s\n", d_INT, d_REL);
        !           201:        printf("    1: %s, %s\n", d_INT, d_REL);
        !           202:        printf("->  1: %s\n\n", d_INT);
        !           203: 
        !           204:        printf("    2: %s\n", d_BIN);
        !           205:        printf("    1: %s\n", d_BIN);
        !           206:        printf("->  1: %s\n\n", d_INT);
        !           207: 
        !           208:        printf("    2: %s\n", d_CHN);
        !           209:        printf("    1: %s\n", d_CHN);
        !           210:        printf("->  1: %s\n\n", d_INT);
        !           211: 
        !           212:        printf("    2: %s\n", d_NOM);
        !           213:        printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           214:        printf("->  1: %s\n\n", d_ALG);
        !           215: 
        !           216:        printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           217:        printf("    1: %s\n", d_NOM);
        !           218:        printf("->  1: %s\n\n", d_ALG);
        !           219: 
        !           220:        printf("    2: %s\n", d_ALG);
        !           221:        printf("    1: %s\n", d_ALG);
        !           222:        printf("->  1: %s\n\n", d_ALG);
        !           223: 
        !           224:        printf("    2: %s\n", d_RPN);
        !           225:        printf("    1: %s\n", d_RPN);
        !           226:        printf("->  1: %s\n", d_RPN);
        !           227: 
        !           228:        return;
        !           229:    }
        !           230:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           231:    {
        !           232:        (*s_etat_processus).nombre_arguments = 0;
        !           233:        return;
        !           234:    }
        !           235:    
        !           236:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           237:    {
        !           238:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           239:        {
        !           240:            return;
        !           241:        }
        !           242:    }
        !           243: 
        !           244:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           245:            &s_objet_argument_1) == d_erreur)
        !           246:    {
        !           247:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           248:        return;
        !           249:    }
        !           250: 
        !           251:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           252:            &s_objet_argument_2) == d_erreur)
        !           253:    {
        !           254:        liberation(s_etat_processus, s_objet_argument_1);
        !           255: 
        !           256:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           257:        return;
        !           258:    }
        !           259: 
        !           260: /*
        !           261: --------------------------------------------------------------------------------
        !           262:   LE sur des valeurs numériques
        !           263: --------------------------------------------------------------------------------
        !           264: */
        !           265: 
        !           266:    if ((((*s_objet_argument_1).type == INT) ||
        !           267:            ((*s_objet_argument_1).type == REL)) &&
        !           268:            (((*s_objet_argument_2).type == INT) ||
        !           269:            ((*s_objet_argument_2).type == REL)))
        !           270:    {
        !           271:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           272:        {
        !           273:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           274:            return;
        !           275:        }
        !           276: 
        !           277:        if ((*s_objet_argument_1).type == INT)
        !           278:        {
        !           279:            if ((*s_objet_argument_2).type == INT)
        !           280:            {
        !           281:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           282:                        ((*((integer8 *) (*s_objet_argument_1).objet)) >=
        !           283:                        (*((integer8 *) (*s_objet_argument_2).objet)))
        !           284:                        ? -1 : 0;
        !           285:            }
        !           286:            else
        !           287:            {
        !           288:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           289:                        ((*((integer8 *) (*s_objet_argument_1).objet)) >=
        !           290:                        (*((real8 *) (*s_objet_argument_2).objet)))
        !           291:                        ? -1 : 0;
        !           292:            }
        !           293:        }
        !           294:        else
        !           295:        {
        !           296:            if ((*s_objet_argument_2).type == INT)
        !           297:            {
        !           298:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           299:                        ((*((real8 *) (*s_objet_argument_1).objet)) >=
        !           300:                        (*((integer8 *) (*s_objet_argument_2).objet)))
        !           301:                        ? -1 : 0;
        !           302:            }
        !           303:            else
        !           304:            {
        !           305:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           306:                        ((*((real8 *) (*s_objet_argument_1).objet)) >=
        !           307:                        (*((real8 *) (*s_objet_argument_2).objet)))
        !           308:                        ? -1 : 0;
        !           309:            }
        !           310:        }
        !           311:    }
        !           312: 
        !           313: /*
        !           314: --------------------------------------------------------------------------------
        !           315:   LE binaire
        !           316: --------------------------------------------------------------------------------
        !           317: */
        !           318: 
        !           319:    else if (((*s_objet_argument_1).type == BIN) &&
        !           320:            ((*s_objet_argument_2).type == BIN))
        !           321:    {
        !           322:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           323:        {
        !           324:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           325:            return;
        !           326:        }
        !           327: 
        !           328:        (*((integer8 *) (*s_objet_resultat).objet)) = 
        !           329:                ((*((logical8 *) (*s_objet_argument_1).objet)) >=
        !           330:                (*((logical8 *) (*s_objet_argument_2).objet)))
        !           331:                ? -1 : 0;
        !           332:    }
        !           333: 
        !           334: /*
        !           335: --------------------------------------------------------------------------------
        !           336:   LE portant sur des chaînes de caractères
        !           337: --------------------------------------------------------------------------------
        !           338: */
        !           339: 
        !           340:    else if (((*s_objet_argument_1).type == CHN) &&
        !           341:            ((*s_objet_argument_2).type == CHN))
        !           342:    {
        !           343:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           344:        {
        !           345:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           346:            return;
        !           347:        }
        !           348: 
        !           349:        (*((integer8 *) (*s_objet_resultat).objet)) =
        !           350:                (strcmp((unsigned char *) (*s_objet_argument_1).objet,
        !           351:                (unsigned char *) (*s_objet_argument_2).objet) >= 0) ? -1 : 0;
        !           352:    }
        !           353: 
        !           354: /*
        !           355: --------------------------------------------------------------------------------
        !           356:    LE entre des arguments complexes
        !           357: --------------------------------------------------------------------------------
        !           358: */
        !           359: 
        !           360:    /*
        !           361:     * Nom ou valeur numérique / Nom ou valeur numérique
        !           362:     */
        !           363: 
        !           364:    else if ((((*s_objet_argument_1).type == NOM) &&
        !           365:            (((*s_objet_argument_2).type == NOM) ||
        !           366:            ((*s_objet_argument_2).type == INT) ||
        !           367:            ((*s_objet_argument_2).type == REL))) ||
        !           368:            (((*s_objet_argument_2).type == NOM) &&
        !           369:            (((*s_objet_argument_1).type == INT) ||
        !           370:            ((*s_objet_argument_1).type == REL))))
        !           371:    {
        !           372:        if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
        !           373:        {
        !           374:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           375:            return;
        !           376:        }
        !           377: 
        !           378:        if (((*s_objet_resultat).objet =
        !           379:                allocation_maillon(s_etat_processus)) == NULL)
        !           380:        {
        !           381:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           382:            return;
        !           383:        }
        !           384: 
        !           385:        l_element_courant = (*s_objet_resultat).objet;
        !           386: 
        !           387:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           388:                == NULL)
        !           389:        {
        !           390:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           391:            return;
        !           392:        }
        !           393: 
        !           394:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           395:                .nombre_arguments = 0;
        !           396:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           397:                .fonction = instruction_vers_niveau_superieur;
        !           398: 
        !           399:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           400:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           401:        {
        !           402:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           403:            return;
        !           404:        }
        !           405: 
        !           406:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           407:                .nom_fonction, "<<");
        !           408: 
        !           409:        if (((*l_element_courant).suivant =
        !           410:                allocation_maillon(s_etat_processus)) == NULL)
        !           411:        {
        !           412:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           413:            return;
        !           414:        }
        !           415: 
        !           416:        l_element_courant = (*l_element_courant).suivant;
        !           417:        (*l_element_courant).donnee = s_objet_argument_2;
        !           418: 
        !           419:        if (((*l_element_courant).suivant =
        !           420:                allocation_maillon(s_etat_processus)) == NULL)
        !           421:        {
        !           422:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           423:            return;
        !           424:        }
        !           425: 
        !           426:        l_element_courant = (*l_element_courant).suivant;
        !           427:        (*l_element_courant).donnee = s_objet_argument_1;
        !           428: 
        !           429:        if (((*l_element_courant).suivant =
        !           430:                allocation_maillon(s_etat_processus)) == NULL)
        !           431:        {
        !           432:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           433:            return;
        !           434:        }
        !           435: 
        !           436:        l_element_courant = (*l_element_courant).suivant;
        !           437: 
        !           438:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           439:                == NULL)
        !           440:        {
        !           441:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           442:            return;
        !           443:        }
        !           444: 
        !           445:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           446:                .nombre_arguments = 0;
        !           447:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           448:                .fonction = instruction_le;
        !           449: 
        !           450:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           451:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           452:        {
        !           453:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           454:            return;
        !           455:        }
        !           456: 
        !           457:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           458:                .nom_fonction, "<=");
        !           459: 
        !           460:        if (((*l_element_courant).suivant =
        !           461:                allocation_maillon(s_etat_processus)) == NULL)
        !           462:        {
        !           463:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           464:            return;
        !           465:        }
        !           466: 
        !           467:        l_element_courant = (*l_element_courant).suivant;
        !           468: 
        !           469:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           470:                == NULL)
        !           471:        {
        !           472:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           473:            return;
        !           474:        }
        !           475: 
        !           476:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           477:                .nombre_arguments = 0;
        !           478:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           479:                .fonction = instruction_vers_niveau_inferieur;
        !           480: 
        !           481:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           482:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           483:        {
        !           484:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           485:            return;
        !           486:        }
        !           487: 
        !           488:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           489:                .nom_fonction, ">>");
        !           490: 
        !           491:        (*l_element_courant).suivant = NULL;
        !           492: 
        !           493:        s_objet_argument_1 = NULL;
        !           494:        s_objet_argument_2 = NULL;
        !           495:    }
        !           496: 
        !           497:    /*
        !           498:     * Nom ou valeur numérique / Expression
        !           499:     */
        !           500: 
        !           501:    else if (((((*s_objet_argument_1).type == ALG) ||
        !           502:            ((*s_objet_argument_1).type == RPN))) &&
        !           503:            (((*s_objet_argument_2).type == NOM) ||
        !           504:            ((*s_objet_argument_2).type == INT) ||
        !           505:            ((*s_objet_argument_2).type == REL)))
        !           506:    {
        !           507:        nombre_elements = 0;
        !           508:        l_element_courant = (struct_liste_chainee *)
        !           509:                (*s_objet_argument_1).objet;
        !           510: 
        !           511:        while(l_element_courant != NULL)
        !           512:        {
        !           513:            nombre_elements++;
        !           514:            l_element_courant = (*l_element_courant).suivant;
        !           515:        }
        !           516: 
        !           517:        if (nombre_elements == 2)
        !           518:        {
        !           519:            liberation(s_etat_processus, s_objet_argument_1);
        !           520:            liberation(s_etat_processus, s_objet_argument_2);
        !           521: 
        !           522:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           523:            return;
        !           524:        }
        !           525: 
        !           526:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !           527:                s_objet_argument_1, 'N')) == NULL)
        !           528:        {
        !           529:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           530:            return;
        !           531:        }
        !           532: 
        !           533:        l_element_courant = (struct_liste_chainee *)
        !           534:                (*s_objet_resultat).objet;
        !           535:        l_element_precedent = l_element_courant;
        !           536:        l_element_courant = (*l_element_courant).suivant;
        !           537: 
        !           538:        if (((*l_element_precedent).suivant =
        !           539:                allocation_maillon(s_etat_processus)) == NULL)
        !           540:        {
        !           541:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           542:            return;
        !           543:        }
        !           544: 
        !           545:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
        !           546:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           547: 
        !           548:        while((*l_element_courant).suivant != NULL)
        !           549:        {
        !           550:            l_element_precedent = l_element_courant;
        !           551:            l_element_courant = (*l_element_courant).suivant;
        !           552:        }
        !           553: 
        !           554:        if (((*l_element_precedent).suivant =
        !           555:                allocation_maillon(s_etat_processus)) == NULL)
        !           556:        {
        !           557:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           558:            return;
        !           559:        }
        !           560: 
        !           561:        if (((*(*l_element_precedent).suivant).donnee =
        !           562:                allocation(s_etat_processus, FCT)) == NULL)
        !           563:        {
        !           564:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           565:            return;
        !           566:        }
        !           567: 
        !           568:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           569:                .donnee).objet)).nombre_arguments = 0;
        !           570:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           571:                .donnee).objet)).fonction = instruction_le;
        !           572: 
        !           573:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !           574:                .suivant).donnee).objet)).nom_fonction =
        !           575:                malloc(3 * sizeof(unsigned char))) == NULL)
        !           576:        {
        !           577:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           578:            return;
        !           579:        }
        !           580: 
        !           581:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !           582:                .suivant).donnee).objet)).nom_fonction, "<=");
        !           583: 
        !           584:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           585: 
        !           586:        s_objet_argument_2 = NULL;
        !           587:    }
        !           588: 
        !           589:    /*
        !           590:     * Expression / Nom ou valeur numérique
        !           591:     */
        !           592: 
        !           593:    else if ((((*s_objet_argument_1).type == NOM) ||
        !           594:            ((*s_objet_argument_1).type == INT) ||
        !           595:            ((*s_objet_argument_1).type == REL)) &&
        !           596:            ((((*s_objet_argument_2).type == ALG) ||
        !           597:            ((*s_objet_argument_2).type == RPN))))
        !           598:    {
        !           599:        nombre_elements = 0;
        !           600:        l_element_courant = (struct_liste_chainee *)
        !           601:                (*s_objet_argument_2).objet;
        !           602: 
        !           603:        while(l_element_courant != NULL)
        !           604:        {
        !           605:            nombre_elements++;
        !           606:            l_element_courant = (*l_element_courant).suivant;
        !           607:        }
        !           608: 
        !           609:        if (nombre_elements == 2)
        !           610:        {
        !           611:            liberation(s_etat_processus, s_objet_argument_1);
        !           612:            liberation(s_etat_processus, s_objet_argument_2);
        !           613: 
        !           614:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           615:            return;
        !           616:        }
        !           617: 
        !           618:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !           619:                s_objet_argument_2, 'N')) == NULL)
        !           620:        {
        !           621:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           622:            return;
        !           623:        }
        !           624: 
        !           625:        l_element_courant = (struct_liste_chainee *)
        !           626:                (*s_objet_resultat).objet;
        !           627:        l_element_precedent = l_element_courant;
        !           628: 
        !           629:        while((*l_element_courant).suivant != NULL)
        !           630:        {
        !           631:            l_element_precedent = l_element_courant;
        !           632:            l_element_courant = (*l_element_courant).suivant;
        !           633:        }
        !           634: 
        !           635:        if (((*l_element_precedent).suivant =
        !           636:                allocation_maillon(s_etat_processus)) == NULL)
        !           637:        {
        !           638:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           639:            return;
        !           640:        }
        !           641: 
        !           642:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
        !           643:        l_element_precedent = (*l_element_precedent).suivant;
        !           644: 
        !           645:        if (((*l_element_precedent).suivant =
        !           646:                allocation_maillon(s_etat_processus)) == NULL)
        !           647:        {
        !           648:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           649:            return;
        !           650:        }
        !           651: 
        !           652:        if (((*(*l_element_precedent).suivant).donnee =
        !           653:                allocation(s_etat_processus, FCT)) == NULL)
        !           654:        {
        !           655:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           656:            return;
        !           657:        }
        !           658: 
        !           659:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           660:                .donnee).objet)).nombre_arguments = 0;
        !           661:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !           662:                .donnee).objet)).fonction = instruction_le;
        !           663: 
        !           664:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !           665:                .suivant).donnee).objet)).nom_fonction =
        !           666:                malloc(3 * sizeof(unsigned char))) == NULL)
        !           667:        {
        !           668:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           669:            return;
        !           670:        }
        !           671: 
        !           672:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !           673:                .suivant).donnee).objet)).nom_fonction, "<=");
        !           674: 
        !           675:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           676: 
        !           677:        s_objet_argument_1 = NULL;
        !           678:    }
        !           679: 
        !           680:    /*
        !           681:     * Expression / Expression
        !           682:     */
        !           683: 
        !           684:    else if ((((*s_objet_argument_1).type == ALG) &&
        !           685:            ((*s_objet_argument_2).type == ALG)) ||
        !           686:            (((*s_objet_argument_1).type == RPN) &&
        !           687:            ((*s_objet_argument_2).type == RPN)))
        !           688:    {
        !           689:        nombre_elements = 0;
        !           690:        l_element_courant = (struct_liste_chainee *)
        !           691:                (*s_objet_argument_1).objet;
        !           692: 
        !           693:        while(l_element_courant != NULL)
        !           694:        {
        !           695:            nombre_elements++;
        !           696:            l_element_courant = (*l_element_courant).suivant;
        !           697:        }
        !           698: 
        !           699:        if (nombre_elements == 2)
        !           700:        {
        !           701:            liberation(s_etat_processus, s_objet_argument_1);
        !           702:            liberation(s_etat_processus, s_objet_argument_2);
        !           703: 
        !           704:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           705:            return;
        !           706:        }
        !           707: 
        !           708:        nombre_elements = 0;
        !           709:        l_element_courant = (struct_liste_chainee *)
        !           710:                (*s_objet_argument_2).objet;
        !           711: 
        !           712:        while(l_element_courant != NULL)
        !           713:        {
        !           714:            nombre_elements++;
        !           715:            l_element_courant = (*l_element_courant).suivant;
        !           716:        }
        !           717: 
        !           718:        if (nombre_elements == 2)
        !           719:        {
        !           720:            liberation(s_etat_processus, s_objet_argument_1);
        !           721:            liberation(s_etat_processus, s_objet_argument_2);
        !           722: 
        !           723:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           724:            return;
        !           725:        }
        !           726: 
        !           727:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
        !           728:                s_objet_argument_1, 'N')) == NULL)
        !           729:        {
        !           730:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           731:            return;
        !           732:        }
        !           733: 
        !           734:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
        !           735:                s_objet_argument_2, 'N')) == NULL)
        !           736:        {
        !           737:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           738:            return;
        !           739:        }
        !           740: 
        !           741:        l_element_courant = (struct_liste_chainee *)
        !           742:                (*s_copie_argument_1).objet;
        !           743:        (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
        !           744:                (*s_copie_argument_1).objet)).suivant;
        !           745: 
        !           746:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !           747:        free(l_element_courant);
        !           748: 
        !           749:        l_element_courant = (struct_liste_chainee *)
        !           750:                (*s_copie_argument_2).objet;
        !           751:        l_element_precedent = l_element_courant;
        !           752:        s_objet_resultat = s_copie_argument_2;
        !           753: 
        !           754:        while((*l_element_courant).suivant != NULL)
        !           755:        {
        !           756:            l_element_precedent = l_element_courant;
        !           757:            l_element_courant = (*l_element_courant).suivant;
        !           758:        }
        !           759: 
        !           760:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !           761:        free(l_element_courant);
        !           762: 
        !           763:        (*l_element_precedent).suivant = (struct_liste_chainee *)
        !           764:                (*s_copie_argument_1).objet;
        !           765:        free(s_copie_argument_1);
        !           766: 
        !           767:        l_element_courant = (*l_element_precedent).suivant;
        !           768:        while((*l_element_courant).suivant != NULL)
        !           769:        {
        !           770:            l_element_precedent = l_element_courant;
        !           771:            l_element_courant = (*l_element_courant).suivant;
        !           772:        }
        !           773: 
        !           774:        if (((*l_element_precedent).suivant =
        !           775:                allocation_maillon(s_etat_processus)) == NULL)
        !           776:        {
        !           777:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           778:            return;
        !           779:        }
        !           780: 
        !           781:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !           782:        l_element_courant = (*l_element_precedent).suivant;
        !           783: 
        !           784:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !           785:                == NULL)
        !           786:        {
        !           787:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           788:            return;
        !           789:        }
        !           790: 
        !           791:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           792:                .nombre_arguments = 0;
        !           793:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           794:                .fonction = instruction_le;
        !           795: 
        !           796:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           797:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !           798:        {
        !           799:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           800:            return;
        !           801:        }
        !           802: 
        !           803:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !           804:                .nom_fonction, "<=");
        !           805:    }
        !           806: 
        !           807: /*
        !           808: --------------------------------------------------------------------------------
        !           809:   LE impossible
        !           810: --------------------------------------------------------------------------------
        !           811: */
        !           812: 
        !           813:    else
        !           814:    {
        !           815:        liberation(s_etat_processus, s_objet_argument_1);
        !           816:        liberation(s_etat_processus, s_objet_argument_2);
        !           817: 
        !           818:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           819:        return;
        !           820:    }
        !           821: 
        !           822:    liberation(s_etat_processus, s_objet_argument_1);
        !           823:    liberation(s_etat_processus, s_objet_argument_2);
        !           824: 
        !           825:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           826:            s_objet_resultat) == d_erreur)
        !           827:    {
        !           828:        return;
        !           829:    }
        !           830: 
        !           831:    return;
        !           832: }
        !           833: 
        !           834: 
        !           835: /*
        !           836: ================================================================================
        !           837:   Fonction '<'
        !           838: ================================================================================
        !           839:   Entrées :
        !           840: --------------------------------------------------------------------------------
        !           841:   Sorties :
        !           842: --------------------------------------------------------------------------------
        !           843:   Effets de bord : néant
        !           844: ================================================================================
        !           845: */
        !           846: 
        !           847: void
        !           848: instruction_lt(struct_processus *s_etat_processus)
        !           849: {
        !           850:    struct_liste_chainee        *l_element_courant;
        !           851:    struct_liste_chainee        *l_element_precedent;
        !           852: 
        !           853:    struct_objet                *s_copie_argument_1;
        !           854:    struct_objet                *s_copie_argument_2;
        !           855:    struct_objet                *s_objet_argument_1;
        !           856:    struct_objet                *s_objet_argument_2;
        !           857:    struct_objet                *s_objet_resultat;
        !           858: 
        !           859:    unsigned long               nombre_elements;
        !           860: 
        !           861:    (*s_etat_processus).erreur_execution = d_ex;
        !           862: 
        !           863:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           864:    {
        !           865:        printf("\n  < ");
        !           866: 
        !           867:        if ((*s_etat_processus).langue == 'F')
        !           868:        {
        !           869:            printf("(opérateur inférieur strictement)\n\n");
        !           870:        }
        !           871:        else
        !           872:        {
        !           873:            printf("(less than)\n\n");
        !           874:        }
        !           875: 
        !           876:        printf("    2: %s, %s\n", d_INT, d_REL);
        !           877:        printf("    1: %s, %s\n", d_INT, d_REL);
        !           878:        printf("->  1: %s\n\n", d_INT);
        !           879: 
        !           880:        printf("    2: %s\n", d_BIN);
        !           881:        printf("    1: %s\n", d_BIN);
        !           882:        printf("->  1: %s\n\n", d_INT);
        !           883: 
        !           884:        printf("    2: %s\n", d_CHN);
        !           885:        printf("    1: %s\n", d_CHN);
        !           886:        printf("->  1: %s\n\n", d_INT);
        !           887: 
        !           888:        printf("    2: %s\n", d_NOM);
        !           889:        printf("    1: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           890:        printf("->  1: %s\n\n", d_ALG);
        !           891: 
        !           892:        printf("    2: %s, %s, %s, %s\n", d_NOM, d_ALG, d_INT, d_REL);
        !           893:        printf("    1: %s\n", d_NOM);
        !           894:        printf("->  1: %s\n\n", d_ALG);
        !           895: 
        !           896:        printf("    2: %s\n", d_ALG);
        !           897:        printf("    1: %s\n", d_ALG);
        !           898:        printf("->  1: %s\n\n", d_ALG);
        !           899: 
        !           900:        printf("    2: %s\n", d_RPN);
        !           901:        printf("    1: %s\n", d_RPN);
        !           902:        printf("->  1: %s\n", d_RPN);
        !           903: 
        !           904:        return;
        !           905:    }
        !           906:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           907:    {
        !           908:        (*s_etat_processus).nombre_arguments = 0;
        !           909:        return;
        !           910:    }
        !           911:    
        !           912:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           913:    {
        !           914:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           915:        {
        !           916:            return;
        !           917:        }
        !           918:    }
        !           919: 
        !           920:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           921:            &s_objet_argument_1) == d_erreur)
        !           922:    {
        !           923:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           924:        return;
        !           925:    }
        !           926: 
        !           927:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           928:            &s_objet_argument_2) == d_erreur)
        !           929:    {
        !           930:        liberation(s_etat_processus, s_objet_argument_1);
        !           931: 
        !           932:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           933:        return;
        !           934:    }
        !           935: 
        !           936: /*
        !           937: --------------------------------------------------------------------------------
        !           938:   LT sur des valeurs numériques
        !           939: --------------------------------------------------------------------------------
        !           940: */
        !           941: 
        !           942:    if ((((*s_objet_argument_1).type == INT) ||
        !           943:            ((*s_objet_argument_1).type == REL)) &&
        !           944:            (((*s_objet_argument_2).type == INT) ||
        !           945:            ((*s_objet_argument_2).type == REL)))
        !           946:    {
        !           947:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           948:        {
        !           949:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           950:            return;
        !           951:        }
        !           952: 
        !           953:        if ((*s_objet_argument_1).type == INT)
        !           954:        {
        !           955:            if ((*s_objet_argument_2).type == INT)
        !           956:            {
        !           957:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           958:                        ((*((integer8 *) (*s_objet_argument_1).objet)) >
        !           959:                        (*((integer8 *) (*s_objet_argument_2).objet)))
        !           960:                        ? -1 : 0;
        !           961:            }
        !           962:            else
        !           963:            {
        !           964:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           965:                        ((*((integer8 *) (*s_objet_argument_1).objet)) >
        !           966:                        (*((real8 *) (*s_objet_argument_2).objet)))
        !           967:                        ? -1 : 0;
        !           968:            }
        !           969:        }
        !           970:        else
        !           971:        {
        !           972:            if ((*s_objet_argument_2).type == INT)
        !           973:            {
        !           974:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           975:                        ((*((real8 *) (*s_objet_argument_1).objet)) >
        !           976:                        (*((integer8 *) (*s_objet_argument_2).objet)))
        !           977:                        ? -1 : 0;
        !           978:            }
        !           979:            else
        !           980:            {
        !           981:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !           982:                        ((*((real8 *) (*s_objet_argument_1).objet)) >
        !           983:                        (*((real8 *) (*s_objet_argument_2).objet)))
        !           984:                        ? -1 : 0;
        !           985:            }
        !           986:        }
        !           987:    }
        !           988: 
        !           989: /*
        !           990: --------------------------------------------------------------------------------
        !           991:   LT binaire
        !           992: --------------------------------------------------------------------------------
        !           993: */
        !           994: 
        !           995:    else if (((*s_objet_argument_1).type == BIN) &&
        !           996:            ((*s_objet_argument_2).type == BIN))
        !           997:    {
        !           998:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !           999:        {
        !          1000:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1001:            return;
        !          1002:        }
        !          1003: 
        !          1004:        (*((integer8 *) (*s_objet_resultat).objet)) = 
        !          1005:                ((*((logical8 *) (*s_objet_argument_1).objet)) >
        !          1006:                (*((logical8 *) (*s_objet_argument_2).objet)))
        !          1007:                ? -1 : 0;
        !          1008:    }
        !          1009: 
        !          1010: /*
        !          1011: --------------------------------------------------------------------------------
        !          1012:   LT portant sur des chaînes de caractères
        !          1013: --------------------------------------------------------------------------------
        !          1014: */
        !          1015: 
        !          1016:    else if (((*s_objet_argument_1).type == CHN) &&
        !          1017:            ((*s_objet_argument_2).type == CHN))
        !          1018:    {
        !          1019:        if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
        !          1020:        {
        !          1021:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1022:            return;
        !          1023:        }
        !          1024: 
        !          1025:        (*((integer8 *) (*s_objet_resultat).objet)) =
        !          1026:                (strcmp((unsigned char *) (*s_objet_argument_1).objet,
        !          1027:                (unsigned char *) (*s_objet_argument_2).objet) > 0) ? -1 : 0;
        !          1028:    }
        !          1029: 
        !          1030: /*
        !          1031: --------------------------------------------------------------------------------
        !          1032:   LT entre des arguments complexes
        !          1033: --------------------------------------------------------------------------------
        !          1034: */
        !          1035: 
        !          1036:    /*
        !          1037:     * Nom ou valeur numérique / Nom ou valeur numérique
        !          1038:     */
        !          1039: 
        !          1040:    else if ((((*s_objet_argument_1).type == NOM) &&
        !          1041:            (((*s_objet_argument_2).type == NOM) ||
        !          1042:            ((*s_objet_argument_2).type == INT) ||
        !          1043:            ((*s_objet_argument_2).type == REL))) ||
        !          1044:            (((*s_objet_argument_2).type == NOM) &&
        !          1045:            (((*s_objet_argument_1).type == INT) ||
        !          1046:            ((*s_objet_argument_1).type == REL))))
        !          1047:    {
        !          1048:        if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
        !          1049:        {
        !          1050:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1051:            return;
        !          1052:        }
        !          1053: 
        !          1054:        if (((*s_objet_resultat).objet =
        !          1055:                allocation_maillon(s_etat_processus)) == NULL)
        !          1056:        {
        !          1057:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1058:            return;
        !          1059:        }
        !          1060: 
        !          1061:        l_element_courant = (*s_objet_resultat).objet;
        !          1062: 
        !          1063:        if (((*l_element_courant).donnee = 
        !          1064:                allocation(s_etat_processus, FCT)) == NULL)
        !          1065:        {
        !          1066:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1067:            return;
        !          1068:        }
        !          1069: 
        !          1070:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1071:                .nombre_arguments = 0;
        !          1072:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1073:                .fonction = instruction_vers_niveau_superieur;
        !          1074: 
        !          1075:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1076:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          1077:        {
        !          1078:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1079:            return;
        !          1080:        }
        !          1081: 
        !          1082:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1083:                .nom_fonction, "<<");
        !          1084: 
        !          1085:        if (((*l_element_courant).suivant =
        !          1086:                allocation_maillon(s_etat_processus)) == NULL)
        !          1087:        {
        !          1088:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1089:            return;
        !          1090:        }
        !          1091: 
        !          1092:        l_element_courant = (*l_element_courant).suivant;
        !          1093:        (*l_element_courant).donnee = s_objet_argument_2;
        !          1094: 
        !          1095:        if (((*l_element_courant).suivant =
        !          1096:                allocation_maillon(s_etat_processus)) == NULL)
        !          1097:        {
        !          1098:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1099:            return;
        !          1100:        }
        !          1101: 
        !          1102:        l_element_courant = (*l_element_courant).suivant;
        !          1103:        (*l_element_courant).donnee = s_objet_argument_1;
        !          1104: 
        !          1105:        if (((*l_element_courant).suivant =
        !          1106:                allocation_maillon(s_etat_processus)) == NULL)
        !          1107:        {
        !          1108:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1109:            return;
        !          1110:        }
        !          1111: 
        !          1112:        l_element_courant = (*l_element_courant).suivant;
        !          1113: 
        !          1114:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1115:                == NULL)
        !          1116:        {
        !          1117:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1118:            return;
        !          1119:        }
        !          1120: 
        !          1121:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1122:                .nombre_arguments = 0;
        !          1123:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1124:                .fonction = instruction_lt;
        !          1125: 
        !          1126:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1127:                .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
        !          1128:        {
        !          1129:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1130:            return;
        !          1131:        }
        !          1132: 
        !          1133:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1134:                .nom_fonction, "<");
        !          1135: 
        !          1136:        if (((*l_element_courant).suivant =
        !          1137:                allocation_maillon(s_etat_processus)) == NULL)
        !          1138:        {
        !          1139:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1140:            return;
        !          1141:        }
        !          1142: 
        !          1143:        l_element_courant = (*l_element_courant).suivant;
        !          1144: 
        !          1145:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1146:                == NULL)
        !          1147:        {
        !          1148:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1149:            return;
        !          1150:        }
        !          1151: 
        !          1152:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1153:                .nombre_arguments = 0;
        !          1154:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1155:                .fonction = instruction_vers_niveau_inferieur;
        !          1156: 
        !          1157:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1158:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          1159:        {
        !          1160:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1161:            return;
        !          1162:        }
        !          1163: 
        !          1164:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1165:                .nom_fonction, ">>");
        !          1166: 
        !          1167:        (*l_element_courant).suivant = NULL;
        !          1168: 
        !          1169:        s_objet_argument_1 = NULL;
        !          1170:        s_objet_argument_2 = NULL;
        !          1171:    }
        !          1172: 
        !          1173:    /*
        !          1174:     * Nom ou valeur numérique / Expression
        !          1175:     */
        !          1176: 
        !          1177:    else if (((((*s_objet_argument_1).type == ALG) ||
        !          1178:            ((*s_objet_argument_1).type == RPN))) &&
        !          1179:            (((*s_objet_argument_2).type == NOM) ||
        !          1180:            ((*s_objet_argument_2).type == INT) ||
        !          1181:            ((*s_objet_argument_2).type == REL)))
        !          1182:    {
        !          1183:        nombre_elements = 0;
        !          1184:        l_element_courant = (struct_liste_chainee *)
        !          1185:                (*s_objet_argument_1).objet;
        !          1186: 
        !          1187:        while(l_element_courant != NULL)
        !          1188:        {
        !          1189:            nombre_elements++;
        !          1190:            l_element_courant = (*l_element_courant).suivant;
        !          1191:        }
        !          1192: 
        !          1193:        if (nombre_elements == 2)
        !          1194:        {
        !          1195:            liberation(s_etat_processus, s_objet_argument_1);
        !          1196:            liberation(s_etat_processus, s_objet_argument_2);
        !          1197: 
        !          1198:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          1199:            return;
        !          1200:        }
        !          1201: 
        !          1202:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !          1203:                s_objet_argument_1, 'N')) == NULL)
        !          1204:        {
        !          1205:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1206:            return;
        !          1207:        }
        !          1208: 
        !          1209:        l_element_courant = (struct_liste_chainee *)
        !          1210:                (*s_objet_resultat).objet;
        !          1211:        l_element_precedent = l_element_courant;
        !          1212:        l_element_courant = (*l_element_courant).suivant;
        !          1213: 
        !          1214:        if (((*l_element_precedent).suivant =
        !          1215:                allocation_maillon(s_etat_processus)) == NULL)
        !          1216:        {
        !          1217:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1218:            return;
        !          1219:        }
        !          1220: 
        !          1221:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
        !          1222:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          1223: 
        !          1224:        while((*l_element_courant).suivant != NULL)
        !          1225:        {
        !          1226:            l_element_precedent = l_element_courant;
        !          1227:            l_element_courant = (*l_element_courant).suivant;
        !          1228:        }
        !          1229: 
        !          1230:        if (((*l_element_precedent).suivant =
        !          1231:                allocation_maillon(s_etat_processus)) == NULL)
        !          1232:        {
        !          1233:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1234:            return;
        !          1235:        }
        !          1236: 
        !          1237:        if (((*(*l_element_precedent).suivant).donnee =
        !          1238:                allocation(s_etat_processus, FCT)) == NULL)
        !          1239:        {
        !          1240:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1241:            return;
        !          1242:        }
        !          1243: 
        !          1244:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          1245:                .donnee).objet)).nombre_arguments = 0;
        !          1246:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          1247:                .donnee).objet)).fonction = instruction_lt;
        !          1248: 
        !          1249:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !          1250:                .suivant).donnee).objet)).nom_fonction =
        !          1251:                malloc(2 * sizeof(unsigned char))) == NULL)
        !          1252:        {
        !          1253:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1254:            return;
        !          1255:        }
        !          1256: 
        !          1257:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !          1258:                .suivant).donnee).objet)).nom_fonction, "<");
        !          1259: 
        !          1260:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          1261: 
        !          1262:        s_objet_argument_2 = NULL;
        !          1263:    }
        !          1264: 
        !          1265:    /*
        !          1266:     * Expression / Nom ou valeur numérique
        !          1267:     */
        !          1268: 
        !          1269:    else if ((((*s_objet_argument_1).type == NOM) ||
        !          1270:            ((*s_objet_argument_1).type == INT) ||
        !          1271:            ((*s_objet_argument_1).type == REL)) &&
        !          1272:            ((((*s_objet_argument_2).type == ALG) ||
        !          1273:            ((*s_objet_argument_2).type == RPN))))
        !          1274:    {
        !          1275:        nombre_elements = 0;
        !          1276:        l_element_courant = (struct_liste_chainee *)
        !          1277:                (*s_objet_argument_2).objet;
        !          1278: 
        !          1279:        while(l_element_courant != NULL)
        !          1280:        {
        !          1281:            nombre_elements++;
        !          1282:            l_element_courant = (*l_element_courant).suivant;
        !          1283:        }
        !          1284: 
        !          1285:        if (nombre_elements == 2)
        !          1286:        {
        !          1287:            liberation(s_etat_processus, s_objet_argument_1);
        !          1288:            liberation(s_etat_processus, s_objet_argument_2);
        !          1289: 
        !          1290:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          1291:            return;
        !          1292:        }
        !          1293: 
        !          1294:        if ((s_objet_resultat = copie_objet(s_etat_processus,
        !          1295:                s_objet_argument_2, 'N')) == NULL)
        !          1296:        {
        !          1297:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1298:            return;
        !          1299:        }
        !          1300: 
        !          1301:        l_element_courant = (struct_liste_chainee *)
        !          1302:                (*s_objet_resultat).objet;
        !          1303:        l_element_precedent = l_element_courant;
        !          1304: 
        !          1305:        while((*l_element_courant).suivant != NULL)
        !          1306:        {
        !          1307:            l_element_precedent = l_element_courant;
        !          1308:            l_element_courant = (*l_element_courant).suivant;
        !          1309:        }
        !          1310: 
        !          1311:        if (((*l_element_precedent).suivant =
        !          1312:                allocation_maillon(s_etat_processus)) == NULL)
        !          1313:        {
        !          1314:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1315:            return;
        !          1316:        }
        !          1317: 
        !          1318:        (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
        !          1319:        l_element_precedent = (*l_element_precedent).suivant;
        !          1320: 
        !          1321:        if (((*l_element_precedent).suivant =
        !          1322:                allocation_maillon(s_etat_processus)) == NULL)
        !          1323:        {
        !          1324:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1325:            return;
        !          1326:        }
        !          1327: 
        !          1328:        if (((*(*l_element_precedent).suivant).donnee =
        !          1329:                allocation(s_etat_processus, FCT)) == NULL)
        !          1330:        {
        !          1331:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1332:            return;
        !          1333:        }
        !          1334: 
        !          1335:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          1336:                .donnee).objet)).nombre_arguments = 0;
        !          1337:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          1338:                .donnee).objet)).fonction = instruction_lt;
        !          1339: 
        !          1340:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !          1341:                .suivant).donnee).objet)).nom_fonction =
        !          1342:                malloc(2 * sizeof(unsigned char))) == NULL)
        !          1343:        {
        !          1344:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1345:            return;
        !          1346:        }
        !          1347: 
        !          1348:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !          1349:                .suivant).donnee).objet)).nom_fonction, "<");
        !          1350: 
        !          1351:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          1352: 
        !          1353:        s_objet_argument_1 = NULL;
        !          1354:    }
        !          1355: 
        !          1356:    /*
        !          1357:     * Expression / Expression
        !          1358:     */
        !          1359: 
        !          1360:    else if ((((*s_objet_argument_1).type == ALG) &&
        !          1361:            ((*s_objet_argument_2).type == ALG)) ||
        !          1362:            (((*s_objet_argument_1).type == RPN) &&
        !          1363:            ((*s_objet_argument_2).type == RPN)))
        !          1364:    {
        !          1365:        nombre_elements = 0;
        !          1366:        l_element_courant = (struct_liste_chainee *)
        !          1367:                (*s_objet_argument_1).objet;
        !          1368: 
        !          1369:        while(l_element_courant != NULL)
        !          1370:        {
        !          1371:            nombre_elements++;
        !          1372:            l_element_courant = (*l_element_courant).suivant;
        !          1373:        }
        !          1374: 
        !          1375:        if (nombre_elements == 2)
        !          1376:        {
        !          1377:            liberation(s_etat_processus, s_objet_argument_1);
        !          1378:            liberation(s_etat_processus, s_objet_argument_2);
        !          1379: 
        !          1380:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          1381:            return;
        !          1382:        }
        !          1383: 
        !          1384:        nombre_elements = 0;
        !          1385:        l_element_courant = (struct_liste_chainee *)
        !          1386:                (*s_objet_argument_2).objet;
        !          1387: 
        !          1388:        while(l_element_courant != NULL)
        !          1389:        {
        !          1390:            nombre_elements++;
        !          1391:            l_element_courant = (*l_element_courant).suivant;
        !          1392:        }
        !          1393: 
        !          1394:        if (nombre_elements == 2)
        !          1395:        {
        !          1396:            liberation(s_etat_processus, s_objet_argument_1);
        !          1397:            liberation(s_etat_processus, s_objet_argument_2);
        !          1398: 
        !          1399:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          1400:            return;
        !          1401:        }
        !          1402: 
        !          1403:        if ((s_copie_argument_1 = copie_objet(s_etat_processus,
        !          1404:                s_objet_argument_1, 'N')) == NULL)
        !          1405:        {
        !          1406:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1407:            return;
        !          1408:        }
        !          1409: 
        !          1410:        if ((s_copie_argument_2 = copie_objet(s_etat_processus,
        !          1411:                s_objet_argument_2, 'N')) == NULL)
        !          1412:        {
        !          1413:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1414:            return;
        !          1415:        }
        !          1416: 
        !          1417:        l_element_courant = (struct_liste_chainee *)
        !          1418:                (*s_copie_argument_1).objet;
        !          1419:        (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
        !          1420:                (*s_copie_argument_1).objet)).suivant;
        !          1421: 
        !          1422:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !          1423:        free(l_element_courant);
        !          1424: 
        !          1425:        l_element_courant = (struct_liste_chainee *)
        !          1426:                (*s_copie_argument_2).objet;
        !          1427:        l_element_precedent = l_element_courant;
        !          1428:        s_objet_resultat = s_copie_argument_2;
        !          1429: 
        !          1430:        while((*l_element_courant).suivant != NULL)
        !          1431:        {
        !          1432:            l_element_precedent = l_element_courant;
        !          1433:            l_element_courant = (*l_element_courant).suivant;
        !          1434:        }
        !          1435: 
        !          1436:        liberation(s_etat_processus, (*l_element_courant).donnee);
        !          1437:        free(l_element_courant);
        !          1438: 
        !          1439:        (*l_element_precedent).suivant = (struct_liste_chainee *)
        !          1440:                (*s_copie_argument_1).objet;
        !          1441:        free(s_copie_argument_1);
        !          1442: 
        !          1443:        l_element_courant = (*l_element_precedent).suivant;
        !          1444:        while((*l_element_courant).suivant != NULL)
        !          1445:        {
        !          1446:            l_element_precedent = l_element_courant;
        !          1447:            l_element_courant = (*l_element_courant).suivant;
        !          1448:        }
        !          1449: 
        !          1450:        if (((*l_element_precedent).suivant =
        !          1451:                allocation_maillon(s_etat_processus)) == NULL)
        !          1452:        {
        !          1453:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1454:            return;
        !          1455:        }
        !          1456: 
        !          1457:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          1458:        l_element_courant = (*l_element_precedent).suivant;
        !          1459: 
        !          1460:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1461:                == NULL)
        !          1462:        {
        !          1463:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1464:            return;
        !          1465:        }
        !          1466: 
        !          1467:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1468:                .nombre_arguments = 0;
        !          1469:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1470:                .fonction = instruction_lt;
        !          1471: 
        !          1472:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1473:                .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
        !          1474:        {
        !          1475:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1476:            return;
        !          1477:        }
        !          1478: 
        !          1479:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1480:                .nom_fonction, "<");
        !          1481:    }
        !          1482: 
        !          1483: /*
        !          1484: --------------------------------------------------------------------------------
        !          1485:   LT impossible
        !          1486: --------------------------------------------------------------------------------
        !          1487: */
        !          1488: 
        !          1489:    else
        !          1490:    {
        !          1491:        liberation(s_etat_processus, s_objet_argument_1);
        !          1492:        liberation(s_etat_processus, s_objet_argument_2);
        !          1493: 
        !          1494:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1495:        return;
        !          1496:    }
        !          1497: 
        !          1498:    liberation(s_etat_processus, s_objet_argument_1);
        !          1499:    liberation(s_etat_processus, s_objet_argument_2);
        !          1500: 
        !          1501:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1502:            s_objet_resultat) == d_erreur)
        !          1503:    {
        !          1504:        return;
        !          1505:    }
        !          1506: 
        !          1507:    return;
        !          1508: }
        !          1509: 
        !          1510: 
        !          1511: /*
        !          1512: ================================================================================
        !          1513:   Fonction 'last'
        !          1514: ================================================================================
        !          1515:   Entrées : structure processus
        !          1516: --------------------------------------------------------------------------------
        !          1517:   Sorties :
        !          1518: --------------------------------------------------------------------------------
        !          1519:   Effets de bord : néant
        !          1520: ================================================================================
        !          1521: */
        !          1522: 
        !          1523: void
        !          1524: instruction_last(struct_processus *s_etat_processus)
        !          1525: {
        !          1526:    struct_liste_chainee                *l_element_courant;
        !          1527: 
        !          1528:    struct_objet                        *s_objet;
        !          1529: 
        !          1530:    (*s_etat_processus).erreur_execution = d_ex;
        !          1531: 
        !          1532:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1533:    {
        !          1534:        printf("\n  LAST ");
        !          1535: 
        !          1536:        if ((*s_etat_processus).langue == 'F')
        !          1537:        {
        !          1538:            printf("(renvoie les arguments de la dernière fonction "
        !          1539:                    "intrinsèque)\n\n");
        !          1540:            printf("  Aucun argument\n");
        !          1541:        }
        !          1542:        else
        !          1543:        {
        !          1544:            printf("(return arguments of the last intrinsic function)\n\n");
        !          1545:            printf("  No argument\n");
        !          1546:        }
        !          1547: 
        !          1548:        return;
        !          1549:    }
        !          1550:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1551:    {
        !          1552:        (*s_etat_processus).nombre_arguments = -1;
        !          1553:        return;
        !          1554:    }
        !          1555: 
        !          1556:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1557:    {
        !          1558:        l_element_courant = (*s_etat_processus).l_base_pile_last;
        !          1559: 
        !          1560:        while(l_element_courant != NULL)
        !          1561:        {
        !          1562:            if ((s_objet = copie_objet(s_etat_processus,
        !          1563:                    (*l_element_courant).donnee, 'P')) == NULL)
        !          1564:            {
        !          1565:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1566:                return;
        !          1567:            }
        !          1568: 
        !          1569:            if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1570:                    s_objet) == d_erreur)
        !          1571:            {
        !          1572:                return;
        !          1573:            }
        !          1574: 
        !          1575:            l_element_courant = (*l_element_courant).suivant;
        !          1576:        }
        !          1577:    }
        !          1578: 
        !          1579:    return;
        !          1580: }
        !          1581: 
        !          1582: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>