Annotation of rpl/src/instructions_r1.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 'rad'
        !            29: ================================================================================
        !            30:   Entrées : structure processus
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_rad(struct_processus *s_etat_processus)
        !            40: {
        !            41:    (*s_etat_processus).erreur_execution = d_ex;
        !            42: 
        !            43:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            44:    {
        !            45:        printf("\n  RAD ");
        !            46: 
        !            47:        if ((*s_etat_processus).langue == 'F')
        !            48:        {
        !            49:            printf("(arguments en radians)\n\n");
        !            50:            printf("  Aucun argument\n");
        !            51:        }
        !            52:        else
        !            53:        {
        !            54:            printf("(radians)\n\n");
        !            55:            printf("  No argument\n");
        !            56:        }
        !            57: 
        !            58:        return;
        !            59:    }
        !            60:    else if ((*s_etat_processus).test_instruction == 'Y')
        !            61:    {
        !            62:        (*s_etat_processus).nombre_arguments = -1;
        !            63:        return;
        !            64:    }
        !            65: 
        !            66:    sf(s_etat_processus, 60);
        !            67: 
        !            68:    return;
        !            69: }
        !            70: 
        !            71: 
        !            72: /*
        !            73: ================================================================================
        !            74:   Fonction 'roll'
        !            75: ================================================================================
        !            76:   Entrées : structure processus
        !            77: --------------------------------------------------------------------------------
        !            78:   Sorties :
        !            79: --------------------------------------------------------------------------------
        !            80:   Effets de bord : néant
        !            81: ================================================================================
        !            82: */
        !            83: 
        !            84: void
        !            85: instruction_roll(struct_processus *s_etat_processus)
        !            86: {
        !            87:    struct_liste_chainee                    *l_liste1;
        !            88:    struct_liste_chainee                    *l_liste2;
        !            89: 
        !            90:    struct_objet                            *s_objet;
        !            91: 
        !            92:    unsigned long                           i;
        !            93: 
        !            94:    (*s_etat_processus).erreur_execution = d_ex;
        !            95: 
        !            96:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            97:    {
        !            98:        printf("\n  ROLL ");
        !            99: 
        !           100:        if ((*s_etat_processus).langue == 'F')
        !           101:        {
        !           102:            printf("(défilement d'un objet vers le haut)\n\n");
        !           103:        }
        !           104:        else
        !           105:        {
        !           106:            printf("(roll up objects on stack)\n\n");
        !           107:        }
        !           108: 
        !           109:        printf("  n+1: %s, %s, %s, %s, %s, %s,\n"
        !           110:                "       %s, %s, %s, %s, %s,\n"
        !           111:                "       %s, %s, %s, %s, %s,\n"
        !           112:                "       %s, %s, %s, %s,\n"
        !           113:                "       %s, %s\n",
        !           114:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           115:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           116:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           117:        printf("    ...\n");
        !           118:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !           119:                "       %s, %s, %s, %s, %s,\n"
        !           120:                "       %s, %s, %s, %s, %s,\n"
        !           121:                "       %s, %s, %s, %s,\n"
        !           122:                "       %s, %s\n",
        !           123:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           124:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           125:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           126:        printf("    1: %s\n", d_INT);
        !           127:        printf("->  n: %s, %s, %s, %s, %s, %s,\n"
        !           128:                "       %s, %s, %s, %s, %s,\n"
        !           129:                "       %s, %s, %s, %s, %s,\n"
        !           130:                "       %s, %s, %s, %s,\n"
        !           131:                "       %s, %s\n",
        !           132:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           133:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           134:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           135:        printf("    ...\n");
        !           136:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           137:                "       %s, %s, %s, %s, %s,\n"
        !           138:                "       %s, %s, %s, %s, %s,\n"
        !           139:                "       %s, %s, %s, %s,\n"
        !           140:                "       %s, %s\n",
        !           141:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           142:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           143:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           144: 
        !           145:        return;
        !           146:    }
        !           147:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           148:    {
        !           149:        (*s_etat_processus).nombre_arguments = -1;
        !           150:        return;
        !           151:    }
        !           152: 
        !           153:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           154:    {
        !           155:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           156:        {
        !           157:            return;
        !           158:        }
        !           159:    }
        !           160: 
        !           161:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           162:            &s_objet) == d_erreur)
        !           163:    {
        !           164:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           165:        return;
        !           166:    }
        !           167: 
        !           168:    if ((*s_objet).type != INT)
        !           169:    {
        !           170:        liberation(s_etat_processus, s_objet);
        !           171: 
        !           172:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           173:        return;
        !           174:    }
        !           175: 
        !           176:    if ((*((integer8 *) (*s_objet).objet)) <= 0)
        !           177:    {
        !           178: 
        !           179: /*
        !           180: -- Opération absurde autorisée sur le calculateur HP-28S -----------------------
        !           181: */
        !           182: 
        !           183:        liberation(s_etat_processus, s_objet);
        !           184: 
        !           185:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           186:        return;
        !           187:    }
        !           188: 
        !           189:    if ((*((integer8 *) (*s_objet).objet)) > (integer8) (*s_etat_processus)
        !           190:            .hauteur_pile_operationnelle)
        !           191:    {
        !           192:        liberation(s_etat_processus, s_objet);
        !           193: 
        !           194:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           195:        return;
        !           196:    }
        !           197: 
        !           198:    if ((*((integer8 *) (*s_objet).objet)) > 1)
        !           199:    {
        !           200:        l_liste1 = (*s_etat_processus).l_base_pile;
        !           201: 
        !           202:        for(i = 2; i < (unsigned long) (*((integer8 *) (*s_objet).objet)); i++)
        !           203:        {
        !           204:            l_liste1 = (*l_liste1).suivant;
        !           205:        }
        !           206: 
        !           207:        l_liste2 = (*l_liste1).suivant;
        !           208:        (*l_liste1).suivant = (*l_liste2).suivant;
        !           209:        (*l_liste2).suivant = (*s_etat_processus).l_base_pile;
        !           210:        (*s_etat_processus).l_base_pile = l_liste2;
        !           211:    }
        !           212: 
        !           213:    liberation(s_etat_processus, s_objet);
        !           214: 
        !           215:    return;
        !           216: }
        !           217: 
        !           218: 
        !           219: /*
        !           220: ================================================================================
        !           221:   Fonction 'rolld'
        !           222: ================================================================================
        !           223:   Entrées : structure processus
        !           224: --------------------------------------------------------------------------------
        !           225:   Sorties :
        !           226: --------------------------------------------------------------------------------
        !           227:   Effets de bord : néant
        !           228: ================================================================================
        !           229: */
        !           230: 
        !           231: void
        !           232: instruction_rolld(struct_processus *s_etat_processus)
        !           233: {
        !           234:    struct_liste_chainee                        *l_liste1;
        !           235:    struct_liste_chainee                        *l_liste2;
        !           236: 
        !           237:    struct_objet                                *s_objet;
        !           238: 
        !           239:    unsigned long                               i;
        !           240: 
        !           241:    (*s_etat_processus).erreur_execution = d_ex;
        !           242: 
        !           243:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           244:    {
        !           245:        printf("\n  ROLLD ");
        !           246: 
        !           247:        if ((*s_etat_processus).langue == 'F')
        !           248:        {
        !           249:            printf("(défilement d'un objet vers le bas)\n\n");
        !           250:        }
        !           251:        else
        !           252:        {
        !           253:            printf("(roll down objects on stack)\n\n");
        !           254:        }
        !           255: 
        !           256:        printf("  n+1: %s, %s, %s, %s, %s, %s,\n"
        !           257:                "       %s, %s, %s, %s, %s,\n"
        !           258:                "       %s, %s, %s, %s, %s,\n"
        !           259:                "       %s, %s, %s, %s,\n"
        !           260:                "       %s, %s\n",
        !           261:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           262:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           263:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           264:        printf("    ...\n");
        !           265:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !           266:                "       %s, %s, %s, %s, %s,\n"
        !           267:                "       %s, %s, %s, %s, %s,\n"
        !           268:                "       %s, %s, %s, %s,\n"
        !           269:                "       %s, %s\n",
        !           270:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           271:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           272:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           273:        printf("    1: %s\n", d_INT);
        !           274:        printf("->  n: %s, %s, %s, %s, %s, %s,\n"
        !           275:                "       %s, %s, %s, %s, %s,\n"
        !           276:                "       %s, %s, %s, %s, %s,\n"
        !           277:                "       %s, %s, %s, %s,\n"
        !           278:                "       %s, %s\n",
        !           279:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           280:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           281:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           282:        printf("    ...\n");
        !           283:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           284:                "       %s, %s, %s, %s, %s,\n"
        !           285:                "       %s, %s, %s, %s, %s,\n"
        !           286:                "       %s, %s, %s, %s,\n"
        !           287:                "       %s, %s\n",
        !           288:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           289:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           290:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           291: 
        !           292:        return;
        !           293:    }
        !           294:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           295:    {
        !           296:        (*s_etat_processus).nombre_arguments = -1;
        !           297:        return;
        !           298:    }
        !           299: 
        !           300:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           301:    {
        !           302:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           303:        {
        !           304:            return;
        !           305:        }
        !           306:    }
        !           307: 
        !           308:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           309:            &s_objet) == d_erreur)
        !           310:    {
        !           311:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           312:        return;
        !           313:    }
        !           314: 
        !           315:    if ((*s_objet).type != INT)
        !           316:    {
        !           317:        liberation(s_etat_processus, s_objet);
        !           318: 
        !           319:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           320:        return;
        !           321:    }
        !           322: 
        !           323:    if ((*((integer8 *) (*s_objet).objet)) <= 0)
        !           324:    {
        !           325: 
        !           326: /*
        !           327: -- Opération absurde autorisée sur le calculateur HP-28S -----------------------
        !           328: */
        !           329: 
        !           330:        liberation(s_etat_processus, s_objet);
        !           331: 
        !           332:        (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !           333:        return;
        !           334:    }
        !           335: 
        !           336:    if ((*((integer8 *) (*s_objet).objet)) > (integer8) (*s_etat_processus)
        !           337:            .hauteur_pile_operationnelle)
        !           338:    {
        !           339:        liberation(s_etat_processus, s_objet);
        !           340: 
        !           341:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           342:        return;
        !           343:    }
        !           344: 
        !           345:    if ((*((integer8 *) (*s_objet).objet)) > 1)
        !           346:    {
        !           347:        l_liste1 = (*s_etat_processus).l_base_pile;
        !           348: 
        !           349:        for(i = 1; i < (unsigned long) (*((integer8 *) (*s_objet).objet)); i++)
        !           350:        {
        !           351:            l_liste1 = (*l_liste1).suivant;
        !           352:        }
        !           353: 
        !           354:        l_liste2 = (*s_etat_processus).l_base_pile;
        !           355:        (*s_etat_processus).l_base_pile = (*(*s_etat_processus)
        !           356:                .l_base_pile).suivant;
        !           357:        (*l_liste2).suivant = (*l_liste1).suivant;
        !           358:        (*l_liste1).suivant = l_liste2;
        !           359:    }
        !           360: 
        !           361:    liberation(s_etat_processus, s_objet);
        !           362: 
        !           363:    return;
        !           364: }
        !           365: 
        !           366: 
        !           367: /*
        !           368: ================================================================================
        !           369:   Fonction 'rot'
        !           370: ================================================================================
        !           371:   Entrées : structure processus
        !           372: --------------------------------------------------------------------------------
        !           373:   Sorties :
        !           374: --------------------------------------------------------------------------------
        !           375:   Effets de bord : néant
        !           376: ================================================================================
        !           377: */
        !           378: 
        !           379: void
        !           380: instruction_rot(struct_processus *s_etat_processus)
        !           381: {
        !           382:    struct_liste_chainee                *l_liste1;
        !           383:    struct_liste_chainee                *l_liste2;
        !           384: 
        !           385:    (*s_etat_processus).erreur_execution = d_ex;
        !           386: 
        !           387:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           388:    {
        !           389:        printf("\n  ROT ");
        !           390: 
        !           391:        if ((*s_etat_processus).langue == 'F')
        !           392:        {
        !           393:            printf("(rotation)\n\n");
        !           394:        }
        !           395:        else
        !           396:        {
        !           397:            printf("(rotation)\n");
        !           398:        }
        !           399: 
        !           400:        printf("    3: %s, %s, %s, %s, %s, %s,\n"
        !           401:                "       %s, %s, %s, %s, %s,\n"
        !           402:                "       %s, %s, %s, %s, %s,\n"
        !           403:                "       %s, %s, %s, %s,\n"
        !           404:                "       %s, %s\n",
        !           405:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           406:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           407:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           408:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !           409:                "       %s, %s, %s, %s, %s,\n"
        !           410:                "       %s, %s, %s, %s, %s,\n"
        !           411:                "       %s, %s, %s, %s,\n"
        !           412:                "       %s, %s\n",
        !           413:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           414:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           415:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           416:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           417:                "       %s, %s, %s, %s, %s,\n"
        !           418:                "       %s, %s, %s, %s, %s,\n"
        !           419:                "       %s, %s, %s, %s,\n"
        !           420:                "       %s, %s\n",
        !           421:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           422:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           423:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           424:        printf("->  3: %s, %s, %s, %s, %s, %s,\n"
        !           425:                "       %s, %s, %s, %s, %s,\n"
        !           426:                "       %s, %s, %s, %s, %s,\n"
        !           427:                "       %s, %s, %s, %s,\n"
        !           428:                "       %s, %s\n",
        !           429:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           430:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           431:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           432:        printf("    2: %s, %s, %s, %s, %s, %s,\n"
        !           433:                "       %s, %s, %s, %s, %s,\n"
        !           434:                "       %s, %s, %s, %s, %s,\n"
        !           435:                "       %s, %s, %s, %s,\n"
        !           436:                "       %s, %s\n",
        !           437:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           438:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           439:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           440:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           441:                "       %s, %s, %s, %s, %s,\n"
        !           442:                "       %s, %s, %s, %s, %s,\n"
        !           443:                "       %s, %s, %s, %s,\n"
        !           444:                "       %s, %s\n",
        !           445:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           446:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           447:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           448: 
        !           449:        return;
        !           450:    }
        !           451:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           452:    {
        !           453:        (*s_etat_processus).nombre_arguments = -1;
        !           454:        return;
        !           455:    }
        !           456: 
        !           457:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           458:    {
        !           459:        if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
        !           460:        {
        !           461:            return;
        !           462:        }
        !           463:    }
        !           464: 
        !           465:    if ((*s_etat_processus).hauteur_pile_operationnelle < 3)
        !           466:    {
        !           467:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           468:        return;
        !           469:    }
        !           470: 
        !           471:    l_liste1 = (*(*s_etat_processus).l_base_pile).suivant;
        !           472:    l_liste2 = (*l_liste1).suivant;
        !           473:    (*l_liste1).suivant = (*l_liste2).suivant;
        !           474:    (*l_liste2).suivant = (*s_etat_processus).l_base_pile;
        !           475:    (*s_etat_processus).l_base_pile = l_liste2;
        !           476:    
        !           477:    return;
        !           478: }
        !           479: 
        !           480: 
        !           481: /*
        !           482: ================================================================================
        !           483:   Fonction 'repeat'
        !           484: ================================================================================
        !           485:   Entrées : structure processus
        !           486: --------------------------------------------------------------------------------
        !           487:   Sorties :
        !           488: --------------------------------------------------------------------------------
        !           489:   Effets de bord : néant
        !           490: ================================================================================
        !           491: */
        !           492: 
        !           493: void
        !           494: instruction_repeat(struct_processus *s_etat_processus)
        !           495: {
        !           496:    struct_objet                    *s_objet;
        !           497: 
        !           498:    logical1                        condition;
        !           499:    logical1                        drapeau_fin;
        !           500:    logical1                        execution;
        !           501: 
        !           502:    struct_liste_chainee            *s_registre;
        !           503: 
        !           504:    unsigned char                   *instruction_majuscule;
        !           505:    unsigned char                   *tampon;
        !           506: 
        !           507:    unsigned long                   niveau;
        !           508: 
        !           509:    void                            (*fonction)();
        !           510: 
        !           511:    (*s_etat_processus).erreur_execution = d_ex;
        !           512: 
        !           513:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           514:    {
        !           515:        printf("\n  REPEAT ");
        !           516: 
        !           517:        if ((*s_etat_processus).langue == 'F')
        !           518:        {
        !           519:            printf("(structure de contrôle)\n\n");
        !           520:            printf("  Utilisation :\n\n");
        !           521:        }
        !           522:        else
        !           523:        {
        !           524:            printf("(control statement)\n\n");
        !           525:            printf("  Usage:\n\n");
        !           526:        }
        !           527: 
        !           528:        printf("    WHILE\n");
        !           529:        printf("        (clause)\n");
        !           530:        printf("    REPEAT\n");
        !           531:        printf("        (expression 1)\n");
        !           532:        printf("        EXIT\n");
        !           533:        printf("        (expression 2)\n");
        !           534:        printf("    END\n\n");
        !           535: 
        !           536:        printf("    WHILE\n");
        !           537:        printf("        (clause)\n");
        !           538:        printf("    REPEAT\n");
        !           539:        printf("        (expression)\n");
        !           540:        printf("    END\n");
        !           541: 
        !           542:        return;
        !           543:    }
        !           544:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           545:    {
        !           546:        (*s_etat_processus).nombre_arguments = -1;
        !           547:        return;
        !           548:    }
        !           549: 
        !           550:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           551:            &s_objet) == d_erreur)
        !           552:    {
        !           553:        return;
        !           554:    }
        !           555: 
        !           556:    if (((*s_objet).type == INT) ||
        !           557:            ((*s_objet).type == REL))
        !           558:    {
        !           559:        if ((*s_objet).type == INT)
        !           560:        {
        !           561:            condition = ((*((integer8 *) (*s_objet).objet)) == 0)
        !           562:                    ? d_faux : d_vrai;
        !           563:        }
        !           564:        else
        !           565:        {
        !           566:            condition = ((*((real8 *) (*s_objet).objet)) == 0)
        !           567:                    ? d_faux : d_vrai;
        !           568:        }
        !           569: 
        !           570:        if (condition == d_faux)
        !           571:        {
        !           572:            niveau = 0;
        !           573:            (*(*s_etat_processus).l_base_pile_systeme).clause = 'M';
        !           574:            drapeau_fin = d_faux;
        !           575: 
        !           576:            if ((*s_etat_processus).mode_execution_programme == 'Y')
        !           577:            {
        !           578:                tampon = (*s_etat_processus).instruction_courante;
        !           579: 
        !           580:                do
        !           581:                {
        !           582:                    if (recherche_instruction_suivante(s_etat_processus) !=
        !           583:                            d_absence_erreur)
        !           584:                    {
        !           585:                        liberation(s_etat_processus, s_objet);
        !           586: 
        !           587:                        if ((*s_etat_processus).instruction_courante != NULL)
        !           588:                        {
        !           589:                            free((*s_etat_processus).instruction_courante);
        !           590:                        }
        !           591: 
        !           592:                        (*s_etat_processus).instruction_courante = tampon;
        !           593:                        (*s_etat_processus).erreur_execution =
        !           594:                                d_ex_erreur_traitement_condition;
        !           595:                        return;
        !           596:                    }
        !           597: 
        !           598:                    if ((instruction_majuscule = conversion_majuscule(
        !           599:                            (*s_etat_processus).instruction_courante)) == NULL)
        !           600:                    {
        !           601:                        liberation(s_etat_processus, s_objet);
        !           602: 
        !           603:                        free((*s_etat_processus).instruction_courante);
        !           604:                        (*s_etat_processus).instruction_courante = tampon;
        !           605:                        (*s_etat_processus).erreur_systeme =
        !           606:                                d_es_allocation_memoire;
        !           607:                        return;
        !           608:                    }
        !           609: 
        !           610: 
        !           611:                    if (niveau == 0)
        !           612:                    {
        !           613:                        if ((strcmp(instruction_majuscule, "END") == 0)
        !           614:                                || (strcmp(instruction_majuscule, "ELSE") == 0)
        !           615:                                || (strcmp(instruction_majuscule, "ELSEIF")
        !           616:                                == 0))
        !           617:                        {
        !           618:                            (*s_etat_processus).position_courante -= (strlen(
        !           619:                                    instruction_majuscule) + 1);
        !           620:                            drapeau_fin = d_vrai;
        !           621:                        }
        !           622:                        else
        !           623:                        {
        !           624:                            drapeau_fin = d_faux;
        !           625:                        }
        !           626:                    }
        !           627:                    else
        !           628:                    {
        !           629:                        drapeau_fin = d_faux;
        !           630:                    }
        !           631: 
        !           632:                    if ((strcmp(instruction_majuscule, "CASE") == 0) ||
        !           633:                            (strcmp(instruction_majuscule, "DO") == 0) ||
        !           634:                            (strcmp(instruction_majuscule, "IF") == 0) ||
        !           635:                            (strcmp(instruction_majuscule, "IFERR") == 0) ||
        !           636:                            (strcmp(instruction_majuscule, "SELECT") == 0)
        !           637:                            || (strcmp(instruction_majuscule, "WHILE")
        !           638:                            == 0))
        !           639:                    {
        !           640:                        niveau++;
        !           641:                    }
        !           642:                    else if (strcmp(instruction_majuscule, "END") == 0)
        !           643:                    {
        !           644:                        niveau--;
        !           645:                    }
        !           646: 
        !           647:                    free(instruction_majuscule);
        !           648:                    free((*s_etat_processus).instruction_courante);
        !           649:                } while(drapeau_fin == d_faux);
        !           650: 
        !           651:                (*s_etat_processus).instruction_courante = tampon;
        !           652:            }
        !           653:            else
        !           654:            {
        !           655:                /*
        !           656:                 * Vérification du pointeur de prédiction de saut
        !           657:                 */
        !           658: 
        !           659:                if (pthread_mutex_lock(&((*(*(*s_etat_processus)
        !           660:                        .expression_courante).donnee).mutex)) != 0)
        !           661:                {
        !           662:                    (*s_etat_processus).erreur_systeme = d_es_processus;
        !           663:                    return;
        !           664:                }
        !           665: 
        !           666:                if ((*((struct_fonction *) (*(*(*s_etat_processus)
        !           667:                        .expression_courante).donnee).objet)).prediction_saut
        !           668:                        != NULL)
        !           669:                {
        !           670:                    s_registre = (*s_etat_processus).expression_courante;
        !           671: 
        !           672:                    (*s_etat_processus).expression_courante =
        !           673:                            (struct_liste_chainee *)
        !           674:                            (*((struct_fonction *) (*(*(*s_etat_processus)
        !           675:                            .expression_courante).donnee).objet))
        !           676:                            .prediction_saut;
        !           677:                    fonction = (*((struct_fonction *)
        !           678:                            (*(*(*s_etat_processus).expression_courante)
        !           679:                            .donnee).objet)).fonction;
        !           680:                    execution = (*((struct_fonction *)
        !           681:                            (*(*s_registre).donnee).objet))
        !           682:                            .prediction_execution;
        !           683: 
        !           684:                    if (pthread_mutex_unlock(&((*(*s_registre).donnee).mutex))
        !           685:                            != 0)
        !           686:                    {
        !           687:                        (*s_etat_processus).erreur_systeme = d_es_processus;
        !           688:                        return;
        !           689:                    }
        !           690: 
        !           691:                    if (execution == d_vrai)
        !           692:                    {
        !           693:                        fonction(s_etat_processus);
        !           694:                    }
        !           695:                }
        !           696:                else
        !           697:                {
        !           698:                    if (pthread_mutex_unlock(&((*(*(*s_etat_processus)
        !           699:                            .expression_courante).donnee).mutex)) != 0)
        !           700:                    {
        !           701:                        (*s_etat_processus).erreur_systeme = d_es_processus;
        !           702:                        return;
        !           703:                    }
        !           704: 
        !           705:                    s_registre = (*s_etat_processus).expression_courante;
        !           706:                    execution = d_faux;
        !           707: 
        !           708:                    do
        !           709:                    {
        !           710:                        if (((*s_etat_processus).expression_courante =
        !           711:                                (*(*s_etat_processus)
        !           712:                                .expression_courante).suivant) == NULL)
        !           713:                        {
        !           714:                            liberation(s_etat_processus, s_objet);
        !           715: 
        !           716:                            (*s_etat_processus).erreur_execution =
        !           717:                                    d_ex_erreur_traitement_condition;
        !           718:                            return;
        !           719:                        }
        !           720: 
        !           721:                        if ((*(*(*s_etat_processus).expression_courante)
        !           722:                                .donnee).type == FCT)
        !           723:                        {
        !           724:                            fonction = (*((struct_fonction *)
        !           725:                                    (*(*(*s_etat_processus).expression_courante)
        !           726:                                    .donnee).objet)).fonction;
        !           727: 
        !           728:                            if (niveau == 0)
        !           729:                            {
        !           730:                                if ((fonction == instruction_end) ||
        !           731:                                        (fonction == instruction_else) ||
        !           732:                                        (fonction == instruction_elseif))
        !           733:                                {
        !           734:                                    fonction(s_etat_processus);
        !           735:                                    execution = d_vrai;
        !           736:                                    drapeau_fin = d_vrai;
        !           737:                                }
        !           738:                                else
        !           739:                                {
        !           740:                                    drapeau_fin = d_faux;
        !           741:                                }
        !           742:                            }
        !           743:                            else
        !           744:                            {
        !           745:                                drapeau_fin = d_faux;
        !           746:                            }
        !           747: 
        !           748:                            if ((fonction == instruction_case) ||
        !           749:                                    (fonction == instruction_do) ||
        !           750:                                    (fonction == instruction_if) ||
        !           751:                                    (fonction == instruction_iferr) ||
        !           752:                                    (fonction == instruction_select) ||
        !           753:                                    (fonction == instruction_while))
        !           754:                            {
        !           755:                                niveau++;
        !           756:                            }
        !           757:                            else if (fonction == instruction_end)
        !           758:                            {
        !           759:                                niveau--;
        !           760:                            }
        !           761:                        }
        !           762:                    } while(drapeau_fin == d_faux);
        !           763: 
        !           764:                    if (pthread_mutex_lock(&((*(*(*s_etat_processus)
        !           765:                            .expression_courante).donnee).mutex)) != 0)
        !           766:                    {
        !           767:                        (*s_etat_processus).erreur_systeme = d_es_processus;
        !           768:                        return;
        !           769:                    }
        !           770: 
        !           771:                    (*((struct_fonction *) (*(*s_registre).donnee).objet))
        !           772:                            .prediction_saut = (*s_etat_processus)
        !           773:                            .expression_courante;
        !           774:                    (*((struct_fonction *) (*(*s_registre).donnee).objet))
        !           775:                            .prediction_execution = execution;
        !           776: 
        !           777:                    if (pthread_mutex_unlock(&((*(*(*s_etat_processus)
        !           778:                            .expression_courante).donnee).mutex)) != 0)
        !           779:                    {
        !           780:                        (*s_etat_processus).erreur_systeme = d_es_processus;
        !           781:                        return;
        !           782:                    }
        !           783:                }
        !           784:            }
        !           785:        }
        !           786:    }
        !           787:    else
        !           788:    {
        !           789:        liberation(s_etat_processus, s_objet);
        !           790: 
        !           791:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           792:        return;
        !           793:    }
        !           794: 
        !           795:    liberation(s_etat_processus, s_objet);
        !           796: 
        !           797:    return;
        !           798: }
        !           799: 
        !           800: 
        !           801: /*
        !           802: ================================================================================
        !           803:   Fonction 'rclf'
        !           804: ================================================================================
        !           805:   Entrées : structure processus
        !           806: --------------------------------------------------------------------------------
        !           807:   Sorties :
        !           808: --------------------------------------------------------------------------------
        !           809:   Effets de bord : néant
        !           810: ================================================================================
        !           811: */
        !           812: 
        !           813: void
        !           814: instruction_rclf(struct_processus *s_etat_processus)
        !           815: {
        !           816:    struct_objet                        *s_objet_resultat;
        !           817: 
        !           818:    t_8_bits                            masque;
        !           819: 
        !           820:    unsigned char                       indice_bit;
        !           821:    unsigned char                       indice_bloc;
        !           822:    unsigned char                       indice_drapeau;
        !           823:    unsigned char                       taille_bloc;
        !           824: 
        !           825:    unsigned long                       i;
        !           826: 
        !           827:    (*s_etat_processus).erreur_execution = d_ex;
        !           828: 
        !           829:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           830:    {
        !           831:        printf("\n  RCLF ");
        !           832: 
        !           833:        if ((*s_etat_processus).langue == 'F')
        !           834:        {
        !           835:            printf("(renvoie les drapeaux d'état)\n\n");
        !           836:        }
        !           837:        else
        !           838:        {
        !           839:            printf("(recall flags)\n\n");
        !           840:        }
        !           841: 
        !           842:        printf("->  1: %s\n", d_BIN);
        !           843: 
        !           844:        return;
        !           845:    }
        !           846:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           847:    {
        !           848:        (*s_etat_processus).nombre_arguments = -1;
        !           849:        return;
        !           850:    }
        !           851:    
        !           852:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           853:    {
        !           854:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           855:        {
        !           856:            return;
        !           857:        }
        !           858:    }
        !           859: 
        !           860:    if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL)
        !           861:    {
        !           862:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           863:        return;
        !           864:    }
        !           865: 
        !           866:    (*((logical8 *) (*s_objet_resultat).objet)) = 0;
        !           867:    taille_bloc = sizeof(t_8_bits) * 8;
        !           868: 
        !           869:    for(i = 1; i <= 64; i++)
        !           870:    {
        !           871:        indice_drapeau = i - 1;
        !           872:        indice_bloc = indice_drapeau / taille_bloc;
        !           873:        indice_bit = indice_drapeau % taille_bloc;
        !           874:        masque = ((t_8_bits) 1) << (taille_bloc - indice_bit - 1);
        !           875: 
        !           876:        if (((*s_etat_processus).drapeaux_etat[indice_bloc] & masque) != 0)
        !           877:        {
        !           878:            (*((logical8 *) (*s_objet_resultat).objet)) |=
        !           879:                    ((logical8) 1) << indice_drapeau;
        !           880:        }
        !           881:    }
        !           882: 
        !           883:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           884:            s_objet_resultat) == d_erreur)
        !           885:    {
        !           886:        return;
        !           887:    }
        !           888: 
        !           889:    return;
        !           890: }
        !           891: 
        !           892: 
        !           893: /*
        !           894: ================================================================================
        !           895:   Fonction 'rcl'
        !           896: ================================================================================
        !           897:   Entrées : structure processus
        !           898: -------------------------------------------------------------------------------
        !           899:   Sorties :
        !           900: --------------------------------------------------------------------------------
        !           901:   Effets de bord : néant
        !           902: ================================================================================
        !           903: */
        !           904: 
        !           905: void
        !           906: instruction_rcl(struct_processus *s_etat_processus)
        !           907: {
        !           908:    logical1                            presence_variable;
        !           909: 
        !           910:    long                                i;
        !           911: 
        !           912:    struct_objet                        *s_objet;
        !           913:    struct_objet                        *s_objet_variable;
        !           914: 
        !           915:    (*s_etat_processus).erreur_execution = d_ex;
        !           916: 
        !           917:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           918:    {
        !           919:        printf("\n  RCL ");
        !           920: 
        !           921:        if ((*s_etat_processus).langue == 'F')
        !           922:        {
        !           923:            printf("(renvoie le contenu d'une variable globale)\n\n");
        !           924:        }
        !           925:        else
        !           926:        {
        !           927:            printf("(recall global variable)\n\n");
        !           928:        }
        !           929: 
        !           930:        printf("    1: %s\n", d_NOM);
        !           931:        printf("->  1: %s, %s, %s, %s, %s, %s,\n"
        !           932:                "       %s, %s, %s, %s, %s,\n"
        !           933:                "       %s, %s, %s, %s, %s,\n"
        !           934:                "       %s, %s, %s, %s,\n"
        !           935:                "       %s, %s\n",
        !           936:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           937:                d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
        !           938:                d_SQL, d_SLB, d_PRC, d_MTX);
        !           939: 
        !           940:        return;
        !           941:    }
        !           942:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           943:    {
        !           944:        (*s_etat_processus).nombre_arguments = -1;
        !           945:        return;
        !           946:    }
        !           947:    
        !           948:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           949:    {
        !           950:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           951:        {
        !           952:            return;
        !           953:        }
        !           954:    }
        !           955: 
        !           956:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           957:            &s_objet) == d_erreur)
        !           958:    {
        !           959:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           960:        return;
        !           961:    }
        !           962: 
        !           963:    if ((*s_objet).type != NOM)
        !           964:    {
        !           965:        liberation(s_etat_processus, s_objet);
        !           966: 
        !           967:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           968:        return;
        !           969:    }
        !           970: 
        !           971:    if (recherche_variable(s_etat_processus, (*((struct_nom *)
        !           972:            (*s_objet).objet)).nom) == d_faux)
        !           973:    {
        !           974:        liberation(s_etat_processus, s_objet);
        !           975: 
        !           976:        (*s_etat_processus).erreur_systeme = d_es;
        !           977:        (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !           978:        return;
        !           979:    }
        !           980: 
        !           981:    i = (*s_etat_processus).position_variable_courante;
        !           982:    presence_variable = d_faux;
        !           983: 
        !           984:    while(i >= 0)
        !           985:    {
        !           986:        if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !           987:                (*((struct_nom *) (*s_objet).objet)).nom) == 0) &&
        !           988:                ((*s_etat_processus).s_liste_variables[i].niveau == 1))
        !           989:        {
        !           990:            presence_variable = d_vrai;
        !           991:            break;
        !           992:        }
        !           993: 
        !           994:        i--;
        !           995:    }
        !           996: 
        !           997:    (*s_etat_processus).position_variable_courante = i;
        !           998: 
        !           999:    if (presence_variable == d_faux)
        !          1000:    {
        !          1001:        liberation(s_etat_processus, s_objet);
        !          1002: 
        !          1003:        (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !          1004:        return;
        !          1005:    }
        !          1006: 
        !          1007:    if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
        !          1008:            .position_variable_courante].objet == NULL)
        !          1009:    {
        !          1010:        liberation(s_etat_processus, s_objet);
        !          1011: 
        !          1012:        (*s_etat_processus).erreur_systeme = d_es;
        !          1013:        (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
        !          1014:        return;
        !          1015:    }
        !          1016: 
        !          1017:    if ((s_objet_variable = copie_objet(s_etat_processus,
        !          1018:            ((*s_etat_processus).s_liste_variables)
        !          1019:            [(*s_etat_processus).position_variable_courante].objet, 'P'))
        !          1020:            == NULL)
        !          1021:    {
        !          1022:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1023:        return;
        !          1024:    }
        !          1025: 
        !          1026:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1027:            s_objet_variable) == d_erreur)
        !          1028:    {
        !          1029:        return;
        !          1030:    }
        !          1031: 
        !          1032:    liberation(s_etat_processus, s_objet);
        !          1033: 
        !          1034:    return;
        !          1035: }
        !          1036: 
        !          1037: 
        !          1038: /*
        !          1039: ================================================================================
        !          1040:   Fonction 'rand'
        !          1041: ================================================================================
        !          1042:   Entrées : structure processus
        !          1043: -------------------------------------------------------------------------------
        !          1044:   Sorties :
        !          1045: --------------------------------------------------------------------------------
        !          1046:   Effets de bord : néant
        !          1047: ================================================================================
        !          1048: */
        !          1049: 
        !          1050: void
        !          1051: instruction_rand(struct_processus *s_etat_processus)
        !          1052: {
        !          1053:    struct_objet                *s_objet;
        !          1054: 
        !          1055:    (*s_etat_processus).erreur_execution = d_ex;
        !          1056: 
        !          1057:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1058:    {
        !          1059:        printf("\n  RAND ");
        !          1060: 
        !          1061:        if ((*s_etat_processus).langue == 'F')
        !          1062:        {
        !          1063:            printf("(variable aléatoire uniforme)\n\n");
        !          1064:        }
        !          1065:        else
        !          1066:        {
        !          1067:            printf("(uniform random number)\n\n");
        !          1068:        }
        !          1069: 
        !          1070:        printf("->  1: %s\n", d_REL);
        !          1071: 
        !          1072:        return;
        !          1073:    }
        !          1074:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1075:    {
        !          1076:        (*s_etat_processus).nombre_arguments = -1;
        !          1077:        return;
        !          1078:    }
        !          1079:    
        !          1080:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1081:    {
        !          1082:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          1083:        {
        !          1084:            return;
        !          1085:        }
        !          1086:    }
        !          1087: 
        !          1088:    if ((*s_etat_processus).generateur_aleatoire == NULL)
        !          1089:    {
        !          1090:        initialisation_generateur_aleatoire(s_etat_processus, d_vrai, 0);
        !          1091:    }
        !          1092: 
        !          1093:    if ((s_objet = allocation(s_etat_processus, REL)) == NULL)
        !          1094:    {
        !          1095:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1096:        return;
        !          1097:    }
        !          1098: 
        !          1099:    (*((real8 *) (*s_objet).objet)) = gsl_rng_uniform(
        !          1100:            (*s_etat_processus).generateur_aleatoire);
        !          1101: 
        !          1102:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1103:            s_objet) == d_erreur)
        !          1104:    {
        !          1105:        return;
        !          1106:    }
        !          1107: 
        !          1108:    return;
        !          1109: }
        !          1110: 
        !          1111: 
        !          1112: /*
        !          1113: ================================================================================
        !          1114:   Fonction 'rdz'
        !          1115: ================================================================================
        !          1116:   Entrées : structure processus
        !          1117: -------------------------------------------------------------------------------
        !          1118:   Sorties :
        !          1119: --------------------------------------------------------------------------------
        !          1120:   Effets de bord : néant
        !          1121: ================================================================================
        !          1122: */
        !          1123: 
        !          1124: void
        !          1125: instruction_rdz(struct_processus *s_etat_processus)
        !          1126: {
        !          1127:    struct_objet                *s_objet;
        !          1128: 
        !          1129:    (*s_etat_processus).erreur_execution = d_ex;
        !          1130: 
        !          1131:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1132:    {
        !          1133:        printf("\n  RDZ ");
        !          1134: 
        !          1135:        if ((*s_etat_processus).langue == 'F')
        !          1136:        {
        !          1137:            printf("(racine des nombres aléatoires)\n\n");
        !          1138:        }
        !          1139:        else
        !          1140:        {
        !          1141:            printf("(random seed)\n\n");
        !          1142:        }
        !          1143: 
        !          1144:        printf("    1: %s\n", d_INT);
        !          1145: 
        !          1146:        return;
        !          1147:    }
        !          1148:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1149:    {
        !          1150:        (*s_etat_processus).nombre_arguments = -1;
        !          1151:        return;
        !          1152:    }
        !          1153:    
        !          1154:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1155:    {
        !          1156:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          1157:        {
        !          1158:            return;
        !          1159:        }
        !          1160:    }
        !          1161: 
        !          1162:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1163:            &s_objet) == d_erreur)
        !          1164:    {
        !          1165:        return;
        !          1166:    }
        !          1167: 
        !          1168:    if ((*s_objet).type == INT)
        !          1169:    {
        !          1170:        initialisation_generateur_aleatoire(s_etat_processus, d_faux,
        !          1171:                (unsigned long int) (*((integer8 *) (*s_objet).objet)));
        !          1172:    }
        !          1173:    else
        !          1174:    {
        !          1175:        liberation(s_etat_processus, s_objet);
        !          1176: 
        !          1177:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1178:        return;
        !          1179:    }
        !          1180: 
        !          1181:    liberation(s_etat_processus, s_objet);
        !          1182: }
        !          1183: 
        !          1184: 
        !          1185: /*
        !          1186: ================================================================================
        !          1187:   Fonction 'rnd'
        !          1188: ================================================================================
        !          1189:   Entrées : structure processus
        !          1190: --------------------------------------------------------------------------------
        !          1191:   Sorties :
        !          1192: --------------------------------------------------------------------------------
        !          1193:   Effets de bord : néant
        !          1194: ================================================================================
        !          1195: */
        !          1196: 
        !          1197: void
        !          1198: instruction_rnd(struct_processus *s_etat_processus)
        !          1199: {
        !          1200:    struct_objet                        *s_objet_argument;
        !          1201: 
        !          1202:    unsigned char                       *instruction_courante;
        !          1203: 
        !          1204:    (*s_etat_processus).erreur_execution = d_ex;
        !          1205: 
        !          1206:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1207:    {
        !          1208:        printf("\n  RND ");
        !          1209: 
        !          1210:        if ((*s_etat_processus).langue == 'F')
        !          1211:        {
        !          1212:            printf("(arrondi)\n\n");
        !          1213:        }
        !          1214:        else
        !          1215:        {
        !          1216:            printf("(rounding)\n\n");
        !          1217:        }
        !          1218: 
        !          1219:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !          1220:                "       %s, %s, %s\n",
        !          1221:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
        !          1222:        printf("->  1: %s, %s, %s, %s, %s, %s,\n"
        !          1223:                "       %s, %s, %s\n",
        !          1224:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
        !          1225: 
        !          1226:        return;
        !          1227:    }
        !          1228:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1229:    {
        !          1230:        (*s_etat_processus).nombre_arguments = 1;
        !          1231:        return;
        !          1232:    }
        !          1233:    
        !          1234:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1235:    {
        !          1236:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          1237:        {
        !          1238:            return;
        !          1239:        }
        !          1240:    }
        !          1241: 
        !          1242:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1243:            &s_objet_argument) == d_erreur)
        !          1244:    {
        !          1245:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1246:        return;
        !          1247:    }
        !          1248: 
        !          1249:    if (((*s_objet_argument).type == INT) ||
        !          1250:            ((*s_objet_argument).type == REL) ||
        !          1251:            ((*s_objet_argument).type == CPL) ||
        !          1252:            ((*s_objet_argument).type == VIN) ||
        !          1253:            ((*s_objet_argument).type == VRL) ||
        !          1254:            ((*s_objet_argument).type == VCX) ||
        !          1255:            ((*s_objet_argument).type == MIN) ||
        !          1256:            ((*s_objet_argument).type == MRL) ||
        !          1257:            ((*s_objet_argument).type == MCX))
        !          1258:    {
        !          1259:        instruction_courante = (*s_etat_processus).instruction_courante;
        !          1260: 
        !          1261:        if (((*s_etat_processus).instruction_courante =
        !          1262:                formateur(s_etat_processus, 0, s_objet_argument)) == NULL)
        !          1263:        {
        !          1264:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1265:            (*s_etat_processus).instruction_courante = instruction_courante;
        !          1266:            return;
        !          1267:        }
        !          1268: 
        !          1269:        recherche_type(s_etat_processus);
        !          1270: 
        !          1271:        free((*s_etat_processus).instruction_courante);
        !          1272:        (*s_etat_processus).instruction_courante = instruction_courante;
        !          1273: 
        !          1274:        if ((*s_etat_processus).erreur_systeme != d_es)
        !          1275:        {
        !          1276:            return;
        !          1277:        }
        !          1278: 
        !          1279:        if ((*s_etat_processus).erreur_execution != d_ex)
        !          1280:        {
        !          1281:            liberation(s_etat_processus, s_objet_argument);
        !          1282:            return;
        !          1283:        }
        !          1284:    }
        !          1285:    else
        !          1286:    {
        !          1287:        liberation(s_etat_processus, s_objet_argument);
        !          1288: 
        !          1289:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1290:        return;
        !          1291:    }
        !          1292: 
        !          1293:    liberation(s_etat_processus, s_objet_argument);
        !          1294: 
        !          1295:    return;
        !          1296: }
        !          1297: 
        !          1298: 
        !          1299: /*
        !          1300: ================================================================================
        !          1301:   Fonction 'r->c'
        !          1302: ================================================================================
        !          1303:   Entrées : structure processus
        !          1304: --------------------------------------------------------------------------------
        !          1305:   Sorties :
        !          1306: --------------------------------------------------------------------------------
        !          1307:   Effets de bord : néant
        !          1308: ================================================================================
        !          1309: */
        !          1310: 
        !          1311: void
        !          1312: instruction_r_vers_c(struct_processus *s_etat_processus)
        !          1313: {
        !          1314:    struct_objet                    *s_objet_argument_1;
        !          1315:    struct_objet                    *s_objet_argument_2;
        !          1316:    struct_objet                    *s_objet_resultat;
        !          1317: 
        !          1318:    unsigned long                   i;
        !          1319:    unsigned long                   j;
        !          1320: 
        !          1321:    (*s_etat_processus).erreur_execution = d_ex;
        !          1322: 
        !          1323:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1324:    {
        !          1325:        printf("\n  R->C ");
        !          1326: 
        !          1327:        if ((*s_etat_processus).langue == 'F')
        !          1328:        {
        !          1329:            printf("(réel vers complexe)\n\n");
        !          1330:        }
        !          1331:        else
        !          1332:        {
        !          1333:            printf("(real to complex)\n\n");
        !          1334:        }
        !          1335: 
        !          1336:        printf("    2: %s, %s\n", d_INT, d_REL);
        !          1337:        printf("    1: %s, %s\n", d_INT, d_REL);
        !          1338:        printf("->  1: %s\n\n", d_CPL);
        !          1339: 
        !          1340:        printf("    2: %s, %s\n", d_VIN, d_VRL);
        !          1341:        printf("    1: %s, %s\n", d_VIN, d_VRL);
        !          1342:        printf("->  1: %s\n\n", d_VCX);
        !          1343: 
        !          1344:        printf("    2: %s, %s\n", d_MIN, d_MRL);
        !          1345:        printf("    1: %s, %s\n", d_MIN, d_MRL);
        !          1346:        printf("->  1: %s\n", d_MCX);
        !          1347: 
        !          1348:        return;
        !          1349:    }
        !          1350:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1351:    {
        !          1352:        (*s_etat_processus).nombre_arguments = -1;
        !          1353:        return;
        !          1354:    }
        !          1355: 
        !          1356:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1357:    {
        !          1358:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !          1359:        {
        !          1360:            return;
        !          1361:        }
        !          1362:    }
        !          1363: 
        !          1364:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1365:            &s_objet_argument_1) == d_erreur)
        !          1366:    {
        !          1367:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1368:        return;
        !          1369:    }
        !          1370: 
        !          1371:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1372:            &s_objet_argument_2) == d_erreur)
        !          1373:    {
        !          1374:        liberation(s_etat_processus, s_objet_argument_1);
        !          1375: 
        !          1376:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1377:        return;
        !          1378:    }
        !          1379: 
        !          1380: /*
        !          1381: --------------------------------------------------------------------------------
        !          1382:   Formation d'un complexe à partir de deux réels
        !          1383: --------------------------------------------------------------------------------
        !          1384: */
        !          1385: 
        !          1386:    if ((((*s_objet_argument_1).type == INT) ||
        !          1387:            ((*s_objet_argument_1).type == REL)) &&
        !          1388:            (((*s_objet_argument_2).type == INT) ||
        !          1389:            ((*s_objet_argument_2).type == REL)))
        !          1390:    {
        !          1391:        if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
        !          1392:        {
        !          1393:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1394:            return;
        !          1395:        }
        !          1396: 
        !          1397:        if ((*s_objet_argument_1).type == INT)
        !          1398:        {
        !          1399:            (*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          1400:                    .partie_imaginaire =
        !          1401:                    (*((integer8 *) (*s_objet_argument_1).objet));
        !          1402:        }
        !          1403:        else
        !          1404:        {
        !          1405:            (*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          1406:                    .partie_imaginaire =
        !          1407:                    (*((real8 *) (*s_objet_argument_1).objet));
        !          1408:        }
        !          1409: 
        !          1410:        if ((*s_objet_argument_2).type == INT)
        !          1411:        {
        !          1412:            (*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          1413:                    .partie_reelle =
        !          1414:                    (*((integer8 *) (*s_objet_argument_2).objet));
        !          1415:        }
        !          1416:        else
        !          1417:        {
        !          1418:            (*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          1419:                    .partie_reelle =
        !          1420:                    (*((real8 *) (*s_objet_argument_2).objet));
        !          1421:        }
        !          1422:    }
        !          1423: 
        !          1424: /*
        !          1425: --------------------------------------------------------------------------------
        !          1426:   Formation à partir de deux vecteurs
        !          1427: --------------------------------------------------------------------------------
        !          1428: */
        !          1429: 
        !          1430:    else if ((((*s_objet_argument_1).type == VIN) ||
        !          1431:            ((*s_objet_argument_1).type == VRL)) &&
        !          1432:            (((*s_objet_argument_2).type == VIN) ||
        !          1433:            ((*s_objet_argument_2).type == VRL)))
        !          1434:    {
        !          1435:        if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
        !          1436:                (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
        !          1437:        {
        !          1438:            liberation(s_etat_processus, s_objet_argument_1);
        !          1439:            liberation(s_etat_processus, s_objet_argument_2);
        !          1440: 
        !          1441:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
        !          1442:            return;
        !          1443:        }
        !          1444: 
        !          1445:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
        !          1446:        {
        !          1447:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1448:            return;
        !          1449:        }
        !          1450: 
        !          1451:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
        !          1452:                (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
        !          1453: 
        !          1454:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
        !          1455:                malloc((*(((struct_vecteur *) (*s_objet_resultat)
        !          1456:                .objet))).taille * sizeof(struct_complexe16))) == NULL)
        !          1457:        {
        !          1458:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1459:            return;
        !          1460:        }
        !          1461: 
        !          1462:        for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument_1).objet)))
        !          1463:                .taille; i++)
        !          1464:        {
        !          1465:            if ((*s_objet_argument_1).type == VIN)
        !          1466:            {
        !          1467:                ((struct_complexe16 *) (*((struct_vecteur *)
        !          1468:                        (*s_objet_resultat).objet)).tableau)[i]
        !          1469:                        .partie_imaginaire = ((integer8 *)
        !          1470:                        (*((struct_vecteur *) (*s_objet_argument_1).objet))
        !          1471:                        .tableau)[i];
        !          1472:            }
        !          1473:            else
        !          1474:            {
        !          1475:                ((struct_complexe16 *) (*((struct_vecteur *)
        !          1476:                        (*s_objet_resultat).objet)).tableau)[i]
        !          1477:                        .partie_imaginaire = ((real8 *)
        !          1478:                        (*((struct_vecteur *) (*s_objet_argument_1).objet))
        !          1479:                        .tableau)[i];
        !          1480:            }
        !          1481: 
        !          1482:            if ((*s_objet_argument_2).type == VIN)
        !          1483:            {
        !          1484:                ((struct_complexe16 *) (*((struct_vecteur *)
        !          1485:                        (*s_objet_resultat).objet)).tableau)[i]
        !          1486:                        .partie_reelle = ((integer8 *)
        !          1487:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
        !          1488:                        .tableau)[i];
        !          1489:            }
        !          1490:            else
        !          1491:            {
        !          1492:                ((struct_complexe16 *) (*((struct_vecteur *)
        !          1493:                        (*s_objet_resultat).objet)).tableau)[i]
        !          1494:                        .partie_reelle = ((real8 *)
        !          1495:                        (*((struct_vecteur *) (*s_objet_argument_2).objet))
        !          1496:                        .tableau)[i];
        !          1497:            }
        !          1498:        }
        !          1499:    }
        !          1500: 
        !          1501: /*
        !          1502: --------------------------------------------------------------------------------
        !          1503:   Formation à partir de deux matrices
        !          1504: --------------------------------------------------------------------------------
        !          1505: */
        !          1506: 
        !          1507:    else if ((((*s_objet_argument_1).type == MIN) ||
        !          1508:            ((*s_objet_argument_1).type == MRL)) &&
        !          1509:            (((*s_objet_argument_2).type == MIN) ||
        !          1510:            ((*s_objet_argument_2).type == MRL)))
        !          1511:    {
        !          1512:        if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
        !          1513:                .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
        !          1514:                .objet))).nombre_lignes) || ((*(((struct_matrice *)
        !          1515:                (*s_objet_argument_1).objet))).nombre_colonnes !=
        !          1516:                (*(((struct_matrice *) (*s_objet_argument_2).objet)))
        !          1517:                .nombre_lignes))
        !          1518:        {
        !          1519:            liberation(s_etat_processus, s_objet_argument_1);
        !          1520:            liberation(s_etat_processus, s_objet_argument_2);
        !          1521: 
        !          1522:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
        !          1523:            return;
        !          1524:        }
        !          1525: 
        !          1526:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
        !          1527:        {
        !          1528:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1529:            return;
        !          1530:        }
        !          1531: 
        !          1532:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
        !          1533:                (*((struct_matrice *) (*s_objet_argument_1).objet))
        !          1534:                .nombre_lignes;
        !          1535:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
        !          1536:                (*((struct_matrice *) (*s_objet_argument_1).objet))
        !          1537:                .nombre_colonnes;
        !          1538: 
        !          1539:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
        !          1540:                malloc((*(((struct_matrice *) (*s_objet_resultat)
        !          1541:                .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
        !          1542:        {
        !          1543:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1544:            return;
        !          1545:        }
        !          1546: 
        !          1547:        for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_1).objet)))
        !          1548:                .nombre_lignes; i++)
        !          1549:        {
        !          1550:            if ((((struct_complexe16 **) (*((struct_matrice *)
        !          1551:                    (*s_objet_resultat).objet)).tableau)[i] =
        !          1552:                    malloc((*((struct_matrice *)
        !          1553:                    (*s_objet_resultat).objet)).nombre_colonnes *
        !          1554:                    sizeof(struct_complexe16))) == NULL)
        !          1555:            {
        !          1556:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1557:                return;
        !          1558:            }
        !          1559: 
        !          1560:            for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument_1).objet)))
        !          1561:                    .nombre_colonnes; j++)
        !          1562:            {
        !          1563:                if ((*s_objet_argument_1).type == MIN)
        !          1564:                {
        !          1565:                    ((struct_complexe16 **) (*((struct_matrice *)
        !          1566:                            (*s_objet_resultat).objet)).tableau)[i][j]
        !          1567:                            .partie_imaginaire = ((integer8 **)
        !          1568:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
        !          1569:                            .tableau)[i][j];
        !          1570:                }
        !          1571:                else
        !          1572:                {
        !          1573:                    ((struct_complexe16 **) (*((struct_matrice *)
        !          1574:                            (*s_objet_resultat).objet)).tableau)[i][j]
        !          1575:                            .partie_imaginaire = ((real8 **)
        !          1576:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
        !          1577:                            .tableau)[i][j];
        !          1578:                }
        !          1579: 
        !          1580:                if ((*s_objet_argument_2).type == MIN)
        !          1581:                {
        !          1582:                    ((struct_complexe16 **) (*((struct_matrice *)
        !          1583:                            (*s_objet_resultat).objet)).tableau)[i][j]
        !          1584:                            .partie_reelle = ((integer8 **)
        !          1585:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
        !          1586:                            .tableau)[i][j];
        !          1587:                }
        !          1588:                else
        !          1589:                {
        !          1590:                    ((struct_complexe16 **) (*((struct_matrice *)
        !          1591:                            (*s_objet_resultat).objet)).tableau)[i][j]
        !          1592:                            .partie_reelle = ((real8 **)
        !          1593:                            (*((struct_matrice *) (*s_objet_argument_2).objet))
        !          1594:                            .tableau)[i][j];
        !          1595:                }
        !          1596:            }
        !          1597:        }
        !          1598:    }
        !          1599: 
        !          1600: /*
        !          1601: --------------------------------------------------------------------------------
        !          1602:   Formation impossible
        !          1603: --------------------------------------------------------------------------------
        !          1604: */
        !          1605: 
        !          1606:    else
        !          1607:    {
        !          1608:        liberation(s_etat_processus, s_objet_argument_1);
        !          1609:        liberation(s_etat_processus, s_objet_argument_2);
        !          1610: 
        !          1611:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1612:        return;
        !          1613:    }
        !          1614: 
        !          1615:    liberation(s_etat_processus, s_objet_argument_1);
        !          1616:    liberation(s_etat_processus, s_objet_argument_2);
        !          1617: 
        !          1618:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1619:            s_objet_resultat) == d_erreur)
        !          1620:    {
        !          1621:        return;
        !          1622:    }
        !          1623: 
        !          1624:    return;
        !          1625: }
        !          1626: 
        !          1627: 
        !          1628: /*
        !          1629: ================================================================================
        !          1630:   Fonction 're'
        !          1631: ================================================================================
        !          1632:   Entrées : structure processus
        !          1633: --------------------------------------------------------------------------------
        !          1634:   Sorties :
        !          1635: --------------------------------------------------------------------------------
        !          1636:   Effets de bord : néant
        !          1637: ================================================================================
        !          1638: */
        !          1639: 
        !          1640: void
        !          1641: instruction_re(struct_processus *s_etat_processus)
        !          1642: {
        !          1643:    struct_liste_chainee            *l_element_courant;
        !          1644:    struct_liste_chainee            *l_element_precedent;
        !          1645: 
        !          1646:    struct_objet                    *s_copie_argument;
        !          1647:    struct_objet                    *s_objet_argument;
        !          1648:    struct_objet                    *s_objet_resultat;
        !          1649: 
        !          1650:    unsigned long                   i;
        !          1651:    unsigned long                   j;
        !          1652: 
        !          1653:    (*s_etat_processus).erreur_execution = d_ex;
        !          1654: 
        !          1655:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1656:    {
        !          1657:        printf("\n  RE ");
        !          1658: 
        !          1659:        if ((*s_etat_processus).langue == 'F')
        !          1660:        {
        !          1661:            printf("(partie réelle)\n\n");
        !          1662:        }
        !          1663:        else
        !          1664:        {
        !          1665:            printf("(real part)\n\n");
        !          1666:        }
        !          1667: 
        !          1668:        printf("    1: %s, %s\n", d_INT, d_REL);
        !          1669:        printf("->  1: %s\n\n", d_INT);
        !          1670: 
        !          1671:        printf("    1: %s\n", d_CPL);
        !          1672:        printf("->  1: %s\n\n", d_REL);
        !          1673: 
        !          1674:        printf("    1: %s, %s\n", d_VIN, d_VRL);
        !          1675:        printf("->  1: %s\n\n", d_VIN);
        !          1676: 
        !          1677:        printf("    1: %s\n", d_VCX);
        !          1678:        printf("->  1: %s\n\n", d_VRL);
        !          1679: 
        !          1680:        printf("    1: %s, %s\n", d_MIN, d_MRL);
        !          1681:        printf("->  1: %s\n\n", d_MIN);
        !          1682: 
        !          1683:        printf("    1: %s\n", d_MCX);
        !          1684:        printf("->  1: %s\n\n", d_MRL);
        !          1685: 
        !          1686:        printf("    1: %s, %s\n", d_NOM, d_ALG);
        !          1687:        printf("->  1: %s\n\n", d_ALG);
        !          1688: 
        !          1689:        printf("    1: %s\n", d_RPN);
        !          1690:        printf("->  1: %s\n", d_RPN);
        !          1691: 
        !          1692:        return;
        !          1693:    }
        !          1694:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1695:    {
        !          1696:        (*s_etat_processus).nombre_arguments = 1;
        !          1697:        return;
        !          1698:    }
        !          1699:    
        !          1700:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1701:    {
        !          1702:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          1703:        {
        !          1704:            return;
        !          1705:        }
        !          1706:    }
        !          1707: 
        !          1708:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1709:            &s_objet_argument) == d_erreur)
        !          1710:    {
        !          1711:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1712:        return;
        !          1713:    }
        !          1714: 
        !          1715: /*
        !          1716: --------------------------------------------------------------------------------
        !          1717:   Partie réelle d'un entier ou d'un réel
        !          1718: --------------------------------------------------------------------------------
        !          1719: */
        !          1720: 
        !          1721:    if (((*s_objet_argument).type == INT) ||
        !          1722:            ((*s_objet_argument).type == REL))
        !          1723:    {
        !          1724:        s_objet_resultat = s_objet_argument;
        !          1725:        s_objet_argument = NULL;
        !          1726:    }
        !          1727: 
        !          1728: /*
        !          1729: --------------------------------------------------------------------------------
        !          1730:   Partie réelle d'un complexe
        !          1731: --------------------------------------------------------------------------------
        !          1732: */
        !          1733: 
        !          1734:    else if ((*s_objet_argument).type == CPL)
        !          1735:    {
        !          1736:        if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
        !          1737:        {
        !          1738:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1739:            return;
        !          1740:        }
        !          1741: 
        !          1742:        (*((real8 *) (*s_objet_resultat).objet)) =
        !          1743:                (*((struct_complexe16 *) (*s_objet_argument).objet))
        !          1744:                .partie_reelle;
        !          1745:    }
        !          1746: 
        !          1747: /*
        !          1748: --------------------------------------------------------------------------------
        !          1749:   Partie réelle d'un vecteur
        !          1750: --------------------------------------------------------------------------------
        !          1751: */
        !          1752: 
        !          1753:    else if (((*s_objet_argument).type == VIN) ||
        !          1754:            ((*s_objet_argument).type == VRL))
        !          1755:    {
        !          1756:        s_objet_resultat = s_objet_argument;
        !          1757:        s_objet_argument = NULL;
        !          1758:    }
        !          1759:    else if ((*s_objet_argument).type == VCX)
        !          1760:    {
        !          1761:        if ((s_objet_resultat = allocation(s_etat_processus, VRL)) == NULL)
        !          1762:        {
        !          1763:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1764:            return;
        !          1765:        }
        !          1766: 
        !          1767:        if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
        !          1768:                malloc((*(((struct_vecteur *) (*s_objet_argument)
        !          1769:                .objet))).taille * sizeof(real8))) == NULL)
        !          1770:        {
        !          1771:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1772:            return;
        !          1773:        }
        !          1774: 
        !          1775:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
        !          1776:                (*(((struct_vecteur *) (*s_objet_argument).objet))).taille;
        !          1777: 
        !          1778:        for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet)))
        !          1779:                .taille; i++)
        !          1780:        {
        !          1781:            ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
        !          1782:                    .tableau)[i] = ((struct_complexe16 *) (*((struct_vecteur *)
        !          1783:                    (*s_objet_argument).objet)).tableau)[i].partie_reelle;
        !          1784:        }
        !          1785:    }
        !          1786: 
        !          1787: /*
        !          1788: --------------------------------------------------------------------------------
        !          1789:   Partie réelle d'une matrice
        !          1790: --------------------------------------------------------------------------------
        !          1791: */
        !          1792: 
        !          1793:    else if (((*s_objet_argument).type == MIN) ||
        !          1794:            ((*s_objet_argument).type == MRL))
        !          1795:    {
        !          1796:        s_objet_resultat = s_objet_argument;
        !          1797:        s_objet_argument = NULL;
        !          1798:    }
        !          1799:    else if ((*s_objet_argument).type == MCX)
        !          1800:    {
        !          1801:        if ((s_objet_resultat = allocation(s_etat_processus, MRL)) == NULL)
        !          1802:        {
        !          1803:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1804:            return;
        !          1805:        }
        !          1806: 
        !          1807:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
        !          1808:                malloc((*(((struct_matrice *) (*s_objet_argument)
        !          1809:                .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
        !          1810:        {
        !          1811:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1812:            return;
        !          1813:        }
        !          1814: 
        !          1815:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
        !          1816:                (*((struct_matrice *) (*s_objet_argument).objet)).nombre_lignes;
        !          1817:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
        !          1818:                (*((struct_matrice *) (*s_objet_argument).objet))
        !          1819:                .nombre_colonnes;
        !          1820: 
        !          1821:        for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet)))
        !          1822:                .nombre_lignes; i++)
        !          1823:        {
        !          1824:            if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
        !          1825:                    .objet)).tableau)[i] = malloc(
        !          1826:                    (*(((struct_matrice *) (*s_objet_argument).objet)))
        !          1827:                    .nombre_colonnes * sizeof(real8))) == NULL)
        !          1828:            {
        !          1829:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1830:                return;
        !          1831:            }
        !          1832: 
        !          1833:            for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet)))
        !          1834:                    .nombre_colonnes; j++)
        !          1835:            {
        !          1836:                ((real8 **) (*((struct_matrice *) (*s_objet_resultat).objet))
        !          1837:                        .tableau)[i][j] = ((struct_complexe16 **)
        !          1838:                        (*((struct_matrice *) (*s_objet_argument).objet))
        !          1839:                        .tableau)[i][j].partie_reelle;
        !          1840:            }
        !          1841:        }
        !          1842:    }
        !          1843: 
        !          1844: /*
        !          1845: --------------------------------------------------------------------------------
        !          1846:   Partie réelle d'un nom
        !          1847: --------------------------------------------------------------------------------
        !          1848: */
        !          1849: 
        !          1850:    else if ((*s_objet_argument).type == NOM)
        !          1851:    {
        !          1852:        if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
        !          1853:        {
        !          1854:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1855:            return;
        !          1856:        }
        !          1857: 
        !          1858:        if (((*s_objet_resultat).objet =
        !          1859:                allocation_maillon(s_etat_processus)) == NULL)
        !          1860:        {
        !          1861:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1862:            return;
        !          1863:        }
        !          1864: 
        !          1865:        l_element_courant = (*s_objet_resultat).objet;
        !          1866: 
        !          1867:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1868:                == NULL)
        !          1869:        {
        !          1870:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1871:            return;
        !          1872:        }
        !          1873: 
        !          1874:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1875:                .nombre_arguments = 0;
        !          1876:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1877:                .fonction = instruction_vers_niveau_superieur;
        !          1878: 
        !          1879:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1880:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          1881:        {
        !          1882:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1883:            return;
        !          1884:        }
        !          1885: 
        !          1886:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1887:                .nom_fonction, "<<");
        !          1888: 
        !          1889:        if (((*l_element_courant).suivant =
        !          1890:                allocation_maillon(s_etat_processus)) == NULL)
        !          1891:        {
        !          1892:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1893:            return;
        !          1894:        }
        !          1895: 
        !          1896:        l_element_courant = (*l_element_courant).suivant;
        !          1897:        (*l_element_courant).donnee = s_objet_argument;
        !          1898: 
        !          1899:        if (((*l_element_courant).suivant =
        !          1900:                allocation_maillon(s_etat_processus)) == NULL)
        !          1901:        {
        !          1902:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1903:            return;
        !          1904:        }
        !          1905: 
        !          1906:        l_element_courant = (*l_element_courant).suivant;
        !          1907: 
        !          1908:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1909:                == NULL)
        !          1910:        {
        !          1911:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1912:            return;
        !          1913:        }
        !          1914: 
        !          1915:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1916:                .nombre_arguments = 1;
        !          1917:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1918:                .fonction = instruction_re;
        !          1919: 
        !          1920:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1921:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          1922:        {
        !          1923:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1924:            return;
        !          1925:        }
        !          1926: 
        !          1927:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1928:                .nom_fonction, "RE");
        !          1929: 
        !          1930:        if (((*l_element_courant).suivant =
        !          1931:                allocation_maillon(s_etat_processus)) == NULL)
        !          1932:        {
        !          1933:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1934:            return;
        !          1935:        }
        !          1936: 
        !          1937:        l_element_courant = (*l_element_courant).suivant;
        !          1938: 
        !          1939:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          1940:                == NULL)
        !          1941:        {
        !          1942:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1943:            return;
        !          1944:        }
        !          1945: 
        !          1946:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1947:                .nombre_arguments = 0;
        !          1948:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1949:                .fonction = instruction_vers_niveau_inferieur;
        !          1950: 
        !          1951:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1952:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          1953:        {
        !          1954:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1955:            return;
        !          1956:        }
        !          1957: 
        !          1958:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          1959:                .nom_fonction, ">>");
        !          1960: 
        !          1961:        (*l_element_courant).suivant = NULL;
        !          1962:        s_objet_argument = NULL;
        !          1963:    }
        !          1964: 
        !          1965: /*
        !          1966: --------------------------------------------------------------------------------
        !          1967:   Partie réelle d'une expression
        !          1968: --------------------------------------------------------------------------------
        !          1969: */
        !          1970: 
        !          1971:    else if (((*s_objet_argument).type == ALG) ||
        !          1972:            ((*s_objet_argument).type == RPN))
        !          1973:    {
        !          1974:        if ((s_copie_argument = copie_objet(s_etat_processus,
        !          1975:                s_objet_argument, 'N')) == NULL)
        !          1976:        {
        !          1977:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1978:            return;
        !          1979:        }
        !          1980: 
        !          1981:        l_element_courant = (struct_liste_chainee *)
        !          1982:                (*s_copie_argument).objet;
        !          1983:        l_element_precedent = l_element_courant;
        !          1984: 
        !          1985:        while((*l_element_courant).suivant != NULL)
        !          1986:        {
        !          1987:            l_element_precedent = l_element_courant;
        !          1988:            l_element_courant = (*l_element_courant).suivant;
        !          1989:        }
        !          1990: 
        !          1991:        if (((*l_element_precedent).suivant =
        !          1992:                allocation_maillon(s_etat_processus)) == NULL)
        !          1993:        {
        !          1994:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1995:            return;
        !          1996:        }
        !          1997: 
        !          1998:        if (((*(*l_element_precedent).suivant).donnee =
        !          1999:                allocation(s_etat_processus, FCT)) == NULL)
        !          2000:        {
        !          2001:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2002:            return;
        !          2003:        }
        !          2004: 
        !          2005:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          2006:                .donnee).objet)).nombre_arguments = 1;
        !          2007:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          2008:                .donnee).objet)).fonction = instruction_re;
        !          2009: 
        !          2010:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !          2011:                .suivant).donnee).objet)).nom_fonction =
        !          2012:                malloc(3 * sizeof(unsigned char))) == NULL)
        !          2013:        {
        !          2014:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2015:            return;
        !          2016:        }
        !          2017: 
        !          2018:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !          2019:                .suivant).donnee).objet)).nom_fonction, "RE");
        !          2020: 
        !          2021:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          2022: 
        !          2023:        s_objet_resultat = s_copie_argument;
        !          2024:    }
        !          2025: 
        !          2026: /*
        !          2027: --------------------------------------------------------------------------------
        !          2028:   Réalisation impossible de la fonction partie réelle
        !          2029: --------------------------------------------------------------------------------
        !          2030: */
        !          2031: 
        !          2032:    else
        !          2033:    {
        !          2034:        liberation(s_etat_processus, s_objet_argument);
        !          2035: 
        !          2036:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          2037:        return;
        !          2038:    }
        !          2039: 
        !          2040:    liberation(s_etat_processus, s_objet_argument);
        !          2041: 
        !          2042:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          2043:            s_objet_resultat) == d_erreur)
        !          2044:    {
        !          2045:        return;
        !          2046:    }
        !          2047: 
        !          2048:    return;
        !          2049: }
        !          2050: 
        !          2051: 
        !          2052: /*
        !          2053: ================================================================================
        !          2054:   Fonction 'r->p'
        !          2055: ================================================================================
        !          2056:   Entrées : pointeur sur une structure struct_processus
        !          2057: --------------------------------------------------------------------------------
        !          2058:   Sorties :
        !          2059: --------------------------------------------------------------------------------
        !          2060:   Effets de bord : néant
        !          2061: ================================================================================
        !          2062: */
        !          2063: 
        !          2064: void
        !          2065: instruction_r_vers_p(struct_processus *s_etat_processus)
        !          2066: {
        !          2067:    struct_liste_chainee            *l_element_courant;
        !          2068:    struct_liste_chainee            *l_element_precedent;
        !          2069: 
        !          2070:    struct_objet                    *s_copie_argument;
        !          2071:    struct_objet                    *s_objet_argument;
        !          2072:    struct_objet                    *s_objet_resultat;
        !          2073: 
        !          2074:    (*s_etat_processus).erreur_execution = d_ex;
        !          2075: 
        !          2076:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          2077:    {
        !          2078:        printf("\n  P->R ");
        !          2079: 
        !          2080:        if ((*s_etat_processus).langue == 'F')
        !          2081:        {
        !          2082:            printf("(coordonnées polaires vers cartésiennes)\n\n");
        !          2083:        }
        !          2084:        else
        !          2085:        {
        !          2086:            printf("(polar to cartesian coordinates)\n\n");
        !          2087:        }
        !          2088: 
        !          2089:        printf("    1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
        !          2090:        printf("->  1: %s\n\n", d_CPL);
        !          2091: 
        !          2092:        printf("    1: %s, %s\n", d_NOM, d_ALG);
        !          2093:        printf("->  1: %s\n\n", d_ALG);
        !          2094: 
        !          2095:        printf("    1: %s\n", d_RPN);
        !          2096:        printf("->  1: %s\n", d_RPN);
        !          2097: 
        !          2098:        return;
        !          2099:    }
        !          2100:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          2101:    {
        !          2102:        (*s_etat_processus).nombre_arguments = -1;
        !          2103:        return;
        !          2104:    }
        !          2105: 
        !          2106:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          2107:    {
        !          2108:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          2109:        {
        !          2110:            return;
        !          2111:        }
        !          2112:    }
        !          2113: 
        !          2114:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          2115:            &s_objet_argument) == d_erreur)
        !          2116:    {
        !          2117:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          2118:        return;
        !          2119:    }
        !          2120: 
        !          2121: /*
        !          2122: --------------------------------------------------------------------------------
        !          2123:   Conversion d'un entier ou d'un réel
        !          2124: --------------------------------------------------------------------------------
        !          2125: */
        !          2126: 
        !          2127:    if (((*s_objet_argument).type == INT) ||
        !          2128:            ((*s_objet_argument).type == REL))
        !          2129:    {
        !          2130:        if ((s_objet_resultat = allocation(s_etat_processus, CPL))
        !          2131:                == NULL)
        !          2132:        {
        !          2133:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2134:            return;
        !          2135:        }
        !          2136: 
        !          2137:        if ((*s_objet_argument).type == INT)
        !          2138:        {
        !          2139:            (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle
        !          2140:                    = (*((integer8 *) (*s_objet_argument).objet));
        !          2141:        }
        !          2142:        else
        !          2143:        {
        !          2144:            (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle
        !          2145:                    = (*((real8 *) (*s_objet_argument).objet));
        !          2146:        }
        !          2147: 
        !          2148:        (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_imaginaire
        !          2149:                = 0;
        !          2150:    }
        !          2151: 
        !          2152: /*
        !          2153: --------------------------------------------------------------------------------
        !          2154:   Conversion d'un complexe
        !          2155: --------------------------------------------------------------------------------
        !          2156: */
        !          2157: 
        !          2158:    else if ((*s_objet_argument).type == CPL)
        !          2159:    {
        !          2160:        if ((s_objet_resultat = allocation(s_etat_processus, CPL))
        !          2161:                == NULL)
        !          2162:        {
        !          2163:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2164:            return;
        !          2165:        }
        !          2166: 
        !          2167:        f77absc_(((struct_complexe16 *) (*s_objet_argument).objet),
        !          2168:                &((*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          2169:                .partie_reelle));
        !          2170: 
        !          2171:        (*((struct_complexe16 *) (*s_objet_resultat).objet))
        !          2172:                .partie_imaginaire = atan2((*((struct_complexe16 *)
        !          2173:                (*s_objet_argument).objet)).partie_imaginaire,
        !          2174:                (*((struct_complexe16 *) (*s_objet_argument).objet))
        !          2175:                .partie_reelle);
        !          2176: 
        !          2177:        if (test_cfsf(s_etat_processus, 60) == d_faux)
        !          2178:        {
        !          2179:            conversion_radians_vers_degres(&((*((struct_complexe16 *)
        !          2180:                    (*s_objet_resultat).objet)).partie_imaginaire));
        !          2181:        }
        !          2182:    }
        !          2183: 
        !          2184: /*
        !          2185: --------------------------------------------------------------------------------
        !          2186:   Conversion d'un nom
        !          2187: --------------------------------------------------------------------------------
        !          2188: */
        !          2189: 
        !          2190:    else if ((*s_objet_argument).type == NOM)
        !          2191:    {
        !          2192:        if ((s_objet_resultat = allocation(s_etat_processus, ALG))
        !          2193:                == NULL)
        !          2194:        {
        !          2195:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2196:            return;
        !          2197:        }
        !          2198: 
        !          2199:        if (((*s_objet_resultat).objet =
        !          2200:                allocation_maillon(s_etat_processus)) == NULL)
        !          2201:        {
        !          2202:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2203:            return;
        !          2204:        }
        !          2205: 
        !          2206:        l_element_courant = (*s_objet_resultat).objet;
        !          2207: 
        !          2208:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          2209:                == NULL)
        !          2210:        {
        !          2211:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2212:            return;
        !          2213:        }
        !          2214: 
        !          2215:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2216:                .nombre_arguments = 0;
        !          2217:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2218:                .fonction = instruction_vers_niveau_superieur;
        !          2219: 
        !          2220:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2221:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          2222:        {
        !          2223:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2224:            return;
        !          2225:        }
        !          2226: 
        !          2227:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2228:                .nom_fonction, "<<");
        !          2229: 
        !          2230:        if (((*l_element_courant).suivant =
        !          2231:                allocation_maillon(s_etat_processus)) == NULL)
        !          2232:        {
        !          2233:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2234:            return;
        !          2235:        }
        !          2236: 
        !          2237:        l_element_courant = (*l_element_courant).suivant;
        !          2238:        (*l_element_courant).donnee = s_objet_argument;
        !          2239: 
        !          2240:        if (((*l_element_courant).suivant =
        !          2241:                allocation_maillon(s_etat_processus)) == NULL)
        !          2242:        {
        !          2243:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2244:            return;
        !          2245:        }
        !          2246: 
        !          2247:        l_element_courant = (*l_element_courant).suivant;
        !          2248: 
        !          2249:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          2250:                == NULL)
        !          2251:        {
        !          2252:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2253:            return;
        !          2254:        }
        !          2255: 
        !          2256:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2257:                .nombre_arguments = 1;
        !          2258:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2259:                .fonction = instruction_r_vers_p;
        !          2260: 
        !          2261:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2262:                .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
        !          2263:        {
        !          2264:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2265:            return;
        !          2266:        }
        !          2267: 
        !          2268:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2269:                .nom_fonction, "R->P");
        !          2270: 
        !          2271:        if (((*l_element_courant).suivant =
        !          2272:                allocation_maillon(s_etat_processus)) == NULL)
        !          2273:        {
        !          2274:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2275:            return;
        !          2276:        }
        !          2277: 
        !          2278:        l_element_courant = (*l_element_courant).suivant;
        !          2279: 
        !          2280:        if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
        !          2281:                == NULL)
        !          2282:        {
        !          2283:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2284:            return;
        !          2285:        }
        !          2286: 
        !          2287:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2288:                .nombre_arguments = 0;
        !          2289:        (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2290:                .fonction = instruction_vers_niveau_inferieur;
        !          2291: 
        !          2292:        if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2293:                .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
        !          2294:        {
        !          2295:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2296:            return;
        !          2297:        }
        !          2298: 
        !          2299:        strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
        !          2300:                .nom_fonction, ">>");
        !          2301: 
        !          2302:        (*l_element_courant).suivant = NULL;
        !          2303:        s_objet_argument = NULL;
        !          2304:    }
        !          2305: 
        !          2306: /*
        !          2307: --------------------------------------------------------------------------------
        !          2308:   Conversion d'une expression
        !          2309: --------------------------------------------------------------------------------
        !          2310: */
        !          2311: 
        !          2312:    else if (((*s_objet_argument).type == ALG) ||
        !          2313:            ((*s_objet_argument).type == RPN))
        !          2314:    {
        !          2315:        if ((s_copie_argument = copie_objet(s_etat_processus,
        !          2316:                s_objet_argument, 'N')) == NULL)
        !          2317:        {
        !          2318:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2319:            return;
        !          2320:        }
        !          2321: 
        !          2322:        l_element_courant = (struct_liste_chainee *)
        !          2323:                (*s_copie_argument).objet;
        !          2324:        l_element_precedent = l_element_courant;
        !          2325: 
        !          2326:        while((*l_element_courant).suivant != NULL)
        !          2327:        {
        !          2328:            l_element_precedent = l_element_courant;
        !          2329:            l_element_courant = (*l_element_courant).suivant;
        !          2330:        }
        !          2331: 
        !          2332:        if (((*l_element_precedent).suivant =
        !          2333:                allocation_maillon(s_etat_processus)) == NULL)
        !          2334:        {
        !          2335:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2336:            return;
        !          2337:        }
        !          2338: 
        !          2339:        if (((*(*l_element_precedent).suivant).donnee =
        !          2340:                allocation(s_etat_processus, FCT)) == NULL)
        !          2341:        {
        !          2342:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2343:            return;
        !          2344:        }
        !          2345: 
        !          2346:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          2347:                .donnee).objet)).nombre_arguments = 1;
        !          2348:        (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
        !          2349:                .donnee).objet)).fonction = instruction_r_vers_p;
        !          2350: 
        !          2351:        if (((*((struct_fonction *) (*(*(*l_element_precedent)
        !          2352:                .suivant).donnee).objet)).nom_fonction =
        !          2353:                malloc(5 * sizeof(unsigned char))) == NULL)
        !          2354:        {
        !          2355:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          2356:            return;
        !          2357:        }
        !          2358: 
        !          2359:        strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
        !          2360:                .suivant).donnee).objet)).nom_fonction, "R->P");
        !          2361: 
        !          2362:        (*(*l_element_precedent).suivant).suivant = l_element_courant;
        !          2363: 
        !          2364:        s_objet_resultat = s_copie_argument;
        !          2365:    }
        !          2366: 
        !          2367: /*
        !          2368: --------------------------------------------------------------------------------
        !          2369:   Réalisation impossible de la fonction R->P
        !          2370: --------------------------------------------------------------------------------
        !          2371: */
        !          2372: 
        !          2373:    else
        !          2374:    {
        !          2375:        liberation(s_etat_processus, s_objet_argument);
        !          2376: 
        !          2377:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          2378:        return;
        !          2379:    }
        !          2380: 
        !          2381:    liberation(s_etat_processus, s_objet_argument);
        !          2382: 
        !          2383:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          2384:            s_objet_resultat) == d_erreur)
        !          2385:    {
        !          2386:        return;
        !          2387:    }
        !          2388: 
        !          2389:    return;
        !          2390: }
        !          2391: 
        !          2392: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>