File:  [local] / rpl / src / instructions_v1.c
Revision 1.16: download - view: text, annotated - select for diffs - revision graph
Sun Mar 6 16:44:14 2011 UTC (13 years, 1 month ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_21, rpl-4_0, HEAD
En route pour la 4.0.21 !

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

CVSweb interface <joel.bertrand@systella.fr>