File:  [local] / rpl / src / instructions_v2.c
Revision 1.5: download - view: text, annotated - select for diffs - revision graph
Tue Mar 9 10:18:49 2010 UTC (14 years, 1 month ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_13, rpl-4_0_12, HEAD
En route pour la 4.0.13.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.13
    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 'volatile'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_volatile(struct_processus *s_etat_processus)
   40: {
   41:     struct_liste_chainee                *l_element_courant;
   42: 
   43:     struct_objet                        *s_objet;
   44: 
   45:     (*s_etat_processus).erreur_execution = d_ex;
   46: 
   47:     if ((*s_etat_processus).affichage_arguments == 'Y')
   48:     {
   49:         printf("\n  VOLATILE ");
   50: 
   51:         if ((*s_etat_processus).langue == 'F')
   52:         {
   53:             printf("(rend volatile une variable statique)\n\n");
   54:         }
   55:         else
   56:         {
   57:             printf("(make volatile a static variable)\n\n");
   58:         }
   59: 
   60:         printf("    1: %s, %s\n", d_NOM, d_LST);
   61: 
   62:         return;
   63:     }
   64:     else if ((*s_etat_processus).test_instruction == 'Y')
   65:     {
   66:         (*s_etat_processus).nombre_arguments = -1;
   67:         return;
   68:     }
   69:     
   70:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   71:     {
   72:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
   73:         {
   74:             return;
   75:         }
   76:     }
   77: 
   78:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
   79:             &s_objet) == d_erreur)
   80:     {
   81:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
   82:         return;
   83:     }
   84: 
   85:     if ((*s_objet).type == NOM)
   86:     {
   87:         if (recherche_variable(s_etat_processus, ((*((struct_nom *)
   88:                 (*s_objet).objet)).nom)) == d_faux)
   89:         {
   90:             liberation(s_etat_processus, s_objet);
   91: 
   92:             (*s_etat_processus).erreur_systeme = d_es;
   93:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
   94:             return;
   95:         }
   96: 
   97:         if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)
   98:                 .position_variable_courante].origine == 'P')
   99:                 ? ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  100:                 .position_variable_courante].variable_statique.adresse == 0)
  101:                 : ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  102:                 .position_variable_courante].variable_statique.pointeur
  103:                 == NULL))
  104:         {
  105:             liberation(s_etat_processus, s_objet);
  106: 
  107:             (*s_etat_processus).erreur_execution = d_ex_variable_volatile;
  108:             return;
  109:         }
  110:         else
  111:         {
  112:             if (retrait_variable_statique(s_etat_processus,
  113:                     (*((struct_nom *) (*s_objet).objet)).nom,
  114:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  115:                     .position_variable_courante].variable_statique)
  116:                     == d_erreur)
  117:             {
  118:                 liberation(s_etat_processus, s_objet);
  119:                 return;
  120:             }
  121: 
  122:             if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  123:                     .position_variable_courante].origine == 'P')
  124:             {
  125:                 (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  126:                         .position_variable_courante].variable_statique.adresse
  127:                         = 0;
  128:             }
  129:             else
  130:             {
  131:                 (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  132:                         .position_variable_courante].variable_statique.pointeur
  133:                         = NULL;
  134:             }
  135:         }
  136:     }
  137:     else if ((*s_objet).type == LST)
  138:     {
  139:         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
  140: 
  141:         while(l_element_courant != NULL)
  142:         {
  143:             if ((*(*l_element_courant).donnee).type != NOM)
  144:             {
  145:                 liberation(s_etat_processus, s_objet);
  146: 
  147:                 (*s_etat_processus).erreur_execution = d_ex_nom_invalide;
  148:                 return;
  149:             }
  150: 
  151:             if (recherche_variable(s_etat_processus, (*((struct_nom *)
  152:                     (*(*l_element_courant).donnee).objet)).nom) == d_faux)
  153:             {
  154:                 liberation(s_etat_processus, s_objet);
  155: 
  156:                 (*s_etat_processus).erreur_systeme = d_es;
  157:                 (*s_etat_processus).erreur_execution =
  158:                         d_ex_variable_non_definie;
  159:                 return;
  160:             }
  161: 
  162:             if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  163:                     .position_variable_courante].origine == 'P')
  164:                     ? ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  165:                     .position_variable_courante].variable_statique.adresse == 0)
  166:                     : ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  167:                     .position_variable_courante].variable_statique.pointeur
  168:                     == NULL))
  169:             {
  170:                 liberation(s_etat_processus, s_objet);
  171: 
  172:                 (*s_etat_processus).erreur_execution = d_ex_variable_volatile;
  173:                 return;
  174:             }
  175:             else
  176:             {
  177:                 if (retrait_variable_statique(s_etat_processus,
  178:                         (*((struct_nom *) (*s_objet).objet)).nom,
  179:                         (*s_etat_processus).s_liste_variables
  180:                         [(*s_etat_processus).position_variable_courante]
  181:                         .variable_statique) == d_erreur)
  182:                 {
  183:                     liberation(s_etat_processus, s_objet);
  184:                     return;
  185:                 }
  186: 
  187:                 if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  188:                         .position_variable_courante].origine == 'P')
  189:                 {
  190:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  191:                             .position_variable_courante].variable_statique
  192:                             .adresse = 0;
  193:                 }
  194:                 else
  195:                 {
  196:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  197:                             .position_variable_courante].variable_statique
  198:                             .pointeur = NULL;
  199:                 }
  200:             }
  201: 
  202:             l_element_courant = (*l_element_courant).suivant;
  203:         }
  204:     }
  205:     else
  206:     {
  207:         liberation(s_etat_processus, s_objet);
  208: 
  209:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  210:         return;
  211:     }
  212: 
  213:     liberation(s_etat_processus, s_objet);
  214: 
  215:     return;
  216: }
  217: 
  218: 
  219: /*
  220: ================================================================================
  221:   Fonction 'verify'
  222: ================================================================================
  223:   Entrées :
  224: --------------------------------------------------------------------------------
  225:   Sorties :
  226: --------------------------------------------------------------------------------
  227:   Effets de bord : néant
  228: ================================================================================
  229: */
  230: 
  231: void
  232: instruction_verify(struct_processus *s_etat_processus)
  233: {
  234:     int                             position;
  235: 
  236:     integer8                        i1;
  237:     integer8                        i2;
  238:     integer8                        i3;
  239:     integer8                        i4;
  240:     integer8                        j1;
  241:     integer8                        j2;
  242:     integer8                        j3;
  243:     integer8                        j4;
  244: 
  245:     logical1                        drapeau;
  246:     logical1                        drapeau_final;
  247:     logical1                        drapeau_final_courant;
  248:     logical1                        drapeau_prerelease;
  249:     logical1                        drapeau_prerelease_courant;
  250:     logical1                        last_valide;
  251: 
  252:     struct_liste_chainee            *l_element_caracteristiques;
  253:     struct_liste_chainee            *l_element_courant;
  254:     struct_liste_chainee            *l_element_version;
  255: 
  256:     struct_objet                    *s_objet_argument;
  257:     struct_objet                    *s_objet_caracteristiques;
  258:     struct_objet                    *s_objet_resultat;
  259: 
  260:     unsigned char                   *chaine_majuscule;
  261: 
  262:     (*s_etat_processus).erreur_execution = d_ex;
  263: 
  264:     if ((*s_etat_processus).affichage_arguments == 'Y')
  265:     {
  266:         printf("\n  VERIFY ");
  267: 
  268:         if ((*s_etat_processus).langue == 'F')
  269:         {
  270:             printf("(vérification des caractéristiques du langage)\n\n");
  271:         }
  272:         else
  273:         {
  274:             printf("(checks of the language characteristics)\n\n");
  275:         }
  276: 
  277:         printf("    1: %s\n", d_LST);
  278:         printf("->  1: %s (0 or -1)\n\n", d_INT);
  279: 
  280:         if ((*s_etat_processus).langue == 'F')
  281:         {
  282:             printf("  Utilisation :\n\n");
  283:         }
  284:         else
  285:         {
  286:             printf("  Usage:\n\n");
  287:         }
  288: 
  289:         printf("    { { 4 0 0 \"PRERELEASE\" 4 } \"POSTGRESQL\" } VERIFY\n");
  290:         printf("    { { 4 0 0 } } VERIFY\n");
  291: 
  292:         return;
  293:     }
  294:     else if ((*s_etat_processus).test_instruction == 'Y')
  295:     {
  296:         (*s_etat_processus).nombre_arguments = -1;
  297:         return;
  298:     }
  299: 
  300:     if ((last_valide = test_cfsf(s_etat_processus, 31)) == d_vrai)
  301:     {
  302:         if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
  303:         {
  304:             return;
  305:         }
  306:     }
  307: 
  308:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  309:             &s_objet_argument) == d_erreur)
  310:     {
  311:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  312:         return;
  313:     }
  314: 
  315:     if ((*s_objet_argument).type == LST)
  316:     {
  317:         if (last_valide == d_vrai)
  318:         {
  319:             cf(s_etat_processus, 31);
  320:         }
  321: 
  322:         instruction_version(s_etat_processus);
  323: 
  324:         if (last_valide == d_vrai)
  325:         {
  326:             sf(s_etat_processus, 31);
  327:         }
  328: 
  329:         if ((*s_etat_processus).erreur_systeme != d_es)
  330:         {
  331:             return;
  332:         }
  333: 
  334:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  335:                 &s_objet_caracteristiques) == d_erreur)
  336:         {
  337:             (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  338:             return;
  339:         }
  340: 
  341:         /*
  342:          * L'objet renvoyé est obligatoirement une liste.
  343:          */
  344: 
  345:         BUG((*s_objet_caracteristiques).type != LST,
  346:                 printf("(*s_objet_caracteristiques).type='%d'\n",
  347:                 (*s_objet_caracteristiques).type));
  348: 
  349:         drapeau = d_vrai;
  350:         l_element_courant = (*s_objet_argument).objet;
  351: 
  352:         while((l_element_courant != NULL) && (drapeau == d_vrai))
  353:         {
  354:             if ((*(*l_element_courant).donnee).type == CHN)
  355:             {
  356:                 if ((chaine_majuscule = conversion_majuscule((unsigned char *)
  357:                         (*(*l_element_courant).donnee).objet)) == NULL)
  358:                 {
  359:                     (*s_etat_processus).erreur_systeme =
  360:                             d_es_allocation_memoire;
  361:                     return;
  362:                 }
  363: 
  364:                 l_element_caracteristiques = (*s_objet_caracteristiques).objet;
  365: 
  366:                 while(l_element_caracteristiques != NULL)
  367:                 {
  368:                     if ((*(*l_element_caracteristiques).donnee).type == CHN)
  369:                     {
  370:                         if (strcmp((unsigned char *)
  371:                                 (*(*l_element_caracteristiques).donnee).objet,
  372:                                 chaine_majuscule) == 0)
  373:                         {
  374:                             break;
  375:                         }
  376:                     }
  377: 
  378:                     l_element_caracteristiques = (*l_element_caracteristiques)
  379:                             .suivant;
  380:                 }
  381: 
  382:                 free(chaine_majuscule);
  383: 
  384:                 if (l_element_caracteristiques == NULL)
  385:                 { // La chaîne n'a pas été trouvée...
  386:                     drapeau = d_faux;
  387:                     break;
  388:                 }
  389:             }
  390:             else if ((*(*l_element_courant).donnee).type == LST)
  391:             {
  392:                 drapeau_final = d_vrai;
  393:                 drapeau_prerelease = d_faux;
  394:                 drapeau_final_courant = d_vrai;
  395:                 drapeau_prerelease_courant = d_faux;
  396:                 i1 = 0;
  397:                 i2 = 0;
  398:                 i3 = 0;
  399:                 i4 = 0;
  400:                 j1 = 0;
  401:                 j2 = 0;
  402:                 j3 = 0;
  403:                 j4 = 0;
  404: 
  405:                 l_element_version = (*(*l_element_courant).donnee).objet;
  406:                 position = 1;
  407: 
  408:                 while(l_element_version != NULL)
  409:                 {
  410:                     switch(position)
  411:                     {
  412:                         case 1 :
  413:                         {
  414:                             if ((*(*l_element_version).donnee).type == INT)
  415:                             {
  416:                                 i1 = (*((integer8 *) (*(*l_element_version)
  417:                                         .donnee).objet));
  418:                             }
  419:                             else
  420:                             {
  421:                                 liberation(s_etat_processus, s_objet_argument);
  422:                                 liberation(s_etat_processus,
  423:                                         s_objet_caracteristiques);
  424: 
  425:                                 (*s_etat_processus).erreur_execution =
  426:                                         d_ex_erreur_type_argument;
  427:                                 return;
  428:                             }
  429: 
  430:                             break;
  431:                         }
  432: 
  433:                         case 2 :
  434:                         {
  435:                             if ((*(*l_element_version).donnee).type == INT)
  436:                             {
  437:                                 i2 = (*((integer8 *) (*(*l_element_version)
  438:                                         .donnee).objet));
  439:                             }
  440:                             else
  441:                             {
  442:                                 liberation(s_etat_processus, s_objet_argument);
  443:                                 liberation(s_etat_processus,
  444:                                         s_objet_caracteristiques);
  445: 
  446:                                 (*s_etat_processus).erreur_execution =
  447:                                         d_ex_erreur_type_argument;
  448:                                 return;
  449:                             }
  450: 
  451:                             break;
  452:                         }
  453: 
  454:                         case 3 :
  455:                         {
  456:                             if ((*(*l_element_version).donnee).type == INT)
  457:                             {
  458:                                 i3 = (*((integer8 *) (*(*l_element_version)
  459:                                         .donnee).objet));
  460:                             }
  461:                             else
  462:                             {
  463:                                 liberation(s_etat_processus, s_objet_argument);
  464:                                 liberation(s_etat_processus,
  465:                                         s_objet_caracteristiques);
  466: 
  467:                                 (*s_etat_processus).erreur_execution =
  468:                                         d_ex_erreur_type_argument;
  469:                                 return;
  470:                             }
  471: 
  472:                             break;
  473:                         }
  474: 
  475:                         case 4 :
  476:                         {
  477:                             if ((*(*l_element_version).donnee).type == CHN)
  478:                             {
  479:                                 if ((chaine_majuscule = conversion_majuscule(
  480:                                         (unsigned char *) (*(*l_element_version)
  481:                                         .donnee).objet)) == NULL)
  482:                                 {
  483:                                     (*s_etat_processus).erreur_systeme =
  484:                                             d_es_allocation_memoire;
  485:                                     return;
  486:                                 }
  487: 
  488:                                 if (strcmp(chaine_majuscule, "RELEASE") == 0)
  489:                                 {
  490:                                     drapeau_final = d_vrai;
  491:                                 }
  492:                                 else if (strcmp(chaine_majuscule, "PRERELEASE")
  493:                                         == 0)
  494:                                 {
  495:                                     drapeau_final = d_faux;
  496:                                 }
  497:                                 else
  498:                                 {
  499:                                     liberation(s_etat_processus,
  500:                                             s_objet_argument);
  501:                                     liberation(s_etat_processus,
  502:                                             s_objet_caracteristiques);
  503: 
  504:                                     (*s_etat_processus).erreur_execution =
  505:                                             d_ex_argument_invalide;
  506:                                     return;
  507:                                 }
  508: 
  509:                                 free(chaine_majuscule);
  510:                             }
  511:                             else
  512:                             {
  513:                                 liberation(s_etat_processus, s_objet_argument);
  514:                                 liberation(s_etat_processus,
  515:                                         s_objet_caracteristiques);
  516: 
  517:                                 (*s_etat_processus).erreur_execution =
  518:                                         d_ex_erreur_type_argument;
  519:                                 return;
  520:                             }
  521: 
  522:                             break;
  523:                         }
  524: 
  525:                         case 5 :
  526:                         {
  527:                             if ((*(*l_element_version).donnee).type == INT)
  528:                             {
  529:                                 i4 = (*((integer8 *) (*(*l_element_version)
  530:                                         .donnee).objet));
  531:                             }
  532:                             else
  533:                             {
  534:                                 liberation(s_etat_processus, s_objet_argument);
  535:                                 liberation(s_etat_processus,
  536:                                         s_objet_caracteristiques);
  537: 
  538:                                 (*s_etat_processus).erreur_execution =
  539:                                         d_ex_erreur_type_argument;
  540:                                 return;
  541:                             }
  542: 
  543:                             drapeau_prerelease = d_vrai;
  544:                             break;
  545:                         }
  546: 
  547:                         default :
  548:                         {
  549:                             liberation(s_etat_processus, s_objet_argument);
  550:                             liberation(s_etat_processus,
  551:                                     s_objet_caracteristiques);
  552: 
  553:                             (*s_etat_processus).erreur_execution =
  554:                                     d_ex_erreur_type_argument;
  555:                             return;
  556:                             break;
  557:                         }
  558:                     }
  559: 
  560:                     position++;
  561:                     l_element_version = (*l_element_version).suivant;
  562:                 }
  563: 
  564:                 if (drapeau_prerelease == drapeau_final)
  565:                 {
  566:                     liberation(s_etat_processus, s_objet_argument);
  567:                     liberation(s_etat_processus, s_objet_caracteristiques);
  568: 
  569:                     (*s_etat_processus).erreur_execution =
  570:                             d_ex_argument_invalide;
  571:                     return;
  572:                 }
  573: 
  574:                 l_element_caracteristiques = (*s_objet_caracteristiques).objet;
  575: 
  576:                 while(l_element_caracteristiques != NULL)
  577:                 {
  578:                     if ((*(*l_element_caracteristiques).donnee).type == LST)
  579:                     {
  580:                         l_element_version = (*(*l_element_caracteristiques)
  581:                                 .donnee).objet;
  582: 
  583:                         position = 1;
  584: 
  585:                         while(l_element_version != NULL)
  586:                         {
  587:                             switch(position)
  588:                             {
  589:                                 case 1 :
  590:                                 {
  591:                                     j1 = (*((integer8 *) (*(*l_element_version)
  592:                                             .donnee).objet));
  593:                                     break;
  594:                                 }
  595: 
  596:                                 case 2 :
  597:                                 {
  598:                                     j2 = (*((integer8 *) (*(*l_element_version)
  599:                                             .donnee).objet));
  600:                                     break;
  601:                                 }
  602: 
  603:                                 case 3 :
  604:                                 {
  605:                                     j3 = (*((integer8 *) (*(*l_element_version)
  606:                                             .donnee).objet));
  607:                                     break;
  608:                                 }
  609: 
  610:                                 case 4 :
  611:                                 {
  612:                                     drapeau_final_courant =
  613:                                             (strcmp((unsigned char *)
  614:                                             (*(*l_element_version).donnee)
  615:                                             .objet, "RELEASE") == 0)
  616:                                             ? d_vrai : d_faux;
  617:                                     break;
  618:                                 }
  619: 
  620:                                 case 5 :
  621:                                 {
  622:                                     j4 = (*((integer8 *) (*(*l_element_version)
  623:                                             .donnee).objet));
  624:                                     drapeau_prerelease_courant = d_vrai;
  625:                                     break;
  626:                                 }
  627:                             }
  628: 
  629:                             position++;
  630:                             l_element_version = (*l_element_version).suivant;
  631:                         }
  632: 
  633:                         break;
  634:                     }
  635: 
  636:                     l_element_caracteristiques = (*l_element_caracteristiques)
  637:                             .suivant;
  638:                 }
  639: 
  640:                 if (drapeau_prerelease_courant == drapeau_final_courant)
  641:                 {
  642:                     liberation(s_etat_processus, s_objet_argument);
  643:                     liberation(s_etat_processus, s_objet_caracteristiques);
  644: 
  645:                     (*s_etat_processus).erreur_execution =
  646:                             d_ex_argument_invalide;
  647:                     return;
  648:                 }
  649: 
  650:                 if (i1 > j1)
  651:                 { // Version demandée supérieure à la version courante
  652:                     drapeau = d_faux;
  653:                 }
  654:                 else if (i1 == j1)
  655:                 {
  656:                     if (i2 > j2)
  657:                     { // Versions idendiques et sous-version demandée
  658:                       // supérieure à la sous-version courante
  659:                         drapeau = d_faux;
  660:                     }
  661:                     else if (i2 == j2)
  662:                     { // Versions et sous-versions identiques
  663:                         if (i3 > j3)
  664:                         { // Niveau de patches demandé supérieur au niveau
  665:                           // de patch courant
  666:                             drapeau = d_faux;
  667:                         }
  668:                         else if (i3 == j3)
  669:                         { // Niveaux de patches indentiques
  670:                             if ((drapeau_final == d_vrai) &&
  671:                                     (drapeau_final_courant == d_faux))
  672:                             { // Finale requise et prerelease obtenue
  673:                                 drapeau = d_faux;
  674:                             }
  675:                             else if ((drapeau_final == d_faux) &&
  676:                                     (drapeau_final_courant == d_vrai))
  677:                             { // Prerelease requise et finale obtenue
  678:                             }
  679:                             else if ((drapeau_final == d_vrai) &&
  680:                                     (drapeau_final_courant == d_vrai))
  681:                             { // Finales de part et d'autre
  682:                             }
  683:                             else
  684:                             { // Prerelease de part et d'autre
  685:                                 if (i4 > j4)
  686:                                 { // Prerelease demandée supérieur à la
  687:                                   // version courante
  688:                                     drapeau = d_faux;
  689:                                 }
  690:                             }
  691:                         }
  692:                         else
  693:                         { // Niveaux de patches inférieur au niveau courant
  694:                         }
  695:                     }
  696:                     else
  697:                     { // Versions indentiques et sous-version inférieure à
  698:                       // la sous-version courante
  699:                     }
  700:                 }
  701:                 else
  702:                 { // Version demandée inférieure à la version courante
  703:                 }
  704:             }
  705:             else
  706:             {
  707:                 liberation(s_etat_processus, s_objet_argument);
  708:                 liberation(s_etat_processus, s_objet_caracteristiques);
  709: 
  710:                 (*s_etat_processus).erreur_execution =
  711:                         d_ex_erreur_type_argument;
  712:                 return;
  713:             }
  714: 
  715:             l_element_courant = (*l_element_courant).suivant;
  716:         }
  717: 
  718:         liberation(s_etat_processus, s_objet_caracteristiques);
  719: 
  720:         /*
  721:          * Création du drapeau renvoyé
  722:          */
  723: 
  724:         if ((s_objet_resultat = allocation(s_etat_processus, INT)) == NULL)
  725:         {
  726:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  727:             return;
  728:         }
  729: 
  730:         (*((integer8 *) (*s_objet_resultat).objet)) = (drapeau == d_vrai)
  731:                 ? -1 : 0;
  732: 
  733:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  734:                 s_objet_resultat) == d_erreur)
  735:         {
  736:             return;
  737:         }
  738:     }
  739:     else
  740:     {
  741:         liberation(s_etat_processus, s_objet_argument);
  742: 
  743:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  744:         return;
  745:     }
  746: 
  747:     liberation(s_etat_processus, s_objet_argument);
  748: 
  749:     return;
  750: }
  751: 
  752: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>