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