Annotation of rpl/src/instructions_s5.c, revision 1.16.2.3

1.1       bertrand    1: /*
                      2: ================================================================================
1.16.2.3! bertrand    3:   RPL/2 (R) version 4.0.24
1.15      bertrand    4:   Copyright (C) 1989-2011 Dr. BERTRAND Joël
1.1       bertrand    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: 
1.11      bertrand   23: #include "rpl-conv.h"
1.1       bertrand   24: 
                     25: 
                     26: /*
                     27: ================================================================================
                     28:   Fonction 's+'
                     29: ================================================================================
                     30:   Entrées : structure processus
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_s_plus(struct_processus *s_etat_processus)
                     40: {
                     41:    long                                i;
                     42: 
                     43:    logical1                            creation_variable_sigma;
                     44:    logical1                            presence_variable;
                     45: 
                     46:    struct_objet                        *s_copie;
                     47:    struct_objet                        *s_copie_statistique;
                     48:    struct_objet                        *s_objet;
                     49:    struct_objet                        *s_objet_statistique;
                     50: 
                     51:    struct_variable                     s_variable;
                     52: 
                     53:    unsigned long                       j;
                     54:    unsigned long                       k;
                     55:    unsigned long                       nombre_colonnes;
                     56:    unsigned long                       nombre_lignes;
                     57: 
                     58:    void                                *tampon;
                     59: 
                     60:    (*s_etat_processus).erreur_execution = d_ex;
                     61: 
                     62:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     63:    {
                     64:        printf("\n  S+ ");
                     65: 
                     66:        if ((*s_etat_processus).langue == 'F')
                     67:        {
                     68:            printf("(ajout d'une donnée dans la matrice statistique)\n\n");
                     69:        }
                     70:        else
                     71:        {
                     72:            printf("(add a data value in statistical matrix)\n\n");
                     73:        }
                     74: 
                     75:        printf("    1: %s, %s, %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL,
                     76:                d_MIN, d_MRL);
                     77: 
                     78:        return;
                     79:    }
                     80:    else if ((*s_etat_processus).test_instruction == 'Y')
                     81:    {
                     82:        (*s_etat_processus).nombre_arguments = -1;
                     83:        return;
                     84:    }
                     85:    
                     86:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                     87:    {
                     88:        if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
                     89:        {
                     90:            return;
                     91:        }
                     92:    }
                     93: 
                     94:    /*
                     95:     * Recherche d'une variable globale référencée par SIGMA
                     96:     */
                     97: 
                     98:    if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
                     99:    {
                    100:        /*
                    101:         * Aucune variable SIGMA, donc il faut la créer en fonction
                    102:         * de l'objet à introduire.
                    103:         */
                    104: 
                    105:        (*s_etat_processus).erreur_systeme = d_es;
                    106:        creation_variable_sigma = d_vrai;
                    107:        nombre_colonnes = 0;
                    108:    }
                    109:    else
                    110:    {
                    111:        /*
                    112:         * Il existe une variable locale SIGMA. Reste à vérifier l'existence
                    113:         * d'une variable SIGMA globale...
                    114:         */
                    115: 
                    116:        i = (*s_etat_processus).position_variable_courante;
                    117:        presence_variable = d_faux;
                    118: 
                    119:        while(i >= 0)
                    120:        {
                    121:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
                    122:                    ds_sdat) == 0) && ((*s_etat_processus)
                    123:                    .s_liste_variables[i].niveau == 1))
                    124:            {
                    125:                presence_variable = d_vrai;
                    126:                break;
                    127:            }
                    128: 
                    129:            i--;
                    130:        }
                    131: 
                    132:        if (presence_variable == d_faux)
                    133:        {
                    134:            creation_variable_sigma = d_vrai;
                    135:            nombre_colonnes = 0;
                    136:        }
                    137:        else
                    138:        {
                    139:            creation_variable_sigma = d_faux;
                    140: 
                    141:            (*s_etat_processus).position_variable_courante = i;
                    142: 
                    143:            if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
                    144:                    .position_variable_courante].variable_verrouillee ==
                    145:                    d_vrai)
                    146:            {
                    147:                (*s_etat_processus).erreur_execution =
                    148:                        d_ex_variable_verrouillee;
                    149:                return;
                    150:            }
                    151: 
                    152:            if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
                    153:            {
                    154:                (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
                    155:                return;
                    156:            }
                    157: 
                    158:            if (((*((*s_etat_processus).s_liste_variables
                    159:                    [(*s_etat_processus).position_variable_courante].objet))
                    160:                    .type != MIN) && ((*((*s_etat_processus)
                    161:                    .s_liste_variables[(*s_etat_processus)
                    162:                    .position_variable_courante].objet)).type != MRL))
                    163:            {
                    164:                (*s_etat_processus).erreur_execution =
                    165:                        d_ex_matrice_statistique_invalide;
                    166:                return;
                    167:            }
                    168: 
                    169:            if ((s_copie_statistique = copie_objet(s_etat_processus,
                    170:                    (*s_etat_processus)
                    171:                    .s_liste_variables[(*s_etat_processus)
                    172:                    .position_variable_courante].objet, 'Q')) == NULL)
                    173:            {
                    174:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    175:                return;
                    176:            }
                    177: 
                    178:            liberation(s_etat_processus, (*s_etat_processus).s_liste_variables
                    179:                    [(*s_etat_processus).position_variable_courante].objet);
                    180:            (*s_etat_processus).s_liste_variables[(*s_etat_processus)
                    181:                    .position_variable_courante].objet = s_copie_statistique;
                    182: 
                    183:            nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
                    184:                    .s_liste_variables[(*s_etat_processus)
                    185:                    .position_variable_courante].objet)).objet))
                    186:                    .nombre_colonnes;
                    187:        }
                    188:    }
                    189: 
                    190:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    191:            &s_objet) == d_erreur)
                    192:    {
                    193:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    194:        return;
                    195:    }
                    196: 
                    197:    if ((s_copie = copie_objet(s_etat_processus, s_objet, 'O')) == NULL)
                    198:    {
                    199:        (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    200:        return;
                    201:    }
                    202: 
                    203:    liberation(s_etat_processus, s_objet);
                    204:    s_objet = s_copie;
                    205: 
                    206:    /*
                    207:     * Ajout d'un scalaire
                    208:     */
                    209: 
                    210:    if (((*s_objet).type == INT) ||
                    211:            ((*s_objet).type == REL))
                    212:    {
                    213:        if (creation_variable_sigma == d_vrai)
                    214:        {
                    215:            /*
                    216:             * Création d'une matrice statistique 1*1
                    217:             */
                    218: 
                    219:            if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)
                    220:            {
                    221:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    222:                return;
                    223:            }
                    224: 
                    225:            strcpy(s_variable.nom, ds_sdat);
                    226:            s_variable.niveau = 1;
                    227: 
                    228:            if ((*s_objet).type == INT)
                    229:            {
                    230:                if ((s_objet_statistique = allocation(s_etat_processus, MIN))
                    231:                        == NULL)
                    232:                {
                    233:                    (*s_etat_processus).erreur_systeme =
                    234:                            d_es_allocation_memoire;
                    235:                    return;
                    236:                }
                    237: 
                    238:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    239:                        .tableau = malloc(sizeof(integer8 *))) == NULL)
                    240:                {
                    241:                    (*s_etat_processus).erreur_systeme =
                    242:                            d_es_allocation_memoire;
                    243:                    return;
                    244:                }
                    245: 
                    246:                ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    247:                        .objet)).tableau)[0] = (integer8 *) (*s_objet).objet;
                    248:            }
                    249:            else
                    250:            {
                    251:                if ((s_objet_statistique = allocation(s_etat_processus, MRL))
                    252:                        == NULL)
                    253:                {
                    254:                    (*s_etat_processus).erreur_systeme =
                    255:                            d_es_allocation_memoire;
                    256:                    return;
                    257:                }
                    258: 
                    259:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    260:                        .tableau = malloc(sizeof(real8 *))) == NULL)
                    261:                {
                    262:                    (*s_etat_processus).erreur_systeme =
                    263:                            d_es_allocation_memoire;
                    264:                    return;
                    265:                }
                    266: 
                    267:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    268:                        .objet)).tableau)[0] = (real8 *) (*s_objet).objet;
                    269:            }
                    270: 
                    271:            (*((struct_matrice *) (*s_objet_statistique).objet))
                    272:                    .nombre_colonnes = 1;
                    273:            (*((struct_matrice *) (*s_objet_statistique).objet))
                    274:                    .nombre_lignes = 1;
                    275: 
                    276:            free(s_objet);
                    277:            s_objet = NULL;
                    278: 
                    279:            s_variable.objet = s_objet_statistique;
                    280: 
                    281:            if (creation_variable(s_etat_processus, &s_variable, 'V', 'P')
                    282:                    == d_erreur)
                    283:            {
                    284:                return;
                    285:            }
                    286:        }
                    287:        else
                    288:        {
                    289:            /*
                    290:             * La variable existe déjà, il faut lui rajouter une ligne.
                    291:             */
                    292: 
                    293:            if (nombre_colonnes != 1)
                    294:            {
                    295:                (*s_etat_processus).erreur_execution =
                    296:                        d_ex_dimensions_matrice_statistique;
                    297: 
                    298:                liberation(s_etat_processus, s_objet);
                    299:                return;
                    300:            }
                    301: 
                    302:            s_objet_statistique = ((*s_etat_processus).s_liste_variables
                    303:                    [(*s_etat_processus).position_variable_courante]).objet;
                    304: 
                    305:            if (((*s_objet_statistique).type == MIN) &&
                    306:                    ((*s_objet).type == INT))
                    307:            {
                    308:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    309:                        .tableau;
                    310:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    311:                        .nombre_lignes++;
                    312: 
                    313:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    314:                        .tableau = malloc((*((struct_matrice *)
                    315:                        (*s_objet_statistique).objet)).nombre_lignes *
                    316:                        sizeof(integer8 *))) == NULL)
                    317:                {
                    318:                    (*s_etat_processus).erreur_systeme =
                    319:                            d_es_allocation_memoire;
                    320:                    return;
                    321:                }
                    322: 
                    323:                for(i = 0; i < (long) ((*((struct_matrice *)
                    324:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    325:                {
                    326:                    ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    327:                            .objet)).tableau)[i] = ((integer8 **) tampon)[i];
                    328:                }
                    329: 
                    330:                free(tampon);
                    331: 
                    332:                ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    333:                        .objet)).tableau)[i] = (integer8 *) (*s_objet).objet;
                    334: 
                    335:                free(s_objet);
                    336:                s_objet = NULL;
                    337:            }
                    338:            else if (((*s_objet_statistique).type == MRL) &&
                    339:                    ((*s_objet).type == REL))
                    340:            {
                    341:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    342:                        .tableau;
                    343:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    344:                        .nombre_lignes++;
                    345: 
                    346:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    347:                        .tableau = malloc((*((struct_matrice *)
                    348:                        (*s_objet_statistique).objet)).nombre_lignes *
                    349:                        sizeof(real8 *))) == NULL)
                    350:                {
                    351:                    (*s_etat_processus).erreur_systeme =
                    352:                            d_es_allocation_memoire;
                    353:                    return;
                    354:                }
                    355: 
                    356:                for(i = 0; i < (long) ((*((struct_matrice *)
                    357:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    358:                {
                    359:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    360:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    361:                }
                    362: 
                    363:                free(tampon);
                    364: 
                    365:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    366:                        .objet)).tableau)[i] = (real8 *) (*s_objet).objet;
                    367: 
                    368:                free(s_objet);
                    369:                s_objet = NULL;
                    370:            }
                    371:            else if (((*s_objet_statistique).type == MRL) &&
                    372:                    ((*s_objet).type == INT))
                    373:            {
                    374:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    375:                        .tableau;
                    376:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    377:                        .nombre_lignes++;
                    378: 
                    379:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    380:                        .tableau = malloc((*((struct_matrice *)
                    381:                        (*s_objet_statistique).objet)).nombre_lignes *
                    382:                        sizeof(real8 *))) == NULL)
                    383:                {
                    384:                    (*s_etat_processus).erreur_systeme =
                    385:                            d_es_allocation_memoire;
                    386:                    return;
                    387:                }
                    388: 
                    389:                for(i = 0; i < (long) ((*((struct_matrice *)
                    390:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    391:                {
                    392:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    393:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    394:                }
                    395: 
                    396:                free(tampon);
                    397: 
                    398:                if ((((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    399:                        .objet)).tableau)[i] = malloc(sizeof(real8)))
                    400:                        == NULL)
                    401:                {
                    402:                    (*s_etat_processus).erreur_systeme =
                    403:                            d_es_allocation_memoire;
                    404:                    return;
                    405:                }
                    406: 
                    407:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    408:                        .objet)).tableau)[i][0] =
                    409:                        (real8) (*((integer8 *) (*s_objet).objet));
                    410:            }
                    411:            else
                    412:            {
                    413:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    414:                        .tableau;
                    415:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    416:                        .nombre_lignes++;
                    417: 
                    418:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    419:                        .tableau = malloc((*((struct_matrice *)
                    420:                        (*s_objet_statistique).objet)).nombre_lignes *
                    421:                        sizeof(real8 *))) == NULL)
                    422:                {
                    423:                    (*s_etat_processus).erreur_systeme =
                    424:                            d_es_allocation_memoire;
                    425:                    return;
                    426:                }
                    427: 
                    428:                for(i = 0; i < (long) ((*((struct_matrice *)
                    429:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    430:                {
                    431:                    if ((((real8 **) (*((struct_matrice *)
                    432:                            (*s_objet_statistique).objet)).tableau)[i] =
                    433:                            malloc(sizeof(real8))) == NULL)
                    434:                    {
                    435:                        (*s_etat_processus).erreur_systeme =
                    436:                                d_es_allocation_memoire;
                    437:                        return;
                    438:                    }
                    439: 
                    440:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    441:                            .objet)).tableau)[i][0] = (real8)
                    442:                            ((integer8 **) tampon)[i][0];
                    443: 
                    444:                    free(((integer8 **) tampon)[i]);
                    445:                }
                    446: 
                    447:                if ((((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    448:                        .objet)).tableau)[i] = malloc(sizeof(real8)))
                    449:                        == NULL)
                    450:                {
                    451:                    (*s_etat_processus).erreur_systeme =
                    452:                            d_es_allocation_memoire;
                    453:                    return;
                    454:                }
                    455: 
                    456:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    457:                        .objet)).tableau)[i][0] = (*((real8 *)
                    458:                        (*s_objet).objet));
                    459: 
                    460:                (*((struct_matrice *) (*s_objet_statistique).objet)).type = 'R';
                    461:                (*s_objet_statistique).type = MRL;
                    462: 
                    463:                free(tampon);
                    464:            }
                    465:        }
                    466:    }
                    467: 
                    468:    /*
                    469:     * Ajout d'un vecteur
                    470:     */
                    471: 
                    472:    else if (((*s_objet).type == VIN) ||
                    473:            ((*s_objet).type == VRL))
                    474:    {
                    475:        if (creation_variable_sigma == d_vrai)
                    476:        {
                    477:            /*
                    478:             * Création d'une matrice statistique 1*NC
                    479:             */
                    480: 
                    481:            if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)
                    482:            {
                    483:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    484:                return;
                    485:            }
                    486: 
                    487:            strcpy(s_variable.nom, ds_sdat);
                    488:            s_variable.niveau = 1;
                    489: 
                    490:            if ((*s_objet).type == VIN)
                    491:            {
                    492:                if ((s_objet_statistique = allocation(s_etat_processus, MIN))
                    493:                        == NULL)
                    494:                {
                    495:                    (*s_etat_processus).erreur_systeme =
                    496:                            d_es_allocation_memoire;
                    497:                    return;
                    498:                }
                    499: 
                    500:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    501:                        .tableau = malloc(sizeof(integer8 **))) == NULL)
                    502:                {
                    503:                    (*s_etat_processus).erreur_systeme =
                    504:                            d_es_allocation_memoire;
                    505:                    return;
                    506:                }
                    507: 
                    508:                ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    509:                        .objet)).tableau)[0] = (*((struct_vecteur *)
                    510:                        (*s_objet).objet)).tableau;
                    511:            }
                    512:            else
                    513:            {
                    514:                if ((s_objet_statistique = allocation(s_etat_processus, MRL))
                    515:                        == NULL)
                    516:                {
                    517:                    (*s_etat_processus).erreur_systeme =
                    518:                            d_es_allocation_memoire;
                    519:                    return;
                    520:                }
                    521: 
                    522:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    523:                        .tableau = malloc(sizeof(real8 **))) == NULL)
                    524:                {
                    525:                    (*s_etat_processus).erreur_systeme =
                    526:                            d_es_allocation_memoire;
                    527:                    return;
                    528:                }
                    529: 
                    530:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    531:                        .objet)).tableau)[0] = (*((struct_vecteur *)
                    532:                        (*s_objet).objet)).tableau;
                    533:            }
                    534: 
                    535:            (*((struct_matrice *) (*s_objet_statistique).objet))
                    536:                    .nombre_colonnes = (*((struct_vecteur *) (*s_objet).objet))
                    537:                    .taille;
                    538:            (*((struct_matrice *) (*s_objet_statistique).objet))
                    539:                    .nombre_lignes = 1;
                    540: 
                    541:            free((struct_vecteur *) (*s_objet).objet);
                    542:            free(s_objet);
                    543:            s_objet = NULL;
                    544: 
                    545:            s_variable.objet = s_objet_statistique;
                    546: 
                    547:            if (creation_variable(s_etat_processus, &s_variable, 'V', 'P')
                    548:                    == d_erreur)
                    549:            {
                    550:                return;
                    551:            }
                    552:        }
                    553:        else
                    554:        {
                    555:            /*
                    556:             * La variable existe déjà, il faut lui rajouter une ligne.
                    557:             */
                    558: 
                    559:            if (nombre_colonnes != (*((struct_vecteur *) (*s_objet).objet))
                    560:                    .taille)
                    561:            {
                    562:                (*s_etat_processus).erreur_execution =
                    563:                        d_ex_dimensions_matrice_statistique;
                    564: 
                    565:                liberation(s_etat_processus, s_objet);
                    566:                return;
                    567:            }
                    568: 
                    569:            s_objet_statistique = ((*s_etat_processus).s_liste_variables
                    570:                    [(*s_etat_processus).position_variable_courante]).objet;
                    571: 
                    572:            if (((*s_objet_statistique).type == MIN) &&
                    573:                    ((*s_objet).type == VIN))
                    574:            {
                    575:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    576:                        .tableau;
                    577:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    578:                        .nombre_lignes++;
                    579: 
                    580:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    581:                        .tableau = malloc((*((struct_matrice *)
                    582:                        (*s_objet_statistique).objet)).nombre_lignes *
                    583:                        sizeof(integer8 *))) == NULL)
                    584:                {
                    585:                    (*s_etat_processus).erreur_systeme =
                    586:                            d_es_allocation_memoire;
                    587:                    return;
                    588:                }
                    589: 
                    590:                for(i = 0; i < (long) ((*((struct_matrice *)
                    591:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    592:                {
                    593:                    ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    594:                            .objet)).tableau)[i] = ((integer8 **) tampon)[i];
                    595:                }
                    596: 
                    597:                free(tampon);
                    598: 
                    599:                ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    600:                        .objet)).tableau)[i] = (integer8 *)
                    601:                        (*((struct_vecteur *) (*s_objet).objet)).tableau;
                    602: 
                    603:                free((struct_vecteur *) (*s_objet).objet);
                    604:                free(s_objet);
                    605:                s_objet = NULL;
                    606:            }
                    607:            else if (((*s_objet_statistique).type == MRL) &&
                    608:                    ((*s_objet).type == VRL))
                    609:            {
                    610:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    611:                        .tableau;
                    612:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    613:                        .nombre_lignes++;
                    614: 
                    615:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    616:                        .tableau = malloc((*((struct_matrice *)
                    617:                        (*s_objet_statistique).objet)).nombre_lignes *
                    618:                        sizeof(real8 *))) == NULL)
                    619:                {
                    620:                    (*s_etat_processus).erreur_systeme =
                    621:                            d_es_allocation_memoire;
                    622:                    return;
                    623:                }
                    624: 
                    625:                for(i = 0; i < (long) ((*((struct_matrice *)
                    626:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    627:                {
                    628:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    629:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    630:                }
                    631: 
                    632:                free(tampon);
                    633: 
                    634:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    635:                        .objet)).tableau)[i] = (real8 *)
                    636:                        (*((struct_vecteur *) (*s_objet).objet)).tableau;
                    637: 
                    638:                free((struct_vecteur *) (*s_objet).objet);
                    639:                free(s_objet);
                    640:                s_objet = NULL;
                    641:            }
                    642:            else if (((*s_objet_statistique).type == MRL) &&
                    643:                    ((*s_objet).type == VIN))
                    644:            {
                    645:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    646:                        .tableau;
                    647:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    648:                        .nombre_lignes++;
                    649: 
                    650:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    651:                        .tableau = malloc((*((struct_matrice *)
                    652:                        (*s_objet_statistique).objet)).nombre_lignes *
                    653:                        sizeof(real8 *))) == NULL)
                    654:                {
                    655:                    (*s_etat_processus).erreur_systeme =
                    656:                            d_es_allocation_memoire;
                    657:                    return;
                    658:                }
                    659: 
                    660:                for(i = 0; i < (long) ((*((struct_matrice *)
                    661:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    662:                {
                    663:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    664:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    665:                }
                    666: 
                    667:                free(tampon);
                    668: 
                    669:                if ((((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    670:                        .objet)).tableau)[i] =
                    671:                        malloc(nombre_colonnes * sizeof(real8))) == NULL)
                    672:                {
                    673:                    (*s_etat_processus).erreur_systeme =
                    674:                            d_es_allocation_memoire;
                    675:                    return;
                    676:                }
                    677: 
                    678:                for(j = 0; j < nombre_colonnes; j++)
                    679:                {
                    680:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    681:                            .objet)).tableau)[i][j] =
                    682:                            (real8) (((integer8 *) (*((struct_vecteur *)
                    683:                            (*s_objet).objet)).tableau)[j]);
                    684:                }
                    685:            }
                    686:            else
                    687:            {
                    688:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    689:                        .tableau;
                    690:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    691:                        .nombre_lignes++;
                    692: 
                    693:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    694:                        .tableau = malloc((*((struct_matrice *)
                    695:                        (*s_objet_statistique).objet)).nombre_lignes *
                    696:                        sizeof(real8 *))) == NULL)
                    697:                {
                    698:                    (*s_etat_processus).erreur_systeme =
                    699:                            d_es_allocation_memoire;
                    700:                    return;
                    701:                }
                    702: 
                    703:                for(i = 0; i < (long) ((*((struct_matrice *)
                    704:                        (*s_objet_statistique).objet)).nombre_lignes - 1); i++)
                    705:                {
                    706:                    if ((((real8 **) (*((struct_matrice *)
                    707:                            (*s_objet_statistique).objet)).tableau)[i] =
                    708:                            malloc(nombre_colonnes * sizeof(real8))) == NULL)
                    709:                    {
                    710:                        (*s_etat_processus).erreur_systeme =
                    711:                                d_es_allocation_memoire;
                    712:                        return;
                    713:                    }
                    714: 
                    715:                    for(j = 0; j < nombre_colonnes; j++)
                    716:                    {
                    717:                        ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    718:                                .objet)).tableau)[i][j] = (real8)
                    719:                                ((integer8 **) tampon)[i][j];
                    720:                    }
                    721: 
                    722:                    free(((integer8 **) tampon)[i]);
                    723:                }
                    724: 
                    725:                free(tampon);
                    726: 
                    727:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    728:                        .objet)).tableau)[i] = (real8 *) (*((struct_vecteur *)
                    729:                        (*s_objet).objet)).tableau;
                    730: 
                    731:                free((struct_vecteur *) (*s_objet).objet);
                    732:                free(s_objet);
                    733:                s_objet = NULL;
                    734: 
                    735:                (*((struct_matrice *) (*s_objet_statistique).objet)).type = 'R';
                    736:                (*s_objet_statistique).type = MRL;
                    737:            }
                    738:        }
                    739:    }
                    740: 
                    741:    /*
                    742:     * Ajout d'une matrice
                    743:     */
                    744: 
                    745:    else if (((*s_objet).type == MIN) ||
                    746:            ((*s_objet).type == MRL))
                    747:    {
                    748:        if (creation_variable_sigma == d_vrai)
                    749:        {
                    750:            /*
                    751:             * Création d'une matrice statistique NL*NC
                    752:             */
                    753: 
                    754:            if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)
                    755:            {
                    756:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    757:                return;
                    758:            }
                    759: 
                    760:            strcpy(s_variable.nom, ds_sdat);
                    761:            s_variable.niveau = 1;
                    762: 
                    763:            if ((*s_objet).type == MIN)
                    764:            {
                    765:                if ((s_objet_statistique = allocation(s_etat_processus, MIN))
                    766:                        == NULL)
                    767:                {
                    768:                    (*s_etat_processus).erreur_systeme =
                    769:                            d_es_allocation_memoire;
                    770:                    return;
                    771:                }
                    772: 
                    773:                (*s_objet_statistique).objet = (*s_objet).objet;
                    774:            }
                    775:            else
                    776:            {
                    777:                if ((s_objet_statistique = allocation(s_etat_processus, MRL))
                    778:                        == NULL)
                    779:                {
                    780:                    (*s_etat_processus).erreur_systeme =
                    781:                            d_es_allocation_memoire;
                    782:                    return;
                    783:                }
                    784: 
                    785:                (*s_objet_statistique).objet = (*s_objet).objet;
                    786:            }
                    787: 
                    788:            free(s_objet);
                    789:            s_objet = NULL;
                    790: 
                    791:            s_variable.objet = s_objet_statistique;
                    792: 
                    793:            if (creation_variable(s_etat_processus, &s_variable, 'V', 'P')
                    794:                    == d_erreur)
                    795:            {
                    796:                return;
                    797:            }
                    798:        }
                    799:        else
                    800:        {
                    801:            /*
                    802:             * La variable existe déjà, il faut lui rajouter le nombre
                    803:             * de lignes de la matrice passée en argument.
                    804:             */
                    805: 
                    806:            if (nombre_colonnes != (*((struct_matrice *) (*s_objet).objet))
                    807:                    .nombre_colonnes)
                    808:            {
                    809:                (*s_etat_processus).erreur_execution =
                    810:                        d_ex_dimensions_matrice_statistique;
                    811: 
                    812:                liberation(s_etat_processus, s_objet);
                    813:                return;
                    814:            }
                    815: 
                    816:            s_objet_statistique = ((*s_etat_processus).s_liste_variables
                    817:                    [(*s_etat_processus).position_variable_courante]).objet;
                    818: 
                    819:            nombre_lignes = (*((struct_matrice *) (*s_objet).objet))
                    820:                    .nombre_lignes;
                    821: 
                    822:            if (((*s_objet_statistique).type == MIN) &&
                    823:                    ((*s_objet).type == MIN))
                    824:            {
                    825:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    826:                        .tableau;
                    827:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    828:                        .nombre_lignes += nombre_lignes;
                    829: 
                    830:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    831:                        .tableau = malloc((*((struct_matrice *)
                    832:                        (*s_objet_statistique).objet)).nombre_lignes *
                    833:                        sizeof(integer8 *))) == NULL)
                    834:                {
                    835:                    (*s_etat_processus).erreur_systeme =
                    836:                            d_es_allocation_memoire;
                    837:                    return;
                    838:                }
                    839: 
                    840:                for(i = 0; i < (long) ((*((struct_matrice *)
                    841:                        (*s_objet_statistique).objet)).nombre_lignes
                    842:                        - nombre_lignes); i++)
                    843:                {
                    844:                    ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    845:                            .objet)).tableau)[i] = ((integer8 **) tampon)[i];
                    846:                }
                    847: 
                    848:                free(tampon);
                    849: 
                    850:                for(k = 0; i < (long) ((*((struct_matrice *)
                    851:                        (*s_objet_statistique).objet)).nombre_lignes); i++, k++)
                    852:                {
                    853:                    ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                    854:                            .objet)).tableau)[i] = ((integer8 **)
                    855:                            (*((struct_matrice *) (*s_objet).objet))
                    856:                            .tableau)[k];
                    857:                }
                    858: 
                    859:                free((integer8 **) (*((struct_matrice *) (*s_objet).objet))
                    860:                        .tableau);
                    861:                free((struct_matrice *) (*s_objet).objet);
                    862:                free(s_objet);
                    863:                s_objet = NULL;
                    864:            }
                    865:            else if (((*s_objet_statistique).type == MRL) &&
                    866:                    ((*s_objet).type == MRL))
                    867:            {
                    868:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    869:                        .tableau;
                    870:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    871:                        .nombre_lignes += nombre_lignes;
                    872: 
                    873:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    874:                        .tableau = malloc((*((struct_matrice *)
                    875:                        (*s_objet_statistique).objet)).nombre_lignes *
                    876:                        sizeof(real8 *))) == NULL)
                    877:                {
                    878:                    (*s_etat_processus).erreur_systeme =
                    879:                            d_es_allocation_memoire;
                    880:                    return;
                    881:                }
                    882: 
                    883:                for(i = 0; i < (long) ((*((struct_matrice *)
                    884:                        (*s_objet_statistique).objet)).nombre_lignes
                    885:                        - nombre_lignes); i++)
                    886:                {
                    887:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    888:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    889:                }
                    890: 
                    891:                free(tampon);
                    892: 
                    893:                for(k = 0; i < (long) ((*((struct_matrice *)
                    894:                        (*s_objet_statistique).objet)).nombre_lignes); i++, k++)
                    895:                {
                    896:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    897:                            .objet)).tableau)[i] = ((real8 **)
                    898:                            (*((struct_matrice *) (*s_objet).objet))
                    899:                            .tableau)[k];
                    900:                }
                    901: 
                    902:                free((real8 **) (*((struct_matrice *) (*s_objet).objet))
                    903:                        .tableau);
                    904:                free((struct_matrice *) (*s_objet).objet);
                    905:                free(s_objet);
                    906:                s_objet = NULL;
                    907:            }
                    908:            else if (((*s_objet_statistique).type == MRL) &&
                    909:                    ((*s_objet).type == MIN))
                    910:            {
                    911:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    912:                        .tableau;
                    913:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    914:                        .nombre_lignes += nombre_lignes;
                    915: 
                    916:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    917:                        .tableau = malloc((*((struct_matrice *)
                    918:                        (*s_objet_statistique).objet)).nombre_lignes *
                    919:                        sizeof(real8 *))) == NULL)
                    920:                {
                    921:                    (*s_etat_processus).erreur_systeme =
                    922:                            d_es_allocation_memoire;
                    923:                    return;
                    924:                }
                    925: 
                    926:                for(i = 0; i < (long) ((*((struct_matrice *)
                    927:                        (*s_objet_statistique).objet)).nombre_lignes
                    928:                        - nombre_lignes); i++)
                    929:                {
                    930:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    931:                            .objet)).tableau)[i] = ((real8 **) tampon)[i];
                    932:                }
                    933: 
                    934:                free(tampon);
                    935: 
                    936:                for(k = 0; i < (long) ((*((struct_matrice *)
                    937:                        (*s_objet_statistique).objet)).nombre_lignes); i++, k++)
                    938:                {
                    939:                    if ((((real8 **) (*((struct_matrice *)
                    940:                            (*s_objet_statistique).objet)).tableau)[i] =
                    941:                            malloc(nombre_colonnes * sizeof(real8))) == NULL)
                    942:                    {
                    943:                        (*s_etat_processus).erreur_systeme =
                    944:                                d_es_allocation_memoire;
                    945:                        return;
                    946:                    }
                    947: 
                    948:                    for(j = 0; j < nombre_colonnes; j++)
                    949:                    {
                    950:                        ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    951:                                .objet)).tableau)[i][j] =
                    952:                                (real8) (((integer8 **) (*((struct_matrice *)
                    953:                                (*s_objet).objet)).tableau)[k][j]);
                    954:                    }
                    955:                }
                    956:            }
                    957:            else
                    958:            {
                    959:                tampon = (*((struct_matrice *) (*s_objet_statistique).objet))
                    960:                        .tableau;
                    961:                (*((struct_matrice *) (*s_objet_statistique).objet))
                    962:                        .nombre_lignes += nombre_lignes;
                    963: 
                    964:                if (((*((struct_matrice *) (*s_objet_statistique).objet))
                    965:                        .tableau = malloc((*((struct_matrice *)
                    966:                        (*s_objet_statistique).objet)).nombre_lignes *
                    967:                        sizeof(real8 *))) == NULL)
                    968:                {
                    969:                    (*s_etat_processus).erreur_systeme =
                    970:                            d_es_allocation_memoire;
                    971:                    return;
                    972:                }
                    973: 
                    974:                for(i = 0; i < (long) ((*((struct_matrice *)
                    975:                        (*s_objet_statistique).objet)).nombre_lignes
                    976:                        - nombre_lignes); i++)
                    977:                {
                    978:                    if ((((real8 **) (*((struct_matrice *)
                    979:                            (*s_objet_statistique).objet)).tableau)[i] =
                    980:                            malloc(nombre_colonnes * sizeof(real8)))
                    981:                            == NULL)
                    982:                    {
                    983:                        (*s_etat_processus).erreur_systeme =
                    984:                                d_es_allocation_memoire;
                    985:                        return;
                    986:                    }
                    987: 
                    988:                    for(j = 0; j < nombre_colonnes; j++)
                    989:                    {
                    990:                        ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                    991:                                .objet)).tableau)[i][j] = (real8)
                    992:                                ((integer8 **) tampon)[i][j];
                    993:                    }
                    994: 
                    995:                    free(((integer8 **) tampon)[i]);
                    996:                }
                    997: 
                    998:                free(tampon);
                    999: 
                   1000:                for(k = 0; i < (long) ((*((struct_matrice *)
                   1001:                        (*s_objet_statistique).objet)).nombre_lignes); i++, k++)
                   1002:                {
                   1003:                    ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                   1004:                            .objet)).tableau)[i] = ((real8 **)
                   1005:                            (*((struct_matrice *) (*s_objet).objet))
                   1006:                            .tableau)[k];
                   1007:                }
                   1008: 
                   1009:                free((real8 **) (*((struct_matrice *) (*s_objet).objet))
                   1010:                        .tableau);
                   1011:                free((struct_matrice *) (*s_objet).objet);
                   1012:                free(s_objet);
                   1013:                s_objet = NULL;
                   1014: 
                   1015:                (*((struct_matrice *) (*s_objet_statistique).objet)).type = 'R';
                   1016:                (*s_objet_statistique).type = MRL;
                   1017:            }
                   1018:        }
                   1019:    }
                   1020: 
                   1021:    /*
                   1022:     * Type incompatible en entrée
                   1023:     */
                   1024: 
                   1025:    else
                   1026:    {
                   1027:        liberation(s_etat_processus, s_objet);
                   1028: 
                   1029:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1030:        return;
                   1031:    }
                   1032: 
                   1033:    liberation(s_etat_processus, s_objet);
                   1034: 
                   1035:    return;
                   1036: }
                   1037: 
                   1038: 
                   1039: /*
                   1040: ================================================================================
                   1041:   Fonction 's-'
                   1042: ================================================================================
                   1043:   Entrées : structure processus
                   1044: --------------------------------------------------------------------------------
                   1045:   Sorties :
                   1046: --------------------------------------------------------------------------------
                   1047:   Effets de bord : néant
                   1048: ================================================================================
                   1049: */
                   1050: 
                   1051: void
                   1052: instruction_s_moins(struct_processus *s_etat_processus)
                   1053: {
                   1054:    logical1                            presence_variable;
                   1055: 
                   1056:    long                                i;
                   1057: 
                   1058:    struct_objet                        *s_copie_statistique;
                   1059:    struct_objet                        *s_objet;
                   1060:    struct_objet                        *s_objet_statistique;
                   1061: 
                   1062:    unsigned long                       nombre_colonnes;
                   1063:    unsigned long                       nombre_lignes;
                   1064: 
                   1065:    void                                *tampon;
                   1066: 
                   1067:    (*s_etat_processus).erreur_execution = d_ex;
                   1068: 
                   1069:    if ((*s_etat_processus).affichage_arguments == 'Y')
                   1070:    {
                   1071:        printf("\n  S- ");
                   1072: 
                   1073:        if ((*s_etat_processus).langue == 'F')
                   1074:        {
                   1075:            printf("(retrait une donnée dans la matrice statistique)\n\n");
                   1076:        }
                   1077:        else
                   1078:        {
                   1079:            printf("(remove a data value from statistical matrix)\n\n");
                   1080:        }
                   1081: 
                   1082:        printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
                   1083: 
                   1084:        return;
                   1085:    }
                   1086:    else if ((*s_etat_processus).test_instruction == 'Y')
                   1087:    {
                   1088:        (*s_etat_processus).nombre_arguments = -1;
                   1089:        return;
                   1090:    }
                   1091:    
                   1092:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                   1093:    {
                   1094:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                   1095:        {
                   1096:            return;
                   1097:        }
                   1098:    }
                   1099: 
                   1100:    /*
                   1101:     * Recherche d'une variable globale référencée par SIGMA
                   1102:     */
                   1103: 
                   1104:    if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
                   1105:    {
                   1106:        /*
                   1107:         * Aucune variable SIGMA
                   1108:         */
                   1109: 
                   1110:        (*s_etat_processus).erreur_systeme = d_es;
                   1111:        (*s_etat_processus).erreur_execution = d_ex_absence_observations;
                   1112:        return;
                   1113:    }
                   1114:    else
                   1115:    {
                   1116:        /*
                   1117:         * Il existe une variable locale SIGMA. Reste à vérifier l'existence
                   1118:         * d'une variable SIGMA globale...
                   1119:         */
                   1120: 
                   1121:        i = (*s_etat_processus).position_variable_courante;
                   1122:        presence_variable = d_faux;
                   1123: 
                   1124:        while(i >= 0)
                   1125:        {
                   1126:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
                   1127:                    ds_sdat) == 0) && ((*s_etat_processus)
                   1128:                    .s_liste_variables[i].niveau == 1))
                   1129:            {
                   1130:                presence_variable = d_vrai;
                   1131:                break;
                   1132:            }
                   1133: 
                   1134:            i--;
                   1135:        }
                   1136: 
                   1137:        if (presence_variable == d_faux)
                   1138:        {
                   1139:            (*s_etat_processus).erreur_execution = d_ex_absence_observations;
                   1140:            return;
                   1141:        }
                   1142:        else
                   1143:        {
                   1144:            (*s_etat_processus).position_variable_courante = i;
                   1145: 
                   1146:            if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
                   1147:                    .position_variable_courante].variable_verrouillee ==
                   1148:                    d_vrai)
                   1149:            {
                   1150:                (*s_etat_processus).erreur_execution =
                   1151:                        d_ex_variable_verrouillee;
                   1152:                return;
                   1153:            }
                   1154: 
                   1155:            if ((*s_etat_processus).s_liste_variables[i].objet == NULL)
                   1156:            {
                   1157:                (*s_etat_processus).erreur_execution = d_ex_variable_partagee;
                   1158:                return;
                   1159:            }
                   1160: 
                   1161:            if (((*((*s_etat_processus).s_liste_variables
                   1162:                    [(*s_etat_processus).position_variable_courante].objet))
                   1163:                    .type != MIN) && ((*((*s_etat_processus)
                   1164:                    .s_liste_variables[(*s_etat_processus)
                   1165:                    .position_variable_courante].objet)).type != MRL))
                   1166:            {
                   1167:                (*s_etat_processus).erreur_execution =
                   1168:                        d_ex_matrice_statistique_invalide;
                   1169:                return;
                   1170:            }
                   1171: 
                   1172:            if ((s_copie_statistique = copie_objet(s_etat_processus,
                   1173:                    (*s_etat_processus)
                   1174:                    .s_liste_variables[(*s_etat_processus)
                   1175:                    .position_variable_courante].objet, 'O')) == NULL)
                   1176:            {
                   1177:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1178:                return;
                   1179:            }
                   1180: 
                   1181:            liberation(s_etat_processus, (*s_etat_processus).s_liste_variables
                   1182:                    [(*s_etat_processus).position_variable_courante].objet);
                   1183:            (*s_etat_processus).s_liste_variables[(*s_etat_processus)
                   1184:                    .position_variable_courante].objet = s_copie_statistique;
                   1185: 
                   1186:            nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
                   1187:                    .s_liste_variables[(*s_etat_processus)
                   1188:                    .position_variable_courante].objet)).objet))
                   1189:                    .nombre_colonnes;
                   1190: 
                   1191:            nombre_lignes = (*((struct_matrice *) (*((*s_etat_processus)
                   1192:                    .s_liste_variables[(*s_etat_processus)
                   1193:                    .position_variable_courante].objet)).objet))
                   1194:                    .nombre_lignes;
                   1195:        }
                   1196:    }
                   1197: 
                   1198:    s_objet_statistique = ((*s_etat_processus).s_liste_variables
                   1199:            [(*s_etat_processus).position_variable_courante]).objet;
                   1200: 
                   1201:    if ((*s_objet_statistique).type == MIN)
                   1202:    {
                   1203:        if (nombre_colonnes == 1)
                   1204:        {
                   1205:            /*
                   1206:             * Formation d'un entier
                   1207:             */
                   1208: 
                   1209:            if ((s_objet = allocation(s_etat_processus, NON)) == NULL)
                   1210:            {
                   1211:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1212:                return;
                   1213:            }
                   1214: 
                   1215:            (*s_objet).type = INT;
                   1216: 
                   1217:            if (nombre_lignes == 1)
                   1218:            {
                   1219:                if (((*s_objet).objet = malloc(sizeof(integer8))) == NULL)
                   1220:                {
                   1221:                    (*s_etat_processus).erreur_systeme =
                   1222:                            d_es_allocation_memoire;
                   1223:                    return;
                   1224:                }
                   1225: 
                   1226:                (*((integer8 *) (*s_objet).objet)) = ((integer8 **)
                   1227:                        (*((struct_matrice *) (*s_objet_statistique).objet))
                   1228:                        .tableau)[nombre_lignes - 1][0];
                   1229:            }
                   1230:            else
                   1231:            {
                   1232:                (*s_objet).objet = ((integer8 **)
                   1233:                        (*((struct_matrice *) (*s_objet_statistique).objet))
                   1234:                        .tableau)[nombre_lignes - 1];
                   1235:            }
                   1236:        }
                   1237:        else
                   1238:        {
                   1239:            /*
                   1240:             * Formation d'un vecteur d'entiers
                   1241:             */
                   1242: 
                   1243:            if ((s_objet = allocation(s_etat_processus, NON)) == NULL)
                   1244:            {
                   1245:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1246:                return;
                   1247:            }
                   1248: 
                   1249:            if (((*s_objet).objet = malloc(sizeof(struct_vecteur))) == NULL)
                   1250:            {
                   1251:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1252:                return;
                   1253:            }
                   1254: 
                   1255:            (*s_objet).type = VIN;
                   1256:            (*((struct_vecteur *) (*s_objet).objet)).type = 'I';
                   1257:            (*((struct_vecteur *) (*s_objet).objet)).taille = nombre_colonnes;
                   1258: 
                   1259:            if (nombre_lignes == 1)
                   1260:            {
                   1261:                if (((*((struct_vecteur *) (*s_objet).objet))
                   1262:                        .tableau = malloc(nombre_colonnes *
                   1263:                        sizeof(integer8))) == NULL)
                   1264:                {
                   1265:                    (*s_etat_processus).erreur_systeme =
                   1266:                            d_es_allocation_memoire;
                   1267:                    return;
                   1268:                }
                   1269: 
                   1270:                for(i = 0; i < (long) nombre_colonnes; i++)
                   1271:                {
                   1272:                    ((integer8 *) (*((struct_vecteur *) (*s_objet).objet))
                   1273:                            .tableau)[i] = ((integer8 **) (*((struct_matrice *)
                   1274:                            (*s_objet_statistique).objet)).tableau)
                   1275:                            [nombre_lignes - 1][i];
                   1276:                }
                   1277:            }
                   1278:            else
                   1279:            {
                   1280:                (*((struct_vecteur *) (*s_objet).objet)).tableau =
                   1281:                        ((integer8 **) (*((struct_matrice *)
                   1282:                        (*s_objet_statistique).objet)).tableau)
                   1283:                        [nombre_lignes - 1];
                   1284:            }
                   1285:        }
                   1286: 
                   1287:        if (nombre_lignes == 1)
                   1288:        {
                   1289:            /*
                   1290:             * Destruction de la variable globale SIGMA
                   1291:             */
                   1292: 
                   1293:            if (retrait_variable(s_etat_processus, ds_sdat, 'G') == d_erreur)
                   1294:            {
                   1295:                return;
                   1296:            }
                   1297:        }
                   1298:        else
                   1299:        {
                   1300:            /*
                   1301:             * Elimination de la dernière ligne de la matrice SIGMA
                   1302:             */
                   1303: 
                   1304:            tampon = (*((struct_matrice *) (*s_objet_statistique)
                   1305:                    .objet)).tableau;
                   1306:            (*((struct_matrice *) (*s_objet_statistique).objet))
                   1307:                    .nombre_lignes--;
                   1308: 
                   1309:            if (((*((struct_matrice *) (*s_objet_statistique)
                   1310:                    .objet)).tableau = malloc(
                   1311:                    (*((struct_matrice *) (*s_objet_statistique).objet))
                   1312:                    .nombre_lignes * sizeof(integer8 *))) == NULL)
                   1313:            {
                   1314:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1315:                return;
                   1316:            }
                   1317: 
                   1318:            for(i = 0; i < (long) (*((struct_matrice *) (*s_objet_statistique)
                   1319:                    .objet)).nombre_lignes; i++)
                   1320:            {
                   1321:                ((integer8 **) (*((struct_matrice *) (*s_objet_statistique)
                   1322:                        .objet)).tableau)[i] = ((integer8 **) tampon)[i];
                   1323:            }
                   1324: 
                   1325:            free(tampon);
                   1326:        }
                   1327:    }
                   1328:    else if ((*s_objet_statistique).type == MRL)
                   1329:    {
                   1330:        if (nombre_colonnes == 1)
                   1331:        {
                   1332:            /*
                   1333:             * Formation d'un réel
                   1334:             */
                   1335: 
                   1336:            if ((s_objet = allocation(s_etat_processus, NON)) == NULL)
                   1337:            {
                   1338:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1339:                return;
                   1340:            }
                   1341: 
                   1342:            (*s_objet).type = REL;
                   1343: 
                   1344:            if (nombre_lignes == 1)
                   1345:            {
                   1346:                if (((*s_objet).objet = malloc(sizeof(real8)))
                   1347:                        == NULL)
                   1348:                {
                   1349:                    (*s_etat_processus).erreur_systeme =
                   1350:                            d_es_allocation_memoire;
                   1351:                    return;
                   1352:                }
                   1353: 
                   1354:                (*((real8 *) (*s_objet).objet)) = ((real8 **)
                   1355:                        (*((struct_matrice *) (*s_objet_statistique).objet))
                   1356:                        .tableau)[nombre_lignes - 1][0];
                   1357:            }
                   1358:            else
                   1359:            {
                   1360:                (*s_objet).objet = ((real8 **)
                   1361:                        (*((struct_matrice *) (*s_objet_statistique).objet))
                   1362:                        .tableau)[nombre_lignes - 1];
                   1363:            }
                   1364:        }
                   1365:        else
                   1366:        {
                   1367:            /*
                   1368:             * Formation d'un vecteur de réels
                   1369:             */
                   1370: 
                   1371:            if ((s_objet = allocation(s_etat_processus, NON)) == NULL)
                   1372:            {
                   1373:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1374:                return;
                   1375:            }
                   1376: 
                   1377:            if (((*s_objet).objet = malloc(sizeof(struct_vecteur))) == NULL)
                   1378:            {
                   1379:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1380:                return;
                   1381:            }
                   1382: 
                   1383:            (*s_objet).type = VRL;
                   1384:            (*((struct_vecteur *) (*s_objet).objet)).type = 'R';
                   1385:            (*((struct_vecteur *) (*s_objet).objet)).taille = nombre_colonnes;
                   1386: 
                   1387:            if (nombre_lignes == 1)
                   1388:            {
                   1389:                if (((*((struct_vecteur *) (*s_objet).objet))
                   1390:                        .tableau = malloc(nombre_colonnes *
                   1391:                        sizeof(real8))) == NULL)
                   1392:                {
                   1393:                    (*s_etat_processus).erreur_systeme =
                   1394:                            d_es_allocation_memoire;
                   1395:                    return;
                   1396:                }
                   1397: 
                   1398:                for(i = 0; i < (long) nombre_colonnes; i++)
                   1399:                {
                   1400:                    ((real8 *) (*((struct_vecteur *) (*s_objet).objet))
                   1401:                            .tableau)[i] = ((real8 **) (*((struct_matrice *)
                   1402:                            (*s_objet_statistique).objet)).tableau)
                   1403:                            [nombre_lignes - 1][i];
                   1404:                }
                   1405:            }
                   1406:            else
                   1407:            {
                   1408:                (*((struct_vecteur *) (*s_objet).objet)).tableau =
                   1409:                        ((real8 **) (*((struct_matrice *)
                   1410:                        (*s_objet_statistique).objet)).tableau)
                   1411:                        [nombre_lignes - 1];
                   1412:            }
                   1413:        }
                   1414: 
                   1415:        if (nombre_lignes == 1)
                   1416:        {
                   1417:            /*
                   1418:             * Destruction de la variable globale SIGMA
                   1419:             */
                   1420: 
                   1421:            if (retrait_variable(s_etat_processus, ds_sdat, 'G') == d_erreur)
                   1422:            {
                   1423:                return;
                   1424:            }
                   1425:        }
                   1426:        else
                   1427:        {
                   1428:            /*
                   1429:             * Elimination de la dernière ligne de la matrice SIGMA
                   1430:             */
                   1431: 
                   1432:            tampon = (*((struct_matrice *) (*s_objet_statistique)
                   1433:                    .objet)).tableau;
                   1434:            (*((struct_matrice *) (*s_objet_statistique).objet))
                   1435:                    .nombre_lignes--;
                   1436: 
                   1437:            if (((*((struct_matrice *) (*s_objet_statistique).objet))
                   1438:                    .tableau = malloc((*((struct_matrice *)
                   1439:                    (*s_objet_statistique).objet)).nombre_lignes *
                   1440:                    sizeof(real8 *))) == NULL)
                   1441:            {
                   1442:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1443:                return;
                   1444:            }
                   1445: 
                   1446:            for(i = 0; i < (long) (*((struct_matrice *) (*s_objet_statistique)
                   1447:                    .objet)).nombre_lignes; i++)
                   1448:            {
                   1449:                ((real8 **) (*((struct_matrice *) (*s_objet_statistique)
                   1450:                        .objet)).tableau)[i] = ((real8 **) tampon)[i];
                   1451:            }
                   1452: 
                   1453:            free(tampon);
                   1454:        }
                   1455:    }
                   1456:    else
                   1457:    {
                   1458:        (*s_etat_processus).erreur_execution =
                   1459:                d_ex_matrice_statistique_invalide;
                   1460:        return;
                   1461:    }
                   1462: 
                   1463:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1464:            s_objet) == d_erreur)
                   1465:    {
                   1466:        return;
                   1467:    }
                   1468: 
                   1469:    return;
                   1470: }
                   1471: 
                   1472: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>