File:  [local] / rpl / src / instructions_s3.c
Revision 1.18: download - view: text, annotated - select for diffs - revision graph
Thu Apr 21 16:00:59 2011 UTC (13 years ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Merge entre la branche 4_0 et HEAD.

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.1.0.prerelease.0
    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 'sub'
   29: ================================================================================
   30:   Entrées :
   31: --------------------------------------------------------------------------------
   32:   Sorties :
   33: --------------------------------------------------------------------------------
   34:   Effets de bord : néant
   35: ================================================================================
   36: */
   37: 
   38: void
   39: instruction_sub(struct_processus *s_etat_processus)
   40: {
   41:     struct_liste_chainee        *l_element_courant;
   42:     struct_liste_chainee        *l_element_precedent;
   43: 
   44:     struct_objet                *s_copie_argument_3;
   45:     struct_objet                *s_objet_argument_1;
   46:     struct_objet                *s_objet_argument_2;
   47:     struct_objet                *s_objet_argument_3;
   48:     struct_objet                *s_objet_resultat;
   49: 
   50:     unsigned long               i;
   51: 
   52:     (*s_etat_processus).erreur_execution = d_ex;
   53: 
   54:     if ((*s_etat_processus).affichage_arguments == 'Y')
   55:     {
   56:         printf("\n  SUB ");
   57: 
   58:         if ((*s_etat_processus).langue == 'F')
   59:         {
   60:             printf("(extraction)\n\n");
   61:         }
   62:         else
   63:         {
   64:             printf("(suboject extraction)\n\n");
   65:         }
   66: 
   67:         printf("    3: %s, %s\n", d_CHN, d_LST);
   68:         printf("    2: %s\n", d_INT);
   69:         printf("    1: %s\n", d_INT);
   70:         printf("->  1: %s, %s\n", d_CHN, d_LST);
   71: 
   72:         return;
   73:     }
   74:     else if ((*s_etat_processus).test_instruction == 'Y')
   75:     {
   76:         (*s_etat_processus).nombre_arguments = -1;
   77:         return;
   78:     }
   79:     
   80:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
   81:     {
   82:         if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
   83:         {
   84:             return;
   85:         }
   86:     }
   87: 
   88:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
   89:             &s_objet_argument_1) == d_erreur)
   90:     {
   91:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
   92:         return;
   93:     }
   94: 
   95:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
   96:             &s_objet_argument_2) == d_erreur)
   97:     {
   98:         liberation(s_etat_processus, s_objet_argument_1);
   99: 
  100:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  101:         return;
  102:     }
  103: 
  104:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  105:             &s_objet_argument_3) == d_erreur)
  106:     {
  107:         liberation(s_etat_processus, s_objet_argument_1);
  108:         liberation(s_etat_processus, s_objet_argument_2);
  109: 
  110:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  111:         return;
  112:     }
  113: 
  114:     if (((*s_objet_argument_1).type != INT) ||
  115:             ((*s_objet_argument_2).type != INT))
  116:     {
  117:         liberation(s_etat_processus, s_objet_argument_1);
  118:         liberation(s_etat_processus, s_objet_argument_2);
  119:         liberation(s_etat_processus, s_objet_argument_3);
  120: 
  121:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  122:         return;
  123:     }
  124: 
  125:     if (((*((integer8 *) (*s_objet_argument_1).objet)) < 1) ||
  126:             ((*((integer8 *) (*s_objet_argument_2).objet)) < 1) ||
  127:             ((*((integer8 *) (*s_objet_argument_1).objet)) <
  128:             (*((integer8 *) (*s_objet_argument_2).objet))))
  129:     {
  130:         liberation(s_etat_processus, s_objet_argument_1);
  131:         liberation(s_etat_processus, s_objet_argument_2);
  132:         liberation(s_etat_processus, s_objet_argument_3);
  133: 
  134:         (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  135:         return;
  136:     }
  137: 
  138: /*
  139: --------------------------------------------------------------------------------
  140:   Traitement des chaînes de caractères
  141: --------------------------------------------------------------------------------
  142: */
  143: 
  144:     if ((*s_objet_argument_3).type == CHN)
  145:     {
  146:         if ((*((integer8 *) (*s_objet_argument_1).objet)) > (integer8)
  147:                 strlen((unsigned char *) (*s_objet_argument_3).objet))
  148:         {
  149:             liberation(s_etat_processus, s_objet_argument_1);
  150:             liberation(s_etat_processus, s_objet_argument_2);
  151:             liberation(s_etat_processus, s_objet_argument_3);
  152: 
  153:             (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
  154:             return;
  155:         }
  156: 
  157:         if ((s_objet_resultat = allocation(s_etat_processus, CHN)) == NULL)
  158:         {
  159:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  160:             return;
  161:         }
  162: 
  163:         if (((*s_objet_resultat).objet = extraction_chaine((unsigned char *)
  164:                 (*s_objet_argument_3).objet, (*((integer8 *)
  165:                 (*s_objet_argument_2).objet)), (*((integer8 *)
  166:                 (*s_objet_argument_1).objet)))) == NULL)
  167:         {
  168:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  169:             return;
  170:         }
  171:     }
  172: 
  173: /*
  174: --------------------------------------------------------------------------------
  175:   Traitement des listes
  176: --------------------------------------------------------------------------------
  177: */
  178: 
  179:     else if ((*s_objet_argument_3).type == LST)
  180:     {
  181:         if ((s_copie_argument_3 = copie_objet(s_etat_processus,
  182:                 s_objet_argument_3, 'N')) == NULL)
  183:         {
  184:             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  185:             return;
  186:         }
  187: 
  188:         liberation(s_etat_processus, s_objet_argument_3);
  189:         s_objet_argument_3 = s_copie_argument_3;
  190: 
  191:         l_element_courant = (struct_liste_chainee *) (*s_objet_argument_3)
  192:                 .objet;
  193:         i = 1;
  194: 
  195:         while(i < (unsigned long) (*((integer8 *) (*s_objet_argument_2).objet)))
  196:         {
  197:             if (l_element_courant == NULL)
  198:             {
  199:                 liberation(s_etat_processus, s_objet_argument_1);
  200:                 liberation(s_etat_processus, s_objet_argument_2);
  201:                 liberation(s_etat_processus, s_objet_argument_3);
  202: 
  203:                 (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
  204:                 return;
  205:             }
  206: 
  207:             l_element_precedent = l_element_courant;
  208:             l_element_courant = (*l_element_courant).suivant;
  209: 
  210:             liberation(s_etat_processus, (*l_element_precedent).donnee);
  211:             free(l_element_precedent);
  212: 
  213:             i++;
  214:         }
  215: 
  216:         (*s_objet_argument_3).objet = l_element_courant;
  217: 
  218:         while(i < (unsigned long) (*((integer8 *) (*s_objet_argument_1).objet)))
  219:         {
  220:             if (l_element_courant == NULL)
  221:             {
  222:                 liberation(s_etat_processus, s_objet_argument_1);
  223:                 liberation(s_etat_processus, s_objet_argument_2);
  224:                 liberation(s_etat_processus, s_objet_argument_3);
  225: 
  226:                 (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
  227:                 return;
  228:             }
  229: 
  230:             l_element_courant = (*l_element_courant).suivant;
  231:             i++;
  232:         }
  233: 
  234:         l_element_precedent = l_element_courant;
  235: 
  236:         if (l_element_courant == NULL)
  237:         {
  238:             liberation(s_etat_processus, s_objet_argument_1);
  239:             liberation(s_etat_processus, s_objet_argument_2);
  240:             liberation(s_etat_processus, s_objet_argument_3);
  241: 
  242:             (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
  243:             return;
  244:         }
  245: 
  246:         l_element_courant = (*l_element_courant).suivant;
  247:         (*l_element_precedent).suivant = NULL;
  248: 
  249:         while(l_element_courant != NULL)
  250:         {
  251:             l_element_precedent = l_element_courant;
  252:             l_element_courant = (*l_element_courant).suivant;
  253: 
  254:             liberation(s_etat_processus, (*l_element_precedent).donnee);
  255:             free(l_element_precedent);
  256:         }
  257: 
  258:         s_objet_resultat = s_objet_argument_3;
  259:         s_objet_argument_3 = NULL;
  260:     }
  261: 
  262: /*
  263: --------------------------------------------------------------------------------
  264:   Arguments invalides
  265: --------------------------------------------------------------------------------
  266: */
  267: 
  268:     else
  269:     {
  270:         liberation(s_etat_processus, s_objet_argument_1);
  271:         liberation(s_etat_processus, s_objet_argument_2);
  272:         liberation(s_etat_processus, s_objet_argument_3);
  273: 
  274:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
  275:         return;
  276:     }
  277: 
  278:     liberation(s_etat_processus, s_objet_argument_1);
  279:     liberation(s_etat_processus, s_objet_argument_2);
  280:     liberation(s_etat_processus, s_objet_argument_3);
  281: 
  282:     if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  283:             s_objet_resultat) == d_erreur)
  284:     {
  285:         return;
  286:     }
  287: 
  288:     return;
  289: }
  290: 
  291: 
  292: /*
  293: ================================================================================
  294:   Fonction 'sto+'
  295: ================================================================================
  296:   Entrées :
  297: --------------------------------------------------------------------------------
  298:   Sorties :
  299: --------------------------------------------------------------------------------
  300:   Effets de bord : néant
  301: ================================================================================
  302: */
  303: 
  304: void
  305: instruction_sto_plus(struct_processus *s_etat_processus)
  306: {
  307:     logical1                        variable_partagee;
  308: 
  309:     struct_liste_chainee            *registre_pile_last;
  310: 
  311:     struct_objet                    *s_objet_1;
  312:     struct_objet                    *s_objet_2;
  313:     struct_objet                    *s_objet_3;
  314: 
  315:     (*s_etat_processus).erreur_execution = d_ex;
  316: 
  317:     if ((*s_etat_processus).affichage_arguments == 'Y')
  318:     {
  319:         printf("\n  STO+ ");
  320: 
  321:         if ((*s_etat_processus).langue == 'F')
  322:         {
  323:             printf("(modification d'une variable par addition)\n\n");
  324:         }
  325:         else
  326:         {
  327:             printf("(add to the content of a variable)\n\n");
  328:         }
  329: 
  330:         printf("    2: %s, %s, %s, %s, %s, %s,\n"
  331:                 "       %s, %s, %s\n",
  332:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
  333:         printf("    1: %s\n\n", d_NOM);
  334: 
  335:         printf("    2: %s\n", d_NOM);
  336:         printf("    1: %s, %s, %s, %s, %s, %s,\n"
  337:                 "       %s, %s, %s\n",
  338:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
  339: 
  340:         return;
  341:     }
  342:     else if ((*s_etat_processus).test_instruction == 'Y')
  343:     {
  344:         (*s_etat_processus).nombre_arguments = -1;
  345:         return;
  346:     }
  347:     
  348:     registre_pile_last = NULL;
  349: 
  350:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
  351:     {
  352:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
  353:         {
  354:             return;
  355:         }
  356: 
  357:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
  358:         (*s_etat_processus).l_base_pile_last = NULL;
  359:     }
  360: 
  361:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  362:             &s_objet_1) == d_erreur)
  363:     {
  364:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  365: 
  366:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
  367:         {
  368:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  369:             {
  370:                 return;
  371:             }
  372: 
  373:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
  374:         }
  375: 
  376:         return;
  377:     }
  378: 
  379:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  380:             &s_objet_2) == d_erreur)
  381:     {
  382:         liberation(s_etat_processus, s_objet_1);
  383: 
  384:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
  385:         {
  386:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  387:             {
  388:                 return;
  389:             }
  390: 
  391:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
  392:         }
  393: 
  394:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  395:         return;
  396:     }
  397: 
  398: /*
  399: --------------------------------------------------------------------------------
  400:   Une valeur et un nom
  401: --------------------------------------------------------------------------------
  402: */
  403: 
  404:     variable_partagee = d_faux;
  405: 
  406:     if (((*s_objet_1).type == NOM) &&
  407:             (((*s_objet_2).type == INT) ||
  408:             ((*s_objet_2).type == REL) ||
  409:             ((*s_objet_2).type == CPL) ||
  410:             ((*s_objet_2).type == VIN) ||
  411:             ((*s_objet_2).type == VRL) ||
  412:             ((*s_objet_2).type == VCX) ||
  413:             ((*s_objet_2).type == MIN) ||
  414:             ((*s_objet_2).type == MRL) ||
  415:             ((*s_objet_2).type == MCX)))
  416:     {
  417:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
  418:                 (*s_objet_1).objet)).nom) == d_faux)
  419:         {
  420:             (*s_etat_processus).erreur_systeme = d_es;
  421:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
  422: 
  423:             liberation(s_etat_processus, s_objet_1);
  424:             liberation(s_etat_processus, s_objet_2);
  425: 
  426:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  427:             {
  428:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  429:                 {
  430:                     return;
  431:                 }
  432: 
  433:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  434:             }
  435: 
  436:             return;
  437:         }
  438: 
  439:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  440:                 .position_variable_courante].variable_verrouillee == d_vrai)
  441:         {
  442:             liberation(s_etat_processus, s_objet_1);
  443:             liberation(s_etat_processus, s_objet_2);
  444: 
  445:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  446:             {
  447:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  448:                 {
  449:                     return;
  450:                 }
  451: 
  452:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  453:             }
  454: 
  455:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
  456:             return;
  457:         }
  458: 
  459:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  460:                 .position_variable_courante].objet == NULL)
  461:         {
  462:             if (pthread_mutex_lock(&((*(*s_etat_processus)
  463:                     .s_liste_variables_partagees).mutex)) != 0)
  464:             {
  465:                 (*s_etat_processus).erreur_systeme = d_es_processus;
  466:                 return;
  467:             }
  468: 
  469:             if (recherche_variable_partagee(s_etat_processus,
  470:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  471:                     .position_variable_courante].nom, (*s_etat_processus)
  472:                     .s_liste_variables[(*s_etat_processus)
  473:                     .position_variable_courante].variable_partagee,
  474:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  475:                     .position_variable_courante].origine) == d_faux)
  476:             {
  477:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  478:                         .s_liste_variables_partagees).mutex)) != 0)
  479:                 {
  480:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  481:                     return;
  482:                 }
  483: 
  484:                 (*s_etat_processus).erreur_systeme = d_es;
  485:                 (*s_etat_processus).erreur_execution =
  486:                         d_ex_variable_non_definie;
  487: 
  488:                 liberation(s_etat_processus, s_objet_1);
  489:                 liberation(s_etat_processus, s_objet_2);
  490: 
  491:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  492:                 {
  493:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  494:                     {
  495:                         return;
  496:                     }
  497: 
  498:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  499:                 }
  500: 
  501:                 return;
  502:             }
  503: 
  504:             variable_partagee = d_vrai;
  505: 
  506:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
  507:                     .s_liste_variables_partagees).table
  508:                     [(*(*s_etat_processus).s_liste_variables_partagees)
  509:                     .position_variable].objet, 'P')) == NULL)
  510:             {
  511:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  512:                         .s_liste_variables_partagees).mutex)) != 0)
  513:                 {
  514:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  515:                     return;
  516:                 }
  517: 
  518:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  519: 
  520:                 liberation(s_etat_processus, s_objet_1);
  521:                 liberation(s_etat_processus, s_objet_2);
  522: 
  523:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  524:                 {
  525:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  526:                     {
  527:                         return;
  528:                     }
  529: 
  530:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  531:                 }
  532: 
  533:                 return;
  534:             }
  535:         }
  536:         else
  537:         {
  538:             if ((s_objet_3 = copie_objet(s_etat_processus,
  539:                     (*s_etat_processus).s_liste_variables
  540:                     [(*s_etat_processus).position_variable_courante].objet,
  541:                     'P')) == NULL)
  542:             {
  543:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  544: 
  545:                 liberation(s_etat_processus, s_objet_1);
  546:                 liberation(s_etat_processus, s_objet_2);
  547: 
  548:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  549:                 {
  550:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  551:                     {
  552:                         return;
  553:                     }
  554: 
  555:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  556:                 }
  557: 
  558:                 return;
  559:             }
  560:         }
  561: 
  562:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  563:                 s_objet_2) == d_erreur)
  564:         {
  565:             if (variable_partagee == d_vrai)
  566:             {
  567:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  568:                         .s_liste_variables_partagees).mutex)) != 0)
  569:                 {
  570:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  571:                     return;
  572:                 }
  573:             }
  574: 
  575:             return;
  576:         }
  577: 
  578:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  579:                 s_objet_3) == d_erreur)
  580:         {
  581:             if (variable_partagee == d_vrai)
  582:             {
  583:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  584:                         .s_liste_variables_partagees).mutex)) != 0)
  585:                 {
  586:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  587:                     return;
  588:                 }
  589:             }
  590: 
  591:             return;
  592:         }
  593: 
  594:         instruction_plus(s_etat_processus);
  595:         s_objet_2 = NULL;
  596:         /* s_objet_2 et s_objet_3 sont libérés par cet appel... */
  597: 
  598:         if (((*s_etat_processus).erreur_systeme != d_es) ||
  599:                 ((*s_etat_processus).erreur_execution != d_ex) ||
  600:                 ((*s_etat_processus).exception != d_ep))
  601:         {
  602:             if (variable_partagee == d_vrai)
  603:             {
  604:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  605:                         .s_liste_variables_partagees).mutex)) != 0)
  606:                 {
  607:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  608:                     return;
  609:                 }
  610:             }
  611: 
  612:             liberation(s_etat_processus, s_objet_1);
  613:             liberation(s_etat_processus, s_objet_2);
  614: 
  615:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  616:             {
  617:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  618:                 {
  619:                     return;
  620:                 }
  621: 
  622:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  623:             }
  624: 
  625:             return;
  626:         }
  627: 
  628:         if (variable_partagee == d_vrai)
  629:         {
  630:             liberation(s_etat_processus,
  631:                     (*(*s_etat_processus).s_liste_variables_partagees)
  632:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
  633:                     .position_variable].objet);
  634: 
  635:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  636:                     (struct_objet **) &((*(*s_etat_processus)
  637:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
  638:                     .s_liste_variables_partagees).position_variable].objet))
  639:                     == d_erreur)
  640:             {
  641:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  642:                         .s_liste_variables_partagees).mutex)) != 0)
  643:                 {
  644:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  645:                     return;
  646:                 }
  647: 
  648:                 liberation(s_etat_processus, s_objet_1);
  649: 
  650:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  651:                 {
  652:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  653:                     {
  654:                         return;
  655:                     }
  656: 
  657:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  658:                 }
  659: 
  660:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  661:                 return;
  662:             }
  663: 
  664:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
  665:                     .s_liste_variables_partagees).mutex)) != 0)
  666:             {
  667:                 (*s_etat_processus).erreur_systeme = d_es_processus;
  668:                 return;
  669:             }
  670:         }
  671:         else
  672:         {
  673:             liberation(s_etat_processus,
  674:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  675:                     .position_variable_courante].objet);
  676: 
  677:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  678:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  679:                     .position_variable_courante].objet)) == d_erreur)
  680:             {
  681:                 liberation(s_etat_processus, s_objet_1);
  682: 
  683:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  684:                 {
  685:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  686:                     {
  687:                         return;
  688:                     }
  689: 
  690:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  691:                 }
  692: 
  693:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  694:                 return;
  695:             }
  696:         }
  697:     }
  698:     else if (((*s_objet_2).type == NOM) &&
  699:             (((*s_objet_1).type == INT) ||
  700:             ((*s_objet_1).type == REL) ||
  701:             ((*s_objet_1).type == CPL) ||
  702:             ((*s_objet_1).type == VIN) ||
  703:             ((*s_objet_1).type == VRL) ||
  704:             ((*s_objet_1).type == VCX) ||
  705:             ((*s_objet_1).type == MIN) ||
  706:             ((*s_objet_1).type == MRL) ||
  707:             ((*s_objet_1).type == MCX)))
  708:     {
  709:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
  710:                 (*s_objet_2).objet)).nom) == d_faux)
  711:         {
  712:             (*s_etat_processus).erreur_systeme = d_es;
  713:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
  714: 
  715:             liberation(s_etat_processus, s_objet_1);
  716:             liberation(s_etat_processus, s_objet_2);
  717: 
  718:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  719:             {
  720:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  721:                 {
  722:                     return;
  723:                 }
  724: 
  725:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  726:             }
  727: 
  728:             return;
  729:         }
  730: 
  731:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  732:                 .position_variable_courante].variable_verrouillee == d_vrai)
  733:         {
  734:             liberation(s_etat_processus, s_objet_1);
  735:             liberation(s_etat_processus, s_objet_2);
  736: 
  737:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  738:             {
  739:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  740:                 {
  741:                     return;
  742:                 }
  743: 
  744:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  745:             }
  746: 
  747:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
  748:             return;
  749:         }
  750: 
  751:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  752:                 .position_variable_courante].objet == NULL)
  753:         {
  754:             if (pthread_mutex_lock(&((*(*s_etat_processus)
  755:                     .s_liste_variables_partagees).mutex)) != 0)
  756:             {
  757:                 (*s_etat_processus).erreur_systeme = d_es_processus;
  758:                 return;
  759:             }
  760: 
  761:             if (recherche_variable_partagee(s_etat_processus,
  762:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  763:                     .position_variable_courante].nom, (*s_etat_processus)
  764:                     .s_liste_variables[(*s_etat_processus)
  765:                     .position_variable_courante].variable_partagee,
  766:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  767:                     .position_variable_courante].origine) == d_faux)
  768:             {
  769:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  770:                         .s_liste_variables_partagees).mutex)) != 0)
  771:                 {
  772:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  773:                     return;
  774:                 }
  775: 
  776:                 (*s_etat_processus).erreur_systeme = d_es;
  777:                 (*s_etat_processus).erreur_execution =
  778:                         d_ex_variable_non_definie;
  779: 
  780:                 liberation(s_etat_processus, s_objet_1);
  781:                 liberation(s_etat_processus, s_objet_2);
  782: 
  783:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  784:                 {
  785:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  786:                     {
  787:                         return;
  788:                     }
  789: 
  790:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  791:                 }
  792: 
  793:                 return;
  794:             }
  795: 
  796:             variable_partagee = d_vrai;
  797: 
  798:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
  799:                     .s_liste_variables_partagees).table
  800:                     [(*(*s_etat_processus).s_liste_variables_partagees)
  801:                     .position_variable].objet, 'P')) == NULL)
  802:             {
  803:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  804:                         .s_liste_variables_partagees).mutex)) != 0)
  805:                 {
  806:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  807:                     return;
  808:                 }
  809: 
  810:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  811: 
  812:                 liberation(s_etat_processus, s_objet_1);
  813:                 liberation(s_etat_processus, s_objet_2);
  814: 
  815:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  816:                 {
  817:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  818:                     {
  819:                         return;
  820:                     }
  821: 
  822:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  823:                 }
  824: 
  825:                 return;
  826:             }
  827:         }
  828:         else
  829:         {
  830:             if ((s_objet_3 = copie_objet(s_etat_processus,
  831:                     (*s_etat_processus).s_liste_variables
  832:                     [(*s_etat_processus).position_variable_courante].objet,
  833:                     'P')) == NULL)
  834:             {
  835:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
  836: 
  837:                 liberation(s_etat_processus, s_objet_1);
  838:                 liberation(s_etat_processus, s_objet_2);
  839: 
  840:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  841:                 {
  842:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  843:                     {
  844:                         return;
  845:                     }
  846: 
  847:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  848:                 }
  849: 
  850:                 return;
  851:             }
  852:         }
  853: 
  854:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  855:                 s_objet_3) == d_erreur)
  856:         {
  857:             if (variable_partagee == d_vrai)
  858:             {
  859:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  860:                         .s_liste_variables_partagees).mutex)) != 0)
  861:                 {
  862:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  863:                     return;
  864:                 }
  865:             }
  866: 
  867:             return;
  868:         }
  869: 
  870:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  871:                 s_objet_1) == d_erreur)
  872:         {
  873:             if (variable_partagee == d_vrai)
  874:             {
  875:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  876:                         .s_liste_variables_partagees).mutex)) != 0)
  877:                 {
  878:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  879:                     return;
  880:                 }
  881:             }
  882: 
  883:             return;
  884:         }
  885: 
  886:         instruction_plus(s_etat_processus);
  887:         s_objet_1 = NULL;
  888:         /* s_objet_1 et s_objet_3 sont libérés par cet appel... */
  889: 
  890:         if (((*s_etat_processus).erreur_systeme != d_es) ||
  891:                 ((*s_etat_processus).erreur_execution != d_ex) ||
  892:                 ((*s_etat_processus).exception != d_ep))
  893:         {
  894:             if (variable_partagee == d_vrai)
  895:             {
  896:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  897:                         .s_liste_variables_partagees).mutex)) != 0)
  898:                 {
  899:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  900:                     return;
  901:                 }
  902:             }
  903: 
  904:             liberation(s_etat_processus, s_objet_1);
  905:             liberation(s_etat_processus, s_objet_2);
  906: 
  907:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
  908:             {
  909:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  910:                 {
  911:                     return;
  912:                 }
  913: 
  914:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
  915:             }
  916: 
  917:             return;
  918:         }
  919: 
  920:         if (variable_partagee == d_vrai)
  921:         {
  922:             liberation(s_etat_processus,
  923:                     (*(*s_etat_processus).s_liste_variables_partagees)
  924:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
  925:                     .position_variable].objet);
  926: 
  927:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  928:                     (struct_objet **) &((*(*s_etat_processus)
  929:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
  930:                     .s_liste_variables_partagees).position_variable].objet))
  931:                     == d_erreur)
  932:             {
  933:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
  934:                         .s_liste_variables_partagees).mutex)) != 0)
  935:                 {
  936:                     (*s_etat_processus).erreur_systeme = d_es_processus;
  937:                     return;
  938:                 }
  939: 
  940:                 liberation(s_etat_processus, s_objet_1);
  941: 
  942:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  943:                 {
  944:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  945:                     {
  946:                         return;
  947:                     }
  948: 
  949:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  950:                 }
  951: 
  952:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  953:                 return;
  954:             }
  955: 
  956:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
  957:                     .s_liste_variables_partagees).mutex)) != 0)
  958:             {
  959:                 (*s_etat_processus).erreur_systeme = d_es_processus;
  960:                 return;
  961:             }
  962:         }
  963:         else
  964:         {
  965:             liberation(s_etat_processus,
  966:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
  967:                     .position_variable_courante].objet);
  968: 
  969:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
  970:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
  971:                     .position_variable_courante].objet)) == d_erreur)
  972:             {
  973:                 liberation(s_etat_processus, s_objet_1);
  974: 
  975:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
  976:                 {
  977:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
  978:                     {
  979:                         return;
  980:                     }
  981: 
  982:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
  983:                 }
  984: 
  985:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
  986:                 return;
  987:             }
  988:         }
  989:     }
  990: 
  991: /*
  992: --------------------------------------------------------------------------------
  993:   Arguments incompatibles avec la fonction STO+
  994: --------------------------------------------------------------------------------
  995: */
  996: 
  997:     else
  998:     {
  999:         liberation(s_etat_processus, s_objet_1);
 1000:         liberation(s_etat_processus, s_objet_2);
 1001: 
 1002:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1003:         {
 1004:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1005:             {
 1006:                 return;
 1007:             }
 1008: 
 1009:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1010:         }
 1011: 
 1012:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1013:         return;
 1014:     }
 1015: 
 1016:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1017:     {
 1018:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1019:         {
 1020:             return;
 1021:         }
 1022: 
 1023:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1024:     }
 1025: 
 1026:     liberation(s_etat_processus, s_objet_1);
 1027:     liberation(s_etat_processus, s_objet_2);
 1028: 
 1029:     return;
 1030: }
 1031: 
 1032: 
 1033: /*
 1034: ================================================================================
 1035:   Fonction 'sto-'
 1036: ================================================================================
 1037:   Entrées :
 1038: --------------------------------------------------------------------------------
 1039:   Sorties :
 1040: --------------------------------------------------------------------------------
 1041:   Effets de bord : néant
 1042: ================================================================================
 1043: */
 1044: 
 1045: void
 1046: instruction_sto_moins(struct_processus *s_etat_processus)
 1047: {
 1048:     logical1                        variable_partagee;
 1049: 
 1050:     struct_liste_chainee            *registre_pile_last;
 1051: 
 1052:     struct_objet                    *s_objet_1;
 1053:     struct_objet                    *s_objet_2;
 1054:     struct_objet                    *s_objet_3;
 1055: 
 1056:     (*s_etat_processus).erreur_execution = d_ex;
 1057: 
 1058:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1059:     {
 1060:         printf("\n  STO- ");
 1061: 
 1062:         if ((*s_etat_processus).langue == 'F')
 1063:         {
 1064:             printf("(modification d'une variable par soustraction)\n\n");
 1065:         }
 1066:         else
 1067:         {
 1068:             printf("(substract from the content of a variable)\n\n");
 1069:         }
 1070: 
 1071:         printf("    2: %s, %s, %s, %s, %s, %s,\n"
 1072:                 "       %s, %s, %s\n",
 1073:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 1074:         printf("    1: %s\n\n", d_NOM);
 1075: 
 1076:         printf("    2: %s\n", d_NOM);
 1077:         printf("    1: %s, %s, %s, %s, %s, %s,\n"
 1078:                 "       %s, %s, %s\n",
 1079:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 1080: 
 1081:         return;
 1082:     }
 1083:     else if ((*s_etat_processus).test_instruction == 'Y')
 1084:     {
 1085:         (*s_etat_processus).nombre_arguments = -1;
 1086:         return;
 1087:     }
 1088:     
 1089:     registre_pile_last = NULL;
 1090: 
 1091:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1092:     {
 1093:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 1094:         {
 1095:             return;
 1096:         }
 1097: 
 1098:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 1099:         (*s_etat_processus).l_base_pile_last = NULL;
 1100:     }
 1101: 
 1102:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1103:             &s_objet_1) == d_erreur)
 1104:     {
 1105:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1106: 
 1107:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1108:         {
 1109:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1110:             {
 1111:                 return;
 1112:             }
 1113: 
 1114:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1115:         }
 1116: 
 1117:         return;
 1118:     }
 1119: 
 1120:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1121:             &s_objet_2) == d_erreur)
 1122:     {
 1123:         liberation(s_etat_processus, s_objet_1);
 1124: 
 1125:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1126:         {
 1127:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1128:             {
 1129:                 return;
 1130:             }
 1131: 
 1132:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1133:         }
 1134: 
 1135:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1136:         return;
 1137:     }
 1138: 
 1139:     variable_partagee = d_faux;
 1140: 
 1141: /*
 1142: --------------------------------------------------------------------------------
 1143:   Une valeur et un nom
 1144: --------------------------------------------------------------------------------
 1145: */
 1146: 
 1147:     if (((*s_objet_1).type == NOM) &&
 1148:             (((*s_objet_2).type == INT) ||
 1149:             ((*s_objet_2).type == REL) ||
 1150:             ((*s_objet_2).type == CPL) ||
 1151:             ((*s_objet_2).type == VIN) ||
 1152:             ((*s_objet_2).type == VRL) ||
 1153:             ((*s_objet_2).type == VCX) ||
 1154:             ((*s_objet_2).type == MIN) ||
 1155:             ((*s_objet_2).type == MRL) ||
 1156:             ((*s_objet_2).type == MCX)))
 1157:     {
 1158:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 1159:                 (*s_objet_1).objet)).nom) == d_faux)
 1160:         {
 1161:             (*s_etat_processus).erreur_systeme = d_es;
 1162:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 1163: 
 1164:             liberation(s_etat_processus, s_objet_1);
 1165:             liberation(s_etat_processus, s_objet_2);
 1166: 
 1167:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1168:             {
 1169:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1170:                 {
 1171:                     return;
 1172:                 }
 1173: 
 1174:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1175:             }
 1176: 
 1177:             return;
 1178:         }
 1179: 
 1180:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1181:                 .position_variable_courante].variable_verrouillee == d_vrai)
 1182:         {
 1183:             liberation(s_etat_processus, s_objet_1);
 1184:             liberation(s_etat_processus, s_objet_2);
 1185: 
 1186:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1187:             {
 1188:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1189:                 {
 1190:                     return;
 1191:                 }
 1192: 
 1193:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1194:             }
 1195: 
 1196:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 1197:             return;
 1198:         }
 1199: 
 1200:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1201:                 .position_variable_courante].objet == NULL)
 1202:         {
 1203:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 1204:                     .s_liste_variables_partagees).mutex)) != 0)
 1205:             {
 1206:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1207:                 return;
 1208:             }
 1209: 
 1210:             if (recherche_variable_partagee(s_etat_processus,
 1211:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1212:                     .position_variable_courante].nom, (*s_etat_processus)
 1213:                     .s_liste_variables[(*s_etat_processus)
 1214:                     .position_variable_courante].variable_partagee,
 1215:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1216:                     .position_variable_courante].origine) == d_faux)
 1217:             {
 1218:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1219:                         .s_liste_variables_partagees).mutex)) != 0)
 1220:                 {
 1221:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1222:                     return;
 1223:                 }
 1224: 
 1225:                 (*s_etat_processus).erreur_systeme = d_es;
 1226:                 (*s_etat_processus).erreur_execution =
 1227:                         d_ex_variable_non_definie;
 1228: 
 1229:                 liberation(s_etat_processus, s_objet_1);
 1230:                 liberation(s_etat_processus, s_objet_2);
 1231: 
 1232:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1233:                 {
 1234:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1235:                     {
 1236:                         return;
 1237:                     }
 1238: 
 1239:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1240:                 }
 1241: 
 1242:                 return;
 1243:             }
 1244: 
 1245:             variable_partagee = d_vrai;
 1246: 
 1247:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 1248:                     .s_liste_variables_partagees).table
 1249:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 1250:                     .position_variable].objet, 'P')) == NULL)
 1251:             {
 1252:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1253:                         .s_liste_variables_partagees).mutex)) != 0)
 1254:                 {
 1255:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1256:                     return;
 1257:                 }
 1258: 
 1259:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1260: 
 1261:                 liberation(s_etat_processus, s_objet_1);
 1262:                 liberation(s_etat_processus, s_objet_2);
 1263: 
 1264:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1265:                 {
 1266:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1267:                     {
 1268:                         return;
 1269:                     }
 1270: 
 1271:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1272:                 }
 1273: 
 1274:                 return;
 1275:             }
 1276:         }
 1277:         else
 1278:         {
 1279:             if ((s_objet_3 = copie_objet(s_etat_processus,
 1280:                     (*s_etat_processus).s_liste_variables
 1281:                     [(*s_etat_processus).position_variable_courante].objet,
 1282:                     'P')) == NULL)
 1283:             {
 1284:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1285: 
 1286:                 liberation(s_etat_processus, s_objet_1);
 1287:                 liberation(s_etat_processus, s_objet_2);
 1288: 
 1289:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1290:                 {
 1291:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1292:                     {
 1293:                         return;
 1294:                     }
 1295: 
 1296:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1297:                 }
 1298: 
 1299:                 return;
 1300:             }
 1301:         }
 1302: 
 1303:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1304:                 s_objet_2) == d_erreur)
 1305:         {
 1306:             if (variable_partagee == d_vrai)
 1307:             {
 1308:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1309:                         .s_liste_variables_partagees).mutex)) != 0)
 1310:                 {
 1311:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1312:                     return;
 1313:                 }
 1314:             }
 1315: 
 1316:             return;
 1317:         }
 1318: 
 1319:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1320:                 s_objet_3) == d_erreur)
 1321:         {
 1322:             if (variable_partagee == d_vrai)
 1323:             {
 1324:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1325:                         .s_liste_variables_partagees).mutex)) != 0)
 1326:                 {
 1327:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1328:                     return;
 1329:                 }
 1330:             }
 1331: 
 1332:             return;
 1333:         }
 1334: 
 1335:         instruction_moins(s_etat_processus);
 1336:         s_objet_2 = NULL;
 1337:         /* s_objet_2 et s_objet_3 sont libérés par cet appel... */
 1338: 
 1339:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 1340:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 1341:                 ((*s_etat_processus).exception != d_ep))
 1342:         {
 1343:             if (variable_partagee == d_vrai)
 1344:             {
 1345:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1346:                         .s_liste_variables_partagees).mutex)) != 0)
 1347:                 {
 1348:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1349:                     return;
 1350:                 }
 1351:             }
 1352: 
 1353:             liberation(s_etat_processus, s_objet_1);
 1354:             liberation(s_etat_processus, s_objet_2);
 1355: 
 1356:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1357:             {
 1358:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1359:                 {
 1360:                     return;
 1361:                 }
 1362: 
 1363:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1364:             }
 1365: 
 1366:             return;
 1367:         }
 1368: 
 1369:         if (variable_partagee == d_vrai)
 1370:         {
 1371:             liberation(s_etat_processus,
 1372:                     (*(*s_etat_processus).s_liste_variables_partagees)
 1373:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 1374:                     .position_variable].objet);
 1375: 
 1376:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1377:                     (struct_objet **) &((*(*s_etat_processus)
 1378:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 1379:                     .s_liste_variables_partagees).position_variable].objet))
 1380:                     == d_erreur)
 1381:             {
 1382:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1383:                         .s_liste_variables_partagees).mutex)) != 0)
 1384:                 {
 1385:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1386:                     return;
 1387:                 }
 1388: 
 1389:                 liberation(s_etat_processus, s_objet_1);
 1390: 
 1391:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1392:                 {
 1393:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1394:                     {
 1395:                         return;
 1396:                     }
 1397: 
 1398:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1399:                 }
 1400: 
 1401:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1402:                 return;
 1403:             }
 1404: 
 1405:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1406:                     .s_liste_variables_partagees).mutex)) != 0)
 1407:             {
 1408:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1409:                 return;
 1410:             }
 1411:         }
 1412:         else
 1413:         {
 1414:             liberation(s_etat_processus,
 1415:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1416:                     .position_variable_courante].objet);
 1417: 
 1418:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1419:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1420:                     .position_variable_courante].objet)) == d_erreur)
 1421:             {
 1422:                 liberation(s_etat_processus, s_objet_1);
 1423: 
 1424:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1425:                 {
 1426:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1427:                     {
 1428:                         return;
 1429:                     }
 1430: 
 1431:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1432:                 }
 1433: 
 1434:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1435:                 return;
 1436:             }
 1437:         }
 1438:     }
 1439:     else if (((*s_objet_2).type == NOM) &&
 1440:             (((*s_objet_1).type == INT) ||
 1441:             ((*s_objet_1).type == REL) ||
 1442:             ((*s_objet_1).type == CPL) ||
 1443:             ((*s_objet_1).type == VIN) ||
 1444:             ((*s_objet_1).type == VRL) ||
 1445:             ((*s_objet_1).type == VCX) ||
 1446:             ((*s_objet_1).type == MIN) ||
 1447:             ((*s_objet_1).type == MRL) ||
 1448:             ((*s_objet_1).type == MCX)))
 1449:     {
 1450:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 1451:                 (*s_objet_2).objet)).nom) == d_faux)
 1452:         {
 1453:             (*s_etat_processus).erreur_systeme = d_es;
 1454:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 1455: 
 1456:             liberation(s_etat_processus, s_objet_1);
 1457:             liberation(s_etat_processus, s_objet_2);
 1458: 
 1459:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1460:             {
 1461:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1462:                 {
 1463:                     return;
 1464:                 }
 1465: 
 1466:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1467:             }
 1468: 
 1469:             return;
 1470:         }
 1471: 
 1472:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1473:                 .position_variable_courante].variable_verrouillee == d_vrai)
 1474:         {
 1475:             liberation(s_etat_processus, s_objet_1);
 1476:             liberation(s_etat_processus, s_objet_2);
 1477: 
 1478:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1479:             {
 1480:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1481:                 {
 1482:                     return;
 1483:                 }
 1484: 
 1485:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1486:             }
 1487: 
 1488:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 1489:             return;
 1490:         }
 1491: 
 1492:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1493:                 .position_variable_courante].objet == NULL)
 1494:         {
 1495:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 1496:                     .s_liste_variables_partagees).mutex)) != 0)
 1497:             {
 1498:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1499:                 return;
 1500:             }
 1501: 
 1502:             if (recherche_variable_partagee(s_etat_processus,
 1503:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1504:                     .position_variable_courante].nom, (*s_etat_processus)
 1505:                     .s_liste_variables[(*s_etat_processus)
 1506:                     .position_variable_courante].variable_partagee,
 1507:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1508:                     .position_variable_courante].origine) == d_faux)
 1509:             {
 1510:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1511:                         .s_liste_variables_partagees).mutex)) != 0)
 1512:                 {
 1513:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1514:                     return;
 1515:                 }
 1516: 
 1517:                 (*s_etat_processus).erreur_systeme = d_es;
 1518:                 (*s_etat_processus).erreur_execution =
 1519:                         d_ex_variable_non_definie;
 1520: 
 1521:                 liberation(s_etat_processus, s_objet_1);
 1522:                 liberation(s_etat_processus, s_objet_2);
 1523: 
 1524:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1525:                 {
 1526:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1527:                     {
 1528:                         return;
 1529:                     }
 1530: 
 1531:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1532:                 }
 1533: 
 1534:                 return;
 1535:             }
 1536: 
 1537:             variable_partagee = d_vrai;
 1538: 
 1539:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 1540:                     .s_liste_variables_partagees).table
 1541:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 1542:                     .position_variable].objet, 'P')) == NULL)
 1543:             {
 1544:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1545:                         .s_liste_variables_partagees).mutex)) != 0)
 1546:                 {
 1547:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1548:                     return;
 1549:                 }
 1550: 
 1551:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1552: 
 1553:                 liberation(s_etat_processus, s_objet_1);
 1554:                 liberation(s_etat_processus, s_objet_2);
 1555: 
 1556:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 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: 
 1566:                 return;
 1567:             }
 1568:         }
 1569:         else
 1570:         {
 1571:             if ((s_objet_3 = copie_objet(s_etat_processus,
 1572:                     (*s_etat_processus).s_liste_variables
 1573:                     [(*s_etat_processus).position_variable_courante].objet,
 1574:                     'P')) == NULL)
 1575:             {
 1576:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 1577: 
 1578:                 liberation(s_etat_processus, s_objet_1);
 1579:                 liberation(s_etat_processus, s_objet_2);
 1580: 
 1581:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1582:                 {
 1583:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1584:                     {
 1585:                         return;
 1586:                     }
 1587: 
 1588:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1589:                 }
 1590: 
 1591:                 return;
 1592:             }
 1593:         }
 1594: 
 1595:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1596:                 s_objet_3) == d_erreur)
 1597:         {
 1598:             if (variable_partagee == d_vrai)
 1599:             {
 1600:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1601:                         .s_liste_variables_partagees).mutex)) != 0)
 1602:                 {
 1603:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1604:                     return;
 1605:                 }
 1606:             }
 1607: 
 1608:             return;
 1609:         }
 1610: 
 1611:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1612:                 s_objet_1) == d_erreur)
 1613:         {
 1614:             if (variable_partagee == d_vrai)
 1615:             {
 1616:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1617:                         .s_liste_variables_partagees).mutex)) != 0)
 1618:                 {
 1619:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1620:                     return;
 1621:                 }
 1622:             }
 1623: 
 1624:             return;
 1625:         }
 1626: 
 1627:         instruction_moins(s_etat_processus);
 1628:         s_objet_1 = NULL;
 1629:         /* s_objet_1 et s_objet_3 sont libérés par cet appel... */
 1630: 
 1631:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 1632:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 1633:                 ((*s_etat_processus).exception != d_ep))
 1634:         {
 1635:             if (variable_partagee == d_vrai)
 1636:             {
 1637:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1638:                         .s_liste_variables_partagees).mutex)) != 0)
 1639:                 {
 1640:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1641:                     return;
 1642:                 }
 1643:             }
 1644: 
 1645:             liberation(s_etat_processus, s_objet_1);
 1646:             liberation(s_etat_processus, s_objet_2);
 1647: 
 1648:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1649:             {
 1650:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1651:                 {
 1652:                     return;
 1653:                 }
 1654: 
 1655:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1656:             }
 1657: 
 1658:             return;
 1659:         }
 1660: 
 1661:         if (variable_partagee == d_vrai)
 1662:         {
 1663:             liberation(s_etat_processus,
 1664:                     (*(*s_etat_processus).s_liste_variables_partagees)
 1665:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 1666:                     .position_variable].objet);
 1667: 
 1668:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1669:                     (struct_objet **) &((*(*s_etat_processus)
 1670:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 1671:                     .s_liste_variables_partagees).position_variable].objet))
 1672:                     == d_erreur)
 1673:             {
 1674:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1675:                         .s_liste_variables_partagees).mutex)) != 0)
 1676:                 {
 1677:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1678:                     return;
 1679:                 }
 1680: 
 1681:                 liberation(s_etat_processus, s_objet_1);
 1682: 
 1683:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1684:                 {
 1685:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1686:                     {
 1687:                         return;
 1688:                     }
 1689: 
 1690:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1691:                 }
 1692: 
 1693:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1694:                 return;
 1695:             }
 1696: 
 1697:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1698:                     .s_liste_variables_partagees).mutex)) != 0)
 1699:             {
 1700:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1701:                 return;
 1702:             }
 1703:         }
 1704:         else
 1705:         {
 1706:             liberation(s_etat_processus,
 1707:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1708:                     .position_variable_courante].objet);
 1709: 
 1710:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1711:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1712:                     .position_variable_courante].objet)) == d_erreur)
 1713:             {
 1714:                 liberation(s_etat_processus, s_objet_1);
 1715: 
 1716:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1717:                 {
 1718:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1719:                     {
 1720:                         return;
 1721:                     }
 1722: 
 1723:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1724:                 }
 1725: 
 1726:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1727:                 return;
 1728:             }
 1729:         }
 1730:     }
 1731: 
 1732: /*
 1733: --------------------------------------------------------------------------------
 1734:   Arguments incompatibles avec la fonction STO-
 1735: --------------------------------------------------------------------------------
 1736: */
 1737: 
 1738:     else
 1739:     {
 1740:         liberation(s_etat_processus, s_objet_1);
 1741:         liberation(s_etat_processus, s_objet_2);
 1742: 
 1743:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1744:         {
 1745:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1746:             {
 1747:                 return;
 1748:             }
 1749: 
 1750:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1751:         }
 1752: 
 1753:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 1754:         return;
 1755:     }
 1756: 
 1757:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1758:     {
 1759:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1760:         {
 1761:             return;
 1762:         }
 1763: 
 1764:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1765:     }
 1766: 
 1767:     liberation(s_etat_processus, s_objet_1);
 1768:     liberation(s_etat_processus, s_objet_2);
 1769: 
 1770:     return;
 1771: }
 1772: 
 1773: 
 1774: /*
 1775: ================================================================================
 1776:   Fonction 'sto*'
 1777: ================================================================================
 1778:   Entrées :
 1779: --------------------------------------------------------------------------------
 1780:   Sorties :
 1781: --------------------------------------------------------------------------------
 1782:   Effets de bord : néant
 1783: ================================================================================
 1784: */
 1785: 
 1786: void
 1787: instruction_sto_fois(struct_processus *s_etat_processus)
 1788: {
 1789:     logical1                        variable_partagee;
 1790: 
 1791:     struct_liste_chainee            *registre_pile_last;
 1792: 
 1793:     struct_objet                    *s_objet_1;
 1794:     struct_objet                    *s_objet_2;
 1795:     struct_objet                    *s_objet_3;
 1796: 
 1797:     (*s_etat_processus).erreur_execution = d_ex;
 1798: 
 1799:     if ((*s_etat_processus).affichage_arguments == 'Y')
 1800:     {
 1801:         printf("\n  STO* ");
 1802: 
 1803:         if ((*s_etat_processus).langue == 'F')
 1804:         {
 1805:             printf("(modification d'une variable par multiplication)\n\n");
 1806:         }
 1807:         else
 1808:         {
 1809:             printf("(multiply the content of a variable)\n\n");
 1810:         }
 1811: 
 1812:         printf("    2: %s, %s, %s, %s, %s, %s,\n"
 1813:                 "       %s, %s, %s\n",
 1814:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 1815:         printf("    1: %s\n\n", d_NOM);
 1816: 
 1817:         printf("    2: %s\n", d_NOM);
 1818:         printf("    1: %s, %s, %s, %s, %s, %s,\n"
 1819:                 "       %s, %s, %s\n",
 1820:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 1821: 
 1822:         return;
 1823:     }
 1824:     else if ((*s_etat_processus).test_instruction == 'Y')
 1825:     {
 1826:         (*s_etat_processus).nombre_arguments = -1;
 1827:         return;
 1828:     }
 1829:     
 1830:     registre_pile_last = NULL;
 1831: 
 1832:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1833:     {
 1834:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 1835:         {
 1836:             return;
 1837:         }
 1838: 
 1839:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 1840:         (*s_etat_processus).l_base_pile_last = NULL;
 1841:     }
 1842: 
 1843:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1844:             &s_objet_1) == d_erreur)
 1845:     {
 1846:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1847: 
 1848:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1849:         {
 1850:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1851:             {
 1852:                 return;
 1853:             }
 1854: 
 1855:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1856:         }
 1857: 
 1858:         return;
 1859:     }
 1860: 
 1861:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 1862:             &s_objet_2) == d_erreur)
 1863:     {
 1864:         liberation(s_etat_processus, s_objet_1);
 1865: 
 1866:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1867:         {
 1868:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1869:             {
 1870:                 return;
 1871:             }
 1872: 
 1873:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1874:         }
 1875: 
 1876:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 1877:         return;
 1878:     }
 1879: 
 1880: /*
 1881: --------------------------------------------------------------------------------
 1882:   Une valeur et un nom
 1883: --------------------------------------------------------------------------------
 1884: */
 1885: 
 1886:     variable_partagee = d_faux;
 1887: 
 1888:     if (((*s_objet_1).type == NOM) &&
 1889:             (((*s_objet_2).type == INT) ||
 1890:             ((*s_objet_2).type == REL) ||
 1891:             ((*s_objet_2).type == CPL) ||
 1892:             ((*s_objet_2).type == VIN) ||
 1893:             ((*s_objet_2).type == VRL) ||
 1894:             ((*s_objet_2).type == VCX) ||
 1895:             ((*s_objet_2).type == MIN) ||
 1896:             ((*s_objet_2).type == MRL) ||
 1897:             ((*s_objet_2).type == MCX)))
 1898:     {
 1899:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 1900:                 (*s_objet_1).objet)).nom) == d_faux)
 1901:         {
 1902:             (*s_etat_processus).erreur_systeme = d_es;
 1903:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 1904: 
 1905:             liberation(s_etat_processus, s_objet_1);
 1906:             liberation(s_etat_processus, s_objet_2);
 1907: 
 1908:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1909:             {
 1910:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1911:                 {
 1912:                     return;
 1913:                 }
 1914: 
 1915:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1916:             }
 1917: 
 1918:             return;
 1919:         }
 1920: 
 1921:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1922:                 .position_variable_courante].variable_verrouillee == d_vrai)
 1923:         {
 1924:             liberation(s_etat_processus, s_objet_1);
 1925:             liberation(s_etat_processus, s_objet_2);
 1926: 
 1927:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1928:             {
 1929:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1930:                 {
 1931:                     return;
 1932:                 }
 1933: 
 1934:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1935:             }
 1936: 
 1937:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 1938:             return;
 1939:         }
 1940: 
 1941:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1942:                 .position_variable_courante].objet == NULL)
 1943:         {
 1944:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 1945:                     .s_liste_variables_partagees).mutex)) != 0)
 1946:             {
 1947:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 1948:                 return;
 1949:             }
 1950: 
 1951:             if (recherche_variable_partagee(s_etat_processus,
 1952:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1953:                     .position_variable_courante].nom, (*s_etat_processus)
 1954:                     .s_liste_variables[(*s_etat_processus)
 1955:                     .position_variable_courante].variable_partagee,
 1956:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 1957:                     .position_variable_courante].origine) == d_faux)
 1958:             {
 1959:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1960:                         .s_liste_variables_partagees).mutex)) != 0)
 1961:                 {
 1962:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1963:                     return;
 1964:                 }
 1965: 
 1966:                 (*s_etat_processus).erreur_systeme = d_es;
 1967:                 (*s_etat_processus).erreur_execution =
 1968:                         d_ex_variable_non_definie;
 1969: 
 1970:                 liberation(s_etat_processus, s_objet_1);
 1971:                 liberation(s_etat_processus, s_objet_2);
 1972: 
 1973:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 1974:                 {
 1975:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 1976:                     {
 1977:                         return;
 1978:                     }
 1979: 
 1980:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 1981:                 }
 1982: 
 1983:                 return;
 1984:             }
 1985: 
 1986:             variable_partagee = d_vrai;
 1987: 
 1988:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 1989:                     .s_liste_variables_partagees).table
 1990:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 1991:                     .position_variable].objet, 'P')) == NULL)
 1992:             {
 1993:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 1994:                         .s_liste_variables_partagees).mutex)) != 0)
 1995:                 {
 1996:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 1997:                     return;
 1998:                 }
 1999: 
 2000:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2001: 
 2002:                 liberation(s_etat_processus, s_objet_1);
 2003:                 liberation(s_etat_processus, s_objet_2);
 2004: 
 2005:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2006:                 {
 2007:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2008:                     {
 2009:                         return;
 2010:                     }
 2011: 
 2012:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2013:                 }
 2014: 
 2015:                 return;
 2016:             }
 2017:         }
 2018:         else
 2019:         {
 2020:             if ((s_objet_3 = copie_objet(s_etat_processus,
 2021:                     (*s_etat_processus).s_liste_variables
 2022:                     [(*s_etat_processus).position_variable_courante].objet,
 2023:                     'P')) == NULL)
 2024:             {
 2025:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2026: 
 2027:                 liberation(s_etat_processus, s_objet_1);
 2028:                 liberation(s_etat_processus, s_objet_2);
 2029: 
 2030:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2031:                 {
 2032:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2033:                     {
 2034:                         return;
 2035:                     }
 2036: 
 2037:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2038:                 }
 2039: 
 2040:                 return;
 2041:             }
 2042:         }
 2043: 
 2044:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2045:                 s_objet_2) == d_erreur)
 2046:         {
 2047:             if (variable_partagee == d_vrai)
 2048:             {
 2049:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2050:                         .s_liste_variables_partagees).mutex)) != 0)
 2051:                 {
 2052:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2053:                     return;
 2054:                 }
 2055:             }
 2056: 
 2057:             return;
 2058:         }
 2059: 
 2060:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2061:                 s_objet_3) == d_erreur)
 2062:         {
 2063:             if (variable_partagee == d_vrai)
 2064:             {
 2065:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2066:                         .s_liste_variables_partagees).mutex)) != 0)
 2067:                 {
 2068:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2069:                     return;
 2070:                 }
 2071:             }
 2072: 
 2073:             return;
 2074:         }
 2075: 
 2076:         instruction_multiplication(s_etat_processus);
 2077:         s_objet_2 = NULL;
 2078:         /* s_objet_2 et s_objet_3 sont libérés par cet appel... */
 2079: 
 2080:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 2081:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 2082:                 ((*s_etat_processus).exception != d_ep))
 2083:         {
 2084:             if (variable_partagee == d_vrai)
 2085:             {
 2086:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2087:                         .s_liste_variables_partagees).mutex)) != 0)
 2088:                 {
 2089:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2090:                     return;
 2091:                 }
 2092:             }
 2093: 
 2094:             liberation(s_etat_processus, s_objet_1);
 2095:             liberation(s_etat_processus, s_objet_2);
 2096: 
 2097:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2098:             {
 2099:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2100:                 {
 2101:                     return;
 2102:                 }
 2103: 
 2104:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2105:             }
 2106: 
 2107:             return;
 2108:         }
 2109: 
 2110:         if (variable_partagee == d_vrai)
 2111:         {
 2112:             liberation(s_etat_processus,
 2113:                     (*(*s_etat_processus).s_liste_variables_partagees)
 2114:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 2115:                     .position_variable].objet);
 2116: 
 2117:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2118:                     (struct_objet **) &((*(*s_etat_processus)
 2119:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 2120:                     .s_liste_variables_partagees).position_variable].objet))
 2121:                     == d_erreur)
 2122:             {
 2123:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2124:                         .s_liste_variables_partagees).mutex)) != 0)
 2125:                 {
 2126:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2127:                     return;
 2128:                 }
 2129: 
 2130:                 liberation(s_etat_processus, s_objet_1);
 2131: 
 2132:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2133:                 {
 2134:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2135:                     {
 2136:                         return;
 2137:                     }
 2138: 
 2139:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2140:                 }
 2141: 
 2142:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2143:                 return;
 2144:             }
 2145: 
 2146:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2147:                     .s_liste_variables_partagees).mutex)) != 0)
 2148:             {
 2149:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2150:                 return;
 2151:             }
 2152:         }
 2153:         else
 2154:         {
 2155:             liberation(s_etat_processus,
 2156:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2157:                     .position_variable_courante].objet);
 2158: 
 2159:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2160:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2161:                     .position_variable_courante].objet)) == d_erreur)
 2162:             {
 2163:                 liberation(s_etat_processus, s_objet_1);
 2164: 
 2165:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2166:                 {
 2167:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2168:                     {
 2169:                         return;
 2170:                     }
 2171: 
 2172:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2173:                 }
 2174: 
 2175:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2176:                 return;
 2177:             }
 2178:         }
 2179:     }
 2180:     else if (((*s_objet_2).type == NOM) &&
 2181:             (((*s_objet_1).type == INT) ||
 2182:             ((*s_objet_1).type == REL) ||
 2183:             ((*s_objet_1).type == CPL) ||
 2184:             ((*s_objet_1).type == VIN) ||
 2185:             ((*s_objet_1).type == VRL) ||
 2186:             ((*s_objet_1).type == VCX) ||
 2187:             ((*s_objet_1).type == MIN) ||
 2188:             ((*s_objet_1).type == MRL) ||
 2189:             ((*s_objet_1).type == MCX)))
 2190:     {
 2191:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 2192:                 (*s_objet_2).objet)).nom) == d_faux)
 2193:         {
 2194:             (*s_etat_processus).erreur_systeme = d_es;
 2195:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 2196: 
 2197:             liberation(s_etat_processus, s_objet_1);
 2198:             liberation(s_etat_processus, s_objet_2);
 2199: 
 2200:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2201:             {
 2202:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2203:                 {
 2204:                     return;
 2205:                 }
 2206: 
 2207:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2208:             }
 2209: 
 2210:             return;
 2211:         }
 2212: 
 2213:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2214:                 .position_variable_courante].variable_verrouillee == d_vrai)
 2215:         {
 2216:             liberation(s_etat_processus, s_objet_1);
 2217:             liberation(s_etat_processus, s_objet_2);
 2218: 
 2219:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2220:             {
 2221:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2222:                 {
 2223:                     return;
 2224:                 }
 2225: 
 2226:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2227:             }
 2228: 
 2229:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 2230:             return;
 2231:         }
 2232: 
 2233:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2234:                 .position_variable_courante].objet == NULL)
 2235:         {
 2236:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 2237:                     .s_liste_variables_partagees).mutex)) != 0)
 2238:             {
 2239:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2240:                 return;
 2241:             }
 2242: 
 2243:             if (recherche_variable_partagee(s_etat_processus,
 2244:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2245:                     .position_variable_courante].nom, (*s_etat_processus)
 2246:                     .s_liste_variables[(*s_etat_processus)
 2247:                     .position_variable_courante].variable_partagee,
 2248:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2249:                     .position_variable_courante].origine) == d_faux)
 2250:             {
 2251:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2252:                         .s_liste_variables_partagees).mutex)) != 0)
 2253:                 {
 2254:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2255:                     return;
 2256:                 }
 2257: 
 2258:                 (*s_etat_processus).erreur_systeme = d_es;
 2259:                 (*s_etat_processus).erreur_execution =
 2260:                         d_ex_variable_non_definie;
 2261: 
 2262:                 liberation(s_etat_processus, s_objet_1);
 2263:                 liberation(s_etat_processus, s_objet_2);
 2264: 
 2265:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2266:                 {
 2267:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2268:                     {
 2269:                         return;
 2270:                     }
 2271: 
 2272:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2273:                 }
 2274: 
 2275:                 return;
 2276:             }
 2277: 
 2278:             variable_partagee = d_vrai;
 2279: 
 2280:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 2281:                     .s_liste_variables_partagees).table
 2282:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 2283:                     .position_variable].objet, 'P')) == NULL)
 2284:             {
 2285:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2286:                         .s_liste_variables_partagees).mutex)) != 0)
 2287:                 {
 2288:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2289:                     return;
 2290:                 }
 2291: 
 2292:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2293: 
 2294:                 liberation(s_etat_processus, s_objet_1);
 2295:                 liberation(s_etat_processus, s_objet_2);
 2296: 
 2297:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2298:                 {
 2299:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2300:                     {
 2301:                         return;
 2302:                     }
 2303: 
 2304:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2305:                 }
 2306: 
 2307:                 return;
 2308:             }
 2309:         }
 2310:         else
 2311:         {
 2312:             if ((s_objet_3 = copie_objet(s_etat_processus,
 2313:                     (*s_etat_processus).s_liste_variables
 2314:                     [(*s_etat_processus).position_variable_courante].objet,
 2315:                     'P')) == NULL)
 2316:             {
 2317:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2318: 
 2319:                 liberation(s_etat_processus, s_objet_1);
 2320:                 liberation(s_etat_processus, s_objet_2);
 2321: 
 2322:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2323:                 {
 2324:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2325:                     {
 2326:                         return;
 2327:                     }
 2328: 
 2329:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2330:                 }
 2331: 
 2332:                 return;
 2333:             }
 2334:         }
 2335: 
 2336:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2337:                 s_objet_3) == d_erreur)
 2338:         {
 2339:             if (variable_partagee == d_vrai)
 2340:             {
 2341:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2342:                         .s_liste_variables_partagees).mutex)) != 0)
 2343:                 {
 2344:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2345:                     return;
 2346:                 }
 2347:             }
 2348: 
 2349:             return;
 2350:         }
 2351: 
 2352:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2353:                 s_objet_1) == d_erreur)
 2354:         {
 2355:             if (variable_partagee == d_vrai)
 2356:             {
 2357:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2358:                         .s_liste_variables_partagees).mutex)) != 0)
 2359:                 {
 2360:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2361:                     return;
 2362:                 }
 2363:             }
 2364: 
 2365:             return;
 2366:         }
 2367: 
 2368:         instruction_multiplication(s_etat_processus);
 2369:         s_objet_1 = NULL;
 2370:         /* s_objet_1 et s_objet_3 sont libérés par cet appel... */
 2371: 
 2372:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 2373:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 2374:                 ((*s_etat_processus).exception != d_ep))
 2375:         {
 2376:             if (variable_partagee == d_vrai)
 2377:             {
 2378:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2379:                         .s_liste_variables_partagees).mutex)) != 0)
 2380:                 {
 2381:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2382:                     return;
 2383:                 }
 2384:             }
 2385: 
 2386:             liberation(s_etat_processus, s_objet_1);
 2387:             liberation(s_etat_processus, s_objet_2);
 2388: 
 2389:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2390:             {
 2391:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2392:                 {
 2393:                     return;
 2394:                 }
 2395: 
 2396:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2397:             }
 2398: 
 2399:             return;
 2400:         }
 2401: 
 2402:         if (variable_partagee == d_vrai)
 2403:         {
 2404:             liberation(s_etat_processus,
 2405:                     (*(*s_etat_processus).s_liste_variables_partagees)
 2406:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 2407:                     .position_variable].objet);
 2408: 
 2409:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2410:                     (struct_objet **) &((*(*s_etat_processus)
 2411:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 2412:                     .s_liste_variables_partagees).position_variable].objet))
 2413:                     == d_erreur)
 2414:             {
 2415:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2416:                         .s_liste_variables_partagees).mutex)) != 0)
 2417:                 {
 2418:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2419:                     return;
 2420:                 }
 2421: 
 2422:                 liberation(s_etat_processus, s_objet_1);
 2423: 
 2424:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2425:                 {
 2426:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2427:                     {
 2428:                         return;
 2429:                     }
 2430: 
 2431:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2432:                 }
 2433: 
 2434:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2435:                 return;
 2436:             }
 2437: 
 2438:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2439:                     .s_liste_variables_partagees).mutex)) != 0)
 2440:             {
 2441:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2442:                 return;
 2443:             }
 2444:         }
 2445:         else
 2446:         {
 2447:             liberation(s_etat_processus,
 2448:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2449:                     .position_variable_courante].objet);
 2450: 
 2451:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2452:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2453:                     .position_variable_courante].objet)) == d_erreur)
 2454:             {
 2455:                 liberation(s_etat_processus, s_objet_1);
 2456: 
 2457:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2458:                 {
 2459:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2460:                     {
 2461:                         return;
 2462:                     }
 2463: 
 2464:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2465:                 }
 2466: 
 2467:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2468:                 return;
 2469:             }
 2470:         }
 2471:     }
 2472: 
 2473: /*
 2474: --------------------------------------------------------------------------------
 2475:   Arguments incompatibles avec la fonction STO*
 2476: --------------------------------------------------------------------------------
 2477: */
 2478: 
 2479:     else
 2480:     {
 2481:         liberation(s_etat_processus, s_objet_1);
 2482:         liberation(s_etat_processus, s_objet_2);
 2483: 
 2484:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2485:         {
 2486:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2487:             {
 2488:                 return;
 2489:             }
 2490: 
 2491:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2492:         }
 2493: 
 2494:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 2495:         return;
 2496:     }
 2497: 
 2498:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2499:     {
 2500:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2501:         {
 2502:             return;
 2503:         }
 2504: 
 2505:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2506:     }
 2507: 
 2508:     liberation(s_etat_processus, s_objet_1);
 2509:     liberation(s_etat_processus, s_objet_2);
 2510: 
 2511:     return;
 2512: }
 2513: 
 2514: 
 2515: /*
 2516: ================================================================================
 2517:   Fonction 'sto/'
 2518: ================================================================================
 2519:   Entrées :
 2520: --------------------------------------------------------------------------------
 2521:   Sorties :
 2522: --------------------------------------------------------------------------------
 2523:   Effets de bord : néant
 2524: ================================================================================
 2525: */
 2526: 
 2527: void
 2528: instruction_sto_division(struct_processus *s_etat_processus)
 2529: {
 2530:     logical1                        variable_partagee;
 2531: 
 2532:     struct_liste_chainee            *registre_pile_last;
 2533: 
 2534:     struct_objet                    *s_objet_1;
 2535:     struct_objet                    *s_objet_2;
 2536:     struct_objet                    *s_objet_3;
 2537: 
 2538:     (*s_etat_processus).erreur_execution = d_ex;
 2539: 
 2540:     if ((*s_etat_processus).affichage_arguments == 'Y')
 2541:     {
 2542:         printf("\n  STO/ ");
 2543: 
 2544:         if ((*s_etat_processus).langue == 'F')
 2545:         {
 2546:             printf("(modification d'une variable par division)\n\n");
 2547:         }
 2548:         else
 2549:         {
 2550:             printf("(divide the content of a variable)\n\n");
 2551:         }
 2552: 
 2553:         printf("    2: %s, %s, %s, %s, %s, %s,\n"
 2554:                 "       %s, %s, %s\n",
 2555:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 2556:         printf("    1: %s\n\n", d_NOM);
 2557: 
 2558:         printf("    2: %s\n", d_NOM);
 2559:         printf("    1: %s, %s, %s, %s, %s, %s,\n"
 2560:                 "       %s, %s, %s\n",
 2561:                 d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX);
 2562: 
 2563:         return;
 2564:     }
 2565:     else if ((*s_etat_processus).test_instruction == 'Y')
 2566:     {
 2567:         (*s_etat_processus).nombre_arguments = -1;
 2568:         return;
 2569:     }
 2570:     
 2571:     registre_pile_last = NULL;
 2572: 
 2573:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2574:     {
 2575:         if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
 2576:         {
 2577:             return;
 2578:         }
 2579: 
 2580:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 2581:         (*s_etat_processus).l_base_pile_last = NULL;
 2582:     }
 2583: 
 2584:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2585:             &s_objet_1) == d_erreur)
 2586:     {
 2587:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2588: 
 2589:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2590:         {
 2591:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2592:             {
 2593:                 return;
 2594:             }
 2595: 
 2596:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2597:         }
 2598: 
 2599:         return;
 2600:     }
 2601: 
 2602:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2603:             &s_objet_2) == d_erreur)
 2604:     {
 2605:         liberation(s_etat_processus, s_objet_1);
 2606: 
 2607:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2608:         {
 2609:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2610:             {
 2611:                 return;
 2612:             }
 2613: 
 2614:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2615:         }
 2616: 
 2617:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2618:         return;
 2619:     }
 2620: 
 2621: /*
 2622: --------------------------------------------------------------------------------
 2623:   Une valeur et un nom
 2624: --------------------------------------------------------------------------------
 2625: */
 2626: 
 2627:     variable_partagee = d_faux;
 2628: 
 2629:     if (((*s_objet_1).type == NOM) &&
 2630:             (((*s_objet_2).type == INT) ||
 2631:             ((*s_objet_2).type == REL) ||
 2632:             ((*s_objet_2).type == CPL) ||
 2633:             ((*s_objet_2).type == VIN) ||
 2634:             ((*s_objet_2).type == VRL) ||
 2635:             ((*s_objet_2).type == VCX) ||
 2636:             ((*s_objet_2).type == MIN) ||
 2637:             ((*s_objet_2).type == MRL) ||
 2638:             ((*s_objet_2).type == MCX)))
 2639:     {
 2640:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 2641:                 (*s_objet_1).objet)).nom) == d_faux)
 2642:         {
 2643:             (*s_etat_processus).erreur_systeme = d_es;
 2644:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 2645: 
 2646:             liberation(s_etat_processus, s_objet_1);
 2647:             liberation(s_etat_processus, s_objet_2);
 2648: 
 2649:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2650:             {
 2651:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2652:                 {
 2653:                     return;
 2654:                 }
 2655: 
 2656:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2657:             }
 2658: 
 2659:             return;
 2660:         }
 2661: 
 2662:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2663:                 .position_variable_courante].variable_verrouillee == d_vrai)
 2664:         {
 2665:             liberation(s_etat_processus, s_objet_1);
 2666:             liberation(s_etat_processus, s_objet_2);
 2667: 
 2668:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2669:             {
 2670:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2671:                 {
 2672:                     return;
 2673:                 }
 2674: 
 2675:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2676:             }
 2677: 
 2678:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 2679:             return;
 2680:         }
 2681: 
 2682:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2683:                 .position_variable_courante].objet == NULL)
 2684:         {
 2685:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 2686:                     .s_liste_variables_partagees).mutex)) != 0)
 2687:             {
 2688:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2689:                 return;
 2690:             }
 2691: 
 2692:             if (recherche_variable_partagee(s_etat_processus,
 2693:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2694:                     .position_variable_courante].nom, (*s_etat_processus)
 2695:                     .s_liste_variables[(*s_etat_processus)
 2696:                     .position_variable_courante].variable_partagee,
 2697:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2698:                     .position_variable_courante].origine) == d_faux)
 2699:             {
 2700:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2701:                         .s_liste_variables_partagees).mutex)) != 0)
 2702:                 {
 2703:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2704:                     return;
 2705:                 }
 2706: 
 2707:                 (*s_etat_processus).erreur_systeme = d_es;
 2708:                 (*s_etat_processus).erreur_execution =
 2709:                         d_ex_variable_non_definie;
 2710: 
 2711:                 liberation(s_etat_processus, s_objet_1);
 2712:                 liberation(s_etat_processus, s_objet_2);
 2713: 
 2714:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2715:                 {
 2716:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2717:                     {
 2718:                         return;
 2719:                     }
 2720: 
 2721:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2722:                 }
 2723: 
 2724:                 return;
 2725:             }
 2726: 
 2727:             variable_partagee = d_vrai;
 2728: 
 2729:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 2730:                     .s_liste_variables_partagees).table
 2731:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 2732:                     .position_variable].objet, 'P')) == NULL)
 2733:             {
 2734:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2735:                         .s_liste_variables_partagees).mutex)) != 0)
 2736:                 {
 2737:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2738:                     return;
 2739:                 }
 2740: 
 2741:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2742: 
 2743:                 liberation(s_etat_processus, s_objet_1);
 2744:                 liberation(s_etat_processus, s_objet_2);
 2745: 
 2746:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2747:                 {
 2748:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2749:                     {
 2750:                         return;
 2751:                     }
 2752: 
 2753:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2754:                 }
 2755: 
 2756:                 return;
 2757:             }
 2758:         }
 2759:         else
 2760:         {
 2761:             if ((s_objet_3 = copie_objet(s_etat_processus,
 2762:                     (*s_etat_processus).s_liste_variables
 2763:                     [(*s_etat_processus).position_variable_courante].objet,
 2764:                     'P')) == NULL)
 2765:             {
 2766:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 2767: 
 2768:                 liberation(s_etat_processus, s_objet_1);
 2769:                 liberation(s_etat_processus, s_objet_2);
 2770: 
 2771:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2772:                 {
 2773:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2774:                     {
 2775:                         return;
 2776:                     }
 2777: 
 2778:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2779:                 }
 2780: 
 2781:                 return;
 2782:             }
 2783:         }
 2784: 
 2785:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2786:                 s_objet_2) == d_erreur)
 2787:         {
 2788:             if (variable_partagee == d_vrai)
 2789:             {
 2790:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2791:                         .s_liste_variables_partagees).mutex)) != 0)
 2792:                 {
 2793:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2794:                     return;
 2795:                 }
 2796:             }
 2797: 
 2798:             return;
 2799:         }
 2800: 
 2801:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2802:                 s_objet_3) == d_erreur)
 2803:         {
 2804:             if (variable_partagee == d_vrai)
 2805:             {
 2806:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2807:                         .s_liste_variables_partagees).mutex)) != 0)
 2808:                 {
 2809:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2810:                     return;
 2811:                 }
 2812:             }
 2813: 
 2814:             return;
 2815:         }
 2816: 
 2817:         instruction_division(s_etat_processus);
 2818:         s_objet_2 = NULL;
 2819:         /* s_objet_2 et s_objet_3 sont libérés par cet appel... */
 2820: 
 2821:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 2822:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 2823:                 ((*s_etat_processus).exception != d_ep))
 2824:         {
 2825:             if (variable_partagee == d_vrai)
 2826:             {
 2827:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2828:                         .s_liste_variables_partagees).mutex)) != 0)
 2829:                 {
 2830:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2831:                     return;
 2832:                 }
 2833:             }
 2834: 
 2835:             liberation(s_etat_processus, s_objet_1);
 2836:             liberation(s_etat_processus, s_objet_2);
 2837: 
 2838:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2839:             {
 2840:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2841:                 {
 2842:                     return;
 2843:                 }
 2844: 
 2845:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2846:             }
 2847: 
 2848:             return;
 2849:         }
 2850: 
 2851:         if (variable_partagee == d_vrai)
 2852:         {
 2853:             liberation(s_etat_processus,
 2854:                     (*(*s_etat_processus).s_liste_variables_partagees)
 2855:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 2856:                     .position_variable].objet);
 2857: 
 2858:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2859:                     (struct_objet **) &((*(*s_etat_processus)
 2860:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 2861:                     .s_liste_variables_partagees).position_variable].objet))
 2862:                     == d_erreur)
 2863:             {
 2864:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2865:                         .s_liste_variables_partagees).mutex)) != 0)
 2866:                 {
 2867:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2868:                     return;
 2869:                 }
 2870: 
 2871:                 liberation(s_etat_processus, s_objet_1);
 2872: 
 2873:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2874:                 {
 2875:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2876:                     {
 2877:                         return;
 2878:                     }
 2879: 
 2880:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2881:                 }
 2882: 
 2883:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2884:                 return;
 2885:             }
 2886: 
 2887:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2888:                     .s_liste_variables_partagees).mutex)) != 0)
 2889:             {
 2890:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2891:                 return;
 2892:             }
 2893:         }
 2894:         else
 2895:         {
 2896:             liberation(s_etat_processus,
 2897:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2898:                     .position_variable_courante].objet);
 2899: 
 2900:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 2901:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2902:                     .position_variable_courante].objet)) == d_erreur)
 2903:             {
 2904:                 liberation(s_etat_processus, s_objet_1);
 2905: 
 2906:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2907:                 {
 2908:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2909:                     {
 2910:                         return;
 2911:                     }
 2912: 
 2913:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2914:                 }
 2915: 
 2916:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 2917:                 return;
 2918:             }
 2919:         }
 2920:     }
 2921:     else if (((*s_objet_2).type == NOM) &&
 2922:             (((*s_objet_1).type == INT) ||
 2923:             ((*s_objet_1).type == REL) ||
 2924:             ((*s_objet_1).type == CPL) ||
 2925:             ((*s_objet_1).type == VIN) ||
 2926:             ((*s_objet_1).type == VRL) ||
 2927:             ((*s_objet_1).type == VCX) ||
 2928:             ((*s_objet_1).type == MIN) ||
 2929:             ((*s_objet_1).type == MRL) ||
 2930:             ((*s_objet_1).type == MCX)))
 2931:     {
 2932:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 2933:                 (*s_objet_2).objet)).nom) == d_faux)
 2934:         {
 2935:             (*s_etat_processus).erreur_systeme = d_es;
 2936:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 2937: 
 2938:             liberation(s_etat_processus, s_objet_1);
 2939:             liberation(s_etat_processus, s_objet_2);
 2940: 
 2941:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2942:             {
 2943:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2944:                 {
 2945:                     return;
 2946:                 }
 2947: 
 2948:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2949:             }
 2950: 
 2951:             return;
 2952:         }
 2953: 
 2954:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2955:                 .position_variable_courante].variable_verrouillee == d_vrai)
 2956:         {
 2957:             liberation(s_etat_processus, s_objet_1);
 2958:             liberation(s_etat_processus, s_objet_2);
 2959: 
 2960:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 2961:             {
 2962:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 2963:                 {
 2964:                     return;
 2965:                 }
 2966: 
 2967:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 2968:             }
 2969: 
 2970:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 2971:             return;
 2972:         }
 2973: 
 2974:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2975:                 .position_variable_courante].objet == NULL)
 2976:         {
 2977:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 2978:                     .s_liste_variables_partagees).mutex)) != 0)
 2979:             {
 2980:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 2981:                 return;
 2982:             }
 2983: 
 2984:             if (recherche_variable_partagee(s_etat_processus,
 2985:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2986:                     .position_variable_courante].nom, (*s_etat_processus)
 2987:                     .s_liste_variables[(*s_etat_processus)
 2988:                     .position_variable_courante].variable_partagee,
 2989:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 2990:                     .position_variable_courante].origine) == d_faux)
 2991:             {
 2992:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 2993:                         .s_liste_variables_partagees).mutex)) != 0)
 2994:                 {
 2995:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 2996:                     return;
 2997:                 }
 2998: 
 2999:                 (*s_etat_processus).erreur_systeme = d_es;
 3000:                 (*s_etat_processus).erreur_execution =
 3001:                         d_ex_variable_non_definie;
 3002: 
 3003:                 liberation(s_etat_processus, s_objet_1);
 3004:                 liberation(s_etat_processus, s_objet_2);
 3005: 
 3006:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3007:                 {
 3008:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3009:                     {
 3010:                         return;
 3011:                     }
 3012: 
 3013:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3014:                 }
 3015: 
 3016:                 return;
 3017:             }
 3018: 
 3019:             variable_partagee = d_vrai;
 3020: 
 3021:             if ((s_objet_3 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 3022:                     .s_liste_variables_partagees).table
 3023:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 3024:                     .position_variable].objet, 'P')) == NULL)
 3025:             {
 3026:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3027:                         .s_liste_variables_partagees).mutex)) != 0)
 3028:                 {
 3029:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3030:                     return;
 3031:                 }
 3032: 
 3033:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3034: 
 3035:                 liberation(s_etat_processus, s_objet_1);
 3036:                 liberation(s_etat_processus, s_objet_2);
 3037: 
 3038:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3039:                 {
 3040:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3041:                     {
 3042:                         return;
 3043:                     }
 3044: 
 3045:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3046:                 }
 3047: 
 3048:                 return;
 3049:             }
 3050:         }
 3051:         else
 3052:         {
 3053:             if ((s_objet_3 = copie_objet(s_etat_processus,
 3054:                     (*s_etat_processus).s_liste_variables
 3055:                     [(*s_etat_processus).position_variable_courante].objet,
 3056:                     'P')) == NULL)
 3057:             {
 3058:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3059: 
 3060:                 liberation(s_etat_processus, s_objet_1);
 3061:                 liberation(s_etat_processus, s_objet_2);
 3062: 
 3063:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3064:                 {
 3065:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3066:                     {
 3067:                         return;
 3068:                     }
 3069: 
 3070:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3071:                 }
 3072: 
 3073:                 return;
 3074:             }
 3075:         }
 3076: 
 3077:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3078:                 s_objet_3) == d_erreur)
 3079:         {
 3080:             if (variable_partagee == d_vrai)
 3081:             {
 3082:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3083:                         .s_liste_variables_partagees).mutex)) != 0)
 3084:                 {
 3085:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3086:                     return;
 3087:                 }
 3088:             }
 3089: 
 3090:             return;
 3091:         }
 3092: 
 3093:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3094:                 s_objet_1) == d_erreur)
 3095:         {
 3096:             if (variable_partagee == d_vrai)
 3097:             {
 3098:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3099:                         .s_liste_variables_partagees).mutex)) != 0)
 3100:                 {
 3101:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3102:                     return;
 3103:                 }
 3104:             }
 3105: 
 3106:             return;
 3107:         }
 3108: 
 3109:         instruction_division(s_etat_processus);
 3110:         s_objet_1 = NULL;
 3111:         /* s_objet_1 et s_objet_3 sont libérés par cet appel... */
 3112: 
 3113:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 3114:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 3115:                 ((*s_etat_processus).exception != d_ep))
 3116:         {
 3117:             if (variable_partagee == d_vrai)
 3118:             {
 3119:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3120:                         .s_liste_variables_partagees).mutex)) != 0)
 3121:                 {
 3122:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3123:                     return;
 3124:                 }
 3125:             }
 3126: 
 3127:             liberation(s_etat_processus, s_objet_1);
 3128:             liberation(s_etat_processus, s_objet_2);
 3129: 
 3130:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3131:             {
 3132:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3133:                 {
 3134:                     return;
 3135:                 }
 3136: 
 3137:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3138:             }
 3139: 
 3140:             return;
 3141:         }
 3142: 
 3143:         if (variable_partagee == d_vrai)
 3144:         {
 3145:             liberation(s_etat_processus,
 3146:                     (*(*s_etat_processus).s_liste_variables_partagees)
 3147:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 3148:                     .position_variable].objet);
 3149: 
 3150:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3151:                     (struct_objet **) &((*(*s_etat_processus)
 3152:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 3153:                     .s_liste_variables_partagees).position_variable].objet))
 3154:                     == d_erreur)
 3155:             {
 3156:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3157:                         .s_liste_variables_partagees).mutex)) != 0)
 3158:                 {
 3159:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3160:                     return;
 3161:                 }
 3162: 
 3163:                 liberation(s_etat_processus, s_objet_1);
 3164: 
 3165:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3166:                 {
 3167:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3168:                     {
 3169:                         return;
 3170:                     }
 3171: 
 3172:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3173:                 }
 3174: 
 3175:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3176:                 return;
 3177:             }
 3178: 
 3179:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3180:                     .s_liste_variables_partagees).mutex)) != 0)
 3181:             {
 3182:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 3183:                 return;
 3184:             }
 3185:         }
 3186:         else
 3187:         {
 3188:             liberation(s_etat_processus,
 3189:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3190:                     .position_variable_courante].objet);
 3191: 
 3192:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3193:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3194:                     .position_variable_courante].objet)) == d_erreur)
 3195:             {
 3196:                 liberation(s_etat_processus, s_objet_1);
 3197: 
 3198:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3199:                 {
 3200:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3201:                     {
 3202:                         return;
 3203:                     }
 3204: 
 3205:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3206:                 }
 3207: 
 3208:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3209:                 return;
 3210:             }
 3211:         }
 3212:     }
 3213: 
 3214: /*
 3215: --------------------------------------------------------------------------------
 3216:   Arguments incompatibles avec la fonction STO/
 3217: --------------------------------------------------------------------------------
 3218: */
 3219: 
 3220:     else
 3221:     {
 3222:         liberation(s_etat_processus, s_objet_1);
 3223:         liberation(s_etat_processus, s_objet_2);
 3224: 
 3225:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3226:         {
 3227:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3228:             {
 3229:                 return;
 3230:             }
 3231: 
 3232:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3233:         }
 3234: 
 3235:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 3236:         return;
 3237:     }
 3238: 
 3239:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3240:     {
 3241:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3242:         {
 3243:             return;
 3244:         }
 3245: 
 3246:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3247:     }
 3248: 
 3249:     liberation(s_etat_processus, s_objet_1);
 3250:     liberation(s_etat_processus, s_objet_2);
 3251: 
 3252:     return;
 3253: }
 3254: 
 3255: 
 3256: /*
 3257: ================================================================================
 3258:   Fonction 'sneg'
 3259: ================================================================================
 3260:   Entrées :
 3261: --------------------------------------------------------------------------------
 3262:   Sorties :
 3263: --------------------------------------------------------------------------------
 3264:   Effets de bord : néant
 3265: ================================================================================
 3266: */
 3267: 
 3268: void
 3269: instruction_sneg(struct_processus *s_etat_processus)
 3270: {
 3271:     logical1                        variable_partagee;
 3272: 
 3273:     struct_liste_chainee            *registre_pile_last;
 3274: 
 3275:     struct_objet                    *s_objet_1;
 3276:     struct_objet                    *s_objet_2;
 3277: 
 3278:     (*s_etat_processus).erreur_execution = d_ex;
 3279: 
 3280:     if ((*s_etat_processus).affichage_arguments == 'Y')
 3281:     {
 3282:         printf("\n  SNEG ");
 3283: 
 3284:         if ((*s_etat_processus).langue == 'F')
 3285:         {
 3286:             printf("(modification d'une variable par opposition)\n\n");
 3287:         }
 3288:         else
 3289:         {
 3290:             printf("(store the opposite of the content in a variable)\n\n");
 3291:         }
 3292: 
 3293:         printf("    1: %s\n", d_NOM);
 3294: 
 3295:         return;
 3296:     }
 3297:     else if ((*s_etat_processus).test_instruction == 'Y')
 3298:     {
 3299:         (*s_etat_processus).nombre_arguments = -1;
 3300:         return;
 3301:     }
 3302:     
 3303:     registre_pile_last = NULL;
 3304: 
 3305:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3306:     {
 3307:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 3308:         {
 3309:             return;
 3310:         }
 3311: 
 3312:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 3313:         (*s_etat_processus).l_base_pile_last = NULL;
 3314:     }
 3315: 
 3316:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3317:             &s_objet_1) == d_erreur)
 3318:     {
 3319:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3320: 
 3321:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3322:         {
 3323:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3324:             {
 3325:                 return;
 3326:             }
 3327: 
 3328:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3329:         }
 3330: 
 3331:         return;
 3332:     }
 3333: 
 3334: /*
 3335: --------------------------------------------------------------------------------
 3336:   Un nom
 3337: --------------------------------------------------------------------------------
 3338: */
 3339: 
 3340:     if ((*s_objet_1).type == NOM)
 3341:     {
 3342:         variable_partagee = d_faux;
 3343: 
 3344:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 3345:                 (*s_objet_1).objet)).nom) == d_faux)
 3346:         {
 3347:             (*s_etat_processus).erreur_systeme = d_es;
 3348:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 3349: 
 3350:             liberation(s_etat_processus, s_objet_1);
 3351: 
 3352:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3353:             {
 3354:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3355:                 {
 3356:                     return;
 3357:                 }
 3358: 
 3359:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3360:             }
 3361: 
 3362:             return;
 3363:         }
 3364: 
 3365:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3366:                 .position_variable_courante].variable_verrouillee == d_vrai)
 3367:         {
 3368:             liberation(s_etat_processus, s_objet_1);
 3369: 
 3370:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3371:             {
 3372:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3373:                 {
 3374:                     return;
 3375:                 }
 3376: 
 3377:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3378:             }
 3379: 
 3380:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 3381:             return;
 3382:         }
 3383: 
 3384:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3385:                 .position_variable_courante].objet == NULL)
 3386:         {
 3387:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 3388:                     .s_liste_variables_partagees).mutex)) != 0)
 3389:             {
 3390:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 3391:                 return;
 3392:             }
 3393: 
 3394:             if (recherche_variable_partagee(s_etat_processus,
 3395:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3396:                     .position_variable_courante].nom, (*s_etat_processus)
 3397:                     .s_liste_variables[(*s_etat_processus)
 3398:                     .position_variable_courante].variable_partagee,
 3399:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3400:                     .position_variable_courante].origine) == d_faux)
 3401:             {
 3402:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3403:                         .s_liste_variables_partagees).mutex)) != 0)
 3404:                 {
 3405:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3406:                     return;
 3407:                 }
 3408: 
 3409:                 (*s_etat_processus).erreur_systeme = d_es;
 3410:                 (*s_etat_processus).erreur_execution =
 3411:                         d_ex_variable_non_definie;
 3412: 
 3413:                 liberation(s_etat_processus, s_objet_1);
 3414: 
 3415:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3416:                 {
 3417:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3418:                     {
 3419:                         return;
 3420:                     }
 3421: 
 3422:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3423:                 }
 3424: 
 3425:                 return;
 3426:             }
 3427: 
 3428:             variable_partagee = d_vrai;
 3429: 
 3430:             if ((s_objet_2 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 3431:                     .s_liste_variables_partagees).table
 3432:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 3433:                     .position_variable].objet, 'P')) == NULL)
 3434:             {
 3435:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3436:                         .s_liste_variables_partagees).mutex)) != 0)
 3437:                 {
 3438:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3439:                     return;
 3440:                 }
 3441: 
 3442:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3443: 
 3444:                 liberation(s_etat_processus, s_objet_1);
 3445: 
 3446:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3447:                 {
 3448:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3449:                     {
 3450:                         return;
 3451:                     }
 3452: 
 3453:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3454:                 }
 3455: 
 3456:                 return;
 3457:             }
 3458:         }
 3459:         else
 3460:         {
 3461:             if ((s_objet_2 = copie_objet(s_etat_processus,
 3462:                     (*s_etat_processus).s_liste_variables
 3463:                     [(*s_etat_processus).position_variable_courante].objet,
 3464:                     'P')) == NULL)
 3465:             {
 3466:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3467: 
 3468:                 liberation(s_etat_processus, s_objet_1);
 3469: 
 3470:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3471:                 {
 3472:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3473:                     {
 3474:                         return;
 3475:                     }
 3476: 
 3477:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3478:                 }
 3479: 
 3480:                 return;
 3481:             }
 3482:         }
 3483: 
 3484:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3485:                 s_objet_2) == d_erreur)
 3486:         {
 3487:             if (variable_partagee == d_vrai)
 3488:             {
 3489:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3490:                         .s_liste_variables_partagees).mutex)) != 0)
 3491:                 {
 3492:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3493:                     return;
 3494:                 }
 3495:             }
 3496: 
 3497:             return;
 3498:         }
 3499: 
 3500:         instruction_neg(s_etat_processus);
 3501:         /* s_objet_2 est libéré par cet appel... */
 3502: 
 3503:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 3504:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 3505:                 ((*s_etat_processus).exception != d_ep))
 3506:         {
 3507:             if (variable_partagee == d_vrai)
 3508:             {
 3509:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3510:                         .s_liste_variables_partagees).mutex)) != 0)
 3511:                 {
 3512:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3513:                     return;
 3514:                 }
 3515:             }
 3516: 
 3517:             liberation(s_etat_processus, s_objet_1);
 3518:             liberation(s_etat_processus, s_objet_2);
 3519: 
 3520:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3521:             {
 3522:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3523:                 {
 3524:                     return;
 3525:                 }
 3526: 
 3527:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3528:             }
 3529: 
 3530:             return;
 3531:         }
 3532: 
 3533:         if (variable_partagee == d_vrai)
 3534:         {
 3535:             liberation(s_etat_processus,
 3536:                     (*(*s_etat_processus).s_liste_variables_partagees)
 3537:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 3538:                     .position_variable].objet);
 3539: 
 3540:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3541:                     (struct_objet **) &((*(*s_etat_processus)
 3542:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 3543:                     .s_liste_variables_partagees).position_variable].objet))
 3544:                     == d_erreur)
 3545:             {
 3546:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3547:                         .s_liste_variables_partagees).mutex)) != 0)
 3548:                 {
 3549:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3550:                     return;
 3551:                 }
 3552: 
 3553:                 liberation(s_etat_processus, s_objet_1);
 3554: 
 3555:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3556:                 {
 3557:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3558:                     {
 3559:                         return;
 3560:                     }
 3561: 
 3562:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3563:                 }
 3564: 
 3565:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3566:                 return;
 3567:             }
 3568: 
 3569:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3570:                     .s_liste_variables_partagees).mutex)) != 0)
 3571:             {
 3572:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 3573:                 return;
 3574:             }
 3575:         }
 3576:         else
 3577:         {
 3578:             liberation(s_etat_processus,
 3579:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3580:                     .position_variable_courante].objet);
 3581: 
 3582:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3583:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3584:                     .position_variable_courante].objet)) == d_erreur)
 3585:             {
 3586:                 liberation(s_etat_processus, s_objet_1);
 3587: 
 3588:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3589:                 {
 3590:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3591:                     {
 3592:                         return;
 3593:                     }
 3594: 
 3595:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3596:                 }
 3597: 
 3598:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3599:                 return;
 3600:             }
 3601:         }
 3602:     }
 3603: 
 3604: /*
 3605: --------------------------------------------------------------------------------
 3606:   Arguments incompatibles avec la fonction SNEG
 3607: --------------------------------------------------------------------------------
 3608: */
 3609: 
 3610:     else
 3611:     {
 3612:         liberation(s_etat_processus, s_objet_1);
 3613: 
 3614:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3615:         {
 3616:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3617:             {
 3618:                 return;
 3619:             }
 3620: 
 3621:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3622:         }
 3623: 
 3624:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 3625:         return;
 3626:     }
 3627: 
 3628:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3629:     {
 3630:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3631:         {
 3632:             return;
 3633:         }
 3634: 
 3635:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3636:     }
 3637: 
 3638:     liberation(s_etat_processus, s_objet_1);
 3639: 
 3640:     return;
 3641: }
 3642: 
 3643: 
 3644: /*
 3645: ================================================================================
 3646:   Fonction 'sinv'
 3647: ================================================================================
 3648:   Entrées :
 3649: --------------------------------------------------------------------------------
 3650:   Sorties :
 3651: --------------------------------------------------------------------------------
 3652:   Effets de bord : néant
 3653: ================================================================================
 3654: */
 3655: 
 3656: void
 3657: instruction_sinv(struct_processus *s_etat_processus)
 3658: {
 3659:     logical1                        variable_partagee;
 3660: 
 3661:     struct_liste_chainee            *registre_pile_last;
 3662: 
 3663:     struct_objet                    *s_objet_1;
 3664:     struct_objet                    *s_objet_2;
 3665: 
 3666:     (*s_etat_processus).erreur_execution = d_ex;
 3667: 
 3668:     if ((*s_etat_processus).affichage_arguments == 'Y')
 3669:     {
 3670:         printf("\n  SINV ");
 3671: 
 3672:         if ((*s_etat_processus).langue == 'F')
 3673:         {
 3674:             printf("(modification d'une variable par inversion)\n\n");
 3675:         }
 3676:         else
 3677:         {
 3678:             printf("(store the inverse of the content in a variable)\n\n");
 3679:         }
 3680: 
 3681:         printf("    1: %s\n", d_NOM);
 3682: 
 3683:         return;
 3684:     }
 3685:     else if ((*s_etat_processus).test_instruction == 'Y')
 3686:     {
 3687:         (*s_etat_processus).nombre_arguments = -1;
 3688:         return;
 3689:     }
 3690:     
 3691:     registre_pile_last = NULL;
 3692: 
 3693:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3694:     {
 3695:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 3696:         {
 3697:             return;
 3698:         }
 3699: 
 3700:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 3701:         (*s_etat_processus).l_base_pile_last = NULL;
 3702:     }
 3703: 
 3704:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3705:             &s_objet_1) == d_erreur)
 3706:     {
 3707:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3708: 
 3709:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3710:         {
 3711:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3712:             {
 3713:                 return;
 3714:             }
 3715: 
 3716:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3717:         }
 3718: 
 3719:         return;
 3720:     }
 3721: 
 3722: /*
 3723: --------------------------------------------------------------------------------
 3724:   Un nom
 3725: --------------------------------------------------------------------------------
 3726: */
 3727: 
 3728:     if ((*s_objet_1).type == NOM)
 3729:     {
 3730:         variable_partagee = d_faux;
 3731: 
 3732:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 3733:                 (*s_objet_1).objet)).nom) == d_faux)
 3734:         {
 3735:             (*s_etat_processus).erreur_systeme = d_es;
 3736:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 3737: 
 3738:             liberation(s_etat_processus, s_objet_1);
 3739: 
 3740:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3741:             {
 3742:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3743:                 {
 3744:                     return;
 3745:                 }
 3746: 
 3747:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3748:             }
 3749: 
 3750:             return;
 3751:         }
 3752: 
 3753:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3754:                 .position_variable_courante].variable_verrouillee == d_vrai)
 3755:         {
 3756:             liberation(s_etat_processus, s_objet_1);
 3757: 
 3758:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3759:             {
 3760:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3761:                 {
 3762:                     return;
 3763:                 }
 3764: 
 3765:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3766:             }
 3767: 
 3768:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 3769:             return;
 3770:         }
 3771: 
 3772:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3773:                 .position_variable_courante].objet == NULL)
 3774:         {
 3775:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 3776:                     .s_liste_variables_partagees).mutex)) != 0)
 3777:             {
 3778:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 3779:                 return;
 3780:             }
 3781: 
 3782:             if (recherche_variable_partagee(s_etat_processus,
 3783:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3784:                     .position_variable_courante].nom, (*s_etat_processus)
 3785:                     .s_liste_variables[(*s_etat_processus)
 3786:                     .position_variable_courante].variable_partagee,
 3787:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3788:                     .position_variable_courante].origine) == d_faux)
 3789:             {
 3790:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3791:                         .s_liste_variables_partagees).mutex)) != 0)
 3792:                 {
 3793:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3794:                     return;
 3795:                 }
 3796: 
 3797:                 (*s_etat_processus).erreur_systeme = d_es;
 3798:                 (*s_etat_processus).erreur_execution =
 3799:                         d_ex_variable_non_definie;
 3800: 
 3801:                 liberation(s_etat_processus, s_objet_1);
 3802: 
 3803:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3804:                 {
 3805:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3806:                     {
 3807:                         return;
 3808:                     }
 3809: 
 3810:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3811:                 }
 3812: 
 3813:                 return;
 3814:             }
 3815: 
 3816:             variable_partagee = d_vrai;
 3817: 
 3818:             if ((s_objet_2 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 3819:                     .s_liste_variables_partagees).table
 3820:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 3821:                     .position_variable].objet, 'P')) == NULL)
 3822:             {
 3823:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3824:                         .s_liste_variables_partagees).mutex)) != 0)
 3825:                 {
 3826:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3827:                     return;
 3828:                 }
 3829: 
 3830:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3831: 
 3832:                 liberation(s_etat_processus, s_objet_1);
 3833: 
 3834:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3835:                 {
 3836:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3837:                     {
 3838:                         return;
 3839:                     }
 3840: 
 3841:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3842:                 }
 3843: 
 3844:                 return;
 3845:             }
 3846:         }
 3847:         else
 3848:         {
 3849:             if ((s_objet_2 = copie_objet(s_etat_processus,
 3850:                     (*s_etat_processus).s_liste_variables
 3851:                     [(*s_etat_processus).position_variable_courante].objet,
 3852:                     'P')) == NULL)
 3853:             {
 3854:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 3855: 
 3856:                 liberation(s_etat_processus, s_objet_1);
 3857: 
 3858:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3859:                 {
 3860:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3861:                     {
 3862:                         return;
 3863:                     }
 3864: 
 3865:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3866:                 }
 3867: 
 3868:                 return;
 3869:             }
 3870:         }
 3871: 
 3872:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3873:                 s_objet_2) == d_erreur)
 3874:         {
 3875:             if (variable_partagee == d_vrai)
 3876:             {
 3877:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3878:                         .s_liste_variables_partagees).mutex)) != 0)
 3879:                 {
 3880:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3881:                     return;
 3882:                 }
 3883:             }
 3884: 
 3885:             return;
 3886:         }
 3887: 
 3888:         instruction_inv(s_etat_processus);
 3889:         /* s_objet_2 est libéré par cet appel... */
 3890: 
 3891:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 3892:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 3893:                 ((*s_etat_processus).exception != d_ep))
 3894:         {
 3895:             if (variable_partagee == d_vrai)
 3896:             {
 3897:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3898:                         .s_liste_variables_partagees).mutex)) != 0)
 3899:                 {
 3900:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3901:                     return;
 3902:                 }
 3903:             }
 3904: 
 3905:             liberation(s_etat_processus, s_objet_1);
 3906:             liberation(s_etat_processus, s_objet_2);
 3907: 
 3908:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3909:             {
 3910:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3911:                 {
 3912:                     return;
 3913:                 }
 3914: 
 3915:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3916:             }
 3917: 
 3918:             return;
 3919:         }
 3920: 
 3921:         if (variable_partagee == d_vrai)
 3922:         {
 3923:             liberation(s_etat_processus,
 3924:                     (*(*s_etat_processus).s_liste_variables_partagees)
 3925:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 3926:                     .position_variable].objet);
 3927: 
 3928:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3929:                     (struct_objet **) &((*(*s_etat_processus)
 3930:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 3931:                     .s_liste_variables_partagees).position_variable].objet))
 3932:                     == d_erreur)
 3933:             {
 3934:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3935:                         .s_liste_variables_partagees).mutex)) != 0)
 3936:                 {
 3937:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 3938:                     return;
 3939:                 }
 3940: 
 3941:                 liberation(s_etat_processus, s_objet_1);
 3942: 
 3943:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3944:                 {
 3945:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3946:                     {
 3947:                         return;
 3948:                     }
 3949: 
 3950:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3951:                 }
 3952: 
 3953:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3954:                 return;
 3955:             }
 3956: 
 3957:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 3958:                     .s_liste_variables_partagees).mutex)) != 0)
 3959:             {
 3960:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 3961:                 return;
 3962:             }
 3963:         }
 3964:         else
 3965:         {
 3966:             liberation(s_etat_processus,
 3967:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3968:                     .position_variable_courante].objet);
 3969: 
 3970:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 3971:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 3972:                     .position_variable_courante].objet)) == d_erreur)
 3973:             {
 3974:                 liberation(s_etat_processus, s_objet_1);
 3975: 
 3976:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 3977:                 {
 3978:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 3979:                     {
 3980:                         return;
 3981:                     }
 3982: 
 3983:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 3984:                 }
 3985: 
 3986:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 3987:                 return;
 3988:             }
 3989:         }
 3990:     }
 3991: 
 3992: /*
 3993: --------------------------------------------------------------------------------
 3994:   Arguments incompatibles avec la fonction SINV
 3995: --------------------------------------------------------------------------------
 3996: */
 3997: 
 3998:     else
 3999:     {
 4000:         liberation(s_etat_processus, s_objet_1);
 4001: 
 4002:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4003:         {
 4004:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4005:             {
 4006:                 return;
 4007:             }
 4008: 
 4009:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4010:         }
 4011: 
 4012:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 4013:         return;
 4014:     }
 4015: 
 4016:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4017:     {
 4018:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4019:         {
 4020:             return;
 4021:         }
 4022: 
 4023:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4024:     }
 4025: 
 4026:     liberation(s_etat_processus, s_objet_1);
 4027: 
 4028:     return;
 4029: }
 4030: 
 4031: 
 4032: /*
 4033: ================================================================================
 4034:   Fonction 'sconj'
 4035: ================================================================================
 4036:   Entrées :
 4037: --------------------------------------------------------------------------------
 4038:   Sorties :
 4039: --------------------------------------------------------------------------------
 4040:   Effets de bord : néant
 4041: ================================================================================
 4042: */
 4043: 
 4044: void
 4045: instruction_sconj(struct_processus *s_etat_processus)
 4046: {
 4047:     logical1                        variable_partagee;
 4048: 
 4049:     struct_liste_chainee            *registre_pile_last;
 4050: 
 4051:     struct_objet                    *s_objet_1;
 4052:     struct_objet                    *s_objet_2;
 4053: 
 4054:     (*s_etat_processus).erreur_execution = d_ex;
 4055: 
 4056:     if ((*s_etat_processus).affichage_arguments == 'Y')
 4057:     {
 4058:         printf("\n  SCONJ ");
 4059: 
 4060:         if ((*s_etat_processus).langue == 'F')
 4061:         {
 4062:             printf("(modification d'une variable par conjugaison)\n\n");
 4063:         }
 4064:         else
 4065:         {
 4066:             printf("(store the conjugate of the content in a variable)\n\n");
 4067:         }
 4068: 
 4069:         printf("    1: %s\n", d_NOM);
 4070: 
 4071:         return;
 4072:     }
 4073:     else if ((*s_etat_processus).test_instruction == 'Y')
 4074:     {
 4075:         (*s_etat_processus).nombre_arguments = -1;
 4076:         return;
 4077:     }
 4078:     
 4079:     registre_pile_last = NULL;
 4080: 
 4081:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4082:     {
 4083:         if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
 4084:         {
 4085:             return;
 4086:         }
 4087: 
 4088:         registre_pile_last = (*s_etat_processus).l_base_pile_last;
 4089:         (*s_etat_processus).l_base_pile_last = NULL;
 4090:     }
 4091: 
 4092:     if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 4093:             &s_objet_1) == d_erreur)
 4094:     {
 4095:         (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 4096: 
 4097:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4098:         {
 4099:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4100:             {
 4101:                 return;
 4102:             }
 4103: 
 4104:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4105:         }
 4106: 
 4107:         return;
 4108:     }
 4109: 
 4110: /*
 4111: --------------------------------------------------------------------------------
 4112:   Un nom
 4113: --------------------------------------------------------------------------------
 4114: */
 4115: 
 4116:     if ((*s_objet_1).type == NOM)
 4117:     {
 4118:         variable_partagee = d_faux;
 4119: 
 4120:         if (recherche_variable(s_etat_processus, (*((struct_nom *)
 4121:                 (*s_objet_1).objet)).nom) == d_faux)
 4122:         {
 4123:             (*s_etat_processus).erreur_systeme = d_es;
 4124:             (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
 4125: 
 4126:             liberation(s_etat_processus, s_objet_1);
 4127: 
 4128:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4129:             {
 4130:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4131:                 {
 4132:                     return;
 4133:                 }
 4134: 
 4135:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4136:             }
 4137: 
 4138:             return;
 4139:         }
 4140: 
 4141:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4142:                 .position_variable_courante].variable_verrouillee == d_vrai)
 4143:         {
 4144:             liberation(s_etat_processus, s_objet_1);
 4145: 
 4146:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4147:             {
 4148:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4149:                 {
 4150:                     return;
 4151:                 }
 4152: 
 4153:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4154:             }
 4155: 
 4156:             (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
 4157:             return;
 4158:         }
 4159: 
 4160:         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4161:                 .position_variable_courante].objet == NULL)
 4162:         {
 4163:             if (pthread_mutex_lock(&((*(*s_etat_processus)
 4164:                     .s_liste_variables_partagees).mutex)) != 0)
 4165:             {
 4166:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 4167:                 return;
 4168:             }
 4169: 
 4170:             if (recherche_variable_partagee(s_etat_processus,
 4171:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4172:                     .position_variable_courante].nom, (*s_etat_processus)
 4173:                     .s_liste_variables[(*s_etat_processus)
 4174:                     .position_variable_courante].variable_partagee,
 4175:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4176:                     .position_variable_courante].origine) == d_faux)
 4177:             {
 4178:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4179:                         .s_liste_variables_partagees).mutex)) != 0)
 4180:                 {
 4181:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 4182:                     return;
 4183:                 }
 4184: 
 4185:                 (*s_etat_processus).erreur_systeme = d_es;
 4186:                 (*s_etat_processus).erreur_execution =
 4187:                         d_ex_variable_non_definie;
 4188: 
 4189:                 liberation(s_etat_processus, s_objet_1);
 4190: 
 4191:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4192:                 {
 4193:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4194:                     {
 4195:                         return;
 4196:                     }
 4197: 
 4198:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4199:                 }
 4200: 
 4201:                 return;
 4202:             }
 4203: 
 4204:             variable_partagee = d_vrai;
 4205: 
 4206:             if ((s_objet_2 = copie_objet(s_etat_processus, (*(*s_etat_processus)
 4207:                     .s_liste_variables_partagees).table
 4208:                     [(*(*s_etat_processus).s_liste_variables_partagees)
 4209:                     .position_variable].objet, 'P')) == NULL)
 4210:             {
 4211:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4212:                         .s_liste_variables_partagees).mutex)) != 0)
 4213:                 {
 4214:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 4215:                     return;
 4216:                 }
 4217: 
 4218:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4219: 
 4220:                 liberation(s_etat_processus, s_objet_1);
 4221: 
 4222:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4223:                 {
 4224:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4225:                     {
 4226:                         return;
 4227:                     }
 4228: 
 4229:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4230:                 }
 4231: 
 4232:                 return;
 4233:             }
 4234:         }
 4235:         else
 4236:         {
 4237:             if ((s_objet_2 = copie_objet(s_etat_processus,
 4238:                     (*s_etat_processus).s_liste_variables
 4239:                     [(*s_etat_processus).position_variable_courante].objet,
 4240:                     'P')) == NULL)
 4241:             {
 4242:                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
 4243: 
 4244:                 liberation(s_etat_processus, s_objet_1);
 4245: 
 4246:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4247:                 {
 4248:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4249:                     {
 4250:                         return;
 4251:                     }
 4252: 
 4253:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4254:                 }
 4255: 
 4256:                 return;
 4257:             }
 4258:         }
 4259: 
 4260:         if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 4261:                 s_objet_2) == d_erreur)
 4262:         {
 4263:             if (variable_partagee == d_vrai)
 4264:             {
 4265:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4266:                         .s_liste_variables_partagees).mutex)) != 0)
 4267:                 {
 4268:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 4269:                     return;
 4270:                 }
 4271:             }
 4272: 
 4273:             return;
 4274:         }
 4275: 
 4276:         instruction_conj(s_etat_processus);
 4277:         /* s_objet_2 est libéré par cet appel... */
 4278: 
 4279:         if (((*s_etat_processus).erreur_systeme != d_es) ||
 4280:                 ((*s_etat_processus).erreur_execution != d_ex) ||
 4281:                 ((*s_etat_processus).exception != d_ep))
 4282:         {
 4283:             if (variable_partagee == d_vrai)
 4284:             {
 4285:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4286:                         .s_liste_variables_partagees).mutex)) != 0)
 4287:                 {
 4288:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 4289:                     return;
 4290:                 }
 4291:             }
 4292: 
 4293:             liberation(s_etat_processus, s_objet_1);
 4294:             liberation(s_etat_processus, s_objet_2);
 4295: 
 4296:             if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4297:             {
 4298:                 if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4299:                 {
 4300:                     return;
 4301:                 }
 4302: 
 4303:                 (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4304:             }
 4305: 
 4306:             return;
 4307:         }
 4308: 
 4309:         if (variable_partagee == d_vrai)
 4310:         {
 4311:             liberation(s_etat_processus,
 4312:                     (*(*s_etat_processus).s_liste_variables_partagees)
 4313:                     .table[(*(*s_etat_processus).s_liste_variables_partagees)
 4314:                     .position_variable].objet);
 4315: 
 4316:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 4317:                     (struct_objet **) &((*(*s_etat_processus)
 4318:                     .s_liste_variables_partagees).table[(*(*s_etat_processus)
 4319:                     .s_liste_variables_partagees).position_variable].objet))
 4320:                     == d_erreur)
 4321:             {
 4322:                 if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4323:                         .s_liste_variables_partagees).mutex)) != 0)
 4324:                 {
 4325:                     (*s_etat_processus).erreur_systeme = d_es_processus;
 4326:                     return;
 4327:                 }
 4328: 
 4329:                 liberation(s_etat_processus, s_objet_1);
 4330: 
 4331:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4332:                 {
 4333:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4334:                     {
 4335:                         return;
 4336:                     }
 4337: 
 4338:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4339:                 }
 4340: 
 4341:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 4342:                 return;
 4343:             }
 4344: 
 4345:             if (pthread_mutex_unlock(&((*(*s_etat_processus)
 4346:                     .s_liste_variables_partagees).mutex)) != 0)
 4347:             {
 4348:                 (*s_etat_processus).erreur_systeme = d_es_processus;
 4349:                 return;
 4350:             }
 4351:         }
 4352:         else
 4353:         {
 4354:             liberation(s_etat_processus,
 4355:                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4356:                     .position_variable_courante].objet);
 4357: 
 4358:             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
 4359:                     &((*s_etat_processus).s_liste_variables[(*s_etat_processus)
 4360:                     .position_variable_courante].objet)) == d_erreur)
 4361:             {
 4362:                 liberation(s_etat_processus, s_objet_1);
 4363: 
 4364:                 if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4365:                 {
 4366:                     if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4367:                     {
 4368:                         return;
 4369:                     }
 4370: 
 4371:                     (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4372:                 }
 4373: 
 4374:                 (*s_etat_processus).erreur_execution = d_ex_manque_argument;
 4375:                 return;
 4376:             }
 4377:         }
 4378:     }
 4379: 
 4380: /*
 4381: --------------------------------------------------------------------------------
 4382:   Arguments incompatibles avec la fonction SCONJ
 4383: --------------------------------------------------------------------------------
 4384: */
 4385: 
 4386:     else
 4387:     {
 4388:         liberation(s_etat_processus, s_objet_1);
 4389: 
 4390:         if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4391:         {
 4392:             if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4393:             {
 4394:                 return;
 4395:             }
 4396: 
 4397:             (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4398:         }
 4399: 
 4400:         (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
 4401:         return;
 4402:     }
 4403: 
 4404:     if (test_cfsf(s_etat_processus, 31) == d_vrai)
 4405:     {
 4406:         if (empilement_pile_last(s_etat_processus, 0) == d_erreur)
 4407:         {
 4408:             return;
 4409:         }
 4410: 
 4411:         (*s_etat_processus).l_base_pile_last = registre_pile_last;
 4412:     }
 4413: 
 4414:     liberation(s_etat_processus, s_objet_1);
 4415: 
 4416:     return;
 4417: }
 4418: 
 4419: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>