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