File:  [local] / rpl / src / instructions_v1.c
Revision 1.23: download - view: text, annotated - select for diffs - revision graph
Tue Jun 21 15:26:34 2011 UTC (12 years, 10 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Correction d'une réinitialisation sauvage de la pile des variables par niveau
dans la copie de la structure de description du processus. Cela corrige
la fonction SPAWN qui échouait sur un segmentation fault car la pile des
variables par niveau était vide alors même que l'arbre des variables contenait
bien les variables. Passage à la prerelease 2.

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

CVSweb interface <joel.bertrand@systella.fr>