File:  [local] / rpl / src / instructions_s3.c
Revision 1.69: download - view: text, annotated - select for diffs - revision graph
Fri Jan 10 11:15:48 2020 UTC (4 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_32, HEAD
Modification du copyright.

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

CVSweb interface <joel.bertrand@systella.fr>