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