Annotation of rpl/src/instructions_p4.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 'pr1'
        !            29: ================================================================================
        !            30:   Entrées :
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_pr1(struct_processus *s_etat_processus)
        !            40: {
        !            41:    struct_objet                    *s_objet;
        !            42: 
        !            43:    (*s_etat_processus).erreur_execution = d_ex;
        !            44: 
        !            45:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            46:    {
        !            47:        printf("\n  PR1 ");
        !            48: 
        !            49:        if ((*s_etat_processus).langue == 'F')
        !            50:        {
        !            51:            printf("(impression d'un objet)\n\n");
        !            52:        }
        !            53:        else
        !            54:        {
        !            55:            printf("(print object)\n\n");
        !            56:        }
        !            57: 
        !            58:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !            59:                "       %s, %s, %s, %s, %s,\n"
        !            60:                "       %s, %s, %s, %s, %s,\n"
        !            61:                "       %s\n",
        !            62:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !            63:                d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !            64:        printf("->  1: %s, %s, %s, %s, %s, %s,\n"
        !            65:                "       %s, %s, %s, %s, %s,\n"
        !            66:                "       %s, %s, %s, %s, %s,\n"
        !            67:                "       %s\n",
        !            68:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !            69:                d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !            70: 
        !            71:        return;
        !            72:    }
        !            73:    else if ((*s_etat_processus).test_instruction == 'Y')
        !            74:    {
        !            75:        (*s_etat_processus).nombre_arguments = -1;
        !            76:        return;
        !            77:    }
        !            78: 
        !            79:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !            80:    {
        !            81:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !            82:        {
        !            83:            return;
        !            84:        }
        !            85:    }
        !            86: 
        !            87:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !            88:            &s_objet) == d_erreur)
        !            89:    {
        !            90:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !            91:        return;
        !            92:    }
        !            93: 
        !            94:    formateur_tex(s_etat_processus, s_objet, 'N');
        !            95: 
        !            96:    /*
        !            97:     * La fonction pr1 ne modifie pas la pile
        !            98:     */
        !            99: 
        !           100:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           101:            s_objet) == d_erreur)
        !           102:    {
        !           103:        return;
        !           104:    }
        !           105: 
        !           106:    return;
        !           107: }
        !           108: 
        !           109: 
        !           110: /*
        !           111: ================================================================================
        !           112:   Fonction 'print'
        !           113: ================================================================================
        !           114:   Entrées :
        !           115: --------------------------------------------------------------------------------
        !           116:   Sorties :
        !           117: --------------------------------------------------------------------------------
        !           118:   Effets de bord : néant
        !           119: ================================================================================
        !           120: */
        !           121: 
        !           122: void
        !           123: instruction_print(struct_processus *s_etat_processus)
        !           124: {
        !           125:    (*s_etat_processus).erreur_execution = d_ex;
        !           126: 
        !           127:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           128:    {
        !           129:        printf("\n  PRINT ");
        !           130: 
        !           131:        if ((*s_etat_processus).langue == 'F')
        !           132:        {
        !           133:            printf("(impression puis destruction de la file d'impression)"
        !           134:                    "\n\n");
        !           135:            printf("  Aucun argument\n");
        !           136:        }
        !           137:        else
        !           138:        {
        !           139:            printf("(print and purge the printer queue)\n\n");
        !           140:            printf("  No argument\n");
        !           141:        }
        !           142: 
        !           143:        return;
        !           144:    }
        !           145:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           146:    {
        !           147:        (*s_etat_processus).nombre_arguments = -1;
        !           148:        return;
        !           149:    }
        !           150: 
        !           151:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           152:    {
        !           153:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           154:        {
        !           155:            return;
        !           156:        }
        !           157:    }
        !           158: 
        !           159:    if ((*s_etat_processus).nom_fichier_impression == NULL)
        !           160:    {
        !           161:        (*s_etat_processus).erreur_execution = d_ex_queue_impression;
        !           162:        return;
        !           163:    }
        !           164: 
        !           165: #  ifdef POSTSCRIPT_SUPPORT
        !           166:        impression_tex(s_etat_processus);
        !           167: #  else
        !           168:        if ((*s_etat_processus).langue == 'F')
        !           169:        {
        !           170:            printf("+++Attention : Support de TeX non compilé !\n");
        !           171:        }
        !           172:        else
        !           173:        {
        !           174:            printf("+++Warning : TeX not available !\n");
        !           175:        }
        !           176: 
        !           177:        fflush(stdout);
        !           178: #  endif
        !           179: 
        !           180:    return;
        !           181: }
        !           182: 
        !           183: 
        !           184: /*
        !           185: ================================================================================
        !           186:   Fonction 'prst'
        !           187: ================================================================================
        !           188:   Entrées :
        !           189: --------------------------------------------------------------------------------
        !           190:   Sorties :
        !           191: --------------------------------------------------------------------------------
        !           192:   Effets de bord : néant
        !           193: ================================================================================
        !           194: */
        !           195: 
        !           196: void
        !           197: instruction_prst(struct_processus *s_etat_processus)
        !           198: {
        !           199:    (*s_etat_processus).erreur_execution = d_ex;
        !           200: 
        !           201:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           202:    {
        !           203:        printf("\n  PRST ");
        !           204: 
        !           205:        if ((*s_etat_processus).langue == 'F')
        !           206:        {
        !           207:            printf("(imprime la pile opérationnelle)\n\n");
        !           208:        }
        !           209:        else
        !           210:        {
        !           211:            printf("(print stack)\n\n");
        !           212:        }
        !           213: 
        !           214:        printf("    n: %s, %s, %s, %s, %s, %s,\n"
        !           215:                "       %s, %s, %s, %s, %s,\n"
        !           216:                "       %s, %s, %s, %s, %s,\n"
        !           217:                "       %s\n",
        !           218:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           219:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           220:        printf("    ...\n");
        !           221:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           222:                "       %s, %s, %s, %s, %s,\n"
        !           223:                "       %s, %s, %s, %s, %s,\n"
        !           224:                "       %s\n",
        !           225:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           226:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           227:        printf("->  n: %s, %s, %s, %s, %s, %s,\n"
        !           228:                "       %s, %s, %s, %s, %s,\n"
        !           229:                "       %s, %s, %s, %s, %s,\n"
        !           230:                "       %s\n",
        !           231:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           232:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           233:        printf("    ...\n");
        !           234:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           235:                "       %s, %s, %s, %s, %s,\n"
        !           236:                "       %s, %s, %s, %s, %s,\n"
        !           237:                "       %s\n",
        !           238:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           239:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           240: 
        !           241:        return;
        !           242:    }
        !           243:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           244:    {
        !           245:        (*s_etat_processus).nombre_arguments = -1;
        !           246:        return;
        !           247:    }
        !           248: 
        !           249:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           250:    {
        !           251:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           252:        {
        !           253:            return;
        !           254:        }
        !           255:    }
        !           256: 
        !           257:    impression_pile(s_etat_processus, (*s_etat_processus).l_base_pile,
        !           258:            'E', 1);
        !           259:    return;
        !           260: }
        !           261: 
        !           262: 
        !           263: /*
        !           264: ================================================================================
        !           265:   Fonction 'prstc'
        !           266: ================================================================================
        !           267:   Entrées :
        !           268: --------------------------------------------------------------------------------
        !           269:   Sorties :
        !           270: --------------------------------------------------------------------------------
        !           271:   Effets de bord : néant
        !           272: ================================================================================
        !           273: */
        !           274: 
        !           275: void
        !           276: instruction_prstc(struct_processus *s_etat_processus)
        !           277: {
        !           278:    (*s_etat_processus).erreur_execution = d_ex;
        !           279: 
        !           280:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           281:    {
        !           282:        printf("\n  PRSTC ");
        !           283: 
        !           284:        if ((*s_etat_processus).langue == 'F')
        !           285:        {
        !           286:            printf("(imprime la pile opérationnelle en mode compact)\n\n");
        !           287:        }
        !           288:        else
        !           289:        {
        !           290:            printf("(print stack in compact mode)\n\n");
        !           291:        }
        !           292: 
        !           293:        printf("    n: %s, %s, %s, %s, %s, %s,\n"
        !           294:                "       %s, %s, %s, %s, %s,\n"
        !           295:                "       %s, %s, %s, %s, %s,\n"
        !           296:                "       %s\n",
        !           297:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           298:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           299:        printf("    ...\n");
        !           300:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           301:                "       %s, %s, %s, %s, %s,\n"
        !           302:                "       %s, %s, %s, %s, %s,\n"
        !           303:                "       %s\n",
        !           304:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           305:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           306:        printf("->  n: %s, %s, %s, %s, %s, %s,\n"
        !           307:                "       %s, %s, %s, %s, %s,\n"
        !           308:                "       %s, %s, %s, %s, %s,\n"
        !           309:                "       %s\n",
        !           310:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           311:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           312:        printf("    ...\n");
        !           313:        printf("    1: %s, %s, %s, %s, %s, %s,\n"
        !           314:                "       %s, %s, %s, %s, %s,\n"
        !           315:                "       %s, %s, %s, %s, %s,\n"
        !           316:                "       %s\n",
        !           317:                d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
        !           318:                d_MIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SLB);
        !           319: 
        !           320:        return;
        !           321:    }
        !           322:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           323:    {
        !           324:        (*s_etat_processus).nombre_arguments = -1;
        !           325:        return;
        !           326:    }
        !           327: 
        !           328:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           329:    {
        !           330:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           331:        {
        !           332:            return;
        !           333:        }
        !           334:    }
        !           335: 
        !           336:    impression_pile(s_etat_processus, (*s_etat_processus).l_base_pile,
        !           337:            'C', 1);
        !           338:    return;
        !           339: }
        !           340: 
        !           341: 
        !           342: /*
        !           343: ================================================================================
        !           344:   Fonction 'prvar'
        !           345: ================================================================================
        !           346:   Entrées :
        !           347: --------------------------------------------------------------------------------
        !           348:   Sorties :
        !           349: --------------------------------------------------------------------------------
        !           350:   Effets de bord : néant
        !           351: ================================================================================
        !           352: */
        !           353: 
        !           354: void
        !           355: instruction_prvar(struct_processus *s_etat_processus)
        !           356: {
        !           357:    struct_objet                    *s_objet;
        !           358: 
        !           359:    (*s_etat_processus).erreur_execution = d_ex;
        !           360: 
        !           361:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           362:    {
        !           363:        printf("\n  PRVAR ");
        !           364: 
        !           365:        if ((*s_etat_processus).langue == 'F')
        !           366:        {
        !           367:            printf("(imprime le contenu d'une variable)\n\n");
        !           368:        }
        !           369:        else
        !           370:        {
        !           371:            printf("(print variable)\n\n");
        !           372:        }
        !           373: 
        !           374:        printf("    1: %s\n", d_NOM);
        !           375: 
        !           376:        return;
        !           377:    }
        !           378:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           379:    {
        !           380:        (*s_etat_processus).nombre_arguments = -1;
        !           381:        return;
        !           382:    }
        !           383: 
        !           384:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           385:    {
        !           386:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           387:        {
        !           388:            return;
        !           389:        }
        !           390:    }
        !           391: 
        !           392:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           393:            &s_objet) == d_erreur)
        !           394:    {
        !           395:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           396:        return;
        !           397:    }
        !           398: 
        !           399:    if ((*s_objet).type != NOM)
        !           400:    {
        !           401:        liberation(s_etat_processus, s_objet);
        !           402: 
        !           403:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           404:        return;
        !           405:    }
        !           406: 
        !           407:    if (recherche_variable(s_etat_processus, (*((struct_nom *)
        !           408:            (*s_objet).objet)).nom) == d_faux)
        !           409:    {
        !           410:        (*s_etat_processus).erreur_systeme = d_es;
        !           411:        (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !           412: 
        !           413:        liberation(s_etat_processus, s_objet);
        !           414:        return;
        !           415:    }
        !           416: 
        !           417:    if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
        !           418:            .position_variable_courante].objet != NULL)
        !           419:    {
        !           420:        formateur_tex(s_etat_processus, (*s_etat_processus).s_liste_variables
        !           421:                [(*s_etat_processus).position_variable_courante].objet, 'N');
        !           422:    }
        !           423:    else
        !           424:    {
        !           425:        if (pthread_mutex_lock(&((*(*s_etat_processus)
        !           426:                .s_liste_variables_partagees).mutex)) != 0)
        !           427:        {
        !           428:            (*s_etat_processus).erreur_systeme = d_es_processus;
        !           429:            return;
        !           430:        }
        !           431: 
        !           432:        if (recherche_variable_partagee(s_etat_processus,
        !           433:                (*s_etat_processus).s_liste_variables
        !           434:                [(*s_etat_processus).position_variable_courante].nom,
        !           435:                (*s_etat_processus).s_liste_variables
        !           436:                [(*s_etat_processus).position_variable_courante]
        !           437:                .variable_partagee, (*s_etat_processus).s_liste_variables
        !           438:                [(*s_etat_processus).position_variable_courante].origine)
        !           439:                == d_faux)
        !           440:        {
        !           441:            if (pthread_mutex_unlock(&((*(*s_etat_processus)
        !           442:                    .s_liste_variables_partagees).mutex)) != 0)
        !           443:            {
        !           444:                (*s_etat_processus).erreur_systeme = d_es_processus;
        !           445:                return;
        !           446:            }
        !           447: 
        !           448:            (*s_etat_processus).erreur_systeme = d_es;
        !           449:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
        !           450: 
        !           451:            liberation(s_etat_processus, s_objet);
        !           452:            return;
        !           453:        }
        !           454: 
        !           455:        formateur_tex(s_etat_processus, (*(*s_etat_processus)
        !           456:                .s_liste_variables_partagees).table
        !           457:                [(*(*s_etat_processus).s_liste_variables_partagees)
        !           458:                .position_variable].objet, 'N');
        !           459: 
        !           460:        if (pthread_mutex_unlock(&((*(*s_etat_processus)
        !           461:                .s_liste_variables_partagees).mutex)) != 0)
        !           462:        {
        !           463:            (*s_etat_processus).erreur_systeme = d_es_processus;
        !           464:            return;
        !           465:        }
        !           466:    }
        !           467: 
        !           468:    liberation(s_etat_processus, s_objet);
        !           469: 
        !           470:    return;
        !           471: }
        !           472: 
        !           473: 
        !           474: /*
        !           475: ================================================================================
        !           476:   Fonction 'prusr'
        !           477: ================================================================================
        !           478:   Entrées :
        !           479: --------------------------------------------------------------------------------
        !           480:   Sorties :
        !           481: --------------------------------------------------------------------------------
        !           482:   Effets de bord : néant
        !           483: ================================================================================
        !           484: */
        !           485: 
        !           486: void
        !           487: instruction_prusr(struct_processus *s_etat_processus)
        !           488: {
        !           489:    struct_objet                s_objet;
        !           490: 
        !           491:    unsigned long               i;
        !           492: 
        !           493:    (*s_etat_processus).erreur_execution = d_ex;
        !           494: 
        !           495:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           496:    {
        !           497:        printf("\n  PRUSR ");
        !           498: 
        !           499:        if ((*s_etat_processus).langue == 'F')
        !           500:        {
        !           501:            printf("(impression de toutes les variables utilisateur)\n\n");
        !           502:            printf("  Aucun argument\n");
        !           503:        }
        !           504:        else
        !           505:        {
        !           506:            printf("(print all user variables)\n\n");
        !           507:            printf("  No argument\n");
        !           508:        }
        !           509: 
        !           510:        return;
        !           511:    }
        !           512:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           513:    {
        !           514:        (*s_etat_processus).nombre_arguments = -1;
        !           515:        return;
        !           516:    }
        !           517: 
        !           518:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           519:    {
        !           520:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           521:        {
        !           522:            return;
        !           523:        }
        !           524:    }
        !           525: 
        !           526:    s_objet.type = CHN;
        !           527: 
        !           528:    for(i = 0; i < (*s_etat_processus).nombre_variables; i++)
        !           529:    {
        !           530:        if ((s_objet.objet = malloc((strlen((*s_etat_processus)
        !           531:                .s_liste_variables[i].nom) + 64) * sizeof(unsigned char)))
        !           532:                == NULL)
        !           533:        {
        !           534:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           535:            return;
        !           536:        }
        !           537: 
        !           538:        sprintf((unsigned char *) s_objet.objet, "\\noindent %s [%lu]\n",
        !           539:                (*s_etat_processus).s_liste_variables[i].nom,
        !           540:                (*s_etat_processus).s_liste_variables[i].niveau);
        !           541: 
        !           542:        formateur_tex(s_etat_processus, &s_objet, 'N');
        !           543:        free(s_objet.objet);
        !           544:    }
        !           545: 
        !           546:    return;
        !           547: }
        !           548: 
        !           549: 
        !           550: /*
        !           551: ================================================================================
        !           552:   Fonction 'prmd'
        !           553: ================================================================================
        !           554:   Entrées :
        !           555: --------------------------------------------------------------------------------
        !           556:   Sorties :
        !           557: --------------------------------------------------------------------------------
        !           558:   Effets de bord : néant
        !           559: ================================================================================
        !           560: */
        !           561: 
        !           562: void
        !           563: instruction_prmd(struct_processus *s_etat_processus)
        !           564: {
        !           565:    long                        longueur_utile;
        !           566:    long                        longueur_utile_limite;
        !           567: 
        !           568:    struct_objet                s_objet;
        !           569: 
        !           570:    unsigned long               i;
        !           571:    unsigned long               j;
        !           572: 
        !           573:    (*s_etat_processus).erreur_execution = d_ex;
        !           574: 
        !           575:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           576:    {
        !           577:        printf("\n  PRMD ");
        !           578: 
        !           579:        if ((*s_etat_processus).langue == 'F')
        !           580:        {
        !           581:            printf("(impression de l'état du séquenceur)\n\n");
        !           582:            printf("  Aucun argument\n");
        !           583:        }
        !           584:        else
        !           585:        {
        !           586:            printf("(print sequencer state)\n\n");
        !           587:            printf("  No argument\n");
        !           588:        }
        !           589: 
        !           590:        return;
        !           591:    }
        !           592:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           593:    {
        !           594:        (*s_etat_processus).nombre_arguments = -1;
        !           595:        return;
        !           596:    }
        !           597: 
        !           598:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           599:    {
        !           600:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !           601:        {
        !           602:            return;
        !           603:        }
        !           604:    }
        !           605: 
        !           606:    s_objet.type = CHN;
        !           607: 
        !           608:    if ((s_objet.objet = malloc(128 * sizeof(unsigned char))) == NULL)
        !           609:    {
        !           610:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           611:        return;
        !           612:    }
        !           613: 
        !           614:    longueur_utile = 0;
        !           615:    j = 1;
        !           616: 
        !           617:    for(i = 53; i <= 56; i++)
        !           618:    {
        !           619:        longueur_utile += (test_cfsf(s_etat_processus, (unsigned char) i)
        !           620:                == d_vrai) ? j : 0;
        !           621:        j *= 2;
        !           622:    }
        !           623: 
        !           624:    longueur_utile_limite = 12;
        !           625: 
        !           626:    if (longueur_utile > longueur_utile_limite)
        !           627:    {
        !           628:        longueur_utile = longueur_utile_limite;
        !           629:    }
        !           630: 
        !           631:    if ((test_cfsf(s_etat_processus, 49) == d_faux) &&
        !           632:            (test_cfsf(s_etat_processus, 50) == d_faux))
        !           633:    {
        !           634:        if ((*s_etat_processus).langue == 'F')
        !           635:        {
        !           636:            sprintf((unsigned char *) s_objet.objet,
        !           637:                    "\\noindent Mode d'affichage numérique: standard\n");
        !           638:        }
        !           639:        else
        !           640:        {
        !           641:            sprintf((unsigned char *) s_objet.objet,
        !           642:                    "\\noindent Numerical mode: standard\n");
        !           643:        }
        !           644:    }
        !           645:    else if ((test_cfsf(s_etat_processus, 49) == d_faux) &&
        !           646:            (test_cfsf(s_etat_processus, 50) == d_vrai))
        !           647:    {
        !           648:        if ((*s_etat_processus).langue == 'F')
        !           649:        {
        !           650:            sprintf((unsigned char *) s_objet.objet,
        !           651:                    "\\noindent Mode d'affichage numérique: "
        !           652:                    "scientifique (%ld)\n", longueur_utile);
        !           653:        }
        !           654:        else
        !           655:        {
        !           656:            sprintf((unsigned char *) s_objet.objet,
        !           657:                    "\\noindent Numerical mode: scientific (%ld)\n",
        !           658:                    longueur_utile);
        !           659:        }
        !           660:    }
        !           661:    else if ((test_cfsf(s_etat_processus, 49) == d_vrai) &&
        !           662:            (test_cfsf(s_etat_processus, 50) == d_faux))
        !           663:    {
        !           664:        if ((*s_etat_processus).langue == 'F')
        !           665:        {
        !           666:            sprintf((unsigned char *) s_objet.objet,
        !           667:                    "\\noindent Mode d'affichage numérique: "
        !           668:                    "virgule fixe (%ld)\n", longueur_utile);
        !           669:        }
        !           670:        else
        !           671:        {
        !           672:            sprintf((unsigned char *) s_objet.objet,
        !           673:                    "\\noindent Numerical mode: fixed point (%ld)\n", longueur_utile);
        !           674:        }
        !           675:    }
        !           676:    else 
        !           677:    {
        !           678:        if ((*s_etat_processus).langue == 'F')
        !           679:        {
        !           680:            sprintf((unsigned char *) s_objet.objet,
        !           681:                    "\\noindent Mode d'affichage numérique: notation ingénieur "
        !           682:                    "(%ld)\n", longueur_utile);
        !           683:        }
        !           684:        else
        !           685:        {
        !           686:            sprintf((unsigned char *) s_objet.objet,
        !           687:                    "\\noindent Numerical mode: engineer "
        !           688:                    "(%ld)\n", longueur_utile);
        !           689:        }
        !           690:    }
        !           691: 
        !           692: 
        !           693:    formateur_tex(s_etat_processus, &s_objet, 'N');
        !           694:    free(s_objet.objet);
        !           695: 
        !           696:    if ((s_objet.objet = malloc(128 * sizeof(unsigned char))) == NULL)
        !           697:    {
        !           698:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           699:        return;
        !           700:    }
        !           701: 
        !           702:    if ((*s_etat_processus).langue == 'F')
        !           703:    {
        !           704:        sprintf((unsigned char *) s_objet.objet,
        !           705:                "\\noindent \\'Echelle angulaire: %s\n",
        !           706:                (test_cfsf(s_etat_processus, 60) == d_faux)
        !           707:                ? "degrés" : "radians");
        !           708:    }
        !           709:    else
        !           710:    {
        !           711:        sprintf((unsigned char *) s_objet.objet,
        !           712:                "\\noindent Angular scale: %s\n",
        !           713:                (test_cfsf(s_etat_processus, 60) == d_faux)
        !           714:                ? "degrees" : "radians");
        !           715:    }
        !           716: 
        !           717:    formateur_tex(s_etat_processus, &s_objet, 'N');
        !           718:    free(s_objet.objet);
        !           719: 
        !           720:    if ((s_objet.objet = malloc(128 * sizeof(unsigned char))) == NULL)
        !           721:    {
        !           722:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           723:        return;
        !           724:    }
        !           725: 
        !           726:    if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
        !           727:            (test_cfsf(s_etat_processus, 44) == d_faux))
        !           728:    {
        !           729:        if ((*s_etat_processus).langue == 'F')
        !           730:        {
        !           731:            sprintf((unsigned char *) s_objet.objet,
        !           732:                    "\\noindent Base des entiers : décimale\n");
        !           733:        }
        !           734:        else
        !           735:        {
        !           736:            sprintf((unsigned char *) s_objet.objet,
        !           737:                    "\\noindent Integer base: decimal\n");
        !           738:        }
        !           739:    }
        !           740:    else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
        !           741:            (test_cfsf(s_etat_processus, 44) == d_faux))
        !           742:    {
        !           743:        if ((*s_etat_processus).langue == 'F')
        !           744:        {
        !           745:            sprintf((unsigned char *) s_objet.objet,
        !           746:                    "\\noindent Base des entiers : octale\n");
        !           747:        }
        !           748:        else
        !           749:        {
        !           750:            sprintf((unsigned char *) s_objet.objet,
        !           751:                    "\\noindent Integer base: octal\n");
        !           752:        }
        !           753:    }
        !           754:    else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
        !           755:            (test_cfsf(s_etat_processus, 44) == d_vrai))
        !           756:    {
        !           757:        if ((*s_etat_processus).langue == 'F')
        !           758:        {
        !           759:            sprintf((unsigned char *) s_objet.objet,
        !           760:                    "\\noindent Base des entiers : hexadécimale\n");
        !           761:        }
        !           762:        else
        !           763:        {
        !           764:            sprintf((unsigned char *) s_objet.objet,
        !           765:                    "\\noindent Integer base: hexadecimal\n");
        !           766:        }
        !           767:    }
        !           768:    else
        !           769:    {
        !           770:        if ((*s_etat_processus).langue == 'F')
        !           771:        {
        !           772:            sprintf((unsigned char *) s_objet.objet,
        !           773:                    "\\noindent Base des entiers : binaire\n");
        !           774:        }
        !           775:        else
        !           776:        {
        !           777:            sprintf((unsigned char *) s_objet.objet,
        !           778:                    "\\noindent Integer base: binary\n");
        !           779:        }
        !           780:    }
        !           781:    
        !           782:    formateur_tex(s_etat_processus, &s_objet, 'N');
        !           783:    free(s_objet.objet);
        !           784: 
        !           785:    if ((s_objet.objet = malloc(128 * sizeof(unsigned char))) == NULL)
        !           786:    {
        !           787:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           788:        return;
        !           789:    }
        !           790: 
        !           791:    if ((*s_etat_processus).langue == 'F')
        !           792:    {
        !           793:        sprintf((unsigned char *) s_objet.objet,
        !           794:                "\\noindent Longueur des entiers : %d bits\n",
        !           795:                longueur_entiers_binaires(s_etat_processus));
        !           796:    }
        !           797:    else
        !           798:    {
        !           799:        sprintf((unsigned char *) s_objet.objet,
        !           800:                "\\noindent Length of integers: %d bits\n",
        !           801:                longueur_entiers_binaires(s_etat_processus));
        !           802:    }
        !           803: 
        !           804:    formateur_tex(s_etat_processus, &s_objet, 'N');
        !           805:    free(s_objet.objet);
        !           806: 
        !           807:    if ((s_objet.objet = malloc(128 * sizeof(unsigned char))) == NULL)
        !           808:    {
        !           809:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           810:        return;
        !           811:    }
        !           812: 
        !           813:    if ((*s_etat_processus).langue == 'F')
        !           814:    {
        !           815:        sprintf((unsigned char *) s_objet.objet,
        !           816:                "\\noindent Séparateur décimal: %s\n",
        !           817:                (test_cfsf(s_etat_processus, 48) == d_faux)
        !           818:                ? "point" : "virgule");
        !           819:    }
        !           820:    else
        !           821:    {
        !           822:        sprintf((unsigned char *) s_objet.objet,
        !           823:                "\\noindent Radix: %s\n",
        !           824:                (test_cfsf(s_etat_processus, 48) == d_faux)
        !           825:                ? "period" : "coma");
        !           826:    }
        !           827: 
        !           828:    formateur_tex(s_etat_processus, &s_objet, 'N');
        !           829:    free(s_objet.objet);
        !           830: 
        !           831:    return;
        !           832: }
        !           833: 
        !           834: 
        !           835: /*
        !           836: ================================================================================
        !           837:   Fonction 'pmin'
        !           838: ================================================================================
        !           839:   Entrées :
        !           840: --------------------------------------------------------------------------------
        !           841:   Sorties :
        !           842: --------------------------------------------------------------------------------
        !           843:   Effets de bord : néant
        !           844: ================================================================================
        !           845: */
        !           846: 
        !           847: void
        !           848: instruction_pmin(struct_processus *s_etat_processus)
        !           849: {
        !           850:    struct_objet                    *s_objet;
        !           851: 
        !           852:    (*s_etat_processus).erreur_execution = d_ex;
        !           853: 
        !           854:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           855:    {
        !           856:        printf("\n  PMIN ");
        !           857: 
        !           858:        if ((*s_etat_processus).langue == 'F')
        !           859:        {
        !           860:            printf("(minima d'un graphique 2D)\n\n");
        !           861:        }
        !           862:        else
        !           863:        {
        !           864:            printf("(2D-graphic minima)\n\n");
        !           865:        }
        !           866: 
        !           867:        printf("    1: %s\n", d_CPL);
        !           868: 
        !           869:        return;
        !           870:    }
        !           871:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           872:    {
        !           873:        (*s_etat_processus).nombre_arguments = -1;
        !           874:        return;
        !           875:    }
        !           876: 
        !           877:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           878:    {
        !           879:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           880:        {
        !           881:            return;
        !           882:        }
        !           883:    }
        !           884: 
        !           885:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           886:            &s_objet) == d_erreur)
        !           887:    {
        !           888:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           889:        return;
        !           890:    }
        !           891: 
        !           892:    if ((*s_objet).type == CPL)
        !           893:    {
        !           894:        if ((*s_etat_processus).systeme_axes == 0)
        !           895:        {
        !           896:            (*s_etat_processus).x_min = (*((complex16 *) (*s_objet).objet))
        !           897:                    .partie_reelle;
        !           898:            (*s_etat_processus).y_min = (*((complex16 *) (*s_objet).objet))
        !           899:                    .partie_imaginaire;
        !           900:        }
        !           901:        else
        !           902:        {
        !           903:            (*s_etat_processus).x2_min = (*((complex16 *) (*s_objet).objet))
        !           904:                    .partie_reelle;
        !           905:            (*s_etat_processus).y2_min = (*((complex16 *) (*s_objet).objet))
        !           906:                    .partie_imaginaire;
        !           907:        }
        !           908:    }
        !           909:    else
        !           910:    {
        !           911:        liberation(s_etat_processus, s_objet);
        !           912: 
        !           913:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           914:        return;
        !           915:    }
        !           916: 
        !           917:    liberation(s_etat_processus, s_objet);
        !           918: 
        !           919:    if (test_cfsf(s_etat_processus, 52) == d_faux)
        !           920:    {
        !           921:        if ((*s_etat_processus).fichiers_graphiques != NULL)
        !           922:        {
        !           923:            appel_gnuplot(s_etat_processus, 'N');
        !           924:        }
        !           925:    }
        !           926: 
        !           927:    return;
        !           928: }
        !           929: 
        !           930: 
        !           931: /*
        !           932: ================================================================================
        !           933:   Fonction 'pmax'
        !           934: ================================================================================
        !           935:   Entrées :
        !           936: --------------------------------------------------------------------------------
        !           937:   Sorties :
        !           938: --------------------------------------------------------------------------------
        !           939:   Effets de bord : néant
        !           940: ================================================================================
        !           941: */
        !           942: 
        !           943: void
        !           944: instruction_pmax(struct_processus *s_etat_processus)
        !           945: {
        !           946:    struct_objet                    *s_objet;
        !           947: 
        !           948:    (*s_etat_processus).erreur_execution = d_ex;
        !           949: 
        !           950:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           951:    {
        !           952:        printf("\n  PMAX ");
        !           953: 
        !           954:        if ((*s_etat_processus).langue == 'F')
        !           955:        {
        !           956:            printf("(maxima d'un graphique 2D)\n\n");
        !           957:        }
        !           958:        else
        !           959:        {
        !           960:            printf("(2D-graphic maxima)\n\n");
        !           961:        }
        !           962: 
        !           963:        printf("    1: %s\n", d_CPL);
        !           964: 
        !           965:        return;
        !           966:    }
        !           967:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           968:    {
        !           969:        (*s_etat_processus).nombre_arguments = -1;
        !           970:        return;
        !           971:    }
        !           972: 
        !           973:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           974:    {
        !           975:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           976:        {
        !           977:            return;
        !           978:        }
        !           979:    }
        !           980: 
        !           981:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           982:            &s_objet) == d_erreur)
        !           983:    {
        !           984:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           985:        return;
        !           986:    }
        !           987: 
        !           988:    if ((*s_objet).type == CPL)
        !           989:    {
        !           990:        if ((*s_etat_processus).systeme_axes == 0)
        !           991:        {
        !           992:            (*s_etat_processus).x_max = (*((complex16 *) (*s_objet).objet))
        !           993:                    .partie_reelle;
        !           994:            (*s_etat_processus).y_max = (*((complex16 *) (*s_objet).objet))
        !           995:                    .partie_imaginaire;
        !           996:        }
        !           997:        else
        !           998:        {
        !           999:            (*s_etat_processus).x2_max = (*((complex16 *) (*s_objet).objet))
        !          1000:                    .partie_reelle;
        !          1001:            (*s_etat_processus).y2_max = (*((complex16 *) (*s_objet).objet))
        !          1002:                    .partie_imaginaire;
        !          1003:        }
        !          1004:    }
        !          1005:    else
        !          1006:    {
        !          1007:        liberation(s_etat_processus, s_objet);
        !          1008: 
        !          1009:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1010:        return;
        !          1011:    }
        !          1012: 
        !          1013:    liberation(s_etat_processus, s_objet);
        !          1014: 
        !          1015:    if (test_cfsf(s_etat_processus, 52) == d_faux)
        !          1016:    {
        !          1017:        if ((*s_etat_processus).fichiers_graphiques != NULL)
        !          1018:        {
        !          1019:            appel_gnuplot(s_etat_processus, 'N');
        !          1020:        }
        !          1021:    }
        !          1022: 
        !          1023:    return;
        !          1024: }
        !          1025: 
        !          1026: 
        !          1027: /*
        !          1028: ================================================================================
        !          1029:   Fonction 'persist'
        !          1030: ================================================================================
        !          1031:   Entrées :
        !          1032: --------------------------------------------------------------------------------
        !          1033:   Sorties :
        !          1034: --------------------------------------------------------------------------------
        !          1035:   Effets de bord : néant
        !          1036: ================================================================================
        !          1037: */
        !          1038: 
        !          1039: void
        !          1040: instruction_persist(struct_processus *s_etat_processus)
        !          1041: {
        !          1042:    (*s_etat_processus).erreur_execution = d_ex;
        !          1043: 
        !          1044:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1045:    {
        !          1046:        printf("\n  PERSIST ");
        !          1047: 
        !          1048:        if ((*s_etat_processus).langue == 'F')
        !          1049:        {
        !          1050:            printf("(détachement d'un graphique)\n\n");
        !          1051:            printf("  Aucun argument\n");
        !          1052:        }
        !          1053:        else
        !          1054:        {
        !          1055:            printf("(spawn a graphic output)\n\n");
        !          1056:            printf("  No argument\n");
        !          1057:        }
        !          1058: 
        !          1059:        return;
        !          1060:    }
        !          1061:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1062:    {
        !          1063:        (*s_etat_processus).nombre_arguments = -1;
        !          1064:        return;
        !          1065:    }
        !          1066: 
        !          1067:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1068:    {
        !          1069:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          1070:        {
        !          1071:            return;
        !          1072:        }
        !          1073:    }
        !          1074: 
        !          1075:    appel_gnuplot(s_etat_processus, 'E');
        !          1076: 
        !          1077:    return;
        !          1078: }
        !          1079: 
        !          1080: 
        !          1081: /*
        !          1082: ================================================================================
        !          1083:   Fonction 'polar' (passe en mode d'affichage r=f(t))
        !          1084: ================================================================================
        !          1085:   Entrées : structure processus
        !          1086: --------------------------------------------------------------------------------
        !          1087:   Sorties :
        !          1088: --------------------------------------------------------------------------------
        !          1089:   Effets de bord : néant
        !          1090: ================================================================================
        !          1091: */
        !          1092: 
        !          1093: void
        !          1094: instruction_polar(struct_processus *s_etat_processus)
        !          1095: {
        !          1096:    (*s_etat_processus).erreur_execution = d_ex;
        !          1097: 
        !          1098:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1099:    {
        !          1100:        printf("\n  POLAR ");
        !          1101: 
        !          1102:        if ((*s_etat_processus).langue == 'F')
        !          1103:        {
        !          1104:            printf("(tracé théta=f(r))\n\n");
        !          1105:            printf("  Aucun argument\n");
        !          1106:        }
        !          1107:        else
        !          1108:        {
        !          1109:            printf("(plot theta=f(r))\n\n");
        !          1110:            printf("  No argument\n");
        !          1111:        }
        !          1112: 
        !          1113:        return;
        !          1114:    }
        !          1115:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1116:    {
        !          1117:        (*s_etat_processus).nombre_arguments = -1;
        !          1118:        return;
        !          1119:    }
        !          1120:    
        !          1121:    strcpy((*s_etat_processus).type_trace_eq, "POLAIRE");
        !          1122: 
        !          1123:    return;
        !          1124: }
        !          1125: 
        !          1126: 
        !          1127: /*
        !          1128: ================================================================================
        !          1129:   Fonction 'parametric' (passe en mode d'affichage r=f(t))
        !          1130: ================================================================================
        !          1131:   Entrées : structure processus
        !          1132: --------------------------------------------------------------------------------
        !          1133:   Sorties :
        !          1134: --------------------------------------------------------------------------------
        !          1135:   Effets de bord : néant
        !          1136: ================================================================================
        !          1137: */
        !          1138: 
        !          1139: void
        !          1140: instruction_parametric(struct_processus *s_etat_processus)
        !          1141: {
        !          1142:    (*s_etat_processus).erreur_execution = d_ex;
        !          1143: 
        !          1144:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1145:    {
        !          1146:        printf("\n  PARAMETRIC ");
        !          1147: 
        !          1148:        if ((*s_etat_processus).langue == 'F')
        !          1149:        {
        !          1150:            printf("(tracé (x,y)=f(t)+i*g(t))\n\n");
        !          1151:            printf("  Aucun argument\n");
        !          1152:        }
        !          1153:        else
        !          1154:        {
        !          1155:            printf("(plot (x,y)=f(t)+i*g(t))\n\n");
        !          1156:            printf("  No argument\n");
        !          1157:        }
        !          1158: 
        !          1159:        return;
        !          1160:    }
        !          1161:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1162:    {
        !          1163:        (*s_etat_processus).nombre_arguments = -1;
        !          1164:        return;
        !          1165:    }
        !          1166:    
        !          1167:    strcpy((*s_etat_processus).type_trace_eq, "PARAMETRIQUE");
        !          1168: 
        !          1169:    return;
        !          1170: }
        !          1171: 
        !          1172: 
        !          1173: /*
        !          1174: ================================================================================
        !          1175:   Fonction 'perm'
        !          1176: ================================================================================
        !          1177:   Entrées :
        !          1178: --------------------------------------------------------------------------------
        !          1179:   Sorties :
        !          1180: --------------------------------------------------------------------------------
        !          1181:   Effets de bord : néant
        !          1182: ================================================================================
        !          1183: */
        !          1184: 
        !          1185: void
        !          1186: instruction_perm(struct_processus *s_etat_processus)
        !          1187: {
        !          1188:    integer8                        k;
        !          1189:    integer8                        n;
        !          1190:    integer8                        cint_max;
        !          1191: 
        !          1192:    real8                           c;
        !          1193: 
        !          1194:    struct_objet                    *s_objet_argument_1;
        !          1195:    struct_objet                    *s_objet_argument_2;
        !          1196:    struct_objet                    *s_objet_resultat;
        !          1197: 
        !          1198:    unsigned long                   i;
        !          1199: 
        !          1200:    (*s_etat_processus).erreur_execution = d_ex;
        !          1201: 
        !          1202:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1203:    {
        !          1204:        printf("\n  PERM ");
        !          1205: 
        !          1206:        if ((*s_etat_processus).langue == 'F')
        !          1207:        {
        !          1208:            printf("(permutation)\n\n");
        !          1209:        }
        !          1210:        else
        !          1211:        {
        !          1212:            printf("(permutation)\n\n");
        !          1213:        }
        !          1214: 
        !          1215:        printf("    2: %s\n", d_INT);
        !          1216:        printf("    1: %s\n", d_INT);
        !          1217:        printf("->  1: %s, %s\n", d_INT, d_REL);
        !          1218: 
        !          1219:        return;
        !          1220:    }
        !          1221:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1222:    {
        !          1223:        (*s_etat_processus).nombre_arguments = 2;
        !          1224:        return;
        !          1225:    }
        !          1226:    
        !          1227:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1228:    {
        !          1229:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !          1230:        {
        !          1231:            return;
        !          1232:        }
        !          1233:    }
        !          1234: 
        !          1235:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1236:            &s_objet_argument_1) == d_erreur)
        !          1237:    {
        !          1238:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1239:        return;
        !          1240:    }
        !          1241: 
        !          1242:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1243:            &s_objet_argument_2) == d_erreur)
        !          1244:    {
        !          1245:        liberation(s_etat_processus, s_objet_argument_1);
        !          1246: 
        !          1247:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1248:        return;
        !          1249:    }
        !          1250: 
        !          1251:    if (((*s_objet_argument_1).type == INT) &&
        !          1252:            ((*s_objet_argument_2).type == INT))
        !          1253:    {
        !          1254:        n = (*((integer8 *) (*s_objet_argument_2).objet));
        !          1255:        k = (*((integer8 *) (*s_objet_argument_1).objet));
        !          1256: 
        !          1257:        if ((n < 0) || (k < 0) || (k > n))
        !          1258:        {
        !          1259:            liberation(s_etat_processus, s_objet_argument_1);
        !          1260:            liberation(s_etat_processus, s_objet_argument_2);
        !          1261: 
        !          1262:            (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
        !          1263:            return;
        !          1264:        }
        !          1265: 
        !          1266:        f90arrangement(&n, &k, &c);
        !          1267: 
        !          1268:        for(i = 1, cint_max = 1; i < (8 * sizeof(integer8)) - 1; cint_max =
        !          1269:                (cint_max << 1) + 1, i++);
        !          1270: 
        !          1271:        if (c > cint_max)
        !          1272:        {
        !          1273:            if ((s_objet_resultat = allocation(s_etat_processus, REL))
        !          1274:                    == NULL)
        !          1275:            {
        !          1276:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1277:                return;
        !          1278:            }
        !          1279: 
        !          1280:            (*((real8 *) (*s_objet_resultat).objet)) = c;
        !          1281:        }
        !          1282:        else
        !          1283:        {
        !          1284:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !          1285:                    == NULL)
        !          1286:            {
        !          1287:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1288:                return;
        !          1289:            }
        !          1290: 
        !          1291:            if (fabs(c - floor(c)) < fabs(ceil(c) - c))
        !          1292:            {
        !          1293:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !          1294:                        (integer8) floor(c);
        !          1295:            } 
        !          1296:            else
        !          1297:            {
        !          1298:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !          1299:                        1 + (integer8) floor(c);
        !          1300:            } 
        !          1301:        }
        !          1302:    }
        !          1303:    else
        !          1304:    {
        !          1305:        liberation(s_etat_processus, s_objet_argument_1);
        !          1306:        liberation(s_etat_processus, s_objet_argument_2);
        !          1307: 
        !          1308:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1309:        return;
        !          1310:    }
        !          1311: 
        !          1312:    liberation(s_etat_processus, s_objet_argument_1);
        !          1313:    liberation(s_etat_processus, s_objet_argument_2);
        !          1314: 
        !          1315:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1316:            s_objet_resultat) == d_erreur)
        !          1317:    {
        !          1318:        return;
        !          1319:    }
        !          1320: 
        !          1321:    return;
        !          1322: }
        !          1323: 
        !          1324: 
        !          1325: /*
        !          1326: ================================================================================
        !          1327:   Fonction 'psdev'
        !          1328: ================================================================================
        !          1329:   Entrées :
        !          1330: --------------------------------------------------------------------------------
        !          1331:   Sorties :
        !          1332: --------------------------------------------------------------------------------
        !          1333:   Effets de bord : néant
        !          1334: ================================================================================
        !          1335: */
        !          1336: 
        !          1337: void
        !          1338: instruction_psdev(struct_processus *s_etat_processus)
        !          1339: {
        !          1340:    logical1                            presence_variable;
        !          1341: 
        !          1342:    long                                i;
        !          1343: 
        !          1344:    struct_objet                        *s_objet_statistique;
        !          1345:    struct_objet                        *s_objet_resultat;
        !          1346:    struct_objet                        *s_objet_temporaire;
        !          1347: 
        !          1348:    unsigned long                       nombre_colonnes;
        !          1349: 
        !          1350:    (*s_etat_processus).erreur_execution = d_ex;
        !          1351: 
        !          1352:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1353:    {
        !          1354:        printf("\n  PSDEV ");
        !          1355: 
        !          1356:        if ((*s_etat_processus).langue == 'F')
        !          1357:        {
        !          1358:            printf("(écart-type d'une population)\n\n");
        !          1359:        }
        !          1360:        else
        !          1361:        {
        !          1362:            printf("(population standard deviation)\n\n");
        !          1363:        }
        !          1364: 
        !          1365:        printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
        !          1366: 
        !          1367:        return;
        !          1368:    }
        !          1369:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1370:    {
        !          1371:        (*s_etat_processus).nombre_arguments = -1;
        !          1372:        return;
        !          1373:    }
        !          1374: 
        !          1375:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1376:    {
        !          1377:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          1378:        {
        !          1379:            return;
        !          1380:        }
        !          1381:    }
        !          1382: 
        !          1383:    /*
        !          1384:     * Recherche d'une variable globale référencée par SIGMA
        !          1385:     */
        !          1386: 
        !          1387:    if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
        !          1388:    {
        !          1389:        /*
        !          1390:         * Aucune variable SIGMA
        !          1391:         */
        !          1392: 
        !          1393:        (*s_etat_processus).erreur_systeme = d_es;
        !          1394:        (*s_etat_processus).erreur_execution = d_ex_absence_observations;
        !          1395:        return;
        !          1396:    }
        !          1397:    else
        !          1398:    {
        !          1399:        /*
        !          1400:         * Il existe une variable locale SIGMA. Reste à vérifier l'existence
        !          1401:         * d'une variable SIGMA globale...
        !          1402:         */
        !          1403: 
        !          1404:        i = (*s_etat_processus).position_variable_courante;
        !          1405:        presence_variable = d_faux;
        !          1406: 
        !          1407:        while(i >= 0)
        !          1408:        {
        !          1409:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          1410:                    ds_sdat) == 0) && ((*s_etat_processus)
        !          1411:                    .s_liste_variables[i].niveau == 1))
        !          1412:            {
        !          1413:                presence_variable = d_vrai;
        !          1414:                break;
        !          1415:            }
        !          1416: 
        !          1417:            i--;
        !          1418:        }
        !          1419: 
        !          1420:        if (presence_variable == d_faux)
        !          1421:        {
        !          1422:            (*s_etat_processus).erreur_execution = d_ex_absence_observations;
        !          1423:            return;
        !          1424:        }
        !          1425:        else
        !          1426:        {
        !          1427:            (*s_etat_processus).position_variable_courante = i;
        !          1428: 
        !          1429:            if (((*s_etat_processus).s_liste_variables[i]).objet == NULL)
        !          1430:            {
        !          1431:                (*s_etat_processus).erreur_execution =
        !          1432:                        d_ex_variable_partagee;
        !          1433:                return;
        !          1434:            }
        !          1435: 
        !          1436:            if (((*((*s_etat_processus).s_liste_variables
        !          1437:                    [(*s_etat_processus).position_variable_courante].objet))
        !          1438:                    .type != MIN) && ((*((*s_etat_processus)
        !          1439:                    .s_liste_variables[(*s_etat_processus)
        !          1440:                    .position_variable_courante].objet)).type != MRL))
        !          1441:            {
        !          1442:                (*s_etat_processus).erreur_execution =
        !          1443:                        d_ex_matrice_statistique_invalide;
        !          1444:                return;
        !          1445:            }
        !          1446: 
        !          1447:            nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
        !          1448:                    .s_liste_variables[(*s_etat_processus)
        !          1449:                    .position_variable_courante].objet)).objet))
        !          1450:                    .nombre_colonnes;
        !          1451:        }
        !          1452:    }
        !          1453: 
        !          1454:    s_objet_statistique = ((*s_etat_processus).s_liste_variables
        !          1455:            [(*s_etat_processus).position_variable_courante]).objet;
        !          1456: 
        !          1457:    if (((*s_objet_statistique).type == MIN) ||
        !          1458:            ((*s_objet_statistique).type == MRL))
        !          1459:    {
        !          1460:        if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
        !          1461:        {
        !          1462:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1463:            return;
        !          1464:        }
        !          1465: 
        !          1466:        if (((*s_objet_resultat).objet = ecart_type_statistique(
        !          1467:                (struct_matrice *) (*s_objet_statistique).objet, 'P')) == NULL)
        !          1468:        {
        !          1469:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1470:            return;
        !          1471:        }
        !          1472: 
        !          1473:        if (nombre_colonnes == 1)
        !          1474:        {
        !          1475:            if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
        !          1476:            {
        !          1477:                (*s_objet_resultat).type = VIN;
        !          1478:                s_objet_temporaire = s_objet_resultat;
        !          1479: 
        !          1480:                if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !          1481:                        == NULL)
        !          1482:                {
        !          1483:                    (*s_etat_processus).erreur_systeme =
        !          1484:                            d_es_allocation_memoire;
        !          1485:                    return;
        !          1486:                }
        !          1487: 
        !          1488:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !          1489:                        ((integer8 *) (*((struct_vecteur *)
        !          1490:                        (*s_objet_temporaire).objet)).tableau)[0];
        !          1491: 
        !          1492:                liberation(s_etat_processus, s_objet_temporaire);
        !          1493:            }
        !          1494:            else
        !          1495:            {
        !          1496:                (*s_objet_resultat).type = VRL;
        !          1497:                s_objet_temporaire = s_objet_resultat;
        !          1498: 
        !          1499:                if ((s_objet_resultat = allocation(s_etat_processus, REL))
        !          1500:                        == NULL)
        !          1501:                {
        !          1502:                    (*s_etat_processus).erreur_systeme =
        !          1503:                            d_es_allocation_memoire;
        !          1504:                    return;
        !          1505:                }
        !          1506: 
        !          1507:                (*((real8 *) (*s_objet_resultat).objet)) =
        !          1508:                        ((real8 *) (*((struct_vecteur *)
        !          1509:                        (*s_objet_temporaire).objet)).tableau)[0];
        !          1510: 
        !          1511:                liberation(s_etat_processus, s_objet_temporaire);
        !          1512:            }
        !          1513:        }
        !          1514:        else
        !          1515:        {
        !          1516:            if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
        !          1517:            {
        !          1518:                (*s_objet_resultat).type = VIN;
        !          1519:            }
        !          1520:            else
        !          1521:            {
        !          1522:                (*s_objet_resultat).type = VRL;
        !          1523:            }
        !          1524:        }
        !          1525: 
        !          1526:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1527:                s_objet_resultat) == d_erreur)
        !          1528:        {
        !          1529:            return;
        !          1530:        }
        !          1531:    }
        !          1532:    else
        !          1533:    {
        !          1534:        (*s_etat_processus).erreur_execution =
        !          1535:                d_ex_matrice_statistique_invalide;
        !          1536:        return;
        !          1537:    }
        !          1538: 
        !          1539:    return;
        !          1540: }
        !          1541: 
        !          1542: 
        !          1543: /*
        !          1544: ================================================================================
        !          1545:   Fonction 'pvar'
        !          1546: ================================================================================
        !          1547:   Entrées :
        !          1548: --------------------------------------------------------------------------------
        !          1549:   Sorties :
        !          1550: --------------------------------------------------------------------------------
        !          1551:   Effets de bord : néant
        !          1552: ================================================================================
        !          1553: */
        !          1554: 
        !          1555: void
        !          1556: instruction_pvar(struct_processus *s_etat_processus)
        !          1557: {
        !          1558:    logical1                            presence_variable;
        !          1559: 
        !          1560:    long                                i;
        !          1561: 
        !          1562:    struct_objet                        *s_objet_statistique;
        !          1563:    struct_objet                        *s_objet_resultat;
        !          1564:    struct_objet                        *s_objet_temporaire;
        !          1565: 
        !          1566:    unsigned long                       nombre_colonnes;
        !          1567: 
        !          1568:    (*s_etat_processus).erreur_execution = d_ex;
        !          1569: 
        !          1570:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1571:    {
        !          1572:        printf("\n  PVAR ");
        !          1573: 
        !          1574:        if ((*s_etat_processus).langue == 'F')
        !          1575:        {
        !          1576:            printf("(variance d'une population)\n\n");
        !          1577:        }
        !          1578:        else
        !          1579:        {
        !          1580:            printf("(population variance)\n\n");
        !          1581:        }
        !          1582: 
        !          1583:        printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
        !          1584: 
        !          1585:        return;
        !          1586:    }
        !          1587:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1588:    {
        !          1589:        (*s_etat_processus).nombre_arguments = -1;
        !          1590:        return;
        !          1591:    }
        !          1592: 
        !          1593:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1594:    {
        !          1595:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          1596:        {
        !          1597:            return;
        !          1598:        }
        !          1599:    }
        !          1600: 
        !          1601:    /*
        !          1602:     * Recherche d'une variable globale référencée par SIGMA
        !          1603:     */
        !          1604: 
        !          1605:    if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
        !          1606:    {
        !          1607:        /*
        !          1608:         * Aucune variable SIGMA
        !          1609:         */
        !          1610: 
        !          1611:        (*s_etat_processus).erreur_systeme = d_es;
        !          1612:        (*s_etat_processus).erreur_execution = d_ex_absence_observations;
        !          1613:        return;
        !          1614:    }
        !          1615:    else
        !          1616:    {
        !          1617:        /*
        !          1618:         * Il existe une variable locale SIGMA. Reste à vérifier l'existence
        !          1619:         * d'une variable SIGMA globale...
        !          1620:         */
        !          1621: 
        !          1622:        i = (*s_etat_processus).position_variable_courante;
        !          1623:        presence_variable = d_faux;
        !          1624: 
        !          1625:        while(i >= 0)
        !          1626:        {
        !          1627:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
        !          1628:                    ds_sdat) == 0) && ((*s_etat_processus)
        !          1629:                    .s_liste_variables[i].niveau == 1))
        !          1630:            {
        !          1631:                presence_variable = d_vrai;
        !          1632:                break;
        !          1633:            }
        !          1634: 
        !          1635:            i--;
        !          1636:        }
        !          1637: 
        !          1638:        if (presence_variable == d_faux)
        !          1639:        {
        !          1640:            (*s_etat_processus).erreur_execution = d_ex_absence_observations;
        !          1641:            return;
        !          1642:        }
        !          1643:        else
        !          1644:        {
        !          1645:            (*s_etat_processus).position_variable_courante = i;
        !          1646: 
        !          1647:            if (((*s_etat_processus).s_liste_variables[i]).objet == NULL)
        !          1648:            {
        !          1649:                (*s_etat_processus).erreur_execution =
        !          1650:                        d_ex_variable_partagee;
        !          1651:                return;
        !          1652:            }
        !          1653: 
        !          1654:            if (((*((*s_etat_processus).s_liste_variables
        !          1655:                    [(*s_etat_processus).position_variable_courante].objet))
        !          1656:                    .type != MIN) && ((*((*s_etat_processus)
        !          1657:                    .s_liste_variables[(*s_etat_processus)
        !          1658:                    .position_variable_courante].objet)).type != MRL))
        !          1659:            {
        !          1660:                (*s_etat_processus).erreur_execution =
        !          1661:                        d_ex_matrice_statistique_invalide;
        !          1662:                return;
        !          1663:            }
        !          1664: 
        !          1665:            nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
        !          1666:                    .s_liste_variables[(*s_etat_processus)
        !          1667:                    .position_variable_courante].objet)).objet))
        !          1668:                    .nombre_colonnes;
        !          1669:        }
        !          1670:    }
        !          1671: 
        !          1672:    s_objet_statistique = ((*s_etat_processus).s_liste_variables
        !          1673:            [(*s_etat_processus).position_variable_courante]).objet;
        !          1674: 
        !          1675:    if (((*s_objet_statistique).type == MIN) ||
        !          1676:            ((*s_objet_statistique).type == MRL))
        !          1677:    {
        !          1678:        if ((s_objet_resultat = allocation(s_etat_processus, NON))
        !          1679:                == NULL)
        !          1680:        {
        !          1681:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1682:            return;
        !          1683:        }
        !          1684: 
        !          1685:        if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *)
        !          1686:                (*s_objet_statistique).objet, 'P')) == NULL)
        !          1687:        {
        !          1688:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1689:            return;
        !          1690:        }
        !          1691: 
        !          1692:        if (nombre_colonnes == 1)
        !          1693:        {
        !          1694:            if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
        !          1695:            {
        !          1696:                (*s_objet_resultat).type = VIN;
        !          1697:                s_objet_temporaire = s_objet_resultat;
        !          1698: 
        !          1699:                if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !          1700:                        == NULL)
        !          1701:                {
        !          1702:                    (*s_etat_processus).erreur_systeme =
        !          1703:                            d_es_allocation_memoire;
        !          1704:                    return;
        !          1705:                }
        !          1706: 
        !          1707:                (*((integer8 *) (*s_objet_resultat).objet)) =
        !          1708:                        ((integer8 *) (*((struct_vecteur *)
        !          1709:                        (*s_objet_temporaire).objet)).tableau)[0];
        !          1710: 
        !          1711:                liberation(s_etat_processus, s_objet_temporaire);
        !          1712:            }
        !          1713:            else
        !          1714:            {
        !          1715:                (*s_objet_resultat).type = VRL;
        !          1716:                s_objet_temporaire = s_objet_resultat;
        !          1717: 
        !          1718:                if ((s_objet_resultat = allocation(s_etat_processus, REL))
        !          1719:                        == NULL)
        !          1720:                {
        !          1721:                    (*s_etat_processus).erreur_systeme =
        !          1722:                            d_es_allocation_memoire;
        !          1723:                    return;
        !          1724:                }
        !          1725: 
        !          1726:                (*((real8 *) (*s_objet_resultat).objet)) =
        !          1727:                        ((real8 *) (*((struct_vecteur *)
        !          1728:                        (*s_objet_temporaire).objet)).tableau)[0];
        !          1729: 
        !          1730:                liberation(s_etat_processus, s_objet_temporaire);
        !          1731:            }
        !          1732:        }
        !          1733:        else
        !          1734:        {
        !          1735:            if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
        !          1736:            {
        !          1737:                (*s_objet_resultat).type = VIN;
        !          1738:            }
        !          1739:            else
        !          1740:            {
        !          1741:                (*s_objet_resultat).type = VRL;
        !          1742:            }
        !          1743:        }
        !          1744: 
        !          1745:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1746:                s_objet_resultat) == d_erreur)
        !          1747:        {
        !          1748:            return;
        !          1749:        }
        !          1750:    }
        !          1751:    else
        !          1752:    {
        !          1753:        (*s_etat_processus).erreur_execution =
        !          1754:                d_ex_matrice_statistique_invalide;
        !          1755:        return;
        !          1756:    }
        !          1757: 
        !          1758:    return;
        !          1759: }
        !          1760: 
        !          1761: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>