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