Annotation of rpl/src/gestion_variables.c, revision 1.10

1.1       bertrand    1: /*
                      2: ================================================================================
1.10    ! bertrand    3:   RPL/2 (R) version 4.0.17
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:   Routine de création d'une nouvelle variable
                     29:   Entrée : autorisation_creation_variable_statique vaut 'V' ou 'S'.
                     30:   Dans le cas 'V', la variable est volatile.
                     31:   Dans le cas 'S', elle est statique.
                     32:   Entrée : autorisation_creation_variable_partagee vaut 'P' ou 'S'.
                     33:   Dans le cas 'P', la variable est privée.
                     34:   Dans le cas 'S', elle est partagée.
                     35: --------------------------------------------------------------------------------
                     36:   Sortie :
                     37: --------------------------------------------------------------------------------
                     38:   Effets de bords : néant
                     39: ================================================================================
                     40: */
                     41: 
                     42: logical1
                     43: creation_variable(struct_processus *s_etat_processus,
                     44:        struct_variable *s_variable,
                     45:        unsigned char autorisation_creation_variable_statique,
                     46:        unsigned char autorisation_creation_variable_partagee)
                     47: {
                     48:    long                    i;
                     49: 
                     50:    struct_variable         *s_nouvelle_base;
                     51: 
                     52:    (*s_etat_processus).nombre_variables++;
                     53: 
                     54:    if ((*s_etat_processus).nombre_variables > (*s_etat_processus)
                     55:            .nombre_variables_allouees)
                     56:    {
                     57:        // La nouvelle variable ne tient pas dans la table courante. Il
                     58:        // faut donc en augmenter la taille.
                     59: 
                     60:        if ((*s_etat_processus).nombre_variables_allouees == 0)
                     61:        {
                     62:            (*s_etat_processus).nombre_variables_allouees =
                     63:                    (*s_etat_processus).nombre_variables;
                     64:        }
                     65:        else
                     66:        {
                     67:            while((*s_etat_processus).nombre_variables >
                     68:                    (*s_etat_processus).nombre_variables_allouees)
                     69:            {
                     70:                (*s_etat_processus).nombre_variables_allouees *= 2;
                     71:            }
                     72:        }
                     73: 
                     74:        if ((s_nouvelle_base = realloc((*s_etat_processus).s_liste_variables,
                     75:                (*s_etat_processus).nombre_variables_allouees *
                     76:                sizeof(struct_variable))) == NULL)
                     77:        {
                     78:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                     79:            (*s_etat_processus).nombre_variables--;
                     80:            return(d_erreur);
                     81:        }
                     82: 
                     83:        (*s_etat_processus).s_liste_variables = s_nouvelle_base;
                     84:    }
                     85: 
                     86:    if ((*s_etat_processus).mode_execution_programme == 'Y')
                     87:    {
                     88:        (*s_variable).origine = 'P';
                     89:    }
                     90:    else
                     91:    {
                     92:        (*s_variable).origine = 'E';
                     93:    }
                     94: 
                     95:    if ((*s_variable).niveau == 0)
                     96:    {
                     97:        // Un point d'entrée de définition est verrouillé.
                     98: 
                     99:        if ((*s_variable).origine == 'P')
                    100:        {
                    101:            (*s_variable).variable_statique.adresse = 0;
                    102:            (*s_variable).variable_partagee.adresse = 0;
                    103:        }
                    104:        else
                    105:        {
                    106:            (*s_variable).variable_statique.pointeur = NULL;
                    107:            (*s_variable).variable_partagee.pointeur = NULL;
                    108:        }
                    109: 
                    110:        (*s_variable).variable_verrouillee = d_vrai;
                    111:    }
                    112:    else if ((*s_variable).niveau == 1)
                    113:    {
                    114:        // Une variable globale ne peut être statique.
                    115: 
                    116:        if ((*s_variable).origine == 'P')
                    117:        {
                    118:            (*s_variable).variable_statique.adresse = 0;
                    119:            (*s_variable).variable_partagee.adresse = 0;
                    120:        }
                    121:        else
                    122:        {
                    123:            (*s_variable).variable_statique.pointeur = NULL;
                    124:            (*s_variable).variable_partagee.pointeur = NULL;
                    125:        }
                    126: 
                    127:        (*s_variable).variable_verrouillee = d_faux;
                    128:    }
                    129:    else
                    130:    {
                    131:        // 0 -> variable volatile
                    132:        // adresse de création -> variable statique
                    133: 
                    134:        if (autorisation_creation_variable_statique == 'V')
                    135:        {
                    136:            if (autorisation_creation_variable_partagee == 'S')
                    137:            {
                    138:                // On force la création d'une variable partagée
                    139: 
                    140:                if ((*s_variable).origine == 'P')
                    141:                {
                    142:                    (*s_variable).variable_statique.adresse = 0;
                    143:                    (*s_variable).variable_partagee.adresse =
                    144:                            (*s_etat_processus).position_courante;
                    145:                }
                    146:                else
                    147:                {
                    148:                    (*s_variable).variable_statique.pointeur = NULL;
                    149:                    (*s_variable).variable_partagee.pointeur =
                    150:                            (*s_etat_processus).objet_courant;
                    151:                }
                    152:            }
                    153:            else
                    154:            {
                    155:                // On force la création d'une variable volatile
                    156: 
                    157:                if ((*s_variable).origine == 'P')
                    158:                {
                    159:                    (*s_variable).variable_statique.adresse = 0;
                    160:                    (*s_variable).variable_partagee.adresse = 0;
                    161:                }
                    162:                else
                    163:                {
                    164:                    (*s_variable).variable_statique.pointeur = NULL;
                    165:                    (*s_variable).variable_partagee.pointeur = NULL;
                    166:                }
                    167:            }
                    168:        }
                    169:        else
                    170:        {
                    171:            // On force la création d'une variable statique.
                    172: 
                    173:            if ((*s_variable).origine == 'P')
                    174:            {
                    175:                (*s_variable).variable_statique.adresse =
                    176:                        (*s_etat_processus).position_courante;
                    177:                (*s_variable).variable_partagee.adresse = 0;
                    178:            }
                    179:            else
                    180:            {
                    181:                (*s_variable).variable_statique.pointeur =
                    182:                        (*s_etat_processus).objet_courant;
                    183:                (*s_variable).variable_partagee.pointeur = 0;
                    184:            }
                    185:        }
                    186: 
                    187:        (*s_variable).variable_verrouillee = d_faux;
                    188:    }
                    189: 
                    190:    /*
                    191:     * Positionnement de la variable au bon endroit
                    192:     */
                    193: 
                    194:    // Nous avons (*s_etat_processus).nombre_variables - 1 variables dans la
                    195:    // table qui sera balayée de la fin vers le début.
                    196: 
                    197:    if ((*s_etat_processus).nombre_variables == 1)
                    198:    {
                    199:        (*s_etat_processus).s_liste_variables[0] = (*s_variable);
                    200:    }
                    201:    else
                    202:    {
                    203:        for(i = (*s_etat_processus).nombre_variables - 2; i >= 0; i--)
                    204:        {
                    205:            if (strcmp((*s_variable).nom,
                    206:                    (*s_etat_processus).s_liste_variables[i].nom) < 0)
                    207:            {
                    208:                (*s_etat_processus).s_liste_variables[i + 1] =
                    209:                        (*s_etat_processus).s_liste_variables[i];
                    210:            }
                    211:            else
                    212:            {
                    213:                break;
                    214:            }
                    215:        }
                    216: 
                    217:        (*s_etat_processus).s_liste_variables[i + 1] = (*s_variable);
                    218:    }
                    219: 
                    220:    return(d_absence_erreur);
                    221: }
                    222: 
                    223: 
                    224: /*
                    225: ================================================================================
                    226:   Procédure de retrait d'une variable de la base
                    227: ================================================================================
                    228:   Entrée : type 'G' ou 'L' selon que l'on retire une variable locale (incluant
                    229:            les globales) ou strictement globale.
                    230: --------------------------------------------------------------------------------
                    231:   Sortie :
                    232: --------------------------------------------------------------------------------
                    233:   Effets de bord : néant
                    234: ================================================================================
                    235: */
                    236: 
                    237: logical1
                    238: retrait_variable(struct_processus *s_etat_processus,
                    239:        unsigned char *nom_variable, unsigned char type)
                    240: {
                    241:    struct_variable     *s_nouvelle_base;
                    242: 
                    243:    logical1            erreur;
                    244: 
                    245:    unsigned long       position_courante;
                    246:    unsigned long       position_supprimee;
                    247: 
                    248:    if (recherche_variable(s_etat_processus, nom_variable) == d_vrai)
                    249:    {
                    250:        if (type == 'G')
                    251:        {
                    252:            if ((*s_etat_processus).position_variable_courante > 0)
                    253:            {
                    254:                while(strcmp((*s_etat_processus).s_liste_variables
                    255:                        [(*s_etat_processus).position_variable_courante]
                    256:                        .nom, nom_variable) == 0)
                    257:                {
                    258:                    (*s_etat_processus).position_variable_courante--;
                    259: 
                    260:                    if ((*s_etat_processus).position_variable_courante >=
                    261:                            (*s_etat_processus).nombre_variables)
                    262:                    {
                    263:                        erreur = d_erreur;
                    264:                        (*s_etat_processus).erreur_execution =
                    265:                                d_ex_variable_non_definie;
                    266:                        return erreur;
                    267:                    }
                    268:                }
                    269: 
                    270:                (*s_etat_processus).position_variable_courante++;
                    271:            }
                    272: 
                    273:            if ((*s_etat_processus).s_liste_variables
                    274:                    [(*s_etat_processus).position_variable_courante]
                    275:                    .niveau != 1)
                    276:            {
                    277:                erreur = d_erreur;
                    278:                (*s_etat_processus).erreur_execution =
                    279:                        d_ex_variable_non_definie;
                    280:                return erreur;
                    281:            }
                    282: 
                    283:            if ((*s_etat_processus).s_liste_variables
                    284:                    [(*s_etat_processus).position_variable_courante]
                    285:                    .variable_verrouillee == d_vrai)
                    286:            {
                    287:                erreur = d_erreur;
                    288:                (*s_etat_processus).erreur_execution =
                    289:                        d_ex_variable_verrouillee;
                    290:                return erreur;
                    291:            }
                    292:        }
                    293: 
                    294:        if ((*s_etat_processus).nombre_variables <
                    295:                ((*s_etat_processus).nombre_variables_allouees / 2))
                    296:        {
                    297:            (*s_etat_processus).nombre_variables_allouees /= 2;
                    298: 
                    299:            // (*s_etat_processus).nombre_variables est forcément
                    300:            // supérieur à 1 (la décrémentation est postérieure). Ce test
                    301:            // est vrai lorsque le nombre de variables allouées est
                    302:            // strictement supérieur à 2.
                    303: 
                    304:            if ((s_nouvelle_base =
                    305:                    realloc((*s_etat_processus).s_liste_variables,
                    306:                    (*s_etat_processus).nombre_variables_allouees *
                    307:                    sizeof(struct_variable))) == NULL)
                    308:            {
                    309:                (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    310:                return(d_erreur);
                    311:            }
                    312: 
                    313:            (*s_etat_processus).s_liste_variables = s_nouvelle_base;
                    314:        }
                    315: 
                    316:        position_supprimee = (*s_etat_processus).position_variable_courante;
                    317: 
                    318:        liberation(s_etat_processus, (*s_etat_processus).s_liste_variables
                    319:                [position_supprimee].objet);
                    320:        free((*s_etat_processus).s_liste_variables[position_supprimee].nom);
                    321: 
                    322:        (*s_etat_processus).nombre_variables--;
                    323: 
                    324:        for(position_courante = position_supprimee;
                    325:                position_courante < (*s_etat_processus).nombre_variables;
                    326:                position_courante++)
                    327:        {
                    328:            (*s_etat_processus).s_liste_variables[position_courante] =
                    329:                    (*s_etat_processus).s_liste_variables
                    330:                    [position_courante + 1];
                    331:        }
                    332: 
                    333:        erreur = d_absence_erreur;
                    334:    }
                    335:    else
                    336:    {
                    337:        erreur = d_erreur;
                    338:        (*s_etat_processus).erreur_systeme = d_es_variable_introuvable;
                    339:    }
                    340: 
                    341:    return erreur;
                    342: }
                    343: 
                    344: 
                    345: /*
                    346: ================================================================================
                    347:   Procédure de recherche d'une variable par son nom dans la base
                    348: ================================================================================
                    349:   Entrée :
                    350: --------------------------------------------------------------------------------
                    351:   Sortie :
                    352: --------------------------------------------------------------------------------
                    353:   Effets de bord : néant
                    354: ================================================================================
                    355: */
                    356: 
                    357: logical1
                    358: recherche_variable(struct_processus *s_etat_processus,
                    359:        unsigned char *nom_variable)
                    360: {
                    361:    logical1                    existence_variable;
                    362: 
                    363:    long                        difference;
                    364:    long                        difference_inferieure;
                    365:    long                        difference_superieure;
                    366: 
                    367:    struct_liste_pile_systeme   *l_element_courant;
                    368: 
                    369:    unsigned long               borne_inferieure;
                    370:    unsigned long               borne_superieure;
                    371:    unsigned long               moyenne;
                    372:    unsigned long               niveau_appel;
                    373:    unsigned long               nombre_iterations_maximal;
                    374:    unsigned long               ordre_iteration;
                    375: 
                    376:    if ((*s_etat_processus).nombre_variables == 0)
                    377:    {
                    378:        (*s_etat_processus).erreur_systeme = d_es_variable_introuvable;
                    379:        return d_faux;
                    380:    }
                    381: 
                    382:    ordre_iteration = 0;
                    383:    nombre_iterations_maximal = ((unsigned long)
                    384:            (log((*s_etat_processus).nombre_variables) / log(2))) + 2;
                    385: 
                    386:    borne_inferieure = 0;
                    387:    borne_superieure = (*s_etat_processus).nombre_variables - 1;
                    388: 
                    389:    do
                    390:    {
                    391:        moyenne = (borne_inferieure + borne_superieure) / 2;
                    392:        ordre_iteration++;
                    393: 
                    394:        if (((borne_inferieure + borne_superieure) % 2) == 0)
                    395:        {
                    396:            difference = strcmp(nom_variable,
                    397:                    ((*s_etat_processus).s_liste_variables)[moyenne].nom);
                    398: 
                    399:            if (difference != 0)
                    400:            {
                    401:                if (difference > 0)
                    402:                {
                    403:                    borne_inferieure = moyenne;
                    404:                }
                    405:                else
                    406:                {
                    407:                    borne_superieure = moyenne;
                    408:                }
                    409:            }
                    410:        }
                    411:        else
                    412:        {
                    413:            difference_inferieure = strcmp(nom_variable,
                    414:                    ((*s_etat_processus).s_liste_variables)[moyenne].nom);
                    415:            difference_superieure = strcmp(nom_variable,
                    416:                    ((*s_etat_processus).s_liste_variables)[moyenne + 1].nom);
                    417: 
                    418:            if (difference_inferieure == 0)
                    419:            {
                    420:                difference = 0;
                    421:            }
                    422:            else if (difference_superieure == 0)
                    423:            {
                    424:                difference = 0;
                    425:                moyenne++;
                    426:            }
                    427:            else
                    428:            {
                    429:                difference = difference_inferieure;
                    430: 
                    431:                if (difference > 0)
                    432:                {
                    433:                    borne_inferieure = moyenne;
                    434:                }
                    435:                else
                    436:                {
                    437:                    borne_superieure = moyenne;
                    438:                }
                    439:            }
                    440:        }
                    441:    } while((difference != 0) &&
                    442:            (ordre_iteration <= nombre_iterations_maximal));
                    443: 
                    444:    if (ordre_iteration > nombre_iterations_maximal)
                    445:    {
                    446:        existence_variable = d_faux;
                    447:        (*s_etat_processus).erreur_systeme = d_es_variable_introuvable;
                    448:    }
                    449:    else
                    450:    {
                    451:        if ((moyenne + 1) < (*s_etat_processus).nombre_variables)
                    452:        {
                    453:            while(strcmp(((*s_etat_processus).s_liste_variables)
                    454:                    [moyenne + 1].nom, nom_variable) == 0)
                    455:            {
                    456:                moyenne++;
                    457: 
                    458:                if ((moyenne + 1) >= (*s_etat_processus).nombre_variables)
                    459:                {
                    460:                    break;
                    461:                }
                    462:            }
                    463:        }
                    464: 
                    465:        (*s_etat_processus).position_variable_courante = moyenne;
                    466: 
                    467:        if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
                    468:                .position_variable_courante].niveau > 1)
                    469:        {
                    470:            // La variable trouvée est une variable locale.
                    471:            // On vérifie qu'elle est accessible à la définition
                    472:            // courante.
                    473: 
                    474:            niveau_appel = (*s_etat_processus).niveau_courant;
                    475:            l_element_courant = (*s_etat_processus).l_base_pile_systeme;
                    476: 
                    477:            if (l_element_courant == NULL)
                    478:            {
                    479:                (*s_etat_processus).erreur_systeme = d_es_pile_vide;
                    480:                existence_variable = d_faux;
                    481: 
                    482:                return existence_variable;
                    483:            }
                    484: 
                    485:            while((*l_element_courant).retour_definition != 'Y')
                    486:            {
                    487:                l_element_courant = (*l_element_courant).suivant;
                    488: 
                    489:                if (l_element_courant == NULL)
                    490:                {
                    491:                    (*s_etat_processus).erreur_systeme = d_es_pile_vide;
                    492:                    existence_variable = d_faux;
                    493: 
                    494:                    return existence_variable;
                    495:                }
                    496:            }
                    497: 
                    498:            niveau_appel = (*l_element_courant).niveau_courant;
                    499: 
                    500:            if (niveau_appel < (*s_etat_processus).s_liste_variables
                    501:                    [(*s_etat_processus).position_variable_courante].niveau)
                    502:            {
                    503:                existence_variable = d_vrai;
                    504:            }
                    505:            else
                    506:            {
                    507:                existence_variable = d_faux;
                    508: 
                    509:                // La variable locale n'est pas accessible. On regarde si par
                    510:                // hasard il existe une variable globale.
                    511: 
                    512:                while((*s_etat_processus).position_variable_courante != 0)
                    513:                {
                    514:                    if (strcmp(((*s_etat_processus).s_liste_variables)
                    515:                            [(*s_etat_processus).position_variable_courante - 1]                            .nom, nom_variable) == 0)
                    516:                    {
                    517:                        (*s_etat_processus).position_variable_courante--;
                    518:                    }
                    519:                    else
                    520:                    {
                    521:                        if ((*s_etat_processus).s_liste_variables
                    522:                                [(*s_etat_processus).position_variable_courante]
                    523:                                .niveau <= 1)
                    524:                        {
                    525:                            existence_variable = d_vrai;
                    526:                        }
                    527: 
                    528:                        break;
                    529:                    }
                    530:                }
                    531: 
                    532:                if ((strcmp(((*s_etat_processus).s_liste_variables)
                    533:                        [(*s_etat_processus).position_variable_courante].nom,
                    534:                        nom_variable) == 0) && ((*s_etat_processus)
                    535:                        .s_liste_variables[(*s_etat_processus)
                    536:                        .position_variable_courante].niveau <= 1))
                    537:                {
                    538:                    existence_variable = d_vrai;
                    539:                }
                    540:            }
                    541:        }
                    542:        else
                    543:        {
                    544:            // La variable trouvée est soit un pointeur sur une définition
                    545:            // (niveau 0), soit une variable globale (niveau 1).
                    546: 
                    547:            existence_variable = d_vrai;
                    548:        }
                    549:    }
                    550: 
                    551:    return existence_variable;
                    552: }
                    553: 
                    554: 
                    555: /*
                    556: ================================================================================
                    557:   Procédure de retrait des variables de niveau strictement supérieur au
                    558:   niveau courant
                    559: ================================================================================
                    560:   Entrée :
                    561: --------------------------------------------------------------------------------
                    562:   Sortie :
                    563: --------------------------------------------------------------------------------
                    564:   Effets de bord : néant
                    565: ================================================================================
                    566: */
                    567: 
                    568: logical1
                    569: retrait_variable_par_niveau(struct_processus *s_etat_processus)
                    570: {
                    571:    unsigned long                   i;
                    572:    unsigned long                   j;
                    573: 
                    574:    struct_variable                 *tampon;
                    575: 
                    576:    for(j = 0, i = 0; i < (*s_etat_processus).nombre_variables; i++)
                    577:    {
                    578:        if ((*s_etat_processus).s_liste_variables[i].niveau <=
                    579:                (*s_etat_processus).niveau_courant)
                    580:        {
                    581:            (*s_etat_processus).s_liste_variables[j++] =
                    582:                    (*s_etat_processus).s_liste_variables[i];
                    583:        }
                    584:        else
                    585:        {
                    586:            if ((*s_etat_processus).s_liste_variables[i].origine == 'P')
                    587:            {
                    588:                if ((*s_etat_processus).s_liste_variables[i]
                    589:                        .variable_statique.adresse != 0)
                    590:                {
                    591:                    /*
                    592:                     * Gestion des variables statiques
                    593:                     */
                    594: 
                    595:                    if (recherche_variable_statique(s_etat_processus,
                    596:                            (*s_etat_processus).s_liste_variables[i]
                    597:                            .nom, (*s_etat_processus).s_liste_variables
                    598:                            [i].variable_statique, ((*s_etat_processus)
                    599:                            .mode_execution_programme
                    600:                             == 'Y') ? 'P' : 'E') == d_vrai)
                    601:                    {
                    602:                        (*s_etat_processus).s_liste_variables_statiques
                    603:                                [(*s_etat_processus)
                    604:                                .position_variable_statique_courante]
                    605:                                .objet = (*s_etat_processus)
                    606:                                .s_liste_variables[i].objet;
                    607:                    }
                    608:                    else
                    609:                    {
                    610:                        (*s_etat_processus).erreur_systeme =
                    611:                                d_es_variable_introuvable;
                    612:                    }
                    613: 
                    614:                    (*s_etat_processus).s_liste_variables[i].objet = NULL;
                    615:                }
                    616:            }
                    617:            else
                    618:            {
                    619:                if ((*s_etat_processus).s_liste_variables[i]
                    620:                        .variable_statique.pointeur != NULL)
                    621:                {
                    622:                    /*
                    623:                     * Gestion des variables statiques
                    624:                     */
                    625: 
                    626:                    if (recherche_variable_statique(s_etat_processus,
                    627:                            (*s_etat_processus).s_liste_variables[i]
                    628:                            .nom, (*s_etat_processus).s_liste_variables[i]
                    629:                            .variable_statique, ((*s_etat_processus)
                    630:                            .mode_execution_programme
                    631:                             == 'Y') ? 'P' : 'E') == d_vrai)
                    632:                    {
                    633:                        (*s_etat_processus).s_liste_variables_statiques
                    634:                                [(*s_etat_processus)
                    635:                                .position_variable_statique_courante]
                    636:                                .objet = (*s_etat_processus)
                    637:                                .s_liste_variables[i].objet;
                    638:                    }
                    639:                    else
                    640:                    {
                    641:                        (*s_etat_processus).erreur_systeme =
                    642:                                d_es_variable_introuvable;
                    643:                    }
                    644: 
                    645:                    (*s_etat_processus).s_liste_variables[i].objet = NULL;
                    646:                }
                    647:            }
                    648: 
                    649:            free((*s_etat_processus).s_liste_variables[i].nom);
                    650:            liberation(s_etat_processus,
                    651:                    (*s_etat_processus).s_liste_variables[i].objet);
                    652:        }
                    653:    }
                    654: 
                    655:    (*s_etat_processus).nombre_variables = j;
                    656: 
                    657:    if ((*s_etat_processus).nombre_variables <
                    658:            ((*s_etat_processus).nombre_variables_allouees / 2))
                    659:    {
                    660:        (*s_etat_processus).nombre_variables_allouees /= 2;
                    661: 
                    662:        if ((tampon = realloc((*s_etat_processus).s_liste_variables,
                    663:                (*s_etat_processus).nombre_variables_allouees *
                    664:                sizeof(struct_variable))) == NULL)
                    665:        {
                    666:            (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                    667:            return(d_erreur);
                    668:        }
                    669: 
                    670:        (*s_etat_processus).s_liste_variables = tampon;
                    671:    }
                    672: 
                    673:    return(d_absence_erreur);
                    674: }
                    675: 
                    676: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>