Annotation of rpl/src/instructions_p5.c, revision 1.2

1.1       bertrand    1: /*
                      2: ================================================================================
1.2     ! bertrand    3:   RPL/2 (R) version 4.0.10
1.1       bertrand    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 'pcov'
                     29: ================================================================================
                     30:   Entrées :
                     31: --------------------------------------------------------------------------------
                     32:   Sorties :
                     33: --------------------------------------------------------------------------------
                     34:   Effets de bord : néant
                     35: ================================================================================
                     36: */
                     37: 
                     38: void
                     39: instruction_pcov(struct_processus *s_etat_processus)
                     40: {
                     41:    integer8                            nombre_colonnes;
                     42: 
                     43:    logical1                            erreur;
                     44:    logical1                            presence_variable;
                     45: 
                     46:    long                                i;
                     47: 
                     48:    struct_objet                        *s_objet_statistique;
                     49:    struct_objet                        *s_objet_resultat;
                     50: 
                     51:    (*s_etat_processus).erreur_execution = d_ex;
                     52: 
                     53:    if ((*s_etat_processus).affichage_arguments == 'Y')
                     54:    {
                     55:        printf("\n  PCOV ");
                     56: 
                     57:        if ((*s_etat_processus).langue == 'F')
                     58:        {
                     59:            printf("(covariance d'une population)\n\n");
                     60:        }
                     61:        else
                     62:        {
                     63:            printf("(population covariance)\n\n");
                     64:        }
                     65: 
                     66:        printf("->  1: %s\n", d_REL);
                     67: 
                     68:        return;
                     69:    }
                     70:    else if ((*s_etat_processus).test_instruction == 'Y')
                     71:    {
                     72:        (*s_etat_processus).nombre_arguments = -1;
                     73:        return;
                     74:    }
                     75: 
                     76:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                     77:    {
                     78:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                     79:        {
                     80:            return;
                     81:        }
                     82:    }
                     83: 
                     84:    /*
                     85:     * Recherche d'une variable globale référencée par SIGMA
                     86:     */
                     87: 
                     88:    if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)
                     89:    {
                     90:        /*
                     91:         * Aucune variable SIGMA
                     92:         */
                     93: 
                     94:        (*s_etat_processus).erreur_systeme = d_es;
                     95:        (*s_etat_processus).erreur_execution = d_ex_absence_observations;
                     96:        return;
                     97:    }
                     98:    else
                     99:    {
                    100:        /*
                    101:         * Il existe une variable locale SIGMA. Reste à vérifier l'existence
                    102:         * d'une variable SIGMA globale...
                    103:         */
                    104: 
                    105:        i = (*s_etat_processus).position_variable_courante;
                    106:        presence_variable = d_faux;
                    107: 
                    108:        while(i >= 0)
                    109:        {
                    110:            if ((strcmp((*s_etat_processus).s_liste_variables[i].nom,
                    111:                    ds_sdat) == 0) && ((*s_etat_processus)
                    112:                    .s_liste_variables[i].niveau == 1))
                    113:            {
                    114:                presence_variable = d_vrai;
                    115:                break;
                    116:            }
                    117: 
                    118:            i--;
                    119:        }
                    120: 
                    121:        if (presence_variable == d_faux)
                    122:        {
                    123:            (*s_etat_processus).erreur_execution = d_ex_absence_observations;
                    124:            return;
                    125:        }
                    126:        else
                    127:        {
                    128:            (*s_etat_processus).position_variable_courante = i;
                    129: 
                    130:            if (((*s_etat_processus).s_liste_variables[i]).objet == NULL)
                    131:            {
                    132:                (*s_etat_processus).erreur_execution =
                    133:                        d_ex_variable_partagee;
                    134:                return;
                    135:            }
                    136: 
                    137:            if (((*((*s_etat_processus).s_liste_variables
                    138:                    [(*s_etat_processus).position_variable_courante].objet))
                    139:                    .type != MIN) && ((*((*s_etat_processus)
                    140:                    .s_liste_variables[(*s_etat_processus)
                    141:                    .position_variable_courante].objet)).type != MRL))
                    142:            {
                    143:                (*s_etat_processus).erreur_execution =
                    144:                        d_ex_matrice_statistique_invalide;
                    145:                return;
                    146:            }
                    147: 
                    148:            nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)
                    149:                    .s_liste_variables[(*s_etat_processus)
                    150:                    .position_variable_courante].objet)).objet))
                    151:                    .nombre_colonnes;
                    152:        }
                    153:    }
                    154: 
                    155:    s_objet_statistique = ((*s_etat_processus).s_liste_variables
                    156:            [(*s_etat_processus).position_variable_courante]).objet;
                    157: 
                    158:    if (((*s_objet_statistique).type == MIN) ||
                    159:            ((*s_objet_statistique).type == MRL))
                    160:    {
                    161:        if (((*s_etat_processus).colonne_statistique_1 < 1) ||
                    162:                ((*s_etat_processus).colonne_statistique_2 < 1) ||
                    163:                ((*s_etat_processus).colonne_statistique_1 > nombre_colonnes) ||
                    164:                ((*s_etat_processus).colonne_statistique_2 > nombre_colonnes))
                    165:        {
                    166:            (*s_etat_processus).erreur_execution =
                    167:                    d_ex_observations_inexistantes;
                    168:            return;
                    169:        }
                    170: 
                    171:        if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
                    172:        {
                    173:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    174:            return;
                    175:        }
                    176: 
                    177:        (*((real8 *) (*s_objet_resultat).objet)) = covariance_statistique(
                    178:                (struct_matrice *) (*s_objet_statistique).objet,
                    179:                (*s_etat_processus).colonne_statistique_1,
                    180:                (*s_etat_processus).colonne_statistique_2, 'N', &erreur);
                    181: 
                    182:        if (erreur == d_erreur)
                    183:        {
                    184:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    185:            return;
                    186:        }
                    187:    }
                    188:    else
                    189:    {
                    190:        (*s_etat_processus).erreur_execution =
                    191:                d_ex_matrice_statistique_invalide;
                    192:        return;
                    193:    }
                    194: 
                    195:    if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    196:            s_objet_resultat) == d_erreur)
                    197:    {
                    198:        return;
                    199:    }
                    200: 
                    201:    return;
                    202: }
                    203: 
                    204: 
                    205: /*
                    206: ================================================================================
                    207:   Fonction 'prlcd'
                    208: ================================================================================
                    209:   Entrées :
                    210: --------------------------------------------------------------------------------
                    211:   Sorties :
                    212: --------------------------------------------------------------------------------
                    213:   Effets de bord : néant
                    214: ================================================================================
                    215: */
                    216: 
                    217: void
                    218: instruction_prlcd(struct_processus *s_etat_processus)
                    219: {
                    220:    (*s_etat_processus).erreur_execution = d_ex;
                    221: 
                    222:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    223:    {
                    224:        printf("\n  PRLCD ");
                    225: 
                    226:        if ((*s_etat_processus).langue == 'F')
                    227:        {
                    228:            printf("(impression puis destruction de la file graphique)\n\n");
                    229:            printf("  Aucun argument\n");
                    230:        }
                    231:        else
                    232:        {
                    233:            printf("(print and purge the graphical queue)\n\n");
                    234:            printf("  No argument\n");
                    235:        }
                    236: 
                    237:        return;
                    238:    }
                    239:    else if ((*s_etat_processus).test_instruction == 'Y')
                    240:    {
                    241:        (*s_etat_processus).nombre_arguments = -1;
                    242:        return;
                    243:    }
                    244: 
                    245:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    246:    {
                    247:        if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
                    248:        {
                    249:            return;
                    250:        }
                    251:    }
                    252: 
                    253:    appel_gnuplot(s_etat_processus, 'I');
                    254: 
                    255:    (*s_etat_processus).exception = d_ep;
                    256: 
                    257:    return;
                    258: }
                    259: 
                    260: 
                    261: /*
                    262: ================================================================================
                    263:   Fonction 'putc'
                    264: ================================================================================
                    265:   Entrées :
                    266: --------------------------------------------------------------------------------
                    267:   Sorties :
                    268: --------------------------------------------------------------------------------
                    269:   Effets de bord : néant
                    270: ================================================================================
                    271: */
                    272: 
                    273: void
                    274: instruction_putc(struct_processus *s_etat_processus)
                    275: {
                    276:    integer8                        position;
                    277: 
                    278:    logical1                        presence_nom;
                    279:    logical1                        variable_partagee;
                    280: 
                    281:    struct_liste_chainee            *l_element_courant;
                    282: 
                    283:    struct_objet                    *s_copie_argument_3;
                    284:    struct_objet                    *s_objet_argument_1;
                    285:    struct_objet                    *s_objet_argument_2;
                    286:    struct_objet                    *s_objet_argument_3;
                    287: 
                    288:    unsigned long                   i;
                    289:    unsigned long                   j;
                    290:    unsigned long                   nombre_elements;
                    291: 
                    292:    void                            *tampon;
                    293: 
                    294:    (*s_etat_processus).erreur_execution = d_ex;
                    295: 
                    296:    if ((*s_etat_processus).affichage_arguments == 'Y')
                    297:    {
                    298:        printf("\n  PUTC ");
                    299: 
                    300:        if ((*s_etat_processus).langue == 'F')
                    301:        {
                    302:            printf("(change une colonne)\n\n");
                    303:        }
                    304:        else
                    305:        {
                    306:            printf("(change column)\n\n");
                    307:        }
                    308: 
                    309:        printf("    3: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                    310:        printf("    2: %s\n", d_LST);
                    311:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                    312:        printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
                    313: 
                    314:        printf("    3: %s\n", d_NOM);
                    315:        printf("    2: %s\n", d_LST);
                    316:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                    317: 
                    318:        return;
                    319:    }
                    320:    else if ((*s_etat_processus).test_instruction == 'Y')
                    321:    {
                    322:        (*s_etat_processus).nombre_arguments = -1;
                    323:        return;
                    324:    }
                    325: 
                    326:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                    327:    {
                    328:        if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
                    329:        {
                    330:            return;
                    331:        }
                    332:    }
                    333: 
                    334:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    335:            &s_objet_argument_1) == d_erreur)
                    336:    {
                    337:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    338:        return;
                    339:    }
                    340: 
                    341:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    342:            &s_objet_argument_2) == d_erreur)
                    343:    {
                    344:        liberation(s_etat_processus, s_objet_argument_1);
                    345: 
                    346:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    347:        return;
                    348:    }
                    349: 
                    350:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                    351:            &s_objet_argument_3) == d_erreur)
                    352:    {
                    353:        liberation(s_etat_processus, s_objet_argument_1);
                    354:        liberation(s_etat_processus, s_objet_argument_2);
                    355: 
                    356:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                    357:        return;
                    358:    }
                    359: 
                    360:    if (((*s_objet_argument_1).type != MIN) &&
                    361:            ((*s_objet_argument_1).type != MRL) &&
                    362:            ((*s_objet_argument_1).type != MCX))
                    363:    {
                    364:        liberation(s_etat_processus, s_objet_argument_1);
                    365:        liberation(s_etat_processus, s_objet_argument_2);
                    366:        liberation(s_etat_processus, s_objet_argument_3);
                    367: 
                    368:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    369:        return;
                    370:    }
                    371: 
                    372:    if ((*s_objet_argument_2).type != LST)
                    373:    {
                    374:        liberation(s_etat_processus, s_objet_argument_1);
                    375:        liberation(s_etat_processus, s_objet_argument_2);
                    376:        liberation(s_etat_processus, s_objet_argument_3);
                    377: 
                    378:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    379:        return;
                    380:    }
                    381: 
                    382:    nombre_elements = 0;
                    383:    l_element_courant = (struct_liste_chainee *) (*s_objet_argument_2).objet;
                    384: 
                    385:    while(l_element_courant != NULL)
                    386:    {
                    387:        if ((*(*l_element_courant).donnee).type != INT)
                    388:        {
                    389:            liberation(s_etat_processus, s_objet_argument_1);
                    390:            liberation(s_etat_processus, s_objet_argument_2);
                    391:            liberation(s_etat_processus, s_objet_argument_3);
                    392: 
                    393:            (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                    394:            return;
                    395:        }
                    396: 
                    397:        nombre_elements++;
                    398:        l_element_courant = (*l_element_courant).suivant;
                    399:    }
                    400: 
                    401:    if ((nombre_elements == 0) || (nombre_elements != (*((struct_matrice *)
                    402:            (*s_objet_argument_1).objet)).nombre_colonnes))
                    403:    {
                    404:        liberation(s_etat_processus, s_objet_argument_1);
                    405:        liberation(s_etat_processus, s_objet_argument_2);
                    406:        liberation(s_etat_processus, s_objet_argument_3);
                    407: 
                    408:        (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                    409:        return;
                    410:    }
                    411: 
                    412:    variable_partagee = d_faux;
                    413: 
                    414:    if ((*s_objet_argument_3).type == NOM)
                    415:    {
                    416:        presence_nom = d_vrai;
                    417: 
                    418:        if (recherche_variable(s_etat_processus, (*((struct_nom *)
                    419:                (*s_objet_argument_3).objet)).nom) == d_faux)
                    420:        {
                    421:            (*s_etat_processus).erreur_systeme = d_es;
                    422:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
                    423: 
                    424:            liberation(s_etat_processus, s_objet_argument_1);
                    425:            liberation(s_etat_processus, s_objet_argument_2);
                    426:            liberation(s_etat_processus, s_objet_argument_3);
                    427: 
                    428:            return;
                    429:        }
                    430: 
                    431:        if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
                    432:                .position_variable_courante].variable_verrouillee == d_vrai)
                    433:        {
                    434:            (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
                    435: 
                    436:            liberation(s_etat_processus, s_objet_argument_1);
                    437:            liberation(s_etat_processus, s_objet_argument_2);
                    438:            liberation(s_etat_processus, s_objet_argument_3);
                    439: 
                    440:            return;
                    441:        }
                    442: 
                    443:        liberation(s_etat_processus, s_objet_argument_3);
                    444:        s_objet_argument_3 = (*s_etat_processus).s_liste_variables
                    445:                [(*s_etat_processus).position_variable_courante].objet;
                    446: 
                    447:        if (s_objet_argument_3 == NULL)
                    448:        {
                    449:            if (pthread_mutex_lock(&((*(*s_etat_processus)
                    450:                    .s_liste_variables_partagees).mutex)) != 0)
                    451:            {
                    452:                (*s_etat_processus).erreur_systeme = d_es_processus;
                    453:                return;
                    454:            }
                    455: 
                    456:            if (recherche_variable_partagee(s_etat_processus,
                    457:                    (*s_etat_processus).s_liste_variables
                    458:                    [(*s_etat_processus).position_variable_courante].nom,
                    459:                    (*s_etat_processus).s_liste_variables
                    460:                    [(*s_etat_processus).position_variable_courante]
                    461:                    .variable_partagee, (*s_etat_processus).s_liste_variables
                    462:                    [(*s_etat_processus).position_variable_courante].origine)
                    463:                    == d_faux)
                    464:            {
                    465:                if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    466:                        .s_liste_variables_partagees).mutex)) != 0)
                    467:                {
                    468:                    (*s_etat_processus).erreur_systeme = d_es_processus;
                    469:                    return;
                    470:                }
                    471: 
                    472:                (*s_etat_processus).erreur_systeme = d_es;
                    473:                (*s_etat_processus).erreur_execution =
                    474:                        d_ex_variable_non_definie;
                    475: 
                    476:                liberation(s_etat_processus, s_objet_argument_1);
                    477:                liberation(s_etat_processus, s_objet_argument_2);
                    478: 
                    479:                return;
                    480:            }
                    481: 
                    482:            s_objet_argument_3 = (*(*s_etat_processus)
                    483:                    .s_liste_variables_partagees).table[(*(*s_etat_processus)
                    484:                    .s_liste_variables_partagees).position_variable].objet;
                    485:            variable_partagee = d_vrai;
                    486:        }
                    487: 
                    488:        if ((s_copie_argument_3 = copie_objet(s_etat_processus,
                    489:                s_objet_argument_3, 'O')) == NULL)
                    490:        {
                    491:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    492:            return;
                    493:        }
                    494: 
                    495:        liberation(s_etat_processus, s_objet_argument_3);
                    496:        s_objet_argument_3 = s_copie_argument_3;
                    497: 
                    498:        (*s_etat_processus).s_liste_variables[(*s_etat_processus)
                    499:                .position_variable_courante].objet = s_objet_argument_3;
                    500:    }
                    501:    else
                    502:    {
                    503:        presence_nom = d_faux;
                    504: 
                    505:        if ((s_copie_argument_3 = copie_objet(s_etat_processus,
                    506:                s_objet_argument_3, 'O')) == NULL)
                    507:        {
                    508:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    509:            return;
                    510:        }
                    511: 
                    512:        liberation(s_etat_processus, s_objet_argument_3);
                    513:        s_objet_argument_3 = s_copie_argument_3;
                    514:    }
                    515: 
                    516:    if ((*s_objet_argument_1).type == MRL)
                    517:    {
                    518:        if ((*s_objet_argument_3).type == MIN)
                    519:        {
                    520:            // Conversion de la matrice entière en matrice réelle
                    521: 
                    522:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                    523:                    .nombre_lignes; i++)
                    524:            {
                    525:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                    526:                        .tableau[i];
                    527: 
                    528:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                    529:                        .tableau[i] = malloc((*((struct_matrice *)
                    530:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                    531:                        sizeof(real8))) == NULL)
                    532:                {
                    533:                    if (variable_partagee == d_vrai)
                    534:                    {
                    535:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    536:                                .s_liste_variables_partagees).mutex)) != 0)
                    537:                        {
                    538:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    539:                            return;
                    540:                        }
                    541:                    }
                    542: 
                    543:                    (*s_etat_processus).erreur_systeme =
                    544:                            d_es_allocation_memoire;
                    545:                    return;
                    546:                }
                    547: 
                    548:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    549:                        .objet)).nombre_colonnes; j++)
                    550:                {
                    551:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                    552:                            .objet)).tableau)[i][j] = (real8) (((integer8 *)
                    553:                            tampon)[j]);
                    554:                }
                    555: 
                    556:                free(tampon);
                    557:            }
                    558: 
                    559:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'R';
                    560:            (*s_objet_argument_3).type = MRL;
                    561:        }
                    562:    }
                    563:    else if ((*s_objet_argument_1).type == MCX)
                    564:    {
                    565:        if ((*s_objet_argument_3).type == MIN)
                    566:        {
                    567:            // Conversion de la matrice entière en matrice complexe
                    568: 
                    569:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                    570:                    .nombre_lignes; i++)
                    571:            {
                    572:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                    573:                        .tableau[i];
                    574: 
                    575:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                    576:                        .tableau[i] = malloc((*((struct_matrice *)
                    577:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                    578:                        sizeof(complex16))) == NULL)
                    579:                {
                    580:                    if (variable_partagee == d_vrai)
                    581:                    {
                    582:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    583:                                .s_liste_variables_partagees).mutex)) != 0)
                    584:                        {
                    585:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    586:                            return;
                    587:                        }
                    588:                    }
                    589: 
                    590:                    (*s_etat_processus).erreur_systeme =
                    591:                            d_es_allocation_memoire;
                    592:                    return;
                    593:                }
                    594: 
                    595:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    596:                        .objet)).nombre_colonnes; j++)
                    597:                {
                    598:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    599:                            .objet)).tableau)[i][j].partie_reelle =
                    600:                            (real8) (((integer8 *) tampon)[j]);
                    601:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    602:                            .objet)).tableau)[i][j].partie_imaginaire = 0;
                    603:                }
                    604: 
                    605:                free(tampon);
                    606:            }
                    607: 
                    608:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'C';
                    609:            (*s_objet_argument_3).type = MCX;
                    610:        }
                    611:        else if ((*s_objet_argument_3).type == MRL)
                    612:        {
                    613:            // Conversion de la matrice réelle en matrice complexe
                    614: 
                    615:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                    616:                    .nombre_lignes; i++)
                    617:            {
                    618:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                    619:                        .tableau[i];
                    620: 
                    621:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                    622:                        .tableau[i] = malloc((*((struct_matrice *)
                    623:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                    624:                        sizeof(complex16))) == NULL)
                    625:                {
                    626:                    if (variable_partagee == d_vrai)
                    627:                    {
                    628:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    629:                                .s_liste_variables_partagees).mutex)) != 0)
                    630:                        {
                    631:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    632:                            return;
                    633:                        }
                    634:                    }
                    635: 
                    636:                    (*s_etat_processus).erreur_systeme =
                    637:                            d_es_allocation_memoire;
                    638:                    return;
                    639:                }
                    640: 
                    641:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    642:                        .objet)).nombre_colonnes; j++)
                    643:                {
                    644:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    645:                            .objet)).tableau)[i][j].partie_reelle =
                    646:                            ((real8 *) tampon)[j];
                    647:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    648:                            .objet)).tableau)[i][j].partie_imaginaire = 0;
                    649:                }
                    650: 
                    651:                free(tampon);
                    652:            }
                    653: 
                    654:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'C';
                    655:            (*s_objet_argument_3).type = MCX;
                    656:        }
                    657:    }
                    658: 
                    659:    if ((*s_objet_argument_3).type == MIN)
                    660:    {
                    661:        if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes
                    662:                != (*((struct_matrice *) (*s_objet_argument_3).objet))
                    663:                .nombre_lignes)
                    664:        {
                    665:            if (variable_partagee == d_vrai)
                    666:            {
                    667:                if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    668:                        .s_liste_variables_partagees).mutex)) != 0)
                    669:                {
                    670:                    (*s_etat_processus).erreur_systeme = d_es_processus;
                    671:                    return;
                    672:                }
                    673:            }
                    674: 
                    675:            liberation(s_etat_processus, s_objet_argument_1);
                    676:            liberation(s_etat_processus, s_objet_argument_2);
                    677: 
                    678:            if (presence_nom == d_faux)
                    679:            {
                    680:                liberation(s_etat_processus, s_objet_argument_3);
                    681:            }
                    682: 
                    683:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                    684:            return;
                    685:        }
                    686: 
                    687:        l_element_courant = (struct_liste_chainee *)
                    688:                (*s_objet_argument_2).objet;
                    689:        i = 0;
                    690: 
                    691:        while(l_element_courant != NULL)
                    692:        {
                    693:            position = (*((integer8 *) (*(*l_element_courant).donnee).objet));
                    694: 
                    695:            if ((position < 1) || (position > (integer8) (*((struct_matrice *)
                    696:                    (*s_objet_argument_3).objet)).nombre_colonnes))
                    697:            {
                    698:                if (variable_partagee == d_vrai)
                    699:                {
                    700:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    701:                            .s_liste_variables_partagees).mutex)) != 0)
                    702:                    {
                    703:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                    704:                        return;
                    705:                    }
                    706:                }
                    707: 
                    708:                liberation(s_etat_processus, s_objet_argument_1);
                    709:                liberation(s_etat_processus, s_objet_argument_2);
                    710: 
                    711:                if (presence_nom == d_faux)
                    712:                {
                    713:                    liberation(s_etat_processus, s_objet_argument_3);
                    714:                }
                    715: 
                    716:                (*s_etat_processus).erreur_execution =
                    717:                        d_ex_argument_invalide;
                    718:                return;
                    719:            }
                    720: 
                    721:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3).objet))
                    722:                    .nombre_lignes; j++)
                    723:            {
                    724:                ((integer8 **) (*((struct_matrice *) (*s_objet_argument_3)
                    725:                        .objet)).tableau)[j][position - 1] = ((integer8 **)
                    726:                        (*((struct_matrice *) (*s_objet_argument_1).objet))
                    727:                        .tableau)[j][i];
                    728:            }
                    729: 
                    730:            l_element_courant = (*l_element_courant).suivant;
                    731:            i++;
                    732:        }
                    733:    }
                    734:    else if ((*s_objet_argument_3).type == MRL)
                    735:    {
                    736:        if ((*s_objet_argument_1).type == MIN)
                    737:        {
                    738:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                    739:                    .nombre_lignes != (*((struct_matrice *)
                    740:                    (*s_objet_argument_3).objet)).nombre_lignes)
                    741:            {
                    742:                if (variable_partagee == d_vrai)
                    743:                {
                    744:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    745:                            .s_liste_variables_partagees).mutex)) != 0)
                    746:                    {
                    747:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                    748:                        return;
                    749:                    }
                    750:                }
                    751: 
                    752:                liberation(s_etat_processus, s_objet_argument_1);
                    753:                liberation(s_etat_processus, s_objet_argument_2);
                    754: 
                    755:                if (presence_nom == d_faux)
                    756:                {
                    757:                    liberation(s_etat_processus, s_objet_argument_3);
                    758:                }
                    759: 
                    760:                (*s_etat_processus).erreur_execution =
                    761:                        d_ex_dimensions_invalides;
                    762:                return;
                    763:            }
                    764: 
                    765:            l_element_courant = (struct_liste_chainee *)
                    766:                    (*s_objet_argument_2).objet;
                    767:            i = 0;
                    768: 
                    769:            while(l_element_courant != NULL)
                    770:            {
                    771:                position = (*((integer8 *) (*(*l_element_courant)
                    772:                        .donnee).objet));
                    773: 
                    774:                if ((position < 1) || (position > (integer8)
                    775:                        (*((struct_matrice *)(*s_objet_argument_3).objet))
                    776:                        .nombre_colonnes))
                    777:                {
                    778:                    if (variable_partagee == d_vrai)
                    779:                    {
                    780:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    781:                                .s_liste_variables_partagees).mutex)) != 0)
                    782:                        {
                    783:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    784:                            return;
                    785:                        }
                    786:                    }
                    787: 
                    788:                    liberation(s_etat_processus, s_objet_argument_1);
                    789:                    liberation(s_etat_processus, s_objet_argument_2);
                    790: 
                    791:                    if (presence_nom == d_faux)
                    792:                    {
                    793:                        liberation(s_etat_processus, s_objet_argument_3);
                    794:                    }
                    795: 
                    796:                    (*s_etat_processus).erreur_execution =
                    797:                            d_ex_erreur_type_argument;
                    798:                    return;
                    799:                }
                    800: 
                    801:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    802:                        .objet)).nombre_lignes; j++)
                    803:                {
                    804:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                    805:                            .objet)).tableau)[j][position - 1] = (real8)
                    806:                            ((integer8 **) (*((struct_matrice *)
                    807:                            (*s_objet_argument_1).objet)).tableau)[j][i];
                    808:                }
                    809: 
                    810:                l_element_courant = (*l_element_courant).suivant;
                    811:                i++;
                    812:            }
                    813:        }
                    814:        else // Matrice réelle
                    815:        {
                    816:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                    817:                    .nombre_lignes != (*((struct_matrice *)
                    818:                    (*s_objet_argument_3).objet)).nombre_lignes)
                    819:            {
                    820:                if (variable_partagee == d_vrai)
                    821:                {
                    822:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    823:                            .s_liste_variables_partagees).mutex)) != 0)
                    824:                    {
                    825:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                    826:                        return;
                    827:                    }
                    828:                }
                    829: 
                    830:                liberation(s_etat_processus, s_objet_argument_1);
                    831:                liberation(s_etat_processus, s_objet_argument_2);
                    832: 
                    833:                if (presence_nom == d_faux)
                    834:                {
                    835:                    liberation(s_etat_processus, s_objet_argument_3);
                    836:                }
                    837: 
                    838:                (*s_etat_processus).erreur_execution =
                    839:                        d_ex_dimensions_invalides;
                    840:                return;
                    841:            }
                    842: 
                    843:            l_element_courant = (struct_liste_chainee *)
                    844:                    (*s_objet_argument_2).objet;
                    845:            i = 0;
                    846: 
                    847:            while(l_element_courant != NULL)
                    848:            {
                    849:                position = (*((integer8 *) (*(*l_element_courant)
                    850:                        .donnee).objet));
                    851: 
                    852:                if ((position < 1) || (position > (integer8)
                    853:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                    854:                        .nombre_colonnes))
                    855:                {
                    856:                    if (variable_partagee == d_vrai)
                    857:                    {
                    858:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    859:                                .s_liste_variables_partagees).mutex)) != 0)
                    860:                        {
                    861:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    862:                            return;
                    863:                        }
                    864:                    }
                    865: 
                    866:                    liberation(s_etat_processus, s_objet_argument_1);
                    867:                    liberation(s_etat_processus, s_objet_argument_2);
                    868: 
                    869:                    if (presence_nom == d_faux)
                    870:                    {
                    871:                        liberation(s_etat_processus, s_objet_argument_3);
                    872:                    }
                    873: 
                    874:                    (*s_etat_processus).erreur_execution =
                    875:                            d_ex_argument_invalide;
                    876:                    return;
                    877:                }
                    878: 
                    879:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    880:                        .objet)).nombre_lignes; j++)
                    881:                {
                    882:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                    883:                            .objet)).tableau)[j][position - 1] =
                    884:                            ((real8 **) (*((struct_matrice *)
                    885:                            (*s_objet_argument_1).objet)).tableau)[j][i];
                    886:                }
                    887: 
                    888:                l_element_courant = (*l_element_courant).suivant;
                    889:                i++;
                    890:            }
                    891:        }
                    892:    }
                    893:    else if ((*s_objet_argument_3).type == MCX)
                    894:    {
                    895:        if ((*s_objet_argument_1).type == MIN)
                    896:        {
                    897:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                    898:                    .nombre_lignes != (*((struct_matrice *)
                    899:                    (*s_objet_argument_3).objet)).nombre_lignes)
                    900:            {
                    901:                if (variable_partagee == d_vrai)
                    902:                {
                    903:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    904:                            .s_liste_variables_partagees).mutex)) != 0)
                    905:                    {
                    906:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                    907:                        return;
                    908:                    }
                    909:                }
                    910: 
                    911:                liberation(s_etat_processus, s_objet_argument_1);
                    912:                liberation(s_etat_processus, s_objet_argument_2);
                    913: 
                    914:                if (presence_nom == d_faux)
                    915:                {
                    916:                    liberation(s_etat_processus, s_objet_argument_3);
                    917:                }
                    918: 
                    919:                (*s_etat_processus).erreur_execution =
                    920:                        d_ex_dimensions_invalides;
                    921:                return;
                    922:            }
                    923: 
                    924:            l_element_courant = (struct_liste_chainee *)
                    925:                    (*s_objet_argument_2).objet;
                    926:            i = 0;
                    927: 
                    928:            while(l_element_courant != NULL)
                    929:            {
                    930:                position = (*((integer8 *) (*(*l_element_courant)
                    931:                        .donnee).objet));
                    932: 
                    933:                if ((position < 1) || (position > (integer8)
                    934:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                    935:                        .nombre_colonnes))
                    936:                {
                    937:                    if (variable_partagee == d_vrai)
                    938:                    {
                    939:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    940:                                .s_liste_variables_partagees).mutex)) != 0)
                    941:                        {
                    942:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                    943:                            return;
                    944:                        }
                    945:                    }
                    946: 
                    947:                    liberation(s_etat_processus, s_objet_argument_1);
                    948:                    liberation(s_etat_processus, s_objet_argument_2);
                    949: 
                    950:                    if (presence_nom == d_faux)
                    951:                    {
                    952:                        liberation(s_etat_processus, s_objet_argument_3);
                    953:                    }
                    954: 
                    955:                    (*s_etat_processus).erreur_execution =
                    956:                            d_ex_argument_invalide;
                    957:                    return;
                    958:                }
                    959: 
                    960:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                    961:                        .objet)).nombre_lignes; j++)
                    962:                {
                    963:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    964:                            .objet)).tableau)[j][position - 1].partie_reelle =
                    965:                            (real8) ((integer8 **) (*((struct_matrice *)
                    966:                            (*s_objet_argument_1).objet)).tableau)[j][i];
                    967:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                    968:                            .objet)).tableau)[j][position - 1]
                    969:                            .partie_imaginaire = 0;
                    970:                }
                    971: 
                    972:                l_element_courant = (*l_element_courant).suivant;
                    973:                i++;
                    974:            }
                    975:        }
                    976:        else if ((*s_objet_argument_1).type == MRL)
                    977:        {
                    978:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                    979:                    .nombre_lignes != (*((struct_matrice *)
                    980:                    (*s_objet_argument_3).objet)).nombre_lignes)
                    981:            {
                    982:                if (variable_partagee == d_vrai)
                    983:                {
                    984:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                    985:                            .s_liste_variables_partagees).mutex)) != 0)
                    986:                    {
                    987:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                    988:                        return;
                    989:                    }
                    990:                }
                    991: 
                    992:                liberation(s_etat_processus, s_objet_argument_1);
                    993:                liberation(s_etat_processus, s_objet_argument_2);
                    994: 
                    995:                if (presence_nom == d_faux)
                    996:                {
                    997:                    liberation(s_etat_processus, s_objet_argument_3);
                    998:                }
                    999: 
                   1000:                (*s_etat_processus).erreur_execution =
                   1001:                        d_ex_dimensions_invalides;
                   1002:                return;
                   1003:            }
                   1004: 
                   1005:            l_element_courant = (struct_liste_chainee *)
                   1006:                    (*s_objet_argument_2).objet;
                   1007:            i = 0;
                   1008: 
                   1009:            while(l_element_courant != NULL)
                   1010:            {
                   1011:                position = (*((integer8 *) (*(*l_element_courant)
                   1012:                        .donnee).objet));
                   1013: 
                   1014:                if ((position < 1) || (position > (integer8)
                   1015:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1016:                        .nombre_colonnes))
                   1017:                {
                   1018:                    if (variable_partagee == d_vrai)
                   1019:                    {
                   1020:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1021:                                .s_liste_variables_partagees).mutex)) != 0)
                   1022:                        {
                   1023:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1024:                            return;
                   1025:                        }
                   1026:                    }
                   1027: 
                   1028:                    liberation(s_etat_processus, s_objet_argument_1);
                   1029:                    liberation(s_etat_processus, s_objet_argument_2);
                   1030: 
                   1031:                    if (presence_nom == d_faux)
                   1032:                    {
                   1033:                        liberation(s_etat_processus, s_objet_argument_3);
                   1034:                    }
                   1035: 
                   1036:                    (*s_etat_processus).erreur_execution =
                   1037:                            d_ex_argument_invalide;
                   1038:                    return;
                   1039:                }
                   1040: 
                   1041:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1042:                        .objet)).nombre_lignes; j++)
                   1043:                {
                   1044:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1045:                            .objet)).tableau)[j][position - 1].partie_reelle =
                   1046:                            ((real8 **) (*((struct_matrice *)
                   1047:                            (*s_objet_argument_1).objet)).tableau)[j][i];
                   1048:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1049:                            .objet)).tableau)[j][position - 1]
                   1050:                            .partie_imaginaire = 0;
                   1051:                }
                   1052: 
                   1053:                l_element_courant = (*l_element_courant).suivant;
                   1054:                i++;
                   1055:            }
                   1056:        }
                   1057:        else // Matrice complexe
                   1058:        {
                   1059:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1060:                    .nombre_lignes != (*((struct_matrice *)
                   1061:                    (*s_objet_argument_3).objet)).nombre_lignes)
                   1062:            {
                   1063:                if (variable_partagee == d_vrai)
                   1064:                {
                   1065:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1066:                            .s_liste_variables_partagees).mutex)) != 0)
                   1067:                    {
                   1068:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1069:                        return;
                   1070:                    }
                   1071:                }
                   1072: 
                   1073:                liberation(s_etat_processus, s_objet_argument_1);
                   1074:                liberation(s_etat_processus, s_objet_argument_2);
                   1075: 
                   1076:                if (presence_nom == d_faux)
                   1077:                {
                   1078:                    liberation(s_etat_processus, s_objet_argument_3);
                   1079:                }
                   1080: 
                   1081:                (*s_etat_processus).erreur_execution =
                   1082:                        d_ex_dimensions_invalides;
                   1083:                return;
                   1084:            }
                   1085: 
                   1086:            l_element_courant = (struct_liste_chainee *)
                   1087:                    (*s_objet_argument_2).objet;
                   1088:            i = 0;
                   1089: 
                   1090:            while(l_element_courant != NULL)
                   1091:            {
                   1092:                position = (*((integer8 *) (*(*l_element_courant)
                   1093:                        .donnee).objet));
                   1094: 
                   1095:                if ((position < 1) || (position > (integer8)
                   1096:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1097:                        .nombre_colonnes))
                   1098:                {
                   1099:                    if (variable_partagee == d_vrai)
                   1100:                    {
                   1101:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1102:                                .s_liste_variables_partagees).mutex)) != 0)
                   1103:                        {
                   1104:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1105:                            return;
                   1106:                        }
                   1107:                    }
                   1108: 
                   1109:                    liberation(s_etat_processus, s_objet_argument_1);
                   1110:                    liberation(s_etat_processus, s_objet_argument_2);
                   1111: 
                   1112:                    if (presence_nom == d_faux)
                   1113:                    {
                   1114:                        liberation(s_etat_processus, s_objet_argument_3);
                   1115:                    }
                   1116: 
                   1117:                    (*s_etat_processus).erreur_execution =
                   1118:                            d_ex_argument_invalide;
                   1119:                    return;
                   1120:                }
                   1121: 
                   1122:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1123:                        .objet)).nombre_lignes; j++)
                   1124:                {
                   1125:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1126:                            .objet)).tableau)[j][position - 1].partie_reelle =
                   1127:                            ((complex16 **) (*((struct_matrice *)
                   1128:                            (*s_objet_argument_1).objet)).tableau)[j][i]
                   1129:                            .partie_reelle;
                   1130:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1131:                            .objet)).tableau)[j][position - 1]
                   1132:                            .partie_imaginaire = ((complex16 **)
                   1133:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
                   1134:                            .tableau)[j][i].partie_imaginaire;
                   1135:                }
                   1136: 
                   1137:                l_element_courant = (*l_element_courant).suivant;
                   1138:                i++;
                   1139:            }
                   1140:        }
                   1141:    }
                   1142:    else
                   1143:    {
                   1144:        if (variable_partagee == d_vrai)
                   1145:        {
                   1146:            if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1147:                    .s_liste_variables_partagees).mutex)) != 0)
                   1148:            {
                   1149:                (*s_etat_processus).erreur_systeme = d_es_processus;
                   1150:                return;
                   1151:            }
                   1152:        }
                   1153: 
                   1154:        liberation(s_etat_processus, s_objet_argument_1);
                   1155:        liberation(s_etat_processus, s_objet_argument_2);
                   1156: 
                   1157:        if (presence_nom == d_faux)
                   1158:        {
                   1159:            liberation(s_etat_processus, s_objet_argument_3);
                   1160:        }
                   1161: 
                   1162:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1163:        return;
                   1164:    }
                   1165: 
                   1166:    if (presence_nom == d_faux)
                   1167:    {
                   1168:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1169:                s_objet_argument_3) == d_erreur)
                   1170:        {
                   1171:            return;
                   1172:        }
                   1173:    }
                   1174:    else if (variable_partagee == d_vrai)
                   1175:    {
                   1176:        (*(*s_etat_processus).s_liste_variables_partagees).table
                   1177:                [(*(*s_etat_processus).s_liste_variables_partagees)
                   1178:                .position_variable].objet = s_objet_argument_3;
                   1179: 
                   1180:        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1181:                .s_liste_variables_partagees).mutex)) != 0)
                   1182:        {
                   1183:            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1184:            return;
                   1185:        }
                   1186:    }
                   1187: 
                   1188:    liberation(s_etat_processus, s_objet_argument_1);
                   1189:    liberation(s_etat_processus, s_objet_argument_2);
                   1190: 
                   1191:    return;
                   1192: }
                   1193: 
                   1194: 
                   1195: /*
                   1196: ================================================================================
                   1197:   Fonction 'putr'
                   1198: ================================================================================
                   1199:   Entrées :
                   1200: --------------------------------------------------------------------------------
                   1201:   Sorties :
                   1202: --------------------------------------------------------------------------------
                   1203:   Effets de bord : néant
                   1204: ================================================================================
                   1205: */
                   1206: 
                   1207: void
                   1208: instruction_putr(struct_processus *s_etat_processus)
                   1209: {
                   1210:    integer8                        position;
                   1211: 
                   1212:    logical1                        presence_nom;
                   1213:    logical1                        variable_partagee;
                   1214: 
                   1215:    struct_liste_chainee            *l_element_courant;
                   1216: 
                   1217:    struct_objet                    *s_copie_argument_3;
                   1218:    struct_objet                    *s_objet_argument_1;
                   1219:    struct_objet                    *s_objet_argument_2;
                   1220:    struct_objet                    *s_objet_argument_3;
                   1221: 
                   1222:    unsigned long                   i;
                   1223:    unsigned long                   j;
                   1224:    unsigned long                   nombre_elements;
                   1225: 
                   1226:    void                            *tampon;
                   1227: 
                   1228:    (*s_etat_processus).erreur_execution = d_ex;
                   1229: 
                   1230:    if ((*s_etat_processus).affichage_arguments == 'Y')
                   1231:    {
                   1232:        printf("\n  PUTR ");
                   1233: 
                   1234:        if ((*s_etat_processus).langue == 'F')
                   1235:        {
                   1236:            printf("(change une ligne)\n\n");
                   1237:        }
                   1238:        else
                   1239:        {
                   1240:            printf("(change row)\n\n");
                   1241:        }
                   1242: 
                   1243:        printf("    3: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1244:        printf("    2: %s\n", d_LST);
                   1245:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1246:        printf("->  1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
                   1247: 
                   1248:        printf("    3: %s\n", d_NOM);
                   1249:        printf("    2: %s\n", d_LST);
                   1250:        printf("    1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
                   1251: 
                   1252:        return;
                   1253:    }
                   1254:    else if ((*s_etat_processus).test_instruction == 'Y')
                   1255:    {
                   1256:        (*s_etat_processus).nombre_arguments = -1;
                   1257:        return;
                   1258:    }
                   1259: 
                   1260:    if (test_cfsf(s_etat_processus, 31) == d_vrai)
                   1261:    {
                   1262:        if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
                   1263:        {
                   1264:            return;
                   1265:        }
                   1266:    }
                   1267: 
                   1268:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1269:            &s_objet_argument_1) == d_erreur)
                   1270:    {
                   1271:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                   1272:        return;
                   1273:    }
                   1274: 
                   1275:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1276:            &s_objet_argument_2) == d_erreur)
                   1277:    {
                   1278:        liberation(s_etat_processus, s_objet_argument_1);
                   1279: 
                   1280:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                   1281:        return;
                   1282:    }
                   1283: 
                   1284:    if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   1285:            &s_objet_argument_3) == d_erreur)
                   1286:    {
                   1287:        liberation(s_etat_processus, s_objet_argument_1);
                   1288:        liberation(s_etat_processus, s_objet_argument_2);
                   1289: 
                   1290:        (*s_etat_processus).erreur_execution = d_ex_manque_argument;
                   1291:        return;
                   1292:    }
                   1293: 
                   1294:    if (((*s_objet_argument_1).type != MIN) &&
                   1295:            ((*s_objet_argument_1).type != MRL) &&
                   1296:            ((*s_objet_argument_1).type != MCX))
                   1297:    {
                   1298:        liberation(s_etat_processus, s_objet_argument_1);
                   1299:        liberation(s_etat_processus, s_objet_argument_2);
                   1300:        liberation(s_etat_processus, s_objet_argument_3);
                   1301: 
                   1302:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1303:        return;
                   1304:    }
                   1305: 
                   1306:    if ((*s_objet_argument_2).type != LST)
                   1307:    {
                   1308:        liberation(s_etat_processus, s_objet_argument_1);
                   1309:        liberation(s_etat_processus, s_objet_argument_2);
                   1310:        liberation(s_etat_processus, s_objet_argument_3);
                   1311: 
                   1312:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1313:        return;
                   1314:    }
                   1315: 
                   1316:    nombre_elements = 0;
                   1317:    l_element_courant = (struct_liste_chainee *) (*s_objet_argument_2).objet;
                   1318: 
                   1319:    while(l_element_courant != NULL)
                   1320:    {
                   1321:        if ((*(*l_element_courant).donnee).type != INT)
                   1322:        {
                   1323:            liberation(s_etat_processus, s_objet_argument_1);
                   1324:            liberation(s_etat_processus, s_objet_argument_2);
                   1325:            liberation(s_etat_processus, s_objet_argument_3);
                   1326: 
                   1327:            (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   1328:            return;
                   1329:        }
                   1330: 
                   1331:        nombre_elements++;
                   1332:        l_element_courant = (*l_element_courant).suivant;
                   1333:    }
                   1334: 
                   1335:    if ((nombre_elements == 0) || (nombre_elements != (*((struct_matrice *)
                   1336:            (*s_objet_argument_1).objet)).nombre_lignes))
                   1337:    {
                   1338:        liberation(s_etat_processus, s_objet_argument_1);
                   1339:        liberation(s_etat_processus, s_objet_argument_2);
                   1340:        liberation(s_etat_processus, s_objet_argument_3);
                   1341: 
                   1342:        (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   1343:        return;
                   1344:    }
                   1345: 
                   1346:    variable_partagee = d_faux;
                   1347: 
                   1348:    if ((*s_objet_argument_3).type == NOM)
                   1349:    {
                   1350:        presence_nom = d_vrai;
                   1351: 
                   1352:        if (recherche_variable(s_etat_processus, (*((struct_nom *)
                   1353:                (*s_objet_argument_3).objet)).nom) == d_faux)
                   1354:        {
                   1355:            (*s_etat_processus).erreur_systeme = d_es;
                   1356:            (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
                   1357: 
                   1358:            liberation(s_etat_processus, s_objet_argument_1);
                   1359:            liberation(s_etat_processus, s_objet_argument_2);
                   1360:            liberation(s_etat_processus, s_objet_argument_3);
                   1361: 
                   1362:            return;
                   1363:        }
                   1364: 
                   1365:        if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
                   1366:                .position_variable_courante].variable_verrouillee == d_vrai)
                   1367:        {
                   1368:            (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
                   1369: 
                   1370:            liberation(s_etat_processus, s_objet_argument_1);
                   1371:            liberation(s_etat_processus, s_objet_argument_2);
                   1372:            liberation(s_etat_processus, s_objet_argument_3);
                   1373: 
                   1374:            return;
                   1375:        }
                   1376: 
                   1377:        liberation(s_etat_processus, s_objet_argument_3);
                   1378:        s_objet_argument_3 = (*s_etat_processus).s_liste_variables
                   1379:                [(*s_etat_processus).position_variable_courante].objet;
                   1380: 
                   1381:        if (s_objet_argument_3 == NULL)
                   1382:        {
                   1383:            if (pthread_mutex_lock(&((*(*s_etat_processus)
                   1384:                    .s_liste_variables_partagees).mutex)) != 0)
                   1385:            {
                   1386:                (*s_etat_processus).erreur_systeme = d_es_processus;
                   1387:                return;
                   1388:            }
                   1389: 
                   1390:            if (recherche_variable_partagee(s_etat_processus,
                   1391:                    (*s_etat_processus).s_liste_variables
                   1392:                    [(*s_etat_processus).position_variable_courante].nom,
                   1393:                    (*s_etat_processus).s_liste_variables
                   1394:                    [(*s_etat_processus).position_variable_courante]
                   1395:                    .variable_partagee, (*s_etat_processus).s_liste_variables
                   1396:                    [(*s_etat_processus).position_variable_courante].origine)
                   1397:                    == d_faux)
                   1398:            {
                   1399:                if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1400:                        .s_liste_variables_partagees).mutex)) != 0)
                   1401:                {
                   1402:                    (*s_etat_processus).erreur_systeme = d_es_processus;
                   1403:                    return;
                   1404:                }
                   1405: 
                   1406:                (*s_etat_processus).erreur_systeme = d_es;
                   1407:                (*s_etat_processus).erreur_execution =
                   1408:                        d_ex_variable_non_definie;
                   1409: 
                   1410:                liberation(s_etat_processus, s_objet_argument_1);
                   1411:                liberation(s_etat_processus, s_objet_argument_2);
                   1412: 
                   1413:                return;
                   1414:            }
                   1415: 
                   1416:            s_objet_argument_3 = (*(*s_etat_processus)
                   1417:                    .s_liste_variables_partagees).table[(*(*s_etat_processus)
                   1418:                    .s_liste_variables_partagees).position_variable].objet;
                   1419:            variable_partagee = d_vrai;
                   1420:        }
                   1421: 
                   1422:        if ((s_copie_argument_3 = copie_objet(s_etat_processus,
                   1423:                s_objet_argument_3, 'Q')) == NULL)
                   1424:        {
                   1425:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1426:            return;
                   1427:        }
                   1428: 
                   1429:        liberation(s_etat_processus, s_objet_argument_3);
                   1430:        s_objet_argument_3 = s_copie_argument_3;
                   1431: 
                   1432:        (*s_etat_processus).s_liste_variables[(*s_etat_processus)
                   1433:                .position_variable_courante].objet = s_objet_argument_3;
                   1434:    }
                   1435:    else
                   1436:    {
                   1437:        presence_nom = d_faux;
                   1438: 
                   1439:        if ((s_copie_argument_3 = copie_objet(s_etat_processus,
                   1440:                s_objet_argument_3, 'Q')) == NULL)
                   1441:        {
                   1442:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   1443:            return;
                   1444:        }
                   1445: 
                   1446:        liberation(s_etat_processus, s_objet_argument_3);
                   1447:        s_objet_argument_3 = s_copie_argument_3;
                   1448:    }
                   1449: 
                   1450:    if ((*s_objet_argument_1).type == MRL)
                   1451:    {
                   1452:        if ((*s_objet_argument_3).type == MIN)
                   1453:        {
                   1454:            // Conversion de la matrice entière en matrice réelle
                   1455: 
                   1456:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1457:                    .nombre_lignes; i++)
                   1458:            {
                   1459:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1460:                        .tableau[i];
                   1461: 
                   1462:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                   1463:                        .tableau[i] = malloc((*((struct_matrice *)
                   1464:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                   1465:                        sizeof(real8))) == NULL)
                   1466:                {
                   1467:                    if (variable_partagee == d_vrai)
                   1468:                    {
                   1469:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1470:                                .s_liste_variables_partagees).mutex)) != 0)
                   1471:                        {
                   1472:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1473:                            return;
                   1474:                        }
                   1475:                    }
                   1476: 
                   1477:                    (*s_etat_processus).erreur_systeme =
                   1478:                            d_es_allocation_memoire;
                   1479:                    return;
                   1480:                }
                   1481: 
                   1482:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1483:                        .objet)).nombre_colonnes; j++)
                   1484:                {
                   1485:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1486:                            .objet)).tableau)[i][j] = (real8) (((integer8 *)
                   1487:                            tampon)[j]);
                   1488:                }
                   1489: 
                   1490:                free(tampon);
                   1491:            }
                   1492: 
                   1493:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'R';
                   1494:            (*s_objet_argument_3).type = MRL;
                   1495:        }
                   1496:    }
                   1497:    else if ((*s_objet_argument_1).type == MCX)
                   1498:    {
                   1499:        if ((*s_objet_argument_3).type == MIN)
                   1500:        {
                   1501:            // Conversion de la matrice entière en matrice complexe
                   1502: 
                   1503:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1504:                    .nombre_lignes; i++)
                   1505:            {
                   1506:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1507:                        .tableau[i];
                   1508: 
                   1509:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                   1510:                        .tableau[i] = malloc((*((struct_matrice *)
                   1511:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                   1512:                        sizeof(complex16))) == NULL)
                   1513:                {
                   1514:                    if (variable_partagee == d_vrai)
                   1515:                    {
                   1516:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1517:                                .s_liste_variables_partagees).mutex)) != 0)
                   1518:                        {
                   1519:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1520:                            return;
                   1521:                        }
                   1522:                    }
                   1523: 
                   1524:                    (*s_etat_processus).erreur_systeme =
                   1525:                            d_es_allocation_memoire;
                   1526:                    return;
                   1527:                }
                   1528: 
                   1529:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1530:                        .objet)).nombre_colonnes; j++)
                   1531:                {
                   1532:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1533:                            .objet)).tableau)[i][j].partie_reelle =
                   1534:                            (real8) (((integer8 *) tampon)[j]);
                   1535:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1536:                            .objet)).tableau)[i][j].partie_imaginaire = 0;
                   1537:                }
                   1538: 
                   1539:                free(tampon);
                   1540:            }
                   1541: 
                   1542:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'C';
                   1543:            (*s_objet_argument_3).type = MCX;
                   1544:        }
                   1545:        else if ((*s_objet_argument_3).type == MRL)
                   1546:        {
                   1547:            // Conversion de la matrice réelle en matrice complexe
                   1548: 
                   1549:            for(i = 0; i < (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1550:                    .nombre_lignes; i++)
                   1551:            {
                   1552:                tampon = (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1553:                        .tableau[i];
                   1554: 
                   1555:                if (((*((struct_matrice *) (*s_objet_argument_3).objet))
                   1556:                        .tableau[i] = malloc((*((struct_matrice *)
                   1557:                        (*s_objet_argument_3).objet)).nombre_colonnes *
                   1558:                        sizeof(complex16))) == NULL)
                   1559:                {
                   1560:                    if (variable_partagee == d_vrai)
                   1561:                    {
                   1562:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1563:                                .s_liste_variables_partagees).mutex)) != 0)
                   1564:                        {
                   1565:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1566:                            return;
                   1567:                        }
                   1568:                    }
                   1569: 
                   1570:                    (*s_etat_processus).erreur_systeme =
                   1571:                            d_es_allocation_memoire;
                   1572:                    return;
                   1573:                }
                   1574: 
                   1575:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1576:                        .objet)).nombre_colonnes; j++)
                   1577:                {
                   1578:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1579:                            .objet)).tableau)[i][j].partie_reelle =
                   1580:                            ((real8 *) tampon)[j];
                   1581:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1582:                            .objet)).tableau)[i][j].partie_imaginaire = 0;
                   1583:                }
                   1584: 
                   1585:                free(tampon);
                   1586:            }
                   1587: 
                   1588:            (*((struct_matrice *) (*s_objet_argument_3).objet)).type = 'C';
                   1589:            (*s_objet_argument_3).type = MCX;
                   1590:        }
                   1591:    }   
                   1592: 
                   1593:    if ((*s_objet_argument_3).type == MIN)
                   1594:    {
                   1595:        if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_colonnes
                   1596:                != (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1597:                .nombre_colonnes)
                   1598:        {
                   1599:            if (variable_partagee == d_vrai)
                   1600:            {
                   1601:                if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1602:                        .s_liste_variables_partagees).mutex)) != 0)
                   1603:                {
                   1604:                    (*s_etat_processus).erreur_systeme = d_es_processus;
                   1605:                    return;
                   1606:                }
                   1607:            }
                   1608: 
                   1609:            liberation(s_etat_processus, s_objet_argument_1);
                   1610:            liberation(s_etat_processus, s_objet_argument_2);
                   1611: 
                   1612:            if (presence_nom == d_faux)
                   1613:            {
                   1614:                liberation(s_etat_processus, s_objet_argument_3);
                   1615:            }
                   1616: 
                   1617:            (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
                   1618:            return;
                   1619:        }
                   1620: 
                   1621:        l_element_courant = (struct_liste_chainee *)
                   1622:                (*s_objet_argument_2).objet;
                   1623:        i = 0;
                   1624: 
                   1625:        while(l_element_courant != NULL)
                   1626:        {
                   1627:            position = (*((integer8 *) (*(*l_element_courant).donnee).objet));
                   1628: 
                   1629:            if ((position < 1) || (position > (integer8) (*((struct_matrice *)
                   1630:                    (*s_objet_argument_3).objet)).nombre_lignes))
                   1631:            {
                   1632:                if (variable_partagee == d_vrai)
                   1633:                {
                   1634:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1635:                            .s_liste_variables_partagees).mutex)) != 0)
                   1636:                    {
                   1637:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1638:                        return;
                   1639:                    }
                   1640:                }
                   1641: 
                   1642:                liberation(s_etat_processus, s_objet_argument_1);
                   1643:                liberation(s_etat_processus, s_objet_argument_2);
                   1644: 
                   1645:                if (presence_nom == d_faux)
                   1646:                {
                   1647:                    liberation(s_etat_processus, s_objet_argument_3);
                   1648:                }
                   1649: 
                   1650:                (*s_etat_processus).erreur_execution =
                   1651:                        d_ex_argument_invalide;
                   1652:                return;
                   1653:            }
                   1654: 
                   1655:            for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1656:                    .nombre_colonnes; j++)
                   1657:            {
                   1658:                ((integer8 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1659:                        .objet)).tableau)[position - 1][j] = ((integer8 **)
                   1660:                        (*((struct_matrice *) (*s_objet_argument_1).objet))
                   1661:                        .tableau)[i][j];
                   1662:            }
                   1663: 
                   1664:            l_element_courant = (*l_element_courant).suivant;
                   1665:            i++;
                   1666:        }
                   1667:    }
                   1668:    else if ((*s_objet_argument_3).type == MRL)
                   1669:    {
                   1670:        if ((*s_objet_argument_1).type == MIN)
                   1671:        {
                   1672:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1673:                    .nombre_colonnes != (*((struct_matrice *)
                   1674:                    (*s_objet_argument_3).objet)).nombre_colonnes)
                   1675:            {
                   1676:                if (variable_partagee == d_vrai)
                   1677:                {
                   1678:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1679:                            .s_liste_variables_partagees).mutex)) != 0)
                   1680:                    {
                   1681:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1682:                        return;
                   1683:                    }
                   1684:                }
                   1685: 
                   1686:                liberation(s_etat_processus, s_objet_argument_1);
                   1687:                liberation(s_etat_processus, s_objet_argument_2);
                   1688: 
                   1689:                if (presence_nom == d_faux)
                   1690:                {
                   1691:                    liberation(s_etat_processus, s_objet_argument_3);
                   1692:                }
                   1693: 
                   1694:                (*s_etat_processus).erreur_execution =
                   1695:                        d_ex_dimensions_invalides;
                   1696:                return;
                   1697:            }
                   1698: 
                   1699:            l_element_courant = (struct_liste_chainee *)
                   1700:                    (*s_objet_argument_2).objet;
                   1701:            i = 0;
                   1702: 
                   1703:            while(l_element_courant != NULL)
                   1704:            {
                   1705:                position = (*((integer8 *) (*(*l_element_courant)
                   1706:                        .donnee).objet));
                   1707: 
                   1708:                if ((position < 1) || (position > (integer8)
                   1709:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1710:                        .nombre_lignes))
                   1711:                {
                   1712:                    if (variable_partagee == d_vrai)
                   1713:                    {
                   1714:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1715:                                .s_liste_variables_partagees).mutex)) != 0)
                   1716:                        {
                   1717:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1718:                            return;
                   1719:                        }
                   1720:                    }
                   1721: 
                   1722:                    liberation(s_etat_processus, s_objet_argument_1);
                   1723:                    liberation(s_etat_processus, s_objet_argument_2);
                   1724: 
                   1725:                    if (presence_nom == d_faux)
                   1726:                    {
                   1727:                        liberation(s_etat_processus, s_objet_argument_3);
                   1728:                    }
                   1729: 
                   1730:                    (*s_etat_processus).erreur_execution =
                   1731:                            d_ex_argument_invalide;
                   1732:                    return;
                   1733:                }
                   1734: 
                   1735:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1736:                        .objet)).nombre_colonnes; j++)
                   1737:                {
                   1738:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1739:                            .objet)).tableau)[position - 1][j] = (real8)
                   1740:                            ((integer8 **) (*((struct_matrice *)
                   1741:                            (*s_objet_argument_1).objet)).tableau)[i][j];
                   1742:                }
                   1743: 
                   1744:                l_element_courant = (*l_element_courant).suivant;
                   1745:                i++;
                   1746:            }
                   1747:        }
                   1748:        else // Matrice réelle
                   1749:        {
                   1750:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1751:                    .nombre_colonnes != (*((struct_matrice *)
                   1752:                    (*s_objet_argument_3).objet)).nombre_colonnes)
                   1753:            {
                   1754:                if (variable_partagee == d_vrai)
                   1755:                {
                   1756:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1757:                            .s_liste_variables_partagees).mutex)) != 0)
                   1758:                    {
                   1759:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1760:                        return;
                   1761:                    }
                   1762:                }
                   1763: 
                   1764:                liberation(s_etat_processus, s_objet_argument_1);
                   1765:                liberation(s_etat_processus, s_objet_argument_2);
                   1766: 
                   1767:                if (presence_nom == d_faux)
                   1768:                {
                   1769:                    liberation(s_etat_processus, s_objet_argument_3);
                   1770:                }
                   1771: 
                   1772:                (*s_etat_processus).erreur_execution =
                   1773:                        d_ex_dimensions_invalides;
                   1774:                return;
                   1775:            }
                   1776: 
                   1777:            l_element_courant = (struct_liste_chainee *)
                   1778:                    (*s_objet_argument_2).objet;
                   1779:            i = 0;
                   1780: 
                   1781:            while(l_element_courant != NULL)
                   1782:            {
                   1783:                position = (*((integer8 *) (*(*l_element_courant)
                   1784:                        .donnee).objet));
                   1785: 
                   1786:                if ((position < 1) || (position > (integer8)
                   1787:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1788:                        .nombre_lignes))
                   1789:                {
                   1790:                    if (variable_partagee == d_vrai)
                   1791:                    {
                   1792:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1793:                                .s_liste_variables_partagees).mutex)) != 0)
                   1794:                        {
                   1795:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1796:                            return;
                   1797:                        }
                   1798:                    }
                   1799: 
                   1800:                    liberation(s_etat_processus, s_objet_argument_1);
                   1801:                    liberation(s_etat_processus, s_objet_argument_2);
                   1802: 
                   1803:                    if (presence_nom == d_faux)
                   1804:                    {
                   1805:                        liberation(s_etat_processus, s_objet_argument_3);
                   1806:                    }
                   1807: 
                   1808:                    (*s_etat_processus).erreur_execution =
                   1809:                            d_ex_argument_invalide;
                   1810:                    return;
                   1811:                }
                   1812: 
                   1813:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1814:                        .objet)).nombre_colonnes; j++)
                   1815:                {
                   1816:                    ((real8 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1817:                            .objet)).tableau)[position - 1][j] =
                   1818:                            ((real8 **) (*((struct_matrice *)
                   1819:                            (*s_objet_argument_1).objet)).tableau)[i][j];
                   1820:                }
                   1821: 
                   1822:                l_element_courant = (*l_element_courant).suivant;
                   1823:                i++;
                   1824:            }
                   1825:        }
                   1826:    }
                   1827:    else if ((*s_objet_argument_3).type == MCX)
                   1828:    {
                   1829:        if ((*s_objet_argument_1).type == MIN)
                   1830:        {
                   1831:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1832:                    .nombre_colonnes != (*((struct_matrice *)
                   1833:                    (*s_objet_argument_3).objet)).nombre_colonnes)
                   1834:            {
                   1835:                if (variable_partagee == d_vrai)
                   1836:                {
                   1837:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1838:                            .s_liste_variables_partagees).mutex)) != 0)
                   1839:                    {
                   1840:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1841:                        return;
                   1842:                    }
                   1843:                }
                   1844: 
                   1845:                liberation(s_etat_processus, s_objet_argument_1);
                   1846:                liberation(s_etat_processus, s_objet_argument_2);
                   1847: 
                   1848:                if (presence_nom == d_faux)
                   1849:                {
                   1850:                    liberation(s_etat_processus, s_objet_argument_3);
                   1851:                }
                   1852: 
                   1853:                (*s_etat_processus).erreur_execution =
                   1854:                        d_ex_dimensions_invalides;
                   1855:                return;
                   1856:            }
                   1857: 
                   1858:            l_element_courant = (struct_liste_chainee *)
                   1859:                    (*s_objet_argument_2).objet;
                   1860:            i = 0;
                   1861: 
                   1862:            while(l_element_courant != NULL)
                   1863:            {
                   1864:                position = (*((integer8 *) (*(*l_element_courant)
                   1865:                        .donnee).objet));
                   1866: 
                   1867:                if ((position < 1) || (position > (integer8)
                   1868:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1869:                        .nombre_lignes))
                   1870:                {
                   1871:                    if (variable_partagee == d_vrai)
                   1872:                    {
                   1873:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1874:                                .s_liste_variables_partagees).mutex)) != 0)
                   1875:                        {
                   1876:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1877:                            return;
                   1878:                        }
                   1879:                    }
                   1880: 
                   1881:                    liberation(s_etat_processus, s_objet_argument_1);
                   1882:                    liberation(s_etat_processus, s_objet_argument_2);
                   1883: 
                   1884:                    if (presence_nom == d_faux)
                   1885:                    {
                   1886:                        liberation(s_etat_processus, s_objet_argument_3);
                   1887:                    }
                   1888: 
                   1889:                    (*s_etat_processus).erreur_execution =
                   1890:                            d_ex_argument_invalide;
                   1891:                    return;
                   1892:                }
                   1893: 
                   1894:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1895:                        .objet)).nombre_colonnes; j++)
                   1896:                {
                   1897:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1898:                            .objet)).tableau)[position - 1][j].partie_reelle =
                   1899:                            (real8) ((integer8 **) (*((struct_matrice *)
                   1900:                            (*s_objet_argument_1).objet)).tableau)[i][j];
                   1901:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1902:                            .objet)).tableau)[position - 1][j]
                   1903:                            .partie_imaginaire = 0;
                   1904:                }
                   1905: 
                   1906:                l_element_courant = (*l_element_courant).suivant;
                   1907:                i++;
                   1908:            }
                   1909:        }
                   1910:        else if ((*s_objet_argument_1).type == MRL)
                   1911:        {
                   1912:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1913:                    .nombre_colonnes != (*((struct_matrice *)
                   1914:                    (*s_objet_argument_3).objet)).nombre_colonnes)
                   1915:            {
                   1916:                if (variable_partagee == d_vrai)
                   1917:                {
                   1918:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1919:                            .s_liste_variables_partagees).mutex)) != 0)
                   1920:                    {
                   1921:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   1922:                        return;
                   1923:                    }
                   1924:                }
                   1925: 
                   1926:                liberation(s_etat_processus, s_objet_argument_1);
                   1927:                liberation(s_etat_processus, s_objet_argument_2);
                   1928: 
                   1929:                if (presence_nom == d_faux)
                   1930:                {
                   1931:                    liberation(s_etat_processus, s_objet_argument_3);
                   1932:                }
                   1933: 
                   1934:                (*s_etat_processus).erreur_execution =
                   1935:                        d_ex_dimensions_invalides;
                   1936:                return;
                   1937:            }
                   1938: 
                   1939:            l_element_courant = (struct_liste_chainee *)
                   1940:                    (*s_objet_argument_2).objet;
                   1941:            i = 0;
                   1942: 
                   1943:            while(l_element_courant != NULL)
                   1944:            {
                   1945:                position = (*((integer8 *) (*(*l_element_courant)
                   1946:                        .donnee).objet));
                   1947: 
                   1948:                if ((position < 1) || (position > (integer8)
                   1949:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   1950:                        .nombre_lignes))
                   1951:                {
                   1952:                    if (variable_partagee == d_vrai)
                   1953:                    {
                   1954:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   1955:                                .s_liste_variables_partagees).mutex)) != 0)
                   1956:                        {
                   1957:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   1958:                            return;
                   1959:                        }
                   1960:                    }
                   1961: 
                   1962:                    liberation(s_etat_processus, s_objet_argument_1);
                   1963:                    liberation(s_etat_processus, s_objet_argument_2);
                   1964: 
                   1965:                    if (presence_nom == d_faux)
                   1966:                    {
                   1967:                        liberation(s_etat_processus, s_objet_argument_3);
                   1968:                    }
                   1969: 
                   1970:                    (*s_etat_processus).erreur_execution =
                   1971:                            d_ex_argument_invalide;
                   1972:                    return;
                   1973:                }
                   1974: 
                   1975:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   1976:                        .objet)).nombre_colonnes; j++)
                   1977:                {
                   1978:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1979:                            .objet)).tableau)[position - 1][j].partie_reelle =
                   1980:                            ((real8 **) (*((struct_matrice *)
                   1981:                            (*s_objet_argument_1).objet)).tableau)[i][j];
                   1982:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   1983:                            .objet)).tableau)[position - 1][j]
                   1984:                            .partie_imaginaire = 0;
                   1985:                }
                   1986: 
                   1987:                l_element_courant = (*l_element_courant).suivant;
                   1988:                i++;
                   1989:            }
                   1990:        }
                   1991:        else // Matrice complexe
                   1992:        {
                   1993:            if ((*((struct_matrice *) (*s_objet_argument_1).objet))
                   1994:                    .nombre_colonnes != (*((struct_matrice *)
                   1995:                    (*s_objet_argument_3).objet)).nombre_colonnes)
                   1996:            {
                   1997:                if (variable_partagee == d_vrai)
                   1998:                {
                   1999:                    if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   2000:                            .s_liste_variables_partagees).mutex)) != 0)
                   2001:                    {
                   2002:                        (*s_etat_processus).erreur_systeme = d_es_processus;
                   2003:                        return;
                   2004:                    }
                   2005:                }
                   2006: 
                   2007:                liberation(s_etat_processus, s_objet_argument_1);
                   2008:                liberation(s_etat_processus, s_objet_argument_2);
                   2009: 
                   2010:                if (presence_nom == d_faux)
                   2011:                {
                   2012:                    liberation(s_etat_processus, s_objet_argument_3);
                   2013:                }
                   2014: 
                   2015:                (*s_etat_processus).erreur_execution =
                   2016:                        d_ex_dimensions_invalides;
                   2017:                return;
                   2018:            }
                   2019: 
                   2020:            l_element_courant = (struct_liste_chainee *)
                   2021:                    (*s_objet_argument_2).objet;
                   2022:            i = 0;
                   2023: 
                   2024:            while(l_element_courant != NULL)
                   2025:            {
                   2026:                position = (*((integer8 *) (*(*l_element_courant)
                   2027:                        .donnee).objet));
                   2028: 
                   2029:                if ((position < 1) || (position > (integer8)
                   2030:                        (*((struct_matrice *) (*s_objet_argument_3).objet))
                   2031:                        .nombre_lignes))
                   2032:                {
                   2033:                    if (variable_partagee == d_vrai)
                   2034:                    {
                   2035:                        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   2036:                                .s_liste_variables_partagees).mutex)) != 0)
                   2037:                        {
                   2038:                            (*s_etat_processus).erreur_systeme = d_es_processus;
                   2039:                            return;
                   2040:                        }
                   2041:                    }
                   2042: 
                   2043:                    liberation(s_etat_processus, s_objet_argument_1);
                   2044:                    liberation(s_etat_processus, s_objet_argument_2);
                   2045: 
                   2046:                    if (presence_nom == d_faux)
                   2047:                    {
                   2048:                        liberation(s_etat_processus, s_objet_argument_3);
                   2049:                    }
                   2050: 
                   2051:                    (*s_etat_processus).erreur_execution =
                   2052:                            d_ex_argument_invalide;
                   2053:                    return;
                   2054:                }
                   2055: 
                   2056:                for(j = 0; j < (*((struct_matrice *) (*s_objet_argument_3)
                   2057:                        .objet)).nombre_colonnes; j++)
                   2058:                {
                   2059:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   2060:                            .objet)).tableau)[position - 1][j].partie_reelle =
                   2061:                            ((complex16 **) (*((struct_matrice *)
                   2062:                            (*s_objet_argument_1).objet)).tableau)[i][j]
                   2063:                            .partie_reelle;
                   2064:                    ((complex16 **) (*((struct_matrice *) (*s_objet_argument_3)
                   2065:                            .objet)).tableau)[position - 1][j]
                   2066:                            .partie_imaginaire = ((complex16 **)
                   2067:                            (*((struct_matrice *) (*s_objet_argument_1).objet))
                   2068:                            .tableau)[i][j].partie_imaginaire;
                   2069:                }
                   2070: 
                   2071:                l_element_courant = (*l_element_courant).suivant;
                   2072:                i++;
                   2073:            }
                   2074:        }
                   2075:    }
                   2076:    else
                   2077:    {
                   2078:        if (variable_partagee == d_vrai)
                   2079:        {
                   2080:            if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   2081:                    .s_liste_variables_partagees).mutex)) != 0)
                   2082:            {
                   2083:                (*s_etat_processus).erreur_systeme = d_es_processus;
                   2084:                return;
                   2085:            }
                   2086:        }
                   2087: 
                   2088:        liberation(s_etat_processus, s_objet_argument_1);
                   2089:        liberation(s_etat_processus, s_objet_argument_2);
                   2090: 
                   2091:        if (presence_nom == d_faux)
                   2092:        {
                   2093:            liberation(s_etat_processus, s_objet_argument_3);
                   2094:        }
                   2095: 
                   2096:        (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
                   2097:        return;
                   2098:    }
                   2099: 
                   2100:    if (presence_nom == d_faux)
                   2101:    {
                   2102:        if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                   2103:                s_objet_argument_3) == d_erreur)
                   2104:        {
                   2105:            return;
                   2106:        }
                   2107:    }
                   2108:    else if (variable_partagee == d_vrai)
                   2109:    {
                   2110:        (*(*s_etat_processus).s_liste_variables_partagees).table
                   2111:                [(*(*s_etat_processus).s_liste_variables_partagees)
                   2112:                .position_variable].objet = s_objet_argument_3;
                   2113: 
                   2114:        if (pthread_mutex_unlock(&((*(*s_etat_processus)
                   2115:                .s_liste_variables_partagees).mutex)) != 0)
                   2116:        {
                   2117:            (*s_etat_processus).erreur_systeme = d_es_processus;
                   2118:            return;
                   2119:        }
                   2120:    }
                   2121: 
                   2122:    liberation(s_etat_processus, s_objet_argument_1);
                   2123:    liberation(s_etat_processus, s_objet_argument_2);
                   2124: 
                   2125:    return;
                   2126: }
                   2127: 
                   2128: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>