Annotation of rpl/src/instructions_i3.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 'inquire'
        !            29: ================================================================================
        !            30:   Entrées :
        !            31: --------------------------------------------------------------------------------
        !            32:   Sorties :
        !            33: --------------------------------------------------------------------------------
        !            34:   Effets de bord : néant
        !            35: ================================================================================
        !            36: */
        !            37: 
        !            38: void
        !            39: instruction_inquire(struct_processus *s_etat_processus)
        !            40: {
        !            41:    file                        *fichier;
        !            42: 
        !            43:    logical1                    erreur;
        !            44:    logical1                    existence;
        !            45:    logical1                    ouverture;
        !            46: 
        !            47:    logical1                    fin_fichier;
        !            48: 
        !            49:    long                        position_courante;
        !            50: 
        !            51:    struct flock                lock;
        !            52: 
        !            53:    struct_objet                *s_objet_argument_1;
        !            54:    struct_objet                *s_objet_argument_2;
        !            55:    struct_objet                *s_objet_resultat;
        !            56: 
        !            57:    unsigned char               caractere;
        !            58:    unsigned char               *requete;
        !            59:    unsigned char               verrou;
        !            60: 
        !            61:    unsigned long               unite;
        !            62: 
        !            63:    (*s_etat_processus).erreur_execution = d_ex;
        !            64: 
        !            65:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !            66:    {
        !            67:        printf("\n  INQUIRE ");
        !            68: 
        !            69:        if ((*s_etat_processus).langue == 'F')
        !            70:        {
        !            71:            printf("(caractéristiques d'un fichier)\n\n");
        !            72:        }
        !            73:        else
        !            74:        {
        !            75:            printf("(file properties)\n\n");
        !            76:        }
        !            77: 
        !            78:        printf("    2: %s, %s\n", d_FCH, d_CHN);
        !            79:        printf("    1: %s\n", d_CHN);
        !            80:        printf("->  1: %s, %s, %s\n\n", d_INT, d_CHN, d_LST);
        !            81: 
        !            82:        if ((*s_etat_processus).langue == 'F')
        !            83:        {
        !            84:            printf("  Requêtes par descripteur :\n\n");
        !            85:        }
        !            86:        else
        !            87:        {
        !            88:            printf("  Queries by descriptor:\n\n");
        !            89:        }
        !            90: 
        !            91:        printf("    END OF FILE    : %s (true/false)\n", d_INT);
        !            92:        printf("    ACCESS         : %s (SEQUENTIAL/DIRECT/KEYED)\n", d_CHN);
        !            93:        printf("    NAME           : %s\n", d_CHN);
        !            94:        printf("    FORMATTED      : %s (true/false)\n", d_INT);
        !            95:        printf("    KEY FIELD      : %s\n", d_INT);
        !            96:        printf("    PROTECTION     : %s (WRITEONLY/READONLY/READWRITE)\n\n",
        !            97:                d_CHN);
        !            98: 
        !            99:        if ((*s_etat_processus).langue == 'F')
        !           100:        {
        !           101:            printf("  Requêtes par nom :\n\n");
        !           102:        }
        !           103:        else
        !           104:        {
        !           105:            printf("  Queries by name:\n\n");
        !           106:        }
        !           107: 
        !           108:        printf("    FORMAT         : %s\n", d_LST);
        !           109:        printf("    EXISTENCE      : %s (true/false)\n", d_INT);
        !           110:        printf("    LOCK           : %s (NONE/READ/WRITE)\n", d_CHN);
        !           111: 
        !           112:        return;
        !           113:    }
        !           114:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           115:    {
        !           116:        (*s_etat_processus).nombre_arguments = -1;
        !           117:        return;
        !           118:    }
        !           119: 
        !           120:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           121:    {
        !           122:        if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           123:        {
        !           124:            return;
        !           125:        }
        !           126:    }
        !           127: 
        !           128:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           129:            &s_objet_argument_1) == d_erreur)
        !           130:    {
        !           131:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           132:        return;
        !           133:    }
        !           134: 
        !           135:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           136:            &s_objet_argument_2) == d_erreur)
        !           137:    {
        !           138:        liberation(s_etat_processus, s_objet_argument_1);
        !           139: 
        !           140:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           141:        return;
        !           142:    }
        !           143: 
        !           144:    if ((*s_objet_argument_1).type != CHN)
        !           145:    {
        !           146:        liberation(s_etat_processus, s_objet_argument_1);
        !           147:        liberation(s_etat_processus, s_objet_argument_2);
        !           148: 
        !           149:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           150:        return;
        !           151:    }
        !           152: 
        !           153:    if ((requete = conversion_majuscule((unsigned char *)
        !           154:            (*s_objet_argument_1).objet)) == NULL)
        !           155:    {
        !           156:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           157:        return;
        !           158:    }
        !           159: 
        !           160:    if ((*s_objet_argument_2).type == FCH)
        !           161:    {
        !           162:        /*
        !           163:         * La question porte sur un fichier ouvert.
        !           164:         */
        !           165: 
        !           166:        if (strcmp(requete, "END OF FILE") == 0)
        !           167:        {
        !           168:            if ((*((struct_fichier *) (*s_objet_argument_2).objet)).acces
        !           169:                    != 'S')
        !           170:            {
        !           171:                liberation(s_etat_processus, s_objet_argument_1);
        !           172:                liberation(s_etat_processus, s_objet_argument_2);
        !           173: 
        !           174:                free(requete);
        !           175: 
        !           176:                (*s_etat_processus).erreur_execution =
        !           177:                        d_ex_erreur_requete_fichier;
        !           178:                return;
        !           179:            }
        !           180: 
        !           181:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !           182:                    == NULL)
        !           183:            {
        !           184:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           185:                return;
        !           186:            }
        !           187: 
        !           188:            /*
        !           189:             * La fin du fichier renvoyée ne correspond pas à la fin physique
        !           190:             * du fichier mais à un défaut d'enregistrement.
        !           191:             */
        !           192: 
        !           193:            if ((fichier = descripteur_fichier(s_etat_processus,
        !           194:                    (struct_fichier *) (*s_objet_argument_2).objet)) == NULL)
        !           195:            {
        !           196:                return;
        !           197:            }
        !           198: 
        !           199:            if ((position_courante = ftell(fichier)) == -1)
        !           200:            {
        !           201:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           202:                return;
        !           203:            }
        !           204: 
        !           205:            fin_fichier = d_vrai;
        !           206: 
        !           207:            while(feof(fichier) == 0)
        !           208:            {
        !           209:                if (fread(&caractere, sizeof(unsigned char), (size_t) 1,
        !           210:                        fichier) > 0)
        !           211:                {
        !           212:                    if (caractere == '{')
        !           213:                    {
        !           214:                        fin_fichier = d_faux;
        !           215:                        break;
        !           216:                    }
        !           217:                }
        !           218:            }
        !           219: 
        !           220:            if (fseek(fichier, position_courante, SEEK_SET) != 0)
        !           221:            {
        !           222:                (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           223:                return;
        !           224:            }
        !           225: 
        !           226:            if (fin_fichier == d_faux)
        !           227:            {
        !           228:                /*
        !           229:                 * Fichier à suivre
        !           230:                 */
        !           231: 
        !           232:                (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           233:            }
        !           234:            else
        !           235:            {
        !           236:                /*
        !           237:                 * Fin de fichier
        !           238:                 */
        !           239: 
        !           240:                (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           241:            }
        !           242:        }
        !           243:        else if (strcmp(requete, "ACCESS") == 0)
        !           244:        {
        !           245:            if ((s_objet_resultat = allocation(s_etat_processus, CHN))
        !           246:                    == NULL)
        !           247:            {
        !           248:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           249:                return;
        !           250:            }
        !           251: 
        !           252:            if ((*((struct_fichier *) (*s_objet_argument_2).objet)).acces
        !           253:                    == 'S')
        !           254:            {
        !           255:                if (((*s_objet_resultat).objet = malloc(11 *
        !           256:                        sizeof(unsigned char))) == NULL)
        !           257:                {
        !           258:                    (*s_etat_processus).erreur_systeme =
        !           259:                            d_es_allocation_memoire;
        !           260:                    return;
        !           261:                }
        !           262: 
        !           263:                strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           264:                        "SEQUENTIAL");
        !           265:            }
        !           266:            else if ((*((struct_fichier *) (*s_objet_argument_2).objet)).acces
        !           267:                    == 'D')
        !           268:            {
        !           269:                if (((*s_objet_resultat).objet = malloc(7 *
        !           270:                        sizeof(unsigned char))) == NULL)
        !           271:                {
        !           272:                    (*s_etat_processus).erreur_systeme =
        !           273:                            d_es_allocation_memoire;
        !           274:                    return;
        !           275:                }
        !           276: 
        !           277:                strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           278:                        "DIRECT");
        !           279:            }
        !           280:            else
        !           281:            {
        !           282:                if (((*s_objet_resultat).objet = malloc(6 *
        !           283:                        sizeof(unsigned char))) == NULL)
        !           284:                {
        !           285:                    (*s_etat_processus).erreur_systeme =
        !           286:                            d_es_allocation_memoire;
        !           287:                    return;
        !           288:                }
        !           289: 
        !           290:                strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           291:                        "KEYED");
        !           292:            }
        !           293:        }
        !           294:        else if (strcmp(requete, "NAME") == 0)
        !           295:        {
        !           296:            if ((s_objet_resultat = allocation(s_etat_processus, CHN))
        !           297:                    == NULL)
        !           298:            {
        !           299:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           300:                return;
        !           301:            }
        !           302: 
        !           303:            if (((*s_objet_resultat).objet = malloc(
        !           304:                    (strlen((*((struct_fichier *) (*s_objet_argument_2).objet))
        !           305:                    .nom) + 1) *
        !           306:                    sizeof(unsigned char))) == NULL)
        !           307:            {
        !           308:                (*s_etat_processus).erreur_systeme =
        !           309:                        d_es_allocation_memoire;
        !           310:                return;
        !           311:            }
        !           312: 
        !           313:            strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           314:                    (*((struct_fichier *) (*s_objet_argument_2).objet)).nom);
        !           315:        }
        !           316:        else if (strcmp(requete, "FORMATTED") == 0)
        !           317:        {
        !           318:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !           319:                    == NULL)
        !           320:            {
        !           321:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           322:                return;
        !           323:            }
        !           324: 
        !           325:            (*((integer8 *) (*s_objet_resultat).objet)) =
        !           326:                    ((*((struct_fichier *) (*s_objet_argument_2).objet)).binaire
        !           327:                    == 'N') ? -1 : 0;
        !           328:        }
        !           329:        else if (strcmp(requete, "KEY FIELD") == 0)
        !           330:        {
        !           331:            if ((*((struct_fichier *) (*s_objet_argument_2).objet))
        !           332:                    .acces == 'S')
        !           333:            {
        !           334:                free(requete);
        !           335: 
        !           336:                liberation(s_etat_processus, s_objet_argument_1);
        !           337:                liberation(s_etat_processus, s_objet_argument_2);
        !           338: 
        !           339:                (*s_etat_processus).erreur_execution =
        !           340:                        d_ex_erreur_requete_fichier;
        !           341:                return;
        !           342:            }
        !           343: 
        !           344:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !           345:                    == NULL)
        !           346:            {
        !           347:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           348:                return;
        !           349:            }
        !           350: 
        !           351:            (*((integer8 *) (*s_objet_resultat).objet)) =
        !           352:                    (*((struct_fichier *) (*s_objet_argument_2).objet))
        !           353:                    .position_clef;
        !           354:        }
        !           355:        else if (strcmp(requete, "PROTECTION") == 0)
        !           356:        {
        !           357:            if ((s_objet_resultat = allocation(s_etat_processus, CHN))
        !           358:                    == NULL)
        !           359:            {
        !           360:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           361:                return;
        !           362:            }
        !           363: 
        !           364:            if ((*((struct_fichier *) (*s_objet_argument_2).objet)).protection
        !           365:                    == 'W')
        !           366:            {
        !           367:                if (((*s_objet_resultat).objet = malloc(10 *
        !           368:                        sizeof(unsigned char))) == NULL)
        !           369:                {
        !           370:                    (*s_etat_processus).erreur_systeme =
        !           371:                            d_es_allocation_memoire;
        !           372:                    return;
        !           373:                }
        !           374: 
        !           375:                strcpy((unsigned char *) (*s_objet_argument_2).objet,
        !           376:                        "WRITEONLY");
        !           377:            }
        !           378:            else if ((*((struct_fichier *) (*s_objet_argument_2).objet)).acces
        !           379:                    == 'R')
        !           380:            {
        !           381:                if (((*s_objet_resultat).objet = malloc(9 *
        !           382:                        sizeof(unsigned char))) == NULL)
        !           383:                {
        !           384:                    (*s_etat_processus).erreur_systeme =
        !           385:                            d_es_allocation_memoire;
        !           386:                    return;
        !           387:                }
        !           388: 
        !           389:                strcpy((unsigned char *) (*s_objet_argument_2).objet,
        !           390:                        "READONLY");
        !           391:            }
        !           392:            else
        !           393:            {
        !           394:                if (((*s_objet_resultat).objet = malloc(10 *
        !           395:                        sizeof(unsigned char))) == NULL)
        !           396:                {
        !           397:                    (*s_etat_processus).erreur_systeme =
        !           398:                            d_es_allocation_memoire;
        !           399:                    return;
        !           400:                }
        !           401: 
        !           402:                strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           403:                        "READWRITE");
        !           404:            }
        !           405:        }
        !           406:        else if (strcmp(requete, "FORMAT") == 0)
        !           407:        {
        !           408:            if ((s_objet_resultat = copie_objet(s_etat_processus,
        !           409:                    (*((struct_fichier *) (*s_objet_argument_2).objet)).format,
        !           410:                    'O')) == NULL)
        !           411:            {
        !           412:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           413:                return;
        !           414:            }
        !           415:        }
        !           416:        else
        !           417:        {
        !           418:            free(requete);
        !           419: 
        !           420:            liberation(s_etat_processus, s_objet_argument_1);
        !           421:            liberation(s_etat_processus, s_objet_argument_2);
        !           422: 
        !           423:            (*s_etat_processus).erreur_execution = d_ex_erreur_requete_fichier;
        !           424:            return;
        !           425:        }
        !           426:    }
        !           427:    else if ((*s_objet_argument_2).type == CHN)
        !           428:    {
        !           429:        /*
        !           430:         * La question porte sur un fichier fermé.
        !           431:         */
        !           432: 
        !           433:        if (strcmp(requete, "EXISTENCE") == 0)
        !           434:        {
        !           435:            erreur = caracteristiques_fichier(s_etat_processus,
        !           436:                    (unsigned char *) (*s_objet_argument_2).objet,
        !           437:                    &existence, &ouverture, &unite);
        !           438: 
        !           439:            if (erreur != d_absence_erreur)
        !           440:            {
        !           441:                free(requete);
        !           442: 
        !           443:                liberation(s_etat_processus, s_objet_argument_1);
        !           444:                liberation(s_etat_processus, s_objet_argument_2);
        !           445: 
        !           446:                (*s_etat_processus).erreur_execution =
        !           447:                        d_ex_erreur_acces_fichier;
        !           448:                return;
        !           449:            }
        !           450: 
        !           451:            if ((s_objet_resultat = allocation(s_etat_processus, INT))
        !           452:                    == NULL)
        !           453:            {
        !           454:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           455:                return;
        !           456:            }
        !           457: 
        !           458:            if (existence == d_faux)
        !           459:            {
        !           460:                /*
        !           461:                 * Fichier inexistant
        !           462:                 */
        !           463: 
        !           464:                (*((integer8 *) (*s_objet_resultat).objet)) = 0;
        !           465:            }
        !           466:            else
        !           467:            {
        !           468:                /*
        !           469:                 * Fichier existant
        !           470:                 */
        !           471: 
        !           472:                (*((integer8 *) (*s_objet_resultat).objet)) = -1;
        !           473:            }
        !           474:        }
        !           475:        else if (strcmp(requete, "LOCK") == 0)
        !           476:        {
        !           477:            erreur = caracteristiques_fichier(s_etat_processus,
        !           478:                    (unsigned char *) (*s_objet_argument_2).objet,
        !           479:                    &existence, &ouverture, &unite);
        !           480: 
        !           481:            if (erreur != d_absence_erreur)
        !           482:            {
        !           483:                free(requete);
        !           484: 
        !           485:                liberation(s_etat_processus, s_objet_argument_1);
        !           486:                liberation(s_etat_processus, s_objet_argument_2);
        !           487: 
        !           488:                (*s_etat_processus).erreur_execution =
        !           489:                        d_ex_erreur_acces_fichier;
        !           490:                return;
        !           491:            }
        !           492: 
        !           493:            if ((s_objet_resultat = allocation(s_etat_processus, CHN))
        !           494:                    == NULL)
        !           495:            {
        !           496:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           497:                return;
        !           498:            }
        !           499: 
        !           500:            if (existence == d_faux)
        !           501:            {
        !           502:                /*
        !           503:                 * Fichier inexistant
        !           504:                 */
        !           505: 
        !           506:                free(requete);
        !           507: 
        !           508:                liberation(s_etat_processus, s_objet_argument_1);
        !           509:                liberation(s_etat_processus, s_objet_argument_2);
        !           510:                liberation(s_etat_processus, s_objet_resultat);
        !           511: 
        !           512:                (*s_etat_processus).erreur_execution =
        !           513:                        d_ex_erreur_acces_fichier;
        !           514:                return;
        !           515:            }
        !           516:            else
        !           517:            {
        !           518:                /*
        !           519:                 * Fichier existant
        !           520:                 */
        !           521: 
        !           522:                if ((fichier = fopen((unsigned char *)
        !           523:                        (*s_objet_argument_2).objet, "r+")) == NULL)
        !           524:                {
        !           525:                    free(requete);
        !           526: 
        !           527:                    liberation(s_etat_processus, s_objet_argument_1);
        !           528:                    liberation(s_etat_processus, s_objet_argument_2);
        !           529:                    liberation(s_etat_processus, s_objet_resultat);
        !           530: 
        !           531:                    (*s_etat_processus).erreur_execution =
        !           532:                            d_ex_erreur_acces_fichier;
        !           533:                    return;
        !           534:                }
        !           535: 
        !           536:                lock.l_whence = SEEK_SET;
        !           537:                lock.l_start = 0;
        !           538:                lock.l_len = 0;
        !           539:                lock.l_pid = getpid();
        !           540:                lock.l_type = F_RDLCK;
        !           541: 
        !           542:                if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)
        !           543:                {
        !           544:                    if (fclose(fichier) != 0)
        !           545:                    {
        !           546:                        free(requete);
        !           547: 
        !           548:                        liberation(s_etat_processus, s_objet_argument_1);
        !           549:                        liberation(s_etat_processus, s_objet_argument_2);
        !           550:                        liberation(s_etat_processus, s_objet_resultat);
        !           551: 
        !           552:                        (*s_etat_processus).erreur_systeme =
        !           553:                                d_es_erreur_fichier;
        !           554:                        return;
        !           555:                    }
        !           556: 
        !           557:                    free(requete);
        !           558: 
        !           559:                    liberation(s_etat_processus, s_objet_argument_1);
        !           560:                    liberation(s_etat_processus, s_objet_argument_2);
        !           561:                    liberation(s_etat_processus, s_objet_resultat);
        !           562: 
        !           563:                    (*s_etat_processus).erreur_systeme =
        !           564:                            d_es_erreur_fichier;
        !           565:                    return;
        !           566:                }
        !           567: 
        !           568:                if (lock.l_type == F_UNLCK)
        !           569:                {
        !           570:                    verrou = 'N';
        !           571:                }
        !           572:                else
        !           573:                {
        !           574:                    verrou = 'R';
        !           575:                }
        !           576: 
        !           577:                if (verrou == 'N')
        !           578:                {
        !           579:                    lock.l_type = F_WRLCK;
        !           580: 
        !           581:                    if (fcntl(fileno(fichier), F_GETLK, &lock) == -1)
        !           582:                    {
        !           583:                        if (fclose(fichier) != 0)
        !           584:                        {
        !           585:                            free(requete);
        !           586: 
        !           587:                            liberation(s_etat_processus, s_objet_argument_1);
        !           588:                            liberation(s_etat_processus, s_objet_argument_2);
        !           589:                            liberation(s_etat_processus, s_objet_resultat);
        !           590: 
        !           591:                            (*s_etat_processus).erreur_systeme =
        !           592:                                    d_es_erreur_fichier;
        !           593:                            return;
        !           594:                        }
        !           595: 
        !           596:                        free(requete);
        !           597: 
        !           598:                        liberation(s_etat_processus, s_objet_argument_1);
        !           599:                        liberation(s_etat_processus, s_objet_argument_2);
        !           600:                        liberation(s_etat_processus, s_objet_resultat);
        !           601: 
        !           602:                        (*s_etat_processus).erreur_systeme =
        !           603:                                d_es_erreur_fichier;
        !           604:                        return;
        !           605:                    }
        !           606: 
        !           607:                    if (lock.l_type == F_UNLCK)
        !           608:                    {
        !           609:                        verrou = 'N';
        !           610:                    }
        !           611:                    else
        !           612:                    {
        !           613:                        verrou = 'W';
        !           614:                    }
        !           615:                }
        !           616: 
        !           617:                switch(verrou)
        !           618:                {
        !           619:                    case 'N' :
        !           620:                    {
        !           621:                        if (((*s_objet_resultat).objet =
        !           622:                                malloc(5 * sizeof(unsigned char))) == NULL)
        !           623:                        {
        !           624:                            (*s_etat_processus).erreur_systeme =
        !           625:                                    d_es_allocation_memoire;
        !           626:                            return;
        !           627:                        }
        !           628: 
        !           629:                        strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           630:                                "NONE");
        !           631: 
        !           632:                        break;
        !           633:                    }
        !           634: 
        !           635:                    case 'R' :
        !           636:                    {
        !           637:                        if (((*s_objet_resultat).objet =
        !           638:                                malloc(5 * sizeof(unsigned char))) == NULL)
        !           639:                        {
        !           640:                            (*s_etat_processus).erreur_systeme =
        !           641:                                    d_es_allocation_memoire;
        !           642:                            return;
        !           643:                        }
        !           644: 
        !           645:                        strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           646:                                "READ");
        !           647: 
        !           648:                        break;
        !           649:                    }
        !           650: 
        !           651:                    case 'W' :
        !           652:                    {
        !           653:                        if (((*s_objet_resultat).objet =
        !           654:                                malloc(6 * sizeof(unsigned char))) == NULL)
        !           655:                        {
        !           656:                            (*s_etat_processus).erreur_systeme =
        !           657:                                    d_es_allocation_memoire;
        !           658:                            return;
        !           659:                        }
        !           660: 
        !           661:                        strcpy((unsigned char *) (*s_objet_resultat).objet,
        !           662:                                "WRITE");
        !           663: 
        !           664:                        break;
        !           665:                    }
        !           666:                }
        !           667: 
        !           668:                if (fclose(fichier) != 0)
        !           669:                {
        !           670:                    free(requete);
        !           671: 
        !           672:                    liberation(s_etat_processus, s_objet_argument_1);
        !           673:                    liberation(s_etat_processus, s_objet_argument_2);
        !           674:                    liberation(s_etat_processus, s_objet_resultat);
        !           675: 
        !           676:                    (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
        !           677:                    return;
        !           678:                }
        !           679:            }
        !           680:        }
        !           681:        else
        !           682:        {
        !           683:            free(requete);
        !           684: 
        !           685:            liberation(s_etat_processus, s_objet_argument_1);
        !           686:            liberation(s_etat_processus, s_objet_argument_2);
        !           687: 
        !           688:            (*s_etat_processus).erreur_execution = d_ex_erreur_requete_fichier;
        !           689:            return;
        !           690:        }
        !           691:    }
        !           692:    else
        !           693:    {
        !           694:        free(requete);
        !           695: 
        !           696:        liberation(s_etat_processus, s_objet_argument_1);
        !           697:        liberation(s_etat_processus, s_objet_argument_2);
        !           698: 
        !           699:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !           700:        return;
        !           701:    }
        !           702: 
        !           703:    free(requete);
        !           704: 
        !           705:    liberation(s_etat_processus, s_objet_argument_1);
        !           706:    liberation(s_etat_processus, s_objet_argument_2);
        !           707: 
        !           708:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           709:            s_objet_resultat) == d_erreur)
        !           710:    {
        !           711:        return;
        !           712:    }
        !           713: 
        !           714:    return;
        !           715: }
        !           716: 
        !           717: 
        !           718: /*
        !           719: ================================================================================
        !           720:   Fonction 'IDFT'
        !           721: ================================================================================
        !           722:   Entrées : structure processus
        !           723: --------------------------------------------------------------------------------
        !           724:   Sorties :
        !           725: --------------------------------------------------------------------------------
        !           726:   Effets de bord : néant
        !           727: ================================================================================
        !           728: */
        !           729: 
        !           730: void
        !           731: instruction_idft(struct_processus *s_etat_processus)
        !           732: {
        !           733:    integer4                    erreur;
        !           734:    integer4                    inverse;
        !           735:    integer4                    nombre_colonnes;
        !           736:    integer4                    nombre_lignes;
        !           737: 
        !           738:    logical1                    presence_longueur_dft;
        !           739: 
        !           740:    long                        longueur_dft_signee;
        !           741: 
        !           742:    struct_complexe16           *matrice_f77;
        !           743: 
        !           744:    struct_objet                *s_objet_argument;
        !           745:    struct_objet                *s_objet_longueur_dft;
        !           746:    struct_objet                *s_objet_resultat;
        !           747: 
        !           748:    unsigned long               i;
        !           749:    unsigned long               j;
        !           750:    unsigned long               k;
        !           751:    unsigned long               longueur_dft;
        !           752: 
        !           753:    (*s_etat_processus).erreur_execution = d_ex;
        !           754: 
        !           755:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !           756:    {
        !           757:        printf("\n  IDFT ");
        !           758: 
        !           759:        if ((*s_etat_processus).langue == 'F')
        !           760:        {
        !           761:            printf("(transformée de Fourier inverse discrète)\n\n");
        !           762:        }
        !           763:        else
        !           764:        {
        !           765:            printf("(inverse of discrete Fourier transform)\n\n");
        !           766:        }
        !           767: 
        !           768:        printf("    1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
        !           769:        printf("->  1: %s\n\n", d_VCX);
        !           770: 
        !           771:        printf("    2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
        !           772:        printf("    1: %s\n", d_INT);
        !           773:        printf("->  1: %s\n\n", d_VCX);
        !           774: 
        !           775:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
        !           776:        printf("->  1: %s\n\n", d_VCX);
        !           777: 
        !           778:        printf("    2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
        !           779:        printf("    1: %s\n", d_INT);
        !           780:        printf("->  1: %s\n", d_MCX);
        !           781: 
        !           782:        return;
        !           783:    }
        !           784:    else if ((*s_etat_processus).test_instruction == 'Y')
        !           785:    {
        !           786:        (*s_etat_processus).nombre_arguments = -1;
        !           787:        return;
        !           788:    }
        !           789: 
        !           790:    /*
        !           791:     * Il est possible d'imposer une longueur de DFT au premier niveau
        !           792:     * de la pile.
        !           793:     */
        !           794: 
        !           795:    if ((*s_etat_processus).l_base_pile == NULL)
        !           796:    {
        !           797:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           798:        return;
        !           799:    }
        !           800: 
        !           801:    if ((*(*(*s_etat_processus).l_base_pile).donnee).type == INT)
        !           802:    {
        !           803:        presence_longueur_dft = d_vrai;
        !           804: 
        !           805:        if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           806:        {
        !           807:            if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
        !           808:            {
        !           809:                return;
        !           810:            }
        !           811:        }
        !           812: 
        !           813:        if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           814:                &s_objet_longueur_dft) == d_erreur)
        !           815:        {
        !           816:            (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           817:            return;
        !           818:        }
        !           819: 
        !           820:        longueur_dft_signee = (*((integer8 *) (*s_objet_longueur_dft).objet));
        !           821: 
        !           822:        liberation(s_etat_processus, s_objet_longueur_dft);
        !           823: 
        !           824:        if (longueur_dft_signee <= 0)
        !           825:        {
        !           826:            (*s_etat_processus).erreur_execution = d_ex_longueur_dft;
        !           827:            return;
        !           828:        }
        !           829: 
        !           830:        longueur_dft = longueur_dft_signee;
        !           831:    }
        !           832:    else
        !           833:    {
        !           834:        presence_longueur_dft = d_faux;
        !           835:        longueur_dft = 0;
        !           836: 
        !           837:        if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !           838:        {
        !           839:            if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !           840:            {
        !           841:                return;
        !           842:            }
        !           843:        }
        !           844:    }
        !           845: 
        !           846:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !           847:            &s_objet_argument) == d_erreur)
        !           848:    {
        !           849:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !           850:        return;
        !           851:    }
        !           852: 
        !           853: /*
        !           854: --------------------------------------------------------------------------------
        !           855:   Vecteur
        !           856: --------------------------------------------------------------------------------
        !           857: */
        !           858: 
        !           859:    if (((*s_objet_argument).type == VIN) ||
        !           860:            ((*s_objet_argument).type == VRL) ||
        !           861:            ((*s_objet_argument).type == VCX))
        !           862:    {
        !           863:        if (presence_longueur_dft == d_faux)
        !           864:        {
        !           865:            longueur_dft = (*((struct_vecteur *)
        !           866:                    (*s_objet_argument).objet)).taille;
        !           867:        }
        !           868: 
        !           869:        if ((matrice_f77 = malloc(longueur_dft *
        !           870:                sizeof(struct_complexe16))) == NULL)
        !           871:        {
        !           872:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           873:            return;
        !           874:        }
        !           875: 
        !           876:        if ((*s_objet_argument).type == VIN)
        !           877:        {
        !           878:            for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet))
        !           879:                    .taille; i++)
        !           880:            {
        !           881:                matrice_f77[i].partie_reelle = (real8) ((integer8 *)
        !           882:                        (*((struct_vecteur *) (*s_objet_argument).objet))
        !           883:                        .tableau)[i];
        !           884:                matrice_f77[i].partie_imaginaire = (real8) 0;
        !           885:            }
        !           886:        }
        !           887:        else if ((*s_objet_argument).type == VRL)
        !           888:        {
        !           889:            for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet))
        !           890:                    .taille; i++)
        !           891:            {
        !           892:                matrice_f77[i].partie_reelle = ((real8 *)
        !           893:                        (*((struct_vecteur *) (*s_objet_argument).objet))
        !           894:                        .tableau)[i];
        !           895:                matrice_f77[i].partie_imaginaire = (real8) 0;
        !           896:            }
        !           897:        }
        !           898:        else
        !           899:        {
        !           900:            for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet))
        !           901:                    .taille; i++)
        !           902:            {
        !           903:                matrice_f77[i].partie_reelle = ((struct_complexe16 *)
        !           904:                        (*((struct_vecteur *) (*s_objet_argument).objet))
        !           905:                        .tableau)[i].partie_reelle;
        !           906:                matrice_f77[i].partie_imaginaire = ((struct_complexe16 *)
        !           907:                        (*((struct_vecteur *) (*s_objet_argument).objet))
        !           908:                        .tableau)[i].partie_imaginaire;
        !           909:            }
        !           910:        }
        !           911: 
        !           912:        for(; i < longueur_dft; i++)
        !           913:        {
        !           914:                matrice_f77[i].partie_reelle = (real8) 0;
        !           915:                matrice_f77[i].partie_imaginaire = (real8) 0;
        !           916:        }
        !           917: 
        !           918:        nombre_lignes = 1;
        !           919:        nombre_colonnes = longueur_dft;
        !           920:        inverse = -1;
        !           921: 
        !           922:        dft(matrice_f77, &nombre_lignes, &nombre_colonnes, &inverse, &erreur);
        !           923: 
        !           924:        if (erreur != 0)
        !           925:        {
        !           926:            liberation(s_etat_processus, s_objet_argument);
        !           927:            free(matrice_f77);
        !           928: 
        !           929:            (*s_etat_processus).erreur_execution = d_ex_longueur_dft;
        !           930:            return;
        !           931:        }
        !           932: 
        !           933:        if ((s_objet_resultat = allocation(s_etat_processus, VCX)) == NULL)
        !           934:        {
        !           935:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           936:            return;
        !           937:        }
        !           938: 
        !           939:        (*((struct_vecteur *) (*s_objet_resultat).objet)).taille = longueur_dft;
        !           940:        (*((struct_vecteur *) (*s_objet_resultat).objet)).tableau = matrice_f77;
        !           941:    }
        !           942: 
        !           943: /*
        !           944: --------------------------------------------------------------------------------
        !           945:   Matrice
        !           946: --------------------------------------------------------------------------------
        !           947: */
        !           948: 
        !           949:    else if (((*s_objet_argument).type == MIN) ||
        !           950:            ((*s_objet_argument).type == MRL) ||
        !           951:            ((*s_objet_argument).type == MCX))
        !           952:    {
        !           953:        if (presence_longueur_dft == d_faux)
        !           954:        {
        !           955:            longueur_dft = (*((struct_matrice *)
        !           956:                    (*s_objet_argument).objet)).nombre_colonnes;
        !           957:        }
        !           958: 
        !           959:        if ((matrice_f77 = malloc(longueur_dft *
        !           960:                (*((struct_matrice *) (*s_objet_argument).objet))
        !           961:                .nombre_lignes * sizeof(struct_complexe16))) == NULL)
        !           962:        {
        !           963:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !           964:            return;
        !           965:        }
        !           966: 
        !           967:        if ((*s_objet_argument).type == MIN)
        !           968:        {
        !           969:            for(k = 0, j = 0; j < (*((struct_matrice *) (*s_objet_argument)
        !           970:                    .objet)).nombre_lignes; j++)
        !           971:            {
        !           972:                for(i = 0; i < (*((struct_matrice *) (*s_objet_argument)
        !           973:                        .objet)).nombre_colonnes; i++)
        !           974:                {
        !           975:                    matrice_f77[k].partie_reelle = (real8) ((integer8 **)
        !           976:                            (*((struct_matrice *) (*s_objet_argument).objet))
        !           977:                            .tableau)[j][i];
        !           978:                    matrice_f77[k++].partie_imaginaire = (real8) 0;
        !           979:                }
        !           980:            }
        !           981: 
        !           982:            for(; k < longueur_dft * (*((struct_matrice *) (*s_objet_argument)
        !           983:                    .objet)).nombre_lignes; k++)
        !           984:            {
        !           985:                matrice_f77[k].partie_reelle = (real8) 0;
        !           986:                matrice_f77[k].partie_imaginaire = (real8) 0;
        !           987:            }
        !           988:        }
        !           989:        else if ((*s_objet_argument).type == MRL)
        !           990:        {
        !           991:            for(k = 0, j = 0; j < (*((struct_matrice *) (*s_objet_argument)
        !           992:                    .objet)).nombre_lignes; j++)
        !           993:            {
        !           994:                for(i = 0; i < (*((struct_matrice *) (*s_objet_argument)
        !           995:                        .objet)).nombre_colonnes; i++)
        !           996:                {
        !           997:                    matrice_f77[k].partie_reelle = ((real8 **)
        !           998:                            (*((struct_matrice *) (*s_objet_argument).objet))
        !           999:                            .tableau)[j][i];
        !          1000:                    matrice_f77[k++].partie_imaginaire = (real8) 0;
        !          1001:                }
        !          1002:            }
        !          1003: 
        !          1004:            for(; k < longueur_dft * (*((struct_matrice *) (*s_objet_argument)
        !          1005:                    .objet)).nombre_lignes; k++)
        !          1006:            {
        !          1007:                matrice_f77[k].partie_reelle = (real8) 0;
        !          1008:                matrice_f77[k].partie_imaginaire = (real8) 0;
        !          1009:            }
        !          1010:        }
        !          1011:        else
        !          1012:        {
        !          1013:            for(k = 0, j = 0; j < (*((struct_matrice *) (*s_objet_argument)
        !          1014:                    .objet)).nombre_lignes; j++)
        !          1015:            {
        !          1016:                for(i = 0; i < (*((struct_matrice *) (*s_objet_argument)
        !          1017:                        .objet)).nombre_colonnes; i++)
        !          1018:                {
        !          1019:                    matrice_f77[k].partie_reelle = ((struct_complexe16 **)
        !          1020:                            (*((struct_matrice *) (*s_objet_argument).objet))
        !          1021:                            .tableau)[j][i].partie_reelle;
        !          1022:                    matrice_f77[k++].partie_imaginaire =
        !          1023:                            ((struct_complexe16 **) (*((struct_matrice *)
        !          1024:                            (*s_objet_argument).objet)).tableau)[j][i]
        !          1025:                            .partie_imaginaire;
        !          1026:                }
        !          1027:            }
        !          1028: 
        !          1029:            for(; k < longueur_dft * (*((struct_matrice *) (*s_objet_argument)
        !          1030:                    .objet)).nombre_lignes; k++)
        !          1031:            {
        !          1032:                matrice_f77[k].partie_reelle = (real8) 0;
        !          1033:                matrice_f77[k].partie_imaginaire = (real8) 0;
        !          1034:            }
        !          1035:        }
        !          1036: 
        !          1037:        nombre_lignes = (*((struct_matrice *) (*s_objet_argument).objet))
        !          1038:                .nombre_lignes;
        !          1039:        nombre_colonnes = longueur_dft;
        !          1040:        inverse = -1;
        !          1041: 
        !          1042:        dft(matrice_f77, &nombre_lignes, &nombre_colonnes, &inverse, &erreur);
        !          1043: 
        !          1044:        if (erreur != 0)
        !          1045:        {
        !          1046:            liberation(s_etat_processus, s_objet_argument);
        !          1047:            free(matrice_f77);
        !          1048: 
        !          1049:            (*s_etat_processus).erreur_execution = d_ex_longueur_dft;
        !          1050:            return;
        !          1051:        }
        !          1052: 
        !          1053:        if ((s_objet_resultat = allocation(s_etat_processus, MCX)) == NULL)
        !          1054:        {
        !          1055:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1056:            return;
        !          1057:        }
        !          1058: 
        !          1059:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
        !          1060:                (*((struct_matrice *) (*s_objet_argument).objet))
        !          1061:                .nombre_lignes;
        !          1062:        (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
        !          1063:                longueur_dft;
        !          1064: 
        !          1065:        if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
        !          1066:                malloc((*((struct_matrice *) (*s_objet_resultat).objet))
        !          1067:                .nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
        !          1068:        {
        !          1069:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1070:            return;
        !          1071:        }
        !          1072: 
        !          1073:        for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
        !          1074:                .nombre_lignes; i++)
        !          1075:        {
        !          1076:            if ((((struct_complexe16 **) (*((struct_matrice *)
        !          1077:                    (*s_objet_resultat).objet)).tableau)[i] =
        !          1078:                    malloc((*((struct_matrice *)
        !          1079:                    (*s_objet_resultat).objet)).nombre_colonnes *
        !          1080:                    sizeof(struct_complexe16))) == NULL)
        !          1081:            {
        !          1082:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
        !          1083:                return;
        !          1084:            }
        !          1085:        }
        !          1086: 
        !          1087:        for(k = 0, j = 0; j < (*((struct_matrice *) (*s_objet_resultat).objet))
        !          1088:                .nombre_lignes; j++)
        !          1089:        {
        !          1090:            for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
        !          1091:                    .nombre_colonnes; i++)
        !          1092:            {
        !          1093:                ((struct_complexe16 **) (*((struct_matrice *)
        !          1094:                        (*s_objet_resultat).objet)).tableau)[j][i]
        !          1095:                        .partie_reelle = matrice_f77[k].partie_reelle;
        !          1096:                ((struct_complexe16 **) (*((struct_matrice *)
        !          1097:                        (*s_objet_resultat).objet)).tableau)[j][i]
        !          1098:                        .partie_imaginaire = matrice_f77[k++].partie_imaginaire;
        !          1099:            }
        !          1100:        }
        !          1101: 
        !          1102:        free(matrice_f77);
        !          1103:    }
        !          1104: 
        !          1105: /*
        !          1106: --------------------------------------------------------------------------------
        !          1107:   Calcul de DFT impossible
        !          1108: --------------------------------------------------------------------------------
        !          1109: */
        !          1110: 
        !          1111:    else
        !          1112:    {
        !          1113:        liberation(s_etat_processus, s_objet_argument);
        !          1114: 
        !          1115:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1116:        return;
        !          1117:    }
        !          1118: 
        !          1119:    liberation(s_etat_processus, s_objet_argument);
        !          1120: 
        !          1121:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1122:            s_objet_resultat) == d_erreur)
        !          1123:    {
        !          1124:        return;
        !          1125:    }
        !          1126: 
        !          1127:    return;
        !          1128: }
        !          1129: 
        !          1130: 
        !          1131: /*
        !          1132: ================================================================================
        !          1133:   Fonction 'ISWI'
        !          1134: ================================================================================
        !          1135:   Entrées : structure processus
        !          1136: --------------------------------------------------------------------------------
        !          1137:   Sorties :
        !          1138: --------------------------------------------------------------------------------
        !          1139:   Effets de bord : néant
        !          1140: ================================================================================
        !          1141: */
        !          1142: 
        !          1143: void
        !          1144: instruction_iswi(struct_processus *s_etat_processus)
        !          1145: {
        !          1146:    (*s_etat_processus).erreur_execution = d_ex;
        !          1147: 
        !          1148:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1149:    {
        !          1150:        printf("\n  ISWI ");
        !          1151: 
        !          1152:        if ((*s_etat_processus).langue == 'F')
        !          1153:        {
        !          1154:            printf("(autorise le traitement interruptif des interruptions)"
        !          1155:                    "\n\n");
        !          1156:            printf("  Aucun argument\n");
        !          1157:        }
        !          1158:        else
        !          1159:        {
        !          1160:            printf("(authorize interrupts called from interrupts)\n\n");
        !          1161:            printf("  No argument\n");
        !          1162:        }
        !          1163: 
        !          1164:        return;
        !          1165:    }
        !          1166:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1167:    {
        !          1168:        (*s_etat_processus).nombre_arguments = -1;
        !          1169:        return;
        !          1170:    }
        !          1171: 
        !          1172:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1173:    {
        !          1174:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
        !          1175:        {
        !          1176:            return;
        !          1177:        }
        !          1178:    }
        !          1179: 
        !          1180:    if ((*s_etat_processus).traitement_interruption == 'Y')
        !          1181:    {
        !          1182:        (*s_etat_processus).traitement_interruption = 'N';
        !          1183:    }
        !          1184:    else
        !          1185:    {
        !          1186:        (*s_etat_processus).erreur_execution = d_ex_iswi_hors_interruption;
        !          1187:    }
        !          1188: 
        !          1189:    return;
        !          1190: }
        !          1191: 
        !          1192: 
        !          1193: /*
        !          1194: ================================================================================
        !          1195:   Fonction 'ITRACE'
        !          1196: ================================================================================
        !          1197:   Entrées : structure processus
        !          1198: --------------------------------------------------------------------------------
        !          1199:   Sorties :
        !          1200: --------------------------------------------------------------------------------
        !          1201:   Effets de bord : néant
        !          1202: ================================================================================
        !          1203: */
        !          1204: 
        !          1205: void
        !          1206: instruction_itrace(struct_processus *s_etat_processus)
        !          1207: {
        !          1208:    struct_objet                *s_objet_argument;
        !          1209: 
        !          1210:    (*s_etat_processus).erreur_execution = d_ex;
        !          1211: 
        !          1212:    if ((*s_etat_processus).affichage_arguments == 'Y')
        !          1213:    {
        !          1214:        printf("\n  ITRACE ");
        !          1215: 
        !          1216:        if ((*s_etat_processus).langue == 'F')
        !          1217:        {
        !          1218:            printf("(trace interne)"
        !          1219:                    "\n\n");
        !          1220:        }
        !          1221:        else
        !          1222:        {
        !          1223:            printf("(internal trace)\n\n");
        !          1224:        }
        !          1225: 
        !          1226:        printf("    1: %s\n\n", d_BIN);
        !          1227: 
        !          1228:        if ((*s_etat_processus).langue == 'F')
        !          1229:        {
        !          1230:            printf("  Drapeaux :\n\n");
        !          1231:        }
        !          1232:        else
        !          1233:        {
        !          1234:            printf("  Flags:\n\n");
        !          1235:        }
        !          1236: 
        !          1237:        printf("    0000    : none\n");
        !          1238:        printf("    0001    : user stack\n");
        !          1239:        printf("    0002    : system stack\n");
        !          1240:        printf("    0004    : function calls\n");
        !          1241:        printf("    0008    : process management\n");
        !          1242:        printf("    0010    : analyze\n");
        !          1243:        printf("    0020    : fuse management\n");
        !          1244:        printf("    0040    : variables management\n");
        !          1245:        printf("    0080    : intrinsic functions\n");
        !          1246:        printf("    0100    : execution levels\n");
        !          1247:        printf("    0200    : algebraic to RPN conversion\n");
        !          1248:        printf("    0400    : interruptions supervision\n");
        !          1249:        printf("    0800    : signals\n");
        !          1250: 
        !          1251:        return;
        !          1252:    }
        !          1253:    else if ((*s_etat_processus).test_instruction == 'Y')
        !          1254:    {
        !          1255:        (*s_etat_processus).nombre_arguments = -1;
        !          1256:        return;
        !          1257:    }
        !          1258: 
        !          1259:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
        !          1260:    {
        !          1261:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
        !          1262:        {
        !          1263:            return;
        !          1264:        }
        !          1265:    }
        !          1266: 
        !          1267:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
        !          1268:            &s_objet_argument) == d_erreur)
        !          1269:    {
        !          1270:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
        !          1271:        return;
        !          1272:    }
        !          1273: 
        !          1274:    if ((*s_objet_argument).type == BIN)
        !          1275:    {
        !          1276:        if ((*((logical8 *) (*s_objet_argument).objet)) == 0)
        !          1277:        {
        !          1278:            (*s_etat_processus).debug = d_faux;
        !          1279:            (*s_etat_processus).type_debug = 0;
        !          1280:        }
        !          1281:        else
        !          1282:        {
        !          1283:            (*s_etat_processus).debug = d_vrai;
        !          1284:            (*s_etat_processus).type_debug = (*((logical8 *)
        !          1285:                    (*s_objet_argument).objet));
        !          1286:        }
        !          1287:    }
        !          1288:    else
        !          1289:    {
        !          1290:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
        !          1291:        liberation(s_etat_processus, s_objet_argument);
        !          1292:    }
        !          1293: 
        !          1294:    return;
        !          1295: }
        !          1296: 
        !          1297: 
        !          1298: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>