File:  [local] / rpl / src / instructions_v1.c
Revision 1.28: download - view: text, annotated - select for diffs - revision graph
Sun Jul 24 14:44:10 2011 UTC (12 years, 9 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Correction d'un dépassement de buffer dans VERSION.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.1
    4:   Copyright (C) 1989-2011 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 'var'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_var(struct_processus *s_etat_processus)
   40: {
   41:     struct_objet                        *s_objet_statistique;
   42:     struct_objet                        *s_objet_resultat;
   43:     struct_objet                        *s_objet_temporaire;
   44: 
   45:     unsigned long                       nombre_colonnes;
   46: 
   47:     (*s_etat_processus).erreur_execution = d_ex;
   48: 
   49:     if ((*s_etat_processus).affichage_arguments == 'Y')
   50:     {
   51:         printf("\n  VAR ");
   52: 
   53:         if ((*s_etat_processus).langue == 'F')
   54:         {
   55:             printf("(variance)\n\n");
   56:         }
   57:         else
   58:         {
   59:             printf("(variance)\n\n");
   60:         }
   61: 
   62:         printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_VIN, d_VRL);
   63: 
   64:         return;
   65:     }
   66:     else if ((*s_etat_processus).test_instruction == 'Y')
   67:     {
   68:         (*s_etat_processus).nombre_arguments = -1;
   69:         return;
   70:     }
   71: 
   72:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   73:     {
   74:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
   75:         {
   76:             return;
   77:         }
   78:     }
   79: 
   80:     /*
   81:      * Recherche d'une variable globale référencée par SIGMA
   82:      */
   83: 
   84:     if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux)
   85:     {
   86:         /*
   87:          * Aucune variable SIGMA
   88:          */
   89: 
   90:         (*s_etat_processus).erreur_systeme = d_es;
   91: 
   92:         if ((*s_etat_processus).erreur_execution == d_ex)
   93:         {
   94:             (*s_etat_processus).erreur_execution = d_ex_absence_observations;
   95:         }
   96: 
   97:         return;
   98:     }
   99:     else
  100:     {
  101:         if (((*(*(*s_etat_processus).pointeur_variable_courante).objet)
  102:                 .type != MIN) && ((*(*(*s_etat_processus)
  103:                 .pointeur_variable_courante).objet).type != MRL))
  104:         {
  105:             (*s_etat_processus).erreur_execution =
  106:                     d_ex_matrice_statistique_invalide;
  107:             return;
  108:         }
  109: 
  110:         nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus)
  111:                 .pointeur_variable_courante).objet).objet))
  112:                 .nombre_colonnes;
  113:     }
  114: 
  115:     s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante)
  116:             .objet;
  117: 
  118:     if (((*s_objet_statistique).type == MIN) ||
  119:             ((*s_objet_statistique).type == MRL))
  120:     {
  121:         if ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes
  122:                 <= 1)
  123:         {
  124:             (*s_etat_processus).erreur_execution =
  125:                     d_ex_statistiques_echantillon;
  126:             return;
  127:         }
  128: 
  129:         if ((s_objet_resultat = allocation(s_etat_processus, NON)) == NULL)
  130:         {
  131:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  132:             return;
  133:         }
  134: 
  135:         if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *)
  136:                 (*s_objet_statistique).objet, 'E')) == NULL)
  137:         {
  138:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  139:             return;
  140:         }
  141: 
  142:         if (nombre_colonnes == 1)
  143:         {
  144:             if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
  145:             {
  146:                 (*s_objet_resultat).type = VIN;
  147:                 s_objet_temporaire = s_objet_resultat;
  148: 
  149:                 if ((s_objet_resultat = allocation(s_etat_processus, INT))
  150:                         == NULL)
  151:                 {
  152:                     (*s_etat_processus).erreur_systeme =
  153:                             d_es_allocation_memoire;
  154:                     return;
  155:                 }
  156: 
  157:                 (*((integer8 *) (*s_objet_resultat).objet)) =
  158:                         ((integer8 *) (*((struct_vecteur *)
  159:                         (*s_objet_temporaire).objet)).tableau)[0];
  160: 
  161:                 liberation(s_etat_processus, s_objet_temporaire);
  162:             }
  163:             else
  164:             {
  165:                 (*s_objet_resultat).type = VRL;
  166:                 s_objet_temporaire = s_objet_resultat;
  167: 
  168:                 if ((s_objet_resultat = allocation(s_etat_processus, REL))
  169:                         == NULL)
  170:                 {
  171:                     (*s_etat_processus).erreur_systeme =
  172:                             d_es_allocation_memoire;
  173:                     return;
  174:                 }
  175: 
  176:                 (*((real8 *) (*s_objet_resultat).objet)) =
  177:                         ((real8 *) (*((struct_vecteur *)
  178:                         (*s_objet_temporaire).objet)).tableau)[0];
  179: 
  180:                 liberation(s_etat_processus, s_objet_temporaire);
  181:             }
  182:         }
  183:         else
  184:         {
  185:             if ((*((struct_vecteur *) (*s_objet_resultat).objet)).type == 'I')
  186:             {
  187:                 (*s_objet_resultat).type = VIN;
  188:             }
  189:             else
  190:             {
  191:                 (*s_objet_resultat).type = VRL;
  192:             }
  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:     else
  202:     {
  203:         (*s_etat_processus).erreur_execution =
  204:                 d_ex_matrice_statistique_invalide;
  205:         return;
  206:     }
  207: 
  208:     return;
  209: }
  210: 
  211: 
  212: /*
  213: ================================================================================
  214:   Fonction 'version'
  215: ================================================================================
  216:   Entrées :
  217: --------------------------------------------------------------------------------
  218:   Sorties :
  219: --------------------------------------------------------------------------------
  220:   Effets de bord : néant
  221: ================================================================================
  222: */
  223: 
  224: void
  225: instruction_version(struct_processus *s_etat_processus)
  226: {
  227:     int                                 nombre_champs;
  228: 
  229:     integer8                            i1;
  230:     integer8                            i2;
  231:     integer8                            i3;
  232:     integer8                            i4;
  233: 
  234:     struct_liste_chainee                *l_element_courant;
  235:     struct_liste_chainee                *l_element_interne_courant;
  236: 
  237:     struct_objet                        *s_objet_resultat;
  238: 
  239:     unsigned char                       texte[] = "RPL/2 version ";
  240:     unsigned char                       tampon[256 + 1];
  241: 
  242:     void                                *pointeur;
  243: 
  244:     (*s_etat_processus).erreur_execution = d_ex;
  245: 
  246:     if ((*s_etat_processus).affichage_arguments == 'Y')
  247:     {
  248:         printf("\n  VERSION ");
  249: 
  250:         if ((*s_etat_processus).langue == 'F')
  251:         {
  252:             printf("(version du séquenceur)\n\n");
  253:         }
  254:         else
  255:         {
  256:             printf("(sequencer version)\n\n");
  257:         }
  258: 
  259:         printf("->  1: %s\n", d_LST);
  260: 
  261:         return;
  262:     }
  263:     else if ((*s_etat_processus).test_instruction == 'Y')
  264:     {
  265:         (*s_etat_processus).nombre_arguments = -1;
  266:         return;
  267:     }
  268: 
  269:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  270:     {
  271:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  272:         {
  273:             return;
  274:         }
  275:     }
  276: 
  277:     if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
  278:     {
  279:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  280:         return;
  281:     }
  282: 
  283:     if (((*s_objet_resultat).objet = allocation_maillon(s_etat_processus))
  284:             == NULL)
  285:     {
  286:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  287:         return;
  288:     }
  289: 
  290:     l_element_courant = (struct_liste_chainee *) (*s_objet_resultat).objet;
  291:     (*l_element_courant).suivant = NULL;
  292: 
  293:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  294:             == NULL)
  295:     {
  296:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  297:         return;
  298:     }
  299: 
  300:     if (((*(*l_element_courant).donnee).objet = malloc((strlen(texte)
  301:             + strlen(d_version_rpl) + 1) * sizeof(unsigned char))) == NULL)
  302:     {
  303:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  304:         return;
  305:     }
  306: 
  307:     sprintf((unsigned char *) (*(*l_element_courant).donnee).objet, "%s%s",
  308:             texte, d_version_rpl);
  309: 
  310:     /*
  311:      * Ajout des versions X.Y.Z sous forme d'entiers
  312:      */
  313: 
  314:     i1 = 0;
  315:     i2 = 0;
  316:     i3 = 0;
  317:     i4 = 0;
  318: 
  319:     nombre_champs = sscanf(d_version_rpl, "%lld.%lld.%lld.prerelease.%lld",
  320:             &i1, &i2, &i3, &i4);
  321: 
  322:     if (((*l_element_courant).suivant =
  323:             allocation_maillon(s_etat_processus)) == NULL)
  324:     {
  325:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  326:         return;
  327:     }
  328: 
  329:     l_element_courant = (*l_element_courant).suivant;
  330:     (*l_element_courant).suivant = NULL;
  331: 
  332:     if (((*l_element_courant).donnee = allocation(s_etat_processus, LST))
  333:             == NULL)
  334:     {
  335:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  336:         return;
  337:     }
  338: 
  339:     if (((*(*l_element_courant).donnee).objet =
  340:             allocation_maillon(s_etat_processus)) == NULL)
  341:     {
  342:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  343:         return;
  344:     }
  345: 
  346:     l_element_interne_courant = (struct_liste_chainee *)
  347:             (*(*l_element_courant).donnee).objet;
  348: 
  349:     (*l_element_interne_courant).suivant = NULL;
  350: 
  351:     if (((*l_element_interne_courant).donnee =
  352:             allocation(s_etat_processus, INT)) == NULL)
  353:     {
  354:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  355:         return;
  356:     }
  357: 
  358:     (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i1;
  359: 
  360:     if (((*l_element_interne_courant).suivant =
  361:             allocation_maillon(s_etat_processus)) == NULL)
  362:     {
  363:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  364:         return;
  365:     }
  366: 
  367:     l_element_interne_courant = (*l_element_interne_courant).suivant;
  368:     (*l_element_interne_courant).suivant = NULL;
  369: 
  370:     if (((*l_element_interne_courant).donnee =
  371:             allocation(s_etat_processus, INT)) == NULL)
  372:     {
  373:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  374:         return;
  375:     }
  376: 
  377:     (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i2;
  378: 
  379:     if (((*l_element_interne_courant).suivant =
  380:             allocation_maillon(s_etat_processus)) == NULL)
  381:     {
  382:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  383:         return;
  384:     }
  385: 
  386:     l_element_interne_courant = (*l_element_interne_courant).suivant;
  387:     (*l_element_interne_courant).suivant = NULL;
  388: 
  389:     if (((*l_element_interne_courant).donnee =
  390:             allocation(s_etat_processus, INT)) == NULL)
  391:     {
  392:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  393:         return;
  394:     }
  395: 
  396:     (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i3;
  397: 
  398:     /*
  399:      * Ajout de "PRERELEASE" suivi d'un entier ou de "RELEASE"
  400:      */
  401: 
  402:     if (nombre_champs == 3)
  403:     {
  404:         // Version "RELEASE"
  405: 
  406:         if (((*l_element_interne_courant).suivant =
  407:                 allocation_maillon(s_etat_processus)) == NULL)
  408:         {
  409:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  410:             return;
  411:         }
  412: 
  413:         l_element_interne_courant = (*l_element_interne_courant).suivant;
  414:         (*l_element_interne_courant).suivant = NULL;
  415: 
  416:         if (((*l_element_interne_courant).donnee =
  417:                 allocation(s_etat_processus, CHN)) == NULL)
  418:         {
  419:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  420:             return;
  421:         }
  422: 
  423:         if (((*(*l_element_interne_courant).donnee).objet = malloc(8 *
  424:                 sizeof(unsigned char))) == NULL)
  425:         {
  426:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  427:             return;
  428:         }
  429: 
  430:         strcpy((unsigned char *) (*(*l_element_interne_courant).donnee).objet,
  431:                 "RELEASE");
  432:     }
  433:     else
  434:     {
  435:         // Version "PRERELEASE"
  436: 
  437:         if (((*l_element_interne_courant).suivant =
  438:                 allocation_maillon(s_etat_processus)) == NULL)
  439:         {
  440:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  441:             return;
  442:         }
  443: 
  444:         l_element_interne_courant = (*l_element_interne_courant).suivant;
  445:         (*l_element_interne_courant).suivant = NULL;
  446: 
  447:         if (((*l_element_interne_courant).donnee =
  448:                 allocation(s_etat_processus, CHN)) == NULL)
  449:         {
  450:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  451:             return;
  452:         }
  453: 
  454:         if (((*(*l_element_interne_courant).donnee).objet = malloc(11 *
  455:                 sizeof(unsigned char))) == NULL)
  456:         {
  457:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  458:             return;
  459:         }
  460: 
  461:         strcpy((unsigned char *) (*(*l_element_interne_courant).donnee).objet,
  462:                 "PRERELEASE");
  463: 
  464:         if (((*l_element_interne_courant).suivant =
  465:                 allocation_maillon(s_etat_processus)) == NULL)
  466:         {
  467:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  468:             return;
  469:         }
  470: 
  471:         l_element_interne_courant = (*l_element_interne_courant).suivant;
  472:         (*l_element_interne_courant).suivant = NULL;
  473: 
  474:         if (((*l_element_interne_courant).donnee =
  475:                 allocation(s_etat_processus, INT)) == NULL)
  476:         {
  477:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  478:             return;
  479:         }
  480: 
  481:         (*((integer8 *) (*(*l_element_interne_courant).donnee).objet)) = i4;
  482:     }
  483: 
  484:     /*
  485:      * Ajout de la date de compilation
  486:      */
  487: 
  488:     if (((*l_element_courant).suivant =
  489:             allocation_maillon(s_etat_processus)) == NULL)
  490:     {
  491:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  492:         return;
  493:     }
  494: 
  495:     l_element_courant = (*l_element_courant).suivant;
  496:     (*l_element_courant).suivant = NULL;
  497: 
  498:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  499:             == NULL)
  500:     {
  501:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  502:         return;
  503:     }
  504: 
  505:     if (((*(*l_element_courant).donnee).objet = malloc((strlen(d_date_en_rpl)
  506:             + 1) * sizeof(unsigned char))) == NULL)
  507:     {
  508:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  509:         return;
  510:     }
  511: 
  512:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  513:             d_date_en_rpl);
  514: 
  515:     /*
  516:      * Ajout des options de compilation
  517:      */
  518: 
  519:     if (((*l_element_courant).suivant =
  520:             allocation_maillon(s_etat_processus)) == NULL)
  521:     {
  522:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  523:         return;
  524:     }
  525: 
  526:     l_element_courant = (*l_element_courant).suivant;
  527:     (*l_element_courant).suivant = NULL;
  528: 
  529:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  530:             == NULL)
  531:     {
  532:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  533:         return;
  534:     }
  535: 
  536:     if (((*(*l_element_courant).donnee).objet = malloc((strlen(d_exec_path)
  537:             + 1) * sizeof(unsigned char))) == NULL)
  538:     {
  539:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  540:         return;
  541:     }
  542: 
  543:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  544:             d_exec_path);
  545: 
  546:     if (((*l_element_courant).suivant =
  547:             allocation_maillon(s_etat_processus)) == NULL)
  548:     {
  549:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  550:         return;
  551:     }
  552: 
  553:     l_element_courant = (*l_element_courant).suivant;
  554:     (*l_element_courant).suivant = NULL;
  555: 
  556:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  557:             == NULL)
  558:     {
  559:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  560:         return;
  561:     }
  562: 
  563: #ifdef GNUPLOT_SUPPORT
  564:     if (((*(*l_element_courant).donnee).objet = malloc(8 *
  565:             sizeof(unsigned char))) == NULL)
  566:     {
  567:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  568:         return;
  569:     }
  570: 
  571:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  572:             "GNUPLOT");
  573: #else
  574:     if (((*(*l_element_courant).donnee).objet = malloc(17 *
  575:             sizeof(unsigned char))) == NULL)
  576:     {
  577:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  578:         return;
  579:     }
  580: 
  581:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  582:             "GNUPLOT DISABLED");
  583: #endif
  584: 
  585:     if (((*l_element_courant).suivant =
  586:             allocation_maillon(s_etat_processus)) == NULL)
  587:     {
  588:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  589:         return;
  590:     }
  591: 
  592:     l_element_courant = (*l_element_courant).suivant;
  593:     (*l_element_courant).suivant = NULL;
  594: 
  595:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  596:             == NULL)
  597:     {
  598:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  599:         return;
  600:     }
  601: 
  602: #ifdef FORCE_GNUPLOT_PATH
  603:     if (((*(*l_element_courant).donnee).objet = malloc(19 *
  604:             sizeof(unsigned char))) == NULL)
  605:     {
  606:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  607:         return;
  608:     }
  609: 
  610:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  611:             "FORCE GNUPLOT PATH");
  612: #else
  613:     if (((*(*l_element_courant).donnee).objet = malloc(21 *
  614:             sizeof(unsigned char))) == NULL)
  615:     {
  616:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  617:         return;
  618:     }
  619: 
  620:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  621:             "DEFAULT GNUPLOT PATH");
  622: #endif
  623: 
  624:     if (((*l_element_courant).suivant =
  625:             allocation_maillon(s_etat_processus)) == NULL)
  626:     {
  627:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  628:         return;
  629:     }
  630: 
  631:     l_element_courant = (*l_element_courant).suivant;
  632:     (*l_element_courant).suivant = NULL;
  633: 
  634:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  635:             == NULL)
  636:     {
  637:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  638:         return;
  639:     }
  640: 
  641: #ifdef POSTSCRIPT_SUPPORT
  642:     if (((*(*l_element_courant).donnee).objet = malloc(11 *
  643:             sizeof(unsigned char))) == NULL)
  644:     {
  645:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  646:         return;
  647:     }
  648: 
  649:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  650:             "POSTSCRIPT");
  651: #else
  652:     if (((*(*l_element_courant).donnee).objet = malloc(20 *
  653:             sizeof(unsigned char))) == NULL)
  654:     {
  655:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  656:         return;
  657:     }
  658: 
  659:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  660:             "POSTSCRIPT DISABLED");
  661: #endif
  662: 
  663:     if (((*l_element_courant).suivant =
  664:             allocation_maillon(s_etat_processus)) == NULL)
  665:     {
  666:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  667:         return;
  668:     }
  669: 
  670:     l_element_courant = (*l_element_courant).suivant;
  671:     (*l_element_courant).suivant = NULL;
  672: 
  673:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  674:             == NULL)
  675:     {
  676:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  677:         return;
  678:     }
  679: 
  680: #ifdef VIM_SUPPORT
  681:     if (((*(*l_element_courant).donnee).objet = malloc(4 *
  682:             sizeof(unsigned char))) == NULL)
  683:     {
  684:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  685:         return;
  686:     }
  687: 
  688:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  689:             "VIM");
  690: #else
  691:     if (((*(*l_element_courant).donnee).objet = malloc(13 *
  692:             sizeof(unsigned char))) == NULL)
  693:     {
  694:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  695:         return;
  696:     }
  697: 
  698:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  699:             "VIM DISABLED");
  700: #endif
  701: 
  702:     if (((*l_element_courant).suivant =
  703:             allocation_maillon(s_etat_processus)) == NULL)
  704:     {
  705:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  706:         return;
  707:     }
  708: 
  709:     l_element_courant = (*l_element_courant).suivant;
  710:     (*l_element_courant).suivant = NULL;
  711: 
  712:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  713:             == NULL)
  714:     {
  715:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  716:         return;
  717:     }
  718: 
  719: #ifdef MYSQL_SUPPORT
  720:     if (((*(*l_element_courant).donnee).objet = malloc(6 *
  721:             sizeof(unsigned char))) == NULL)
  722:     {
  723:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  724:         return;
  725:     }
  726: 
  727:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  728:             "MYSQL");
  729: #else
  730:     if (((*(*l_element_courant).donnee).objet = malloc(15 *
  731:             sizeof(unsigned char))) == NULL)
  732:     {
  733:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  734:         return;
  735:     }
  736: 
  737:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  738:             "MYSQL DISABLED");
  739: #endif
  740: 
  741:     if (((*l_element_courant).suivant =
  742:             allocation_maillon(s_etat_processus)) == NULL)
  743:     {
  744:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  745:         return;
  746:     }
  747: 
  748:     l_element_courant = (*l_element_courant).suivant;
  749:     (*l_element_courant).suivant = NULL;
  750: 
  751:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  752:             == NULL)
  753:     {
  754:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  755:         return;
  756:     }
  757: 
  758: #ifdef POSTGRESQL_SUPPORT
  759:     if (((*(*l_element_courant).donnee).objet = malloc(11 *
  760:             sizeof(unsigned char))) == NULL)
  761:     {
  762:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  763:         return;
  764:     }
  765: 
  766:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  767:             "POSTGRESQL");
  768: #else
  769:     if (((*(*l_element_courant).donnee).objet = malloc(20 *
  770:             sizeof(unsigned char))) == NULL)
  771:     {
  772:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  773:         return;
  774:     }
  775: 
  776:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  777:             "POSTGRESQL DISABLED");
  778: #endif
  779: 
  780:     if (((*l_element_courant).suivant =
  781:             allocation_maillon(s_etat_processus)) == NULL)
  782:     {
  783:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  784:         return;
  785:     }
  786: 
  787:     l_element_courant = (*l_element_courant).suivant;
  788:     (*l_element_courant).suivant = NULL;
  789: 
  790:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  791:             == NULL)
  792:     {
  793:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  794:         return;
  795:     }
  796: 
  797: #ifdef MOTIF_SUPPORT
  798:     if (((*(*l_element_courant).donnee).objet = malloc(6 *
  799:             sizeof(unsigned char))) == NULL)
  800:     {
  801:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  802:         return;
  803:     }
  804: 
  805:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  806:             "MOTIF");
  807: #else
  808:     if (((*(*l_element_courant).donnee).objet = malloc(15 *
  809:             sizeof(unsigned char))) == NULL)
  810:     {
  811:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  812:         return;
  813:     }
  814: 
  815:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  816:             "MOTIF DISABLED");
  817: #endif
  818: 
  819:     if (((*l_element_courant).suivant =
  820:             allocation_maillon(s_etat_processus)) == NULL)
  821:     {
  822:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  823:         return;
  824:     }
  825: 
  826:     l_element_courant = (*l_element_courant).suivant;
  827:     (*l_element_courant).suivant = NULL;
  828: 
  829:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  830:             == NULL)
  831:     {
  832:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  833:         return;
  834:     }
  835: 
  836: #ifdef RPLCAS
  837:     if (((*(*l_element_courant).donnee).objet = malloc(8 *
  838:             sizeof(unsigned char))) == NULL)
  839:     {
  840:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  841:         return;
  842:     }
  843: 
  844:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  845:             "RPL/CAS");
  846: #else
  847:     if (((*(*l_element_courant).donnee).objet = malloc(17 *
  848:             sizeof(unsigned char))) == NULL)
  849:     {
  850:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  851:         return;
  852:     }
  853: 
  854:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  855:             "RPL/CAS DISABLED");
  856: #endif
  857: 
  858:     if (((*l_element_courant).suivant =
  859:             allocation_maillon(s_etat_processus)) == NULL)
  860:     {
  861:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  862:         return;
  863:     }
  864: 
  865:     l_element_courant = (*l_element_courant).suivant;
  866:     (*l_element_courant).suivant = NULL;
  867: 
  868:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  869:             == NULL)
  870:     {
  871:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  872:         return;
  873:     }
  874: 
  875: #ifdef EXPERIMENTAL_CODE
  876:     if (((*(*l_element_courant).donnee).objet = malloc(18 *
  877:             sizeof(unsigned char))) == NULL)
  878:     {
  879:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  880:         return;
  881:     }
  882: 
  883:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  884:             "EXPERIMENTAL CODE");
  885: #else
  886:     if (((*(*l_element_courant).donnee).objet = malloc(27 *
  887:             sizeof(unsigned char))) == NULL)
  888:     {
  889:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  890:         return;
  891:     }
  892: 
  893:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet,
  894:             "EXPERIMENTAL CODE DISABLED");
  895: #endif
  896: 
  897:     if (((*l_element_courant).suivant =
  898:             allocation_maillon(s_etat_processus)) == NULL)
  899:     {
  900:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  901:         return;
  902:     }
  903: 
  904:     l_element_courant = (*l_element_courant).suivant;
  905:     (*l_element_courant).suivant = NULL;
  906: 
  907:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  908:             == NULL)
  909:     {
  910:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  911:         return;
  912:     }
  913: 
  914:     sprintf(tampon, "%d BITS ABI", sizeof(pointeur) * 8);
  915: 
  916:     if (((*(*l_element_courant).donnee).objet = malloc((strlen(tampon) + 1 )
  917:             * sizeof(unsigned char))) == NULL)
  918:     {
  919:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  920:         return;
  921:     }
  922: 
  923:     strcpy((unsigned char *) (*(*l_element_courant).donnee).objet, tampon);
  924: 
  925:     if (((*l_element_courant).suivant =
  926:             allocation_maillon(s_etat_processus)) == NULL)
  927:     {
  928:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  929:         return;
  930:     }
  931: 
  932:     l_element_courant = (*l_element_courant).suivant;
  933:     (*l_element_courant).suivant = NULL;
  934: 
  935:     if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN))
  936:             == NULL)
  937:     {
  938:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  939:         return;
  940:     }
  941: 
  942:     if (((*(*l_element_courant).donnee).objet = conversion_majuscule(HOST))
  943:             == NULL)
  944:     {
  945:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  946:         return;
  947:     }
  948: 
  949:     /*
  950:      * Empilement du résultat
  951:      */
  952: 
  953:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  954:             s_objet_resultat) == d_erreur)
  955:     {
  956:         return;
  957:     }
  958: 
  959:     return;
  960: }
  961: 
  962: 
  963: /*
  964: ================================================================================
  965:   Fonction 'vars'
  966: ================================================================================
  967:   Entrées :
  968: --------------------------------------------------------------------------------
  969:   Sorties :
  970: --------------------------------------------------------------------------------
  971:   Effets de bord : néant
  972: ================================================================================
  973: */
  974: 
  975: void
  976: instruction_vars(struct_processus *s_etat_processus)
  977: {
  978:     int                                 i;
  979:     int                                 nb_variables;
  980: 
  981:     logical1                            variable_partagee;
  982: 
  983:     struct_liste_chainee                *l_element_courant;
  984:     struct_liste_chainee                *l_element_precedent;
  985: 
  986:     struct_objet                        *s_objet_resultat;
  987: 
  988:     struct_tableau_variables            *tableau;
  989: 
  990:     (*s_etat_processus).erreur_execution = d_ex;
  991: 
  992:     if ((*s_etat_processus).affichage_arguments == 'Y')
  993:     {
  994:         printf("\n  VARS ");
  995: 
  996:         if ((*s_etat_processus).langue == 'F')
  997:         {
  998:             printf("(liste des variables)\n\n");
  999:         }
 1000:         else
 1001:         {
 1002:             printf("(list of variables)\n\n");
 1003:         }
 1004: 
 1005:         printf("->  1: %s\n", d_LST);
 1006: 
 1007:         return;
 1008:     }
 1009:     else if ((*s_etat_processus).test_instruction == 'Y')
 1010:     {
 1011:         (*s_etat_processus).nombre_arguments = -1;
 1012:         return;
 1013:     }
 1014: 
 1015:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1016:     {
 1017:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1018:         {
 1019:             return;
 1020:         }
 1021:     }
 1022: 
 1023:     if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
 1024:     {
 1025:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1026:         return;
 1027:     }
 1028: 
 1029:     (*s_objet_resultat).objet = NULL;
 1030:     l_element_precedent = NULL;
 1031: 
 1032:     nb_variables = nombre_variables(s_etat_processus,
 1033:             (*s_etat_processus).s_arbre_variables);
 1034: 
 1035:     if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables)))
 1036:             == NULL)
 1037:     {
 1038:         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1039:         return;
 1040:     }
 1041: 
 1042:     liste_variables(s_etat_processus, tableau, 0,
 1043:             (*s_etat_processus).s_arbre_variables);
 1044: 
 1045:     for(i = 0; i < nb_variables; i++)
 1046:     {
 1047:         if (l_element_precedent == NULL)
 1048:         {
 1049:             if (((*s_objet_resultat).objet =
 1050:                     allocation_maillon(s_etat_processus)) == NULL)
 1051:             {
 1052:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1053:                 return;
 1054:             }
 1055: 
 1056:             l_element_courant = (struct_liste_chainee *)
 1057:                     (*s_objet_resultat).objet;
 1058:             (*l_element_courant).suivant = NULL;
 1059:         }
 1060:         else
 1061:         {
 1062:             if (((*l_element_precedent).suivant =
 1063:                     allocation_maillon(s_etat_processus)) == NULL)
 1064:             {
 1065:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1066:                 return;
 1067:             }
 1068: 
 1069:             l_element_courant = (*l_element_precedent).suivant;
 1070:             (*l_element_courant).suivant = NULL;
 1071:         }
 1072: 
 1073:         /*
 1074:          * Allocation de la liste incluse
 1075:          */
 1076: 
 1077:         if (((*l_element_courant).donnee = allocation(s_etat_processus, LST))
 1078:                 == NULL)
 1079:         {
 1080:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1081:             return;
 1082:         }
 1083: 
 1084:         if (((*((struct_objet *) (*l_element_courant).donnee)).objet =
 1085:                 allocation_maillon(s_etat_processus)) == NULL)
 1086:         {
 1087:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1088:             return;
 1089:         }
 1090: 
 1091:         /*
 1092:          * Mise en place d'un verrou si la variable est partagée.
 1093:          */
 1094: 
 1095:         if (tableau[i].objet == NULL)
 1096:         {
 1097:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 1098:                     .s_liste_variables_partagees).mutex)) != 0)
 1099:             {
 1100:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1101:                 return;
 1102:             }
 1103: 
 1104:             if (recherche_variable_partagee(s_etat_processus,
 1105:                     tableau[i].nom, tableau[i].variable_partagee,
 1106:                     tableau[i].origine) == d_faux)
 1107:             {
 1108:                 // La variable partagée n'existe plus.
 1109: 
 1110:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1111:                         .s_liste_variables_partagees).mutex)) != 0)
 1112:                 {
 1113:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1114:                     return;
 1115:                 }
 1116: 
 1117:                 continue;
 1118:             }
 1119: 
 1120:             variable_partagee = d_vrai;
 1121:         }
 1122:         else
 1123:         {
 1124:             variable_partagee = d_faux;
 1125:         }
 1126: 
 1127:         /*
 1128:          * Mise en place du nom de la variable
 1129:          */
 1130: 
 1131:         if (((*((struct_liste_chainee *) (*((struct_objet *)
 1132:                 (*l_element_courant).donnee)).objet)).donnee =
 1133:                 allocation(s_etat_processus, NOM)) == NULL)
 1134:         {
 1135:             if (variable_partagee == d_vrai)
 1136:             {
 1137:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1138:                         .s_liste_variables_partagees).mutex)) != 0)
 1139:                 {
 1140:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1141:                     return;
 1142:                 }
 1143:             }
 1144: 
 1145:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1146:             return;
 1147:         }
 1148: 
 1149:         (*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *)
 1150:                 (*l_element_courant).donnee)).objet)).donnee).objet))
 1151:                 .symbole = d_vrai;
 1152: 
 1153:         if (((*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *)
 1154:                 (*l_element_courant).donnee)).objet)).donnee).objet)).nom =
 1155:                 malloc((strlen(tableau[i].nom)
 1156:                 + 1) * sizeof(unsigned char))) == NULL)
 1157:         {
 1158:             if (variable_partagee == d_vrai)
 1159:             {
 1160:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1161:                         .s_liste_variables_partagees).mutex)) != 0)
 1162:                 {
 1163:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1164:                     return;
 1165:                 }
 1166:             }
 1167: 
 1168:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1169:             return;
 1170:         }
 1171: 
 1172:         strcpy((*((struct_nom *) (*(*((struct_liste_chainee *)
 1173:                 (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1174:                 .donnee).objet)).nom, tableau[i].nom);
 1175: 
 1176:         /*
 1177:          * Préparation du niveau
 1178:          */
 1179: 
 1180:         if (((*((struct_liste_chainee *) (*((struct_objet *)
 1181:                 (*l_element_courant).donnee)).objet)).suivant =
 1182:                 allocation_maillon(s_etat_processus)) == NULL)
 1183:         {
 1184:             if (variable_partagee == d_vrai)
 1185:             {
 1186:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1187:                         .s_liste_variables_partagees).mutex)) != 0)
 1188:                 {
 1189:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1190:                     return;
 1191:                 }
 1192:             }
 1193: 
 1194:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1195:             return;
 1196:         }
 1197: 
 1198:         if (((*(*((struct_liste_chainee *) (*((struct_objet *)
 1199:                 (*l_element_courant).donnee)).objet)).suivant).donnee =
 1200:                 allocation(s_etat_processus, INT)) == NULL)
 1201:         {
 1202:             if (variable_partagee == d_vrai)
 1203:             {
 1204:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1205:                         .s_liste_variables_partagees).mutex)) != 0)
 1206:                 {
 1207:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1208:                     return;
 1209:                 }
 1210:             }
 1211: 
 1212:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1213:             return;
 1214:         }
 1215: 
 1216:         (*((integer8 *) (*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1217:                 (*l_element_courant).donnee)).objet)).suivant).donnee).objet)) =
 1218:                 (integer8) tableau[i].niveau;
 1219: 
 1220:         /*
 1221:          * Préparation du contenu de la variable
 1222:          */
 1223: 
 1224:         if (((*(*((struct_liste_chainee *) (*((struct_objet *)
 1225:                 (*l_element_courant).donnee)).objet)).suivant).suivant =
 1226:                 allocation_maillon(s_etat_processus)) == NULL)
 1227:         {
 1228:             if (variable_partagee == d_vrai)
 1229:             {
 1230:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1231:                         .s_liste_variables_partagees).mutex)) != 0)
 1232:                 {
 1233:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1234:                     return;
 1235:                 }
 1236:             }
 1237: 
 1238:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1239:             return;
 1240:         }
 1241: 
 1242:         if (tableau[i].objet == NULL)
 1243:         {
 1244:             // Variable partagée
 1245: 
 1246:             if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1247:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1248:                     .donnee = copie_objet(s_etat_processus,
 1249:                     (*(*s_etat_processus)
 1250:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 1251:                     .s_liste_variables_partagees).position_variable].objet,
 1252:                     'P')) == NULL)
 1253:             {
 1254:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1255:                         .s_liste_variables_partagees).mutex)) != 0)
 1256:                 {
 1257:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1258:                     return;
 1259:                 }
 1260: 
 1261:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1262:                 return;
 1263:             }
 1264: 
 1265:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1266:                     .s_liste_variables_partagees).mutex)) != 0)
 1267:             {
 1268:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1269:                 return;
 1270:             }
 1271:         }
 1272:         else
 1273:         {
 1274:             // Variable privée
 1275: 
 1276:             if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1277:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1278:                     .donnee = copie_objet(s_etat_processus, tableau[i].objet,
 1279:                     'P')) == NULL)
 1280:             {
 1281:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1282:                 return;
 1283:             }
 1284:         }
 1285: 
 1286:         /*
 1287:          * Préparation du drapeau STATIC/VOLATILE
 1288:          */
 1289: 
 1290:         if (((*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1291:                 (*l_element_courant).donnee)).objet)).suivant).suivant)
 1292:                 .suivant = allocation_maillon(s_etat_processus)) == NULL)
 1293:         {
 1294:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1295:             return;
 1296:         }
 1297: 
 1298:         if (((*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1299:                 (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
 1300:                 .donnee = allocation(s_etat_processus, CHN)) == NULL)
 1301:         {
 1302:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1303:             return;
 1304:         }
 1305: 
 1306:         if ((tableau[i].origine == 'P')
 1307:                 ? (tableau[i].variable_statique.adresse != 0)
 1308:                 : (tableau[i].variable_statique.pointeur != NULL))
 1309:         {
 1310:             if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1311:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1312:                     .suivant).donnee).objet = malloc(7 *
 1313:                     sizeof(unsigned char))) == NULL)
 1314:             {
 1315:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1316:                 return;
 1317:             }
 1318: 
 1319:             strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *)
 1320:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1321:                     .suivant).suivant) .suivant).donnee).objet, "STATIC");
 1322:         }
 1323:         else
 1324:         {
 1325:             if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1326:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1327:                     .suivant).donnee).objet = malloc(9 *
 1328:                     sizeof(unsigned char))) == NULL)
 1329:             {
 1330:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1331:                 return;
 1332:             }
 1333: 
 1334:             strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *)
 1335:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1336:                     .suivant).suivant) .suivant).donnee).objet, "VOLATILE");
 1337:         }
 1338: 
 1339:         /*
 1340:          * Préparation du drapeau LOCKED/UNLOCKED
 1341:          */
 1342: 
 1343:         if (((*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1344:                 (*l_element_courant).donnee)).objet)).suivant).suivant)
 1345:                 .suivant).suivant = allocation_maillon(s_etat_processus))
 1346:                 == NULL)
 1347:         {
 1348:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1349:             return;
 1350:         }
 1351: 
 1352:         if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1353:                 (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
 1354:                 .suivant).donnee = allocation(s_etat_processus, CHN))
 1355:                 == NULL)
 1356:         {
 1357:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1358:             return;
 1359:         }
 1360: 
 1361:         if (tableau[i].variable_verrouillee == d_vrai)
 1362:         {
 1363:             if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1364:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1365:                     .suivant).suivant).donnee).objet = malloc(7 *
 1366:                     sizeof(unsigned char))) == NULL)
 1367:             {
 1368:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1369:                 return;
 1370:             }
 1371: 
 1372:             strcpy((unsigned char *) (*(*(*(*(*(*((struct_liste_chainee *)
 1373:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1374:                     .suivant).suivant).suivant).suivant).donnee).objet,
 1375:                     "LOCKED");
 1376:         }
 1377:         else
 1378:         {
 1379:             if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1380:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1381:                     .suivant).suivant).donnee).objet = malloc(9 *
 1382:                     sizeof(unsigned char))) == NULL)
 1383:             {
 1384:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1385:                 return;
 1386:             }
 1387: 
 1388:             strcpy((unsigned char *) (*(*(*(*(*(*((struct_liste_chainee *)
 1389:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1390:                     .suivant).suivant).suivant).suivant).donnee).objet,
 1391:                     "UNLOCKED");
 1392:         }
 1393: 
 1394:         /*
 1395:          * Préparation du drapeau PRIVATE/SHARED
 1396:          */
 1397: 
 1398:         if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1399:                 (*l_element_courant).donnee)).objet)).suivant).suivant)
 1400:                 .suivant).suivant).suivant =
 1401:                 allocation_maillon(s_etat_processus)) == NULL)
 1402:         {
 1403:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1404:             return;
 1405:         }
 1406: 
 1407:         if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1408:                 (*l_element_courant).donnee)).objet)).suivant).suivant).suivant)
 1409:                 .suivant).suivant).donnee = allocation(s_etat_processus,
 1410:                 CHN)) == NULL)
 1411:         {
 1412:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1413:             return;
 1414:         }
 1415: 
 1416:         if (variable_partagee == d_vrai)
 1417:         {
 1418:             if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1419:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1420:                     .suivant).suivant).suivant).donnee).objet = malloc(7 *
 1421:                     sizeof(unsigned char))) == NULL)
 1422:             {
 1423:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1424:                 return;
 1425:             }
 1426: 
 1427:             strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *)
 1428:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1429:                     .suivant).suivant).suivant).suivant).suivant).donnee).objet,
 1430:                     "SHARED");
 1431:         }
 1432:         else
 1433:         {
 1434:             if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1435:                     (*l_element_courant).donnee)).objet)).suivant).suivant)
 1436:                     .suivant).suivant).suivant).donnee).objet = malloc(8 *
 1437:                     sizeof(unsigned char))) == NULL)
 1438:             {
 1439:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1440:                 return;
 1441:             }
 1442: 
 1443:             strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *)
 1444:                     (*((struct_objet *) (*l_element_courant).donnee)).objet))
 1445:                     .suivant).suivant).suivant).suivant).suivant).donnee).objet,
 1446:                     "PRIVATE");
 1447:         }
 1448: 
 1449:         /*
 1450:          * Fermeture de la liste incluse
 1451:          */
 1452: 
 1453:         (*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *)
 1454:                 (*l_element_courant).donnee)).objet)).suivant).suivant)
 1455:                 .suivant).suivant).suivant).suivant = NULL;
 1456: 
 1457:         l_element_precedent = l_element_courant;
 1458:     }
 1459: 
 1460:     free(tableau);
 1461: 
 1462:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1463:             s_objet_resultat) == d_erreur)
 1464:     {
 1465:         return;
 1466:     }
 1467: 
 1468:     return;
 1469: }
 1470: 
 1471: 
 1472: /*
 1473: ================================================================================
 1474:   Fonction 'visit'
 1475: ================================================================================
 1476:   Entrées :
 1477: --------------------------------------------------------------------------------
 1478:   Sorties :
 1479: --------------------------------------------------------------------------------
 1480:   Effets de bord : néant
 1481: ================================================================================
 1482: */
 1483: 
 1484: void
 1485: instruction_visit(struct_processus *s_etat_processus)
 1486: {
 1487:     struct_liste_chainee                *registre_pile_last;
 1488: 
 1489:     struct_objet                        *s_objet;
 1490: 
 1491:     unsigned long                       profondeur_initiale;
 1492: 
 1493:     (*s_etat_processus).erreur_execution = d_ex;
 1494: 
 1495:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1496:     {
 1497:         printf("\n  VISIT ");
 1498: 
 1499:         if ((*s_etat_processus).langue == 'F')
 1500:         {
 1501:             printf("(édition d'une variable)\n\n");
 1502:         }
 1503:         else
 1504:         {
 1505:             printf("(edit variable)\n\n");
 1506:         }
 1507: 
 1508:         printf("    1: %s\n", d_NOM);
 1509: 
 1510:         return;
 1511:     }
 1512:     else if ((*s_etat_processus).test_instruction == 'Y')
 1513:     {
 1514:         (*s_etat_processus).nombre_arguments = -1;
 1515:         return;
 1516:     }
 1517: 
 1518:     registre_pile_last = NULL;
 1519: 
 1520:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1521:     {
 1522:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1523:         {
 1524:             return;
 1525:         }
 1526: 
 1527:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 1528:         (*s_etat_processus).l_base_pile_last = NULL;
 1529:     }
 1530: 
 1531:     if ((*s_etat_processus).l_base_pile == NULL)
 1532:     {
 1533:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1534:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1535:         return;
 1536:     }
 1537: 
 1538:     if ((*(*(*s_etat_processus).l_base_pile).donnee).type != NOM)
 1539:     {
 1540:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1541:                 &s_objet) == d_erreur)
 1542:         {
 1543:             (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1544:             return;
 1545:         }
 1546: 
 1547:         liberation(s_etat_processus, s_objet);
 1548:         
 1549:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1550:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1551:         return;
 1552:     }
 1553: 
 1554:     profondeur_initiale = (*s_etat_processus).hauteur_pile_operationnelle;
 1555:     instruction_dup(s_etat_processus);
 1556: 
 1557:     if (((*s_etat_processus).erreur_systeme != d_es) ||
 1558:             ((*s_etat_processus).erreur_execution != d_ex) ||
 1559:             ((*s_etat_processus).exception != d_ep))
 1560:     {
 1561:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1562:         {
 1563:             return;
 1564:         }
 1565: 
 1566:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1567: 
 1568:         return;
 1569:     }
 1570: 
 1571:     instruction_rcl(s_etat_processus);
 1572: 
 1573:     if (((*s_etat_processus).erreur_systeme != d_es) ||
 1574:             ((*s_etat_processus).erreur_execution != d_ex) ||
 1575:             ((*s_etat_processus).exception != d_ep))
 1576:     {
 1577:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1578:                 &s_objet) == d_erreur)
 1579:         {
 1580:             (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1581:             return;
 1582:         }
 1583: 
 1584:         liberation(s_etat_processus, s_objet);
 1585: 
 1586:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1587:         {
 1588:             return;
 1589:         }
 1590: 
 1591:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1592: 
 1593:         return;
 1594:     }
 1595: 
 1596:     instruction_edit(s_etat_processus);
 1597: 
 1598:     if (((*s_etat_processus).erreur_systeme != d_es) ||
 1599:             ((*s_etat_processus).erreur_execution != d_ex) ||
 1600:             ((*s_etat_processus).exception != d_ep))
 1601:     {
 1602:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1603:         {
 1604:             return;
 1605:         }
 1606: 
 1607:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1608: 
 1609:         return;
 1610:     }
 1611: 
 1612:     while(profondeur_initiale != ((*s_etat_processus)
 1613:             .hauteur_pile_operationnelle - 1))
 1614:     {
 1615:         if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1616:                 &s_objet) == d_erreur)
 1617:         {
 1618:             (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1619:             return;
 1620:         }
 1621: 
 1622:         liberation(s_etat_processus, s_objet);
 1623:     }
 1624: 
 1625:     instruction_swap(s_etat_processus);
 1626: 
 1627:     if (((*s_etat_processus).erreur_systeme != d_es) ||
 1628:             ((*s_etat_processus).erreur_execution != d_ex) ||
 1629:             ((*s_etat_processus).exception != d_ep))
 1630:     {
 1631:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1632:         {
 1633:             return;
 1634:         }
 1635: 
 1636:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1637: 
 1638:         return;
 1639:     }
 1640: 
 1641:     instruction_sto(s_etat_processus);
 1642: 
 1643:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1644:     {
 1645:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1646:         {
 1647:             return;
 1648:         }
 1649: 
 1650:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1651:     }
 1652: 
 1653:     return;
 1654: }
 1655: 
 1656: 
 1657: /*
 1658: ================================================================================
 1659:   Fonction 'variable'
 1660: ================================================================================
 1661:   Entrées :
 1662: --------------------------------------------------------------------------------
 1663:   Sorties :
 1664: --------------------------------------------------------------------------------
 1665:   Effets de bord : néant
 1666: ================================================================================
 1667: */
 1668: 
 1669: void
 1670: instruction_variable(struct_processus *s_etat_processus)
 1671: {
 1672:     struct_liste_chainee                *l_element_courant;
 1673: 
 1674:     struct_objet                        *s_objet;
 1675: 
 1676:     (*s_etat_processus).erreur_execution = d_ex;
 1677: 
 1678:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1679:     {
 1680:         printf("\n  VARIABLE ");
 1681: 
 1682:         if ((*s_etat_processus).langue == 'F')
 1683:         {
 1684:             printf("(déverrouille une variable globale)\n\n");
 1685:         }
 1686:         else
 1687:         {
 1688:             printf("(unlock a global variable)\n\n");
 1689:         }
 1690: 
 1691:         printf("    1: %s, %s\n", d_NOM, d_LST);
 1692: 
 1693:         return;
 1694:     }
 1695:     else if ((*s_etat_processus).test_instruction == 'Y')
 1696:     {
 1697:         (*s_etat_processus).nombre_arguments = -1;
 1698:         return;
 1699:     }
 1700:     
 1701:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1702:     {
 1703:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 1704:         {
 1705:             return;
 1706:         }
 1707:     }
 1708: 
 1709:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1710:             &s_objet) == d_erreur)
 1711:     {
 1712:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1713:         return;
 1714:     }
 1715: 
 1716:     if ((*s_objet).type == NOM)
 1717:     {
 1718:         if (recherche_variable_globale(s_etat_processus, ((*((struct_nom *)
 1719:                 (*s_objet).objet)).nom)) == d_faux)
 1720:         {
 1721:             liberation(s_etat_processus, s_objet);
 1722: 
 1723:             (*s_etat_processus).erreur_systeme = d_es;
 1724:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 1725:             return;
 1726:         }
 1727: 
 1728:         (*(*s_etat_processus).pointeur_variable_courante)
 1729:                 .variable_verrouillee = d_faux;
 1730:     }
 1731:     else if ((*s_objet).type == LST)
 1732:     {
 1733:         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
 1734: 
 1735:         while(l_element_courant != NULL)
 1736:         {
 1737:             if ((*(*l_element_courant).donnee).type != NOM)
 1738:             {
 1739:                 liberation(s_etat_processus, s_objet);
 1740: 
 1741:                 (*s_etat_processus).erreur_execution = d_ex_nom_invalide;
 1742:                 return;
 1743:             }
 1744: 
 1745:             if (recherche_variable_globale(s_etat_processus, (*((struct_nom *)
 1746:                     (*(*l_element_courant).donnee).objet)).nom) == d_faux)
 1747:             {
 1748:                 liberation(s_etat_processus, s_objet);
 1749: 
 1750:                 (*s_etat_processus).erreur_systeme = d_es;
 1751:                 (*s_etat_processus).erreur_execution =
 1752:                         d_ex_variable_non_definie;
 1753:                 return;
 1754:             }
 1755: 
 1756:             (*(*s_etat_processus).pointeur_variable_courante)
 1757:                     .variable_verrouillee = d_faux;
 1758: 
 1759:             l_element_courant = (*l_element_courant).suivant;
 1760:         }
 1761:     }
 1762:     else
 1763:     {
 1764:         liberation(s_etat_processus, s_objet);
 1765: 
 1766:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1767:         return;
 1768:     }
 1769: 
 1770:     liberation(s_etat_processus, s_objet);
 1771: 
 1772:     return;
 1773: }
 1774: 
 1775: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>