1: /*
2: ================================================================================
3: RPL/2 (R) version 4.1.13
4: Copyright (C) 1989-2013 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 '-'
29: ================================================================================
30: Entrées : structure processus
31: --------------------------------------------------------------------------------
32: Sorties :
33: --------------------------------------------------------------------------------
34: Effets de bord : néant
35: ================================================================================
36: */
37:
38: void
39: instruction_moins(struct_processus *s_etat_processus)
40: {
41: integer8 tampon;
42:
43: logical1 depassement;
44: logical1 drapeau;
45: logical1 drapeau_neg;
46:
47: struct_liste_chainee *l_element_courant;
48: struct_liste_chainee *l_element_precedent;
49:
50: struct_objet *s_copie_argument_1;
51: struct_objet *s_copie_argument_2;
52: struct_objet *s_objet_argument_1;
53: struct_objet *s_objet_argument_2;
54: struct_objet *s_objet_resultat;
55:
56: unsigned long i;
57: unsigned long j;
58: unsigned long nombre_elements;
59:
60: (*s_etat_processus).erreur_execution = d_ex;
61:
62: if ((*s_etat_processus).affichage_arguments == 'Y')
63: {
64: printf("\n - ");
65:
66: if ((*s_etat_processus).langue == 'F')
67: {
68: printf("(soustraction)\n\n");
69: }
70: else
71: {
72: printf("(substraction)\n\n");
73: }
74:
75: printf(" 2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
76: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
77: printf("-> 1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
78:
79: printf(" 2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
80: printf(" 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
81: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
82:
83: printf(" 2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
84: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
85: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
86:
87: printf(" 2: %s, %s\n", d_BIN, d_INT);
88: printf(" 1: %s, %s\n", d_BIN, d_INT);
89: printf("-> 1: %s\n\n", d_BIN);
90:
91: printf(" 2: %s, %s, %s, %s, %s, %s\n",
92: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
93: printf(" 1: %s, %s, %s, %s, %s, %s\n",
94: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
95: printf("-> 1: %s, %s\n", d_ALG, d_RPN);
96:
97: return;
98: }
99: else if ((*s_etat_processus).test_instruction == 'Y')
100: {
101: (*s_etat_processus).nombre_arguments = 0;
102: return;
103: }
104:
105: if (test_cfsf(s_etat_processus, 31) == d_vrai)
106: {
107: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
108: {
109: return;
110: }
111: }
112:
113: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
114: &s_objet_argument_1) == d_erreur)
115: {
116: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
117: return;
118: }
119:
120: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
121: &s_objet_argument_2) == d_erreur)
122: {
123: liberation(s_etat_processus, s_objet_argument_1);
124:
125: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
126: return;
127: }
128:
129: /*
130: --------------------------------------------------------------------------------
131: Soustraction de deux entiers
132: --------------------------------------------------------------------------------
133: */
134:
135: if (((*s_objet_argument_1).type == INT) &&
136: ((*s_objet_argument_2).type == INT))
137: {
138: if (depassement_soustraction((integer8 *) (*s_objet_argument_2).objet,
139: (integer8 *) (*s_objet_argument_1).objet, &tampon) ==
140: d_absence_erreur)
141: {
142: if ((s_objet_resultat = allocation(s_etat_processus, INT))
143: == NULL)
144: {
145: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
146: return;
147: }
148:
149: (*((integer8 *) (*s_objet_resultat).objet)) = tampon;
150: }
151: else
152: {
153: if ((s_objet_resultat = allocation(s_etat_processus, REL))
154: == NULL)
155: {
156: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
157: return;
158: }
159:
160: (*((real8 *) (*s_objet_resultat).objet)) = ((real8)
161: (*((integer8 *) (*s_objet_argument_2).objet)))
162: - ((real8) (*((integer8 *) (*s_objet_argument_1).objet)));
163: }
164: }
165:
166: /*
167: --------------------------------------------------------------------------------
168: Soustraction d'un entier et d'un réel
169: --------------------------------------------------------------------------------
170: */
171:
172: else if ((((*s_objet_argument_1).type == INT) &&
173: ((*s_objet_argument_2).type == REL)) ||
174: (((*s_objet_argument_1).type == REL) &&
175: ((*s_objet_argument_2).type == INT)))
176: {
177: if ((s_objet_resultat = allocation(s_etat_processus, REL))
178: == NULL)
179: {
180: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
181: return;
182: }
183:
184: if ((*s_objet_argument_1).type == INT)
185: {
186: (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
187: (*s_objet_argument_2).objet)) - (*((integer8 *)
188: (*s_objet_argument_1).objet));
189: }
190: else
191: {
192: (*((real8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
193: (*s_objet_argument_2).objet)) - (*((real8 *)
194: (*s_objet_argument_1).objet));
195: }
196: }
197:
198: /*
199: --------------------------------------------------------------------------------
200: Soustraction d'un entier et d'un complexe
201: --------------------------------------------------------------------------------
202: */
203:
204: else if ((((*s_objet_argument_1).type == INT) &&
205: ((*s_objet_argument_2).type == CPL)) ||
206: (((*s_objet_argument_1).type == CPL) &&
207: ((*s_objet_argument_2).type == INT)))
208: {
209: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
210: == NULL)
211: {
212: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
213: return;
214: }
215:
216: if ((*s_objet_argument_1).type == INT)
217: {
218: f77soustractionci_((struct_complexe16 *) (*s_objet_argument_2)
219: .objet, (integer8 *) (*s_objet_argument_1).objet,
220: (struct_complexe16 *) (*s_objet_resultat).objet);
221: }
222: else
223: {
224: f77soustractionic_((integer8 *) (*s_objet_argument_2).objet,
225: (struct_complexe16 *) (*s_objet_argument_1).objet,
226: (struct_complexe16 *) (*s_objet_resultat).objet);
227: }
228: }
229:
230: /*
231: --------------------------------------------------------------------------------
232: Soustraction de deux réels
233: --------------------------------------------------------------------------------
234: */
235:
236: else if (((*s_objet_argument_1).type == REL) &&
237: ((*s_objet_argument_2).type == REL))
238: {
239: if ((s_objet_resultat = allocation(s_etat_processus, REL))
240: == NULL)
241: {
242: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
243: return;
244: }
245:
246: (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
247: (*s_objet_argument_2).objet)) - (*((real8 *)
248: (*s_objet_argument_1).objet));
249: }
250:
251: /*
252: --------------------------------------------------------------------------------
253: Soustraction d'un réel et d'un complexe
254: --------------------------------------------------------------------------------
255: */
256:
257: else if ((((*s_objet_argument_1).type == REL) &&
258: ((*s_objet_argument_2).type == CPL)) ||
259: (((*s_objet_argument_1).type == CPL) &&
260: ((*s_objet_argument_2).type == REL)))
261: {
262: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
263: == NULL)
264: {
265: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
266: return;
267: }
268:
269: if ((*s_objet_argument_1).type == REL)
270: {
271: f77soustractioncr_((struct_complexe16 *)
272: (*s_objet_argument_2).objet,
273: (real8 *) (*s_objet_argument_1).objet,
274: (struct_complexe16 *) (*s_objet_resultat).objet);
275: }
276: else
277: {
278: f77soustractionrc_((real8 *) (*s_objet_argument_2).objet,
279: (struct_complexe16 *) (*s_objet_argument_1).objet,
280: (struct_complexe16 *) (*s_objet_resultat).objet);
281: }
282: }
283:
284: /*
285: --------------------------------------------------------------------------------
286: Soustraction de deux complexes
287: --------------------------------------------------------------------------------
288: */
289:
290: else if (((*s_objet_argument_1).type == CPL) &&
291: ((*s_objet_argument_2).type == CPL))
292: {
293: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
294: == NULL)
295: {
296: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
297: return;
298: }
299:
300: f77soustractioncc_((struct_complexe16 *) (*s_objet_argument_2).objet,
301: (struct_complexe16 *) (*s_objet_argument_1).objet,
302: (struct_complexe16 *) (*s_objet_resultat).objet);
303: }
304:
305: /*
306: --------------------------------------------------------------------------------
307: Soustraction de deux vecteurs
308: --------------------------------------------------------------------------------
309: */
310: /*
311: * Entier / Entier
312: */
313:
314: else if (((*s_objet_argument_1).type == VIN) &&
315: ((*s_objet_argument_2).type == VIN))
316: {
317: if ((s_objet_resultat = allocation(s_etat_processus, VIN))
318: == NULL)
319: {
320: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
321: return;
322: }
323:
324: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
325: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
326: {
327: liberation(s_etat_processus, s_objet_argument_1);
328: liberation(s_etat_processus, s_objet_argument_2);
329: liberation(s_etat_processus, s_objet_resultat);
330:
331: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
332: return;
333: }
334:
335: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
336: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
337:
338: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
339: malloc((*(((struct_vecteur *) (*s_objet_resultat)
340: .objet))).taille * sizeof(integer8))) == NULL)
341: {
342: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
343: return;
344: }
345:
346: depassement = d_faux;
347:
348: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
349: .objet))).taille; i++)
350: {
351: if (depassement_soustraction(&(((integer8 *) (*((struct_vecteur *)
352: (*s_objet_argument_2).objet)).tableau)[i]),
353: &(((integer8 *) (*((struct_vecteur *) (*s_objet_argument_1)
354: .objet)).tableau)[i]),
355: &(((integer8 *) (*((struct_vecteur *)
356: (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
357: {
358: depassement = d_vrai;
359: }
360: }
361:
362: if (depassement == d_vrai)
363: {
364: free((*((struct_vecteur *) (*s_objet_argument_1).objet)).tableau);
365:
366: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
367: malloc((*(((struct_vecteur *) (*s_objet_resultat)
368: .objet))).taille * sizeof(real8))) == NULL)
369: {
370: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
371: return;
372: }
373:
374: (*s_objet_resultat).type = VRL;
375: (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
376:
377: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
378: .objet))).taille; i++)
379: {
380: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
381: .tableau)[i] = (real8) (((integer8 *)
382: (*((struct_vecteur *) (*s_objet_argument_2).objet))
383: .tableau)[i]) - (real8) (((integer8 *)
384: (*((struct_vecteur *) (*s_objet_argument_1)
385: .objet)).tableau)[i]);
386: }
387: }
388: }
389:
390: /*
391: * Entier / Réel
392: */
393:
394: else if ((((*s_objet_argument_1).type == VIN) &&
395: ((*s_objet_argument_2).type == VRL)) ||
396: (((*s_objet_argument_1).type == VRL) &&
397: ((*s_objet_argument_2).type == VIN)))
398: {
399: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
400: == NULL)
401: {
402: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
403: return;
404: }
405:
406: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
407: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
408: {
409: liberation(s_etat_processus, s_objet_argument_1);
410: liberation(s_etat_processus, s_objet_argument_2);
411: liberation(s_etat_processus, s_objet_resultat);
412:
413: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
414: return;
415: }
416:
417: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
418: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
419:
420: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
421: malloc((*(((struct_vecteur *) (*s_objet_resultat)
422: .objet))).taille * sizeof(real8))) == NULL)
423: {
424: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
425: return;
426: }
427:
428: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
429: .objet))).taille; i++)
430: {
431: if ((*s_objet_argument_1).type == VIN)
432: {
433: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
434: .tableau)[i] = ((real8 *) (*((struct_vecteur *)
435: (*s_objet_argument_2).objet)).tableau)[i]
436: - ((integer8 *) (*((struct_vecteur *)
437: (*s_objet_argument_1).objet)).tableau)[i];
438: }
439: else
440: {
441: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
442: .tableau)[i] = ((integer8 *) (*((struct_vecteur *)
443: (*s_objet_argument_2).objet)).tableau)[i]
444: - ((real8 *) (*((struct_vecteur *)
445: (*s_objet_argument_1).objet)).tableau)[i];
446: }
447: }
448: }
449:
450: /*
451: * Réel / Réel
452: */
453:
454: else if (((*s_objet_argument_1).type == VRL) &&
455: ((*s_objet_argument_2).type == VRL))
456: {
457: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
458: == NULL)
459: {
460: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
461: return;
462: }
463:
464: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
465: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
466: {
467: liberation(s_etat_processus, s_objet_argument_1);
468: liberation(s_etat_processus, s_objet_argument_2);
469: liberation(s_etat_processus, s_objet_resultat);
470:
471: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
472: return;
473: }
474:
475: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
476: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
477:
478: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
479: malloc((*(((struct_vecteur *) (*s_objet_resultat)
480: .objet))).taille * sizeof(real8))) == NULL)
481: {
482: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
483: return;
484: }
485:
486: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
487: .objet))).taille; i++)
488: {
489: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
490: .tableau)[i] = ((real8 *) (*((struct_vecteur *)
491: (*s_objet_argument_2).objet)).tableau)[i] -
492: ((real8 *) (*((struct_vecteur *) (*s_objet_argument_1)
493: .objet)).tableau)[i];
494: }
495: }
496:
497: /*
498: * Entier / Complexe
499: */
500:
501: else if ((((*s_objet_argument_1).type == VIN) &&
502: ((*s_objet_argument_2).type == VCX)) ||
503: (((*s_objet_argument_1).type == VCX) &&
504: ((*s_objet_argument_2).type == VIN)))
505: {
506: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
507: == NULL)
508: {
509: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
510: return;
511: }
512:
513: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
514: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
515: {
516: liberation(s_etat_processus, s_objet_argument_1);
517: liberation(s_etat_processus, s_objet_argument_2);
518: liberation(s_etat_processus, s_objet_resultat);
519:
520: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
521: return;
522: }
523:
524: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
525: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
526:
527: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
528: malloc((*(((struct_vecteur *) (*s_objet_resultat)
529: .objet))).taille * sizeof(struct_complexe16))) == NULL)
530: {
531: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
532: return;
533: }
534:
535: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
536: .objet))).taille; i++)
537: {
538: if ((*s_objet_argument_1).type == VIN)
539: {
540: f77soustractionci_(&(((struct_complexe16 *)
541: (*((struct_vecteur *)
542: (*s_objet_argument_2).objet)).tableau)[i]),
543: &(((integer8 *) (*((struct_vecteur *)
544: (*s_objet_argument_1).objet)).tableau)[i]),
545: &(((struct_complexe16 *) (*((struct_vecteur *)
546: (*s_objet_resultat).objet)).tableau)[i]));
547: }
548: else
549: {
550: f77soustractionic_(&(((integer8 *) (*((struct_vecteur *)
551: (*s_objet_argument_2).objet)).tableau)[i]),
552: &(((struct_complexe16 *) (*((struct_vecteur *)
553: (*s_objet_argument_1).objet)).tableau)[i]),
554: &(((struct_complexe16 *) (*((struct_vecteur *)
555: (*s_objet_resultat).objet)).tableau)[i]));
556: }
557: }
558: }
559:
560: /*
561: * Réel / Complexe
562: */
563:
564: else if ((((*s_objet_argument_1).type == VRL) &&
565: ((*s_objet_argument_2).type == VCX)) ||
566: (((*s_objet_argument_1).type == VCX) &&
567: ((*s_objet_argument_2).type == VRL)))
568: {
569: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
570: == NULL)
571: {
572: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
573: return;
574: }
575:
576: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
577: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
578: {
579: liberation(s_etat_processus, s_objet_argument_1);
580: liberation(s_etat_processus, s_objet_argument_2);
581: liberation(s_etat_processus, s_objet_resultat);
582:
583: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
584: return;
585: }
586:
587: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
588: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
589:
590: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
591: malloc((*(((struct_vecteur *) (*s_objet_resultat)
592: .objet))).taille * sizeof(struct_complexe16))) == NULL)
593: {
594: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
595: return;
596: }
597:
598: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
599: .objet))).taille; i++)
600: {
601: if ((*s_objet_argument_1).type == VRL)
602: {
603: f77soustractioncr_(&(((struct_complexe16 *)
604: (*((struct_vecteur *)
605: (*s_objet_argument_2).objet)).tableau)[i]),
606: &(((real8 *) (*((struct_vecteur *)
607: (*s_objet_argument_1).objet)).tableau)[i]),
608: &(((struct_complexe16 *) (*((struct_vecteur *)
609: (*s_objet_resultat).objet)).tableau)[i]));
610: }
611: else
612: {
613: f77soustractionrc_(&(((real8 *) (*((struct_vecteur *)
614: (*s_objet_argument_2).objet)).tableau)[i]),
615: &(((struct_complexe16 *) (*((struct_vecteur *)
616: (*s_objet_argument_1).objet)).tableau)[i]),
617: &(((struct_complexe16 *) (*((struct_vecteur *)
618: (*s_objet_resultat).objet)).tableau)[i]));
619: }
620: }
621: }
622:
623: /*
624: * Complexe / Complexe
625: */
626:
627: else if (((*s_objet_argument_1).type == VCX) &&
628: ((*s_objet_argument_2).type == VCX))
629: {
630: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
631: == NULL)
632: {
633: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
634: return;
635: }
636:
637: if ((*(((struct_vecteur *) (*s_objet_argument_1).objet))).taille !=
638: (*(((struct_vecteur *) (*s_objet_argument_2).objet))).taille)
639: {
640: liberation(s_etat_processus, s_objet_argument_1);
641: liberation(s_etat_processus, s_objet_argument_2);
642: liberation(s_etat_processus, s_objet_resultat);
643:
644: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
645: return;
646: }
647:
648: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
649: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
650:
651: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
652: malloc((*(((struct_vecteur *) (*s_objet_resultat)
653: .objet))).taille * sizeof(struct_complexe16))) == NULL)
654: {
655: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
656: return;
657: }
658:
659: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
660: .objet))).taille; i++)
661: {
662: f77soustractioncc_(&(((struct_complexe16 *) (*((struct_vecteur *)
663: (*s_objet_argument_2).objet)).tableau)[i]),
664: &(((struct_complexe16 *) (*((struct_vecteur *)
665: (*s_objet_argument_1).objet)).tableau)[i]),
666: &(((struct_complexe16 *) (*((struct_vecteur *)
667: (*s_objet_resultat).objet)).tableau)[i]));
668: }
669: }
670:
671: /*
672: --------------------------------------------------------------------------------
673: Soustraction de deux matrices
674: --------------------------------------------------------------------------------
675: */
676: /*
677: * Entier / Entier
678: */
679:
680: else if (((*s_objet_argument_1).type == MIN) &&
681: ((*s_objet_argument_2).type == MIN))
682: {
683: if ((s_objet_resultat = allocation(s_etat_processus, MIN))
684: == NULL)
685: {
686: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
687: return;
688: }
689:
690: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
691: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
692: .objet))).nombre_lignes) || ((*(((struct_matrice *)
693: (*s_objet_argument_1).objet))).nombre_colonnes !=
694: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
695: .nombre_colonnes))
696: {
697: liberation(s_etat_processus, s_objet_argument_1);
698: liberation(s_etat_processus, s_objet_argument_2);
699: liberation(s_etat_processus, s_objet_resultat);
700:
701: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
702: return;
703: }
704:
705: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
706: (*((struct_matrice *) (*s_objet_argument_1).objet))
707: .nombre_lignes;
708: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
709: (*((struct_matrice *) (*s_objet_argument_1).objet))
710: .nombre_colonnes;
711:
712: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
713: malloc((*(((struct_matrice *) (*s_objet_resultat)
714: .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
715: {
716: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
717: return;
718: }
719:
720: depassement = d_faux;
721:
722: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
723: .objet))).nombre_lignes; i++)
724: {
725: if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
726: .objet)).tableau)[i] = malloc((*((
727: (struct_matrice *) (*s_objet_resultat).objet)))
728: .nombre_colonnes * sizeof(integer8))) == NULL)
729: {
730: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
731: return;
732: }
733:
734: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
735: .nombre_colonnes; j++)
736: {
737: if (depassement_soustraction(&(((integer8 **)
738: (*((struct_matrice *) (*s_objet_argument_2).objet))
739: .tableau)[i][j]), &(((integer8 **) (*((struct_matrice *)
740: (*s_objet_argument_1).objet)).tableau)[i][j]),
741: &(((integer8 **) (*((struct_matrice *)
742: (*s_objet_resultat).objet)).tableau)[i][j]))
743: == d_erreur)
744: {
745: depassement = d_vrai;
746: }
747: }
748: }
749:
750: if (depassement == d_vrai)
751: {
752: (*s_objet_resultat).type = MRL;
753: (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
754:
755: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
756: .objet))).nombre_lignes; i++)
757: {
758: free(((integer8 **) (*((struct_matrice *)
759: (*s_objet_resultat).objet)).tableau)[i]);
760:
761: if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
762: .objet)).tableau)[i] = malloc((*((
763: (struct_matrice *) (*s_objet_resultat).objet)))
764: .nombre_colonnes * sizeof(real8))) == NULL)
765: {
766: (*s_etat_processus).erreur_systeme =
767: d_es_allocation_memoire;
768: return;
769: }
770:
771: for(j = 0; j < (*(((struct_matrice *)
772: (*s_objet_resultat).objet))).nombre_colonnes; j++)
773: {
774: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
775: .objet)).tableau)[i][j] = ((real8) ((integer8 **)
776: (*((struct_matrice *) (*s_objet_argument_2).objet))
777: .tableau)[i][j]) - ((real8) ((integer8 **)
778: (*((struct_matrice *) (*s_objet_argument_1).objet))
779: .tableau)[i][j]);
780: }
781: }
782: }
783: }
784:
785: /*
786: * Entier / Réel
787: */
788:
789: else if ((((*s_objet_argument_1).type == MIN) &&
790: ((*s_objet_argument_2).type == MRL)) ||
791: (((*s_objet_argument_1).type == MRL) &&
792: ((*s_objet_argument_2).type == MIN)))
793: {
794: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
795: == NULL)
796: {
797: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
798: return;
799: }
800:
801: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
802: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
803: .objet))).nombre_lignes) || ((*(((struct_matrice *)
804: (*s_objet_argument_1).objet))).nombre_colonnes !=
805: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
806: .nombre_colonnes))
807: {
808: liberation(s_etat_processus, s_objet_argument_1);
809: liberation(s_etat_processus, s_objet_argument_2);
810: liberation(s_etat_processus, s_objet_resultat);
811:
812: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
813: return;
814: }
815:
816: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
817: (*((struct_matrice *) (*s_objet_argument_1).objet))
818: .nombre_lignes;
819: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
820: (*((struct_matrice *) (*s_objet_argument_1).objet))
821: .nombre_colonnes;
822:
823: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
824: malloc((*(((struct_matrice *) (*s_objet_resultat)
825: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
826: {
827: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
828: return;
829: }
830:
831: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
832: .objet))).nombre_lignes; i++)
833: {
834: if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
835: .objet)).tableau)[i] = malloc((*((
836: (struct_matrice *) (*s_objet_resultat).objet)))
837: .nombre_colonnes * sizeof(real8))) == NULL)
838: {
839: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
840: return;
841: }
842:
843: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
844: .nombre_colonnes; j++)
845: {
846: if ((*s_objet_argument_1).type == MIN)
847: {
848: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
849: .objet)).tableau)[i][j] = ((real8 **)
850: (*((struct_matrice *) (*s_objet_argument_2).objet))
851: .tableau)[i][j] - ((integer8 **)
852: (*((struct_matrice *) (*s_objet_argument_1).objet))
853: .tableau)[i][j];
854: }
855: else
856: {
857: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
858: .objet)).tableau)[i][j] = ((integer8 **)
859: (*((struct_matrice *) (*s_objet_argument_2)
860: .objet)).tableau)[i][j] - ((real8 **)
861: (*((struct_matrice *) (*s_objet_argument_1).objet))
862: .tableau)[i][j];
863: }
864: }
865: }
866: }
867:
868: /*
869: * Réel / Réel
870: */
871:
872: else if (((*s_objet_argument_1).type == MRL) &&
873: ((*s_objet_argument_2).type == MRL))
874: {
875: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
876: == NULL)
877: {
878: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
879: return;
880: }
881:
882: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
883: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
884: .objet))).nombre_lignes) || ((*(((struct_matrice *)
885: (*s_objet_argument_1).objet))).nombre_colonnes !=
886: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
887: .nombre_colonnes))
888: {
889: liberation(s_etat_processus, s_objet_argument_1);
890: liberation(s_etat_processus, s_objet_argument_2);
891: liberation(s_etat_processus, s_objet_resultat);
892:
893: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
894: return;
895: }
896:
897: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
898: (*((struct_matrice *) (*s_objet_argument_1).objet))
899: .nombre_lignes;
900: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
901: (*((struct_matrice *) (*s_objet_argument_1).objet))
902: .nombre_colonnes;
903:
904: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
905: malloc((*(((struct_matrice *) (*s_objet_resultat)
906: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
907: {
908: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
909: return;
910: }
911:
912: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
913: .objet))).nombre_lignes; i++)
914: {
915: if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat)
916: .objet)).tableau)[i] = malloc((*((
917: (struct_matrice *) (*s_objet_resultat).objet)))
918: .nombre_colonnes * sizeof(real8))) == NULL)
919: {
920: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
921: return;
922: }
923:
924: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
925: .nombre_colonnes; j++)
926: {
927: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
928: .objet)).tableau)[i][j] = ((real8 **)
929: (*((struct_matrice *) (*s_objet_argument_2).objet))
930: .tableau)[i][j] - ((real8 **) (*((struct_matrice *)
931: (*s_objet_argument_1).objet)).tableau)[i][j];
932: }
933: }
934: }
935:
936: /*
937: * Entier / Complexe
938: */
939:
940: else if ((((*s_objet_argument_1).type == MIN) &&
941: ((*s_objet_argument_2).type == MCX)) ||
942: (((*s_objet_argument_1).type == MCX) &&
943: ((*s_objet_argument_2).type == MIN)))
944: {
945: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
946: == NULL)
947: {
948: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
949: return;
950: }
951:
952: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
953: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
954: .objet))).nombre_lignes) || ((*(((struct_matrice *)
955: (*s_objet_argument_1).objet))).nombre_colonnes !=
956: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
957: .nombre_colonnes))
958: {
959: liberation(s_etat_processus, s_objet_argument_1);
960: liberation(s_etat_processus, s_objet_argument_2);
961: liberation(s_etat_processus, s_objet_resultat);
962:
963: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
964: return;
965: }
966:
967: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
968: (*((struct_matrice *) (*s_objet_argument_1).objet))
969: .nombre_lignes;
970: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
971: (*((struct_matrice *) (*s_objet_argument_1).objet))
972: .nombre_colonnes;
973:
974: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
975: malloc((*(((struct_matrice *) (*s_objet_resultat)
976: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
977: {
978: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
979: return;
980: }
981:
982: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
983: .objet))).nombre_lignes; i++)
984: {
985: if ((((struct_complexe16 **) (*((struct_matrice *)
986: (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
987: (struct_matrice *) (*s_objet_resultat).objet)))
988: .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
989: {
990: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
991: return;
992: }
993:
994: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
995: .nombre_colonnes; j++)
996: {
997: if ((*s_objet_argument_1).type == MIN)
998: {
999: f77soustractionci_(&(((struct_complexe16 **)
1000: (*((struct_matrice *)
1001: (*s_objet_argument_2).objet)).tableau)[i][j]),
1002: &(((integer8 **) (*((struct_matrice *)
1003: (*s_objet_argument_1).objet)).tableau)[i][j]),
1004: &(((struct_complexe16 **) (*((struct_matrice *)
1005: (*s_objet_resultat).objet)).tableau)[i][j]));
1006: }
1007: else
1008: {
1009: f77soustractionic_(&(((integer8 **) (*((struct_matrice *)
1010: (*s_objet_argument_2).objet)).tableau)[i][j]),
1011: &(((struct_complexe16 **) (*((struct_matrice *)
1012: (*s_objet_argument_1).objet)).tableau)[i][j]),
1013: &(((struct_complexe16 **) (*((struct_matrice *)
1014: (*s_objet_resultat).objet)).tableau)[i][j]));
1015: }
1016: }
1017: }
1018: }
1019:
1020: /*
1021: * Réel / Complexe
1022: */
1023:
1024: else if ((((*s_objet_argument_1).type == MRL) &&
1025: ((*s_objet_argument_2).type == MCX)) ||
1026: (((*s_objet_argument_1).type == MCX) &&
1027: ((*s_objet_argument_2).type == MRL)))
1028: {
1029: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
1030: == NULL)
1031: {
1032: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1033: return;
1034: }
1035:
1036: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
1037: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
1038: .objet))).nombre_lignes) || ((*(((struct_matrice *)
1039: (*s_objet_argument_1).objet))).nombre_colonnes !=
1040: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
1041: .nombre_colonnes))
1042: {
1043: liberation(s_etat_processus, s_objet_argument_1);
1044: liberation(s_etat_processus, s_objet_argument_2);
1045: liberation(s_etat_processus, s_objet_resultat);
1046:
1047: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
1048: return;
1049: }
1050:
1051: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
1052: (*((struct_matrice *) (*s_objet_argument_1).objet))
1053: .nombre_lignes;
1054: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
1055: (*((struct_matrice *) (*s_objet_argument_1).objet))
1056: .nombre_colonnes;
1057:
1058: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
1059: malloc((*(((struct_matrice *) (*s_objet_resultat)
1060: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
1061: {
1062: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1063: return;
1064: }
1065:
1066: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
1067: .objet))).nombre_lignes; i++)
1068: {
1069: if ((((struct_complexe16 **) (*((struct_matrice *)
1070: (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
1071: (struct_matrice *) (*s_objet_resultat).objet)))
1072: .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
1073: {
1074: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1075: return;
1076: }
1077:
1078: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
1079: .nombre_colonnes; j++)
1080: {
1081: if ((*s_objet_argument_1).type == MRL)
1082: {
1083: f77soustractioncr_(&(((struct_complexe16 **)
1084: (*((struct_matrice *)
1085: (*s_objet_argument_2).objet)).tableau)[i][j]),
1086: &(((real8 **) (*((struct_matrice *)
1087: (*s_objet_argument_1).objet)).tableau)[i][j]),
1088: &(((struct_complexe16 **) (*((struct_matrice *)
1089: (*s_objet_resultat).objet)).tableau)[i][j]));
1090: }
1091: else
1092: {
1093: f77soustractionrc_(&(((real8 **) (*((struct_matrice *)
1094: (*s_objet_argument_2).objet)).tableau)[i][j]),
1095: &(((struct_complexe16 **) (*((struct_matrice *)
1096: (*s_objet_argument_1).objet)).tableau)[i][j]),
1097: &(((struct_complexe16 **) (*((struct_matrice *)
1098: (*s_objet_resultat).objet)).tableau)[i][j]));
1099: }
1100: }
1101: }
1102: }
1103:
1104: /*
1105: * Complexe / Complexe
1106: */
1107:
1108: else if (((*s_objet_argument_1).type == MCX) &&
1109: ((*s_objet_argument_2).type == MCX))
1110: {
1111: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
1112: == NULL)
1113: {
1114: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1115: return;
1116: }
1117:
1118: if (((*(((struct_matrice *) (*s_objet_argument_1).objet)))
1119: .nombre_lignes != (*(((struct_matrice *) (*s_objet_argument_2)
1120: .objet))).nombre_lignes) || ((*(((struct_matrice *)
1121: (*s_objet_argument_1).objet))).nombre_colonnes !=
1122: (*(((struct_matrice *) (*s_objet_argument_2).objet)))
1123: .nombre_colonnes))
1124: {
1125: liberation(s_etat_processus, s_objet_argument_1);
1126: liberation(s_etat_processus, s_objet_argument_2);
1127: liberation(s_etat_processus, s_objet_resultat);
1128:
1129: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
1130: return;
1131: }
1132:
1133: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
1134: (*((struct_matrice *) (*s_objet_argument_1).objet))
1135: .nombre_lignes;
1136: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
1137: (*((struct_matrice *) (*s_objet_argument_1).objet))
1138: .nombre_colonnes;
1139:
1140: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
1141: malloc((*(((struct_matrice *) (*s_objet_resultat)
1142: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
1143: {
1144: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1145: return;
1146: }
1147:
1148: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
1149: .objet))).nombre_lignes; i++)
1150: {
1151: if ((((struct_complexe16 **) (*((struct_matrice *)
1152: (*s_objet_resultat).objet)).tableau)[i] = malloc((*((
1153: (struct_matrice *) (*s_objet_resultat).objet)))
1154: .nombre_colonnes * sizeof(struct_complexe16))) == NULL)
1155: {
1156: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1157: return;
1158: }
1159:
1160: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat).objet)))
1161: .nombre_colonnes; j++)
1162: {
1163: f77soustractioncc_(&(((struct_complexe16 **)
1164: (*((struct_matrice *)
1165: (*s_objet_argument_2).objet)).tableau)[i][j]),
1166: &(((struct_complexe16 **) (*((struct_matrice *)
1167: (*s_objet_argument_1).objet)).tableau)[i][j]),
1168: &(((struct_complexe16 **) (*((struct_matrice *)
1169: (*s_objet_resultat).objet)).tableau)[i][j]));
1170: }
1171: }
1172: }
1173:
1174: /*
1175: --------------------------------------------------------------------------------
1176: Soustraction mettant en oeuvre des binaires
1177: --------------------------------------------------------------------------------
1178: */
1179: /*
1180: * Binaire / Binaire
1181: */
1182:
1183: else if (((*s_objet_argument_1).type == BIN) &&
1184: ((*s_objet_argument_2).type == BIN))
1185: {
1186: if ((s_objet_resultat = allocation(s_etat_processus, BIN))
1187: == NULL)
1188: {
1189: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1190: return;
1191: }
1192:
1193: (*((logical8 *) (*s_objet_resultat).objet)) =
1194: (*((logical8 *) (*s_objet_argument_2).objet))
1195: - (*((logical8 *) (*s_objet_argument_1).objet));
1196: }
1197:
1198: /*
1199: * Binaire / Entier
1200: */
1201:
1202: else if ((((*s_objet_argument_1).type == BIN) &&
1203: ((*s_objet_argument_2).type == INT)) ||
1204: (((*s_objet_argument_1).type == INT) &&
1205: ((*s_objet_argument_2).type == BIN)))
1206: {
1207: if ((s_objet_resultat = allocation(s_etat_processus, BIN))
1208: == NULL)
1209: {
1210: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1211: return;
1212: }
1213:
1214: if ((*s_objet_argument_1).type == BIN)
1215: {
1216: (*((logical8 *) (*s_objet_resultat).objet)) =
1217: (*((integer8 *) (*s_objet_argument_2).objet))
1218: - (*((logical8 *) (*s_objet_argument_1).objet));
1219: }
1220: else
1221: {
1222: (*((logical8 *) (*s_objet_resultat).objet)) =
1223: (*((logical8 *) (*s_objet_argument_2).objet))
1224: - (*((integer8 *) (*s_objet_argument_1).objet));
1225: }
1226: }
1227:
1228: /*
1229: --------------------------------------------------------------------------------
1230: Soustraction mettant en oeuvre un nom ou une expression algébrique
1231: --------------------------------------------------------------------------------
1232: */
1233: /*
1234: * Nom ou valeur numérique / Nom ou valeur numérique
1235: */
1236:
1237: else if ((((*s_objet_argument_1).type == NOM) &&
1238: (((*s_objet_argument_2).type == NOM) ||
1239: ((*s_objet_argument_2).type == INT) ||
1240: ((*s_objet_argument_2).type == REL) ||
1241: ((*s_objet_argument_2).type == CPL))) ||
1242: (((*s_objet_argument_2).type == NOM) &&
1243: (((*s_objet_argument_1).type == INT) ||
1244: ((*s_objet_argument_1).type == REL) ||
1245: ((*s_objet_argument_1).type == CPL))))
1246: {
1247: drapeau = d_vrai;
1248: drapeau_neg = d_faux;
1249:
1250: if ((*s_objet_argument_2).type == NOM)
1251: {
1252: if ((*s_objet_argument_1).type == INT)
1253: {
1254: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
1255: {
1256: drapeau = d_faux;
1257:
1258: s_objet_resultat = s_objet_argument_2;
1259: s_objet_argument_2 = NULL;
1260: }
1261: }
1262: else if ((*s_objet_argument_1).type == REL)
1263: {
1264: if ((*((real8 *) (*s_objet_argument_1).objet)) == 0)
1265: {
1266: drapeau = d_faux;
1267:
1268: s_objet_resultat = s_objet_argument_2;
1269: s_objet_argument_2 = NULL;
1270: }
1271: }
1272: else if ((*s_objet_argument_1).type == CPL)
1273: {
1274: if (((*((complex16 *) (*s_objet_argument_1).objet))
1275: .partie_reelle == 0) && ((*((complex16 *)
1276: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
1277: {
1278: drapeau = d_faux;
1279:
1280: s_objet_resultat = s_objet_argument_2;
1281: s_objet_argument_2 = NULL;
1282: }
1283: }
1284: }
1285: else if ((*s_objet_argument_1).type == NOM)
1286: {
1287: if ((*s_objet_argument_2).type == INT)
1288: {
1289: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
1290: {
1291: drapeau_neg = d_vrai;
1292: }
1293: }
1294: else if ((*s_objet_argument_2).type == REL)
1295: {
1296: if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
1297: {
1298: drapeau_neg = d_vrai;
1299: }
1300: }
1301: else if ((*s_objet_argument_2).type == CPL)
1302: {
1303: if (((*((complex16 *) (*s_objet_argument_2).objet))
1304: .partie_reelle == 0) && ((*((complex16 *)
1305: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
1306: {
1307: drapeau_neg = d_vrai;
1308: }
1309: }
1310: }
1311:
1312: if (drapeau == d_vrai)
1313: {
1314: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
1315: == NULL)
1316: {
1317: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1318: return;
1319: }
1320:
1321: if (((*s_objet_resultat).objet =
1322: allocation_maillon(s_etat_processus)) == NULL)
1323: {
1324: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1325: return;
1326: }
1327:
1328: l_element_courant = (*s_objet_resultat).objet;
1329:
1330: if (((*l_element_courant).donnee = allocation(s_etat_processus,
1331: FCT)) == NULL)
1332: {
1333: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1334: return;
1335: }
1336:
1337: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1338: .nombre_arguments = 0;
1339: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1340: .fonction = instruction_vers_niveau_superieur;
1341:
1342: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1343: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
1344: {
1345: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1346: return;
1347: }
1348:
1349: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1350: .nom_fonction, "<<");
1351:
1352: if (drapeau_neg == d_faux)
1353: {
1354: if (((*l_element_courant).suivant =
1355: allocation_maillon(s_etat_processus)) == NULL)
1356: {
1357: (*s_etat_processus).erreur_systeme =
1358: d_es_allocation_memoire;
1359: return;
1360: }
1361:
1362: l_element_courant = (*l_element_courant).suivant;
1363: (*l_element_courant).donnee = s_objet_argument_2;
1364: }
1365: else
1366: {
1367: liberation(s_etat_processus, s_objet_argument_2);
1368: }
1369:
1370: if (((*l_element_courant).suivant =
1371: allocation_maillon(s_etat_processus)) == NULL)
1372: {
1373: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1374: return;
1375: }
1376:
1377: l_element_courant = (*l_element_courant).suivant;
1378: (*l_element_courant).donnee = s_objet_argument_1;
1379:
1380: if (((*l_element_courant).suivant =
1381: allocation_maillon(s_etat_processus)) == NULL)
1382: {
1383: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1384: return;
1385: }
1386:
1387: l_element_courant = (*l_element_courant).suivant;
1388:
1389: if (((*l_element_courant).donnee = allocation(s_etat_processus,
1390: FCT)) == NULL)
1391: {
1392: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1393: return;
1394: }
1395:
1396: if (drapeau_neg == d_faux)
1397: {
1398: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1399: .nombre_arguments = 0;
1400: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1401: .fonction = instruction_moins;
1402:
1403: if (((*((struct_fonction *) (*(*l_element_courant)
1404: .donnee).objet)).nom_fonction =
1405: malloc(2 * sizeof(unsigned char))) == NULL)
1406: {
1407: (*s_etat_processus).erreur_systeme =
1408: d_es_allocation_memoire;
1409: return;
1410: }
1411:
1412: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee)
1413: .objet)).nom_fonction, "-");
1414: }
1415: else
1416: {
1417: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1418: .nombre_arguments = 1;
1419: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1420: .fonction = instruction_neg;
1421:
1422: if (((*((struct_fonction *) (*(*l_element_courant)
1423: .donnee).objet)).nom_fonction =
1424: malloc(4 * sizeof(unsigned char))) == NULL)
1425: {
1426: (*s_etat_processus).erreur_systeme =
1427: d_es_allocation_memoire;
1428: return;
1429: }
1430:
1431: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee)
1432: .objet)).nom_fonction, "NEG");
1433: }
1434:
1435: if (((*l_element_courant).suivant =
1436: allocation_maillon(s_etat_processus)) == NULL)
1437: {
1438: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1439: return;
1440: }
1441:
1442: l_element_courant = (*l_element_courant).suivant;
1443:
1444: if (((*l_element_courant).donnee = allocation(s_etat_processus,
1445: FCT)) == NULL)
1446: {
1447: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1448: return;
1449: }
1450:
1451: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1452: .nombre_arguments = 0;
1453: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1454: .fonction = instruction_vers_niveau_inferieur;
1455:
1456: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1457: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
1458: {
1459: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1460: return;
1461: }
1462:
1463: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1464: .nom_fonction, ">>");
1465:
1466: (*l_element_courant).suivant = NULL;
1467:
1468: s_objet_argument_1 = NULL;
1469: s_objet_argument_2 = NULL;
1470: }
1471: }
1472:
1473: /*
1474: * Nom ou valeur numérique / Expression
1475: */
1476:
1477: else if ((((*s_objet_argument_1).type == ALG) ||
1478: ((*s_objet_argument_1).type == RPN)) &&
1479: (((*s_objet_argument_2).type == NOM) ||
1480: ((*s_objet_argument_2).type == INT) ||
1481: ((*s_objet_argument_2).type == REL) ||
1482: ((*s_objet_argument_2).type == CPL)))
1483: {
1484: drapeau_neg = d_faux;
1485:
1486: nombre_elements = 0;
1487: l_element_courant = (struct_liste_chainee *)
1488: (*s_objet_argument_1).objet;
1489:
1490: while(l_element_courant != NULL)
1491: {
1492: nombre_elements++;
1493: l_element_courant = (*l_element_courant).suivant;
1494: }
1495:
1496: if (nombre_elements == 2)
1497: {
1498: liberation(s_etat_processus, s_objet_argument_1);
1499: liberation(s_etat_processus, s_objet_argument_2);
1500:
1501: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
1502: return;
1503: }
1504:
1505: if ((*s_objet_argument_2).type == INT)
1506: {
1507: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
1508: {
1509: drapeau_neg = d_vrai;
1510: }
1511: }
1512: else if ((*s_objet_argument_2).type == REL)
1513: {
1514: if ((*((real8 *) (*s_objet_argument_2).objet)) == 0)
1515: {
1516: drapeau_neg = d_vrai;
1517: }
1518: }
1519: else if ((*s_objet_argument_2).type == CPL)
1520: {
1521: if (((*((complex16 *) (*s_objet_argument_2).objet))
1522: .partie_reelle == 0) && ((*((complex16 *)
1523: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
1524: {
1525: drapeau_neg = d_vrai;
1526: }
1527: }
1528:
1529: if ((s_objet_resultat = copie_objet(s_etat_processus,
1530: s_objet_argument_1, 'N')) == NULL)
1531: {
1532: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1533: return;
1534: }
1535:
1536: l_element_courant = (struct_liste_chainee *)
1537: (*s_objet_resultat).objet;
1538: l_element_precedent = l_element_courant;
1539: l_element_courant = (*l_element_courant).suivant;
1540:
1541: if (drapeau_neg == d_faux)
1542: {
1543: if (((*l_element_precedent).suivant =
1544: allocation_maillon(s_etat_processus)) == NULL)
1545: {
1546: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1547: return;
1548: }
1549:
1550: (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
1551: (*(*l_element_precedent).suivant).suivant = l_element_courant;
1552: }
1553: else
1554: {
1555: liberation(s_etat_processus, s_objet_argument_2);
1556: }
1557:
1558: while((*l_element_courant).suivant != NULL)
1559: {
1560: l_element_precedent = l_element_courant;
1561: l_element_courant = (*l_element_courant).suivant;
1562: }
1563:
1564: if (((*l_element_precedent).suivant =
1565: allocation_maillon(s_etat_processus)) == NULL)
1566: {
1567: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1568: return;
1569: }
1570:
1571: if (((*(*l_element_precedent).suivant).donnee =
1572: allocation(s_etat_processus, FCT)) == NULL)
1573: {
1574: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1575: return;
1576: }
1577:
1578: if (drapeau_neg == d_faux)
1579: {
1580: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1581: .donnee).objet)).nombre_arguments = 0;
1582: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1583: .donnee).objet)).fonction = instruction_moins;
1584:
1585: if (((*((struct_fonction *) (*(*(*l_element_precedent)
1586: .suivant).donnee).objet)).nom_fonction =
1587: malloc(2 * sizeof(unsigned char))) == NULL)
1588: {
1589: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1590: return;
1591: }
1592:
1593: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
1594: .suivant).donnee).objet)).nom_fonction, "-");
1595: }
1596: else
1597: {
1598: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1599: .donnee).objet)).nombre_arguments = 1;
1600: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1601: .donnee).objet)).fonction = instruction_neg;
1602:
1603: if (((*((struct_fonction *) (*(*(*l_element_precedent)
1604: .suivant).donnee).objet)).nom_fonction =
1605: malloc(4 * sizeof(unsigned char))) == NULL)
1606: {
1607: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1608: return;
1609: }
1610:
1611: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
1612: .suivant).donnee).objet)).nom_fonction, "NEG");
1613: }
1614:
1615: (*(*l_element_precedent).suivant).suivant = l_element_courant;
1616:
1617: s_objet_argument_2 = NULL;
1618: }
1619:
1620: /*
1621: * Expression / Nom ou valeur numérique
1622: */
1623:
1624: else if ((((*s_objet_argument_1).type == NOM) ||
1625: ((*s_objet_argument_1).type == INT) ||
1626: ((*s_objet_argument_1).type == REL) ||
1627: ((*s_objet_argument_1).type == CPL)) &&
1628: (((*s_objet_argument_2).type == ALG) ||
1629: ((*s_objet_argument_2).type == RPN)))
1630: {
1631: drapeau = d_vrai;
1632:
1633: nombre_elements = 0;
1634: l_element_courant = (struct_liste_chainee *)
1635: (*s_objet_argument_2).objet;
1636:
1637: while(l_element_courant != NULL)
1638: {
1639: nombre_elements++;
1640: l_element_courant = (*l_element_courant).suivant;
1641: }
1642:
1643: if (nombre_elements == 2)
1644: {
1645: liberation(s_etat_processus, s_objet_argument_1);
1646: liberation(s_etat_processus, s_objet_argument_2);
1647:
1648: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
1649: return;
1650: }
1651:
1652: if ((*s_objet_argument_1).type == INT)
1653: {
1654: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
1655: {
1656: drapeau = d_faux;
1657:
1658: s_objet_resultat = s_objet_argument_2;
1659: s_objet_argument_2 = NULL;
1660: }
1661: }
1662: else if ((*s_objet_argument_1).type == REL)
1663: {
1664: if ((*((real8 *) (*s_objet_argument_1).objet)) == 0)
1665: {
1666: drapeau = d_faux;
1667:
1668: s_objet_resultat = s_objet_argument_2;
1669: s_objet_argument_2 = NULL;
1670: }
1671: }
1672: else if ((*s_objet_argument_1).type == CPL)
1673: {
1674: if (((*((complex16 *) (*s_objet_argument_1).objet))
1675: .partie_reelle == 0) && ((*((complex16 *)
1676: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
1677: {
1678: drapeau = d_faux;
1679:
1680: s_objet_resultat = s_objet_argument_2;
1681: s_objet_argument_2 = NULL;
1682: }
1683: }
1684:
1685: if (drapeau == d_vrai)
1686: {
1687: if ((s_objet_resultat = copie_objet(s_etat_processus,
1688: s_objet_argument_2, 'N')) == NULL)
1689: {
1690: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1691: return;
1692: }
1693:
1694: l_element_courant = (struct_liste_chainee *)
1695: (*s_objet_resultat).objet;
1696: l_element_precedent = l_element_courant;
1697:
1698: while((*l_element_courant).suivant != NULL)
1699: {
1700: l_element_precedent = l_element_courant;
1701: l_element_courant = (*l_element_courant).suivant;
1702: }
1703:
1704: if (((*l_element_precedent).suivant =
1705: allocation_maillon(s_etat_processus)) == NULL)
1706: {
1707: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1708: return;
1709: }
1710:
1711: (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
1712: l_element_precedent = (*l_element_precedent).suivant;
1713:
1714: if (((*l_element_precedent).suivant =
1715: allocation_maillon(s_etat_processus)) == NULL)
1716: {
1717: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1718: return;
1719: }
1720:
1721: if (((*(*l_element_precedent).suivant).donnee =
1722: allocation(s_etat_processus, FCT)) == NULL)
1723: {
1724: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1725: return;
1726: }
1727:
1728: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1729: .donnee).objet)).nombre_arguments = 0;
1730: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
1731: .donnee).objet)).fonction = instruction_moins;
1732:
1733: if (((*((struct_fonction *) (*(*(*l_element_precedent)
1734: .suivant).donnee).objet)).nom_fonction =
1735: malloc(2 * sizeof(unsigned char))) == NULL)
1736: {
1737: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1738: return;
1739: }
1740:
1741: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
1742: .suivant).donnee).objet)).nom_fonction, "-");
1743:
1744: (*(*l_element_precedent).suivant).suivant = l_element_courant;
1745:
1746: s_objet_argument_1 = NULL;
1747: }
1748: }
1749:
1750: /*
1751: * Expression / Expression
1752: */
1753:
1754: else if ((((*s_objet_argument_1).type == ALG) &&
1755: ((*s_objet_argument_2).type == ALG)) ||
1756: (((*s_objet_argument_1).type == RPN) &&
1757: ((*s_objet_argument_2).type == RPN)))
1758: {
1759: nombre_elements = 0;
1760: l_element_courant = (struct_liste_chainee *)
1761: (*s_objet_argument_1).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: nombre_elements = 0;
1779: l_element_courant = (struct_liste_chainee *)
1780: (*s_objet_argument_2).objet;
1781:
1782: while(l_element_courant != NULL)
1783: {
1784: nombre_elements++;
1785: l_element_courant = (*l_element_courant).suivant;
1786: }
1787:
1788: if (nombre_elements == 2)
1789: {
1790: liberation(s_etat_processus, s_objet_argument_1);
1791: liberation(s_etat_processus, s_objet_argument_2);
1792:
1793: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
1794: return;
1795: }
1796:
1797: if ((s_copie_argument_1 = copie_objet(s_etat_processus,
1798: s_objet_argument_1, 'N')) == NULL)
1799: {
1800: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1801: return;
1802: }
1803:
1804: if ((s_copie_argument_2 = copie_objet(s_etat_processus,
1805: s_objet_argument_2, 'N')) == NULL)
1806: {
1807: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1808: return;
1809: }
1810:
1811: l_element_courant = (struct_liste_chainee *)
1812: (*s_copie_argument_1).objet;
1813: (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
1814: (*s_copie_argument_1).objet)).suivant;
1815:
1816: liberation(s_etat_processus, (*l_element_courant).donnee);
1817: free(l_element_courant);
1818:
1819: l_element_courant = (struct_liste_chainee *)
1820: (*s_copie_argument_2).objet;
1821: l_element_precedent = l_element_courant;
1822: s_objet_resultat = s_copie_argument_2;
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: liberation(s_etat_processus, (*l_element_courant).donnee);
1831: free(l_element_courant);
1832:
1833: (*l_element_precedent).suivant = (struct_liste_chainee *)
1834: (*s_copie_argument_1).objet;
1835: free(s_copie_argument_1);
1836:
1837: l_element_courant = (*l_element_precedent).suivant;
1838: while((*l_element_courant).suivant != NULL)
1839: {
1840: l_element_precedent = l_element_courant;
1841: l_element_courant = (*l_element_courant).suivant;
1842: }
1843:
1844: if (((*l_element_precedent).suivant =
1845: allocation_maillon(s_etat_processus)) == NULL)
1846: {
1847: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1848: return;
1849: }
1850:
1851: (*(*l_element_precedent).suivant).suivant = l_element_courant;
1852: l_element_courant = (*l_element_precedent).suivant;
1853:
1854: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
1855: == NULL)
1856: {
1857: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1858: return;
1859: }
1860:
1861: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1862: .nombre_arguments = 0;
1863: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1864: .fonction = instruction_moins;
1865:
1866: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1867: .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
1868: {
1869: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1870: return;
1871: }
1872:
1873: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
1874: .nom_fonction, "-");
1875: }
1876:
1877: /*
1878: --------------------------------------------------------------------------------
1879: Soustraction impossible
1880: --------------------------------------------------------------------------------
1881: */
1882:
1883: else
1884: {
1885: liberation(s_etat_processus, s_objet_argument_1);
1886: liberation(s_etat_processus, s_objet_argument_2);
1887:
1888: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
1889: return;
1890: }
1891:
1892: liberation(s_etat_processus, s_objet_argument_1);
1893: liberation(s_etat_processus, s_objet_argument_2);
1894:
1895: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
1896: s_objet_resultat) == d_erreur)
1897: {
1898: return;
1899: }
1900:
1901: return;
1902: }
1903:
1904:
1905: /*
1906: ================================================================================
1907: Fonction '*'
1908: ================================================================================
1909: Entrées : structure processus
1910: --------------------------------------------------------------------------------
1911: Sorties :
1912: --------------------------------------------------------------------------------
1913: Effets de bord : néant
1914: ================================================================================
1915: */
1916:
1917: void
1918: instruction_multiplication(struct_processus *s_etat_processus)
1919: {
1920: integer8 cumul;
1921: integer8 tampon;
1922:
1923: logical1 depassement;
1924: logical1 drapeau;
1925: logical1 erreur_memoire;
1926:
1927: struct_liste_chainee *l_element_courant;
1928: struct_liste_chainee *l_element_precedent;
1929:
1930: struct_objet *s_copie_argument_1;
1931: struct_objet *s_copie_argument_2;
1932: struct_objet *s_objet_argument_1;
1933: struct_objet *s_objet_argument_2;
1934: struct_objet *s_objet_resultat;
1935:
1936: unsigned long i;
1937: unsigned long j;
1938: unsigned long k;
1939: unsigned long nombre_elements;
1940:
1941: void *accumulateur;
1942:
1943: (*s_etat_processus).erreur_execution = d_ex;
1944:
1945: if ((*s_etat_processus).affichage_arguments == 'Y')
1946: {
1947: printf("\n * ");
1948:
1949: if ((*s_etat_processus).langue == 'F')
1950: {
1951: printf("(multiplication)\n\n");
1952: }
1953: else
1954: {
1955: printf("(multiplication)\n\n");
1956: }
1957:
1958: printf(" 2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1959: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1960: printf("-> 1: %s, %s, %s\n\n", d_INT, d_REL, d_CPL);
1961:
1962: printf(" 2: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
1963: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1964: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
1965:
1966: printf(" 2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1967: printf(" 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
1968: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
1969:
1970: printf(" 2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
1971: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1972: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
1973:
1974: printf(" 2: %s, %s, %s\n", d_INT, d_REL, d_CPL);
1975: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
1976: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
1977:
1978: printf(" 2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
1979: printf(" 1: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
1980: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
1981:
1982: printf(" 2: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
1983: printf(" 1: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
1984: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
1985:
1986: printf(" 2: %s, %s\n", d_BIN, d_INT);
1987: printf(" 1: %s, %s\n", d_BIN, d_INT);
1988: printf("-> 1: %s\n\n", d_BIN);
1989:
1990: printf(" 2: %s, %s, %s, %s, %s, %s\n",
1991: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
1992: printf(" 1: %s, %s, %s, %s, %s, %s\n",
1993: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
1994: printf("-> 1: %s, %s\n", d_ALG, d_RPN);
1995:
1996: return;
1997: }
1998: else if ((*s_etat_processus).test_instruction == 'Y')
1999: {
2000: (*s_etat_processus).nombre_arguments = 0;
2001: return;
2002: }
2003:
2004: if (test_cfsf(s_etat_processus, 31) == d_vrai)
2005: {
2006: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
2007: {
2008: return;
2009: }
2010: }
2011:
2012: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
2013: &s_objet_argument_1) == d_erreur)
2014: {
2015: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
2016: return;
2017: }
2018:
2019: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
2020: &s_objet_argument_2) == d_erreur)
2021: {
2022: liberation(s_etat_processus, s_objet_argument_1);
2023:
2024: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
2025: return;
2026: }
2027:
2028: /*
2029: --------------------------------------------------------------------------------
2030: Multiplication de deux entiers
2031: --------------------------------------------------------------------------------
2032: */
2033:
2034: if (((*s_objet_argument_1).type == INT) &&
2035: ((*s_objet_argument_2).type == INT))
2036: {
2037: if (depassement_multiplication((integer8 *) (*s_objet_argument_1)
2038: .objet, (integer8 *) (*s_objet_argument_2).objet, &tampon) ==
2039: d_absence_erreur)
2040: {
2041: if ((s_objet_resultat = allocation(s_etat_processus, INT))
2042: == NULL)
2043: {
2044: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2045: return;
2046: }
2047:
2048: (*((integer8 *) (*s_objet_resultat).objet)) = tampon;
2049: }
2050: else
2051: {
2052: if ((s_objet_resultat = allocation(s_etat_processus, REL))
2053: == NULL)
2054: {
2055: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2056: return;
2057: }
2058:
2059: (*((real8 *) (*s_objet_resultat).objet)) = ((real8) (*((integer8 *)
2060: (*s_objet_argument_2).objet))) * ((real8) (*((integer8 *)
2061: (*s_objet_argument_1).objet)));
2062: }
2063: }
2064:
2065: /*
2066: --------------------------------------------------------------------------------
2067: Multiplication d'un entier et d'un réel
2068: --------------------------------------------------------------------------------
2069: */
2070:
2071: else if ((((*s_objet_argument_1).type == INT) &&
2072: ((*s_objet_argument_2).type == REL)) ||
2073: (((*s_objet_argument_1).type == REL) &&
2074: ((*s_objet_argument_2).type == INT)))
2075: {
2076: if ((s_objet_resultat = allocation(s_etat_processus, REL))
2077: == NULL)
2078: {
2079: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2080: return;
2081: }
2082:
2083: if ((*s_objet_argument_1).type == INT)
2084: {
2085: (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
2086: (*s_objet_argument_2).objet)) * (*((integer8 *)
2087: (*s_objet_argument_1).objet));
2088: }
2089: else
2090: {
2091: (*((real8 *) (*s_objet_resultat).objet)) = (*((integer8 *)
2092: (*s_objet_argument_2).objet)) * (*((real8 *)
2093: (*s_objet_argument_1).objet));
2094: }
2095: }
2096:
2097: /*
2098: --------------------------------------------------------------------------------
2099: Multiplication d'un entier et d'un complexe
2100: --------------------------------------------------------------------------------
2101: */
2102:
2103: else if ((((*s_objet_argument_1).type == INT) &&
2104: ((*s_objet_argument_2).type == CPL)) ||
2105: (((*s_objet_argument_1).type == CPL) &&
2106: ((*s_objet_argument_2).type == INT)))
2107: {
2108: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
2109: == NULL)
2110: {
2111: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2112: return;
2113: }
2114:
2115: if ((*s_objet_argument_1).type == INT)
2116: {
2117: f77multiplicationci_((struct_complexe16 *) (*s_objet_argument_2)
2118: .objet, (integer8 *) (*s_objet_argument_1).objet,
2119: (struct_complexe16 *) (*s_objet_resultat).objet);
2120: }
2121: else
2122: {
2123: f77multiplicationci_((struct_complexe16 *) (*s_objet_argument_1)
2124: .objet, (integer8 *) (*s_objet_argument_2).objet,
2125: (struct_complexe16 *) (*s_objet_resultat).objet);
2126: }
2127: }
2128:
2129: /*
2130: --------------------------------------------------------------------------------
2131: Multiplication de deux réels
2132: --------------------------------------------------------------------------------
2133: */
2134:
2135: else if (((*s_objet_argument_1).type == REL) &&
2136: ((*s_objet_argument_2).type == REL))
2137: {
2138: if ((s_objet_resultat = allocation(s_etat_processus, REL))
2139: == NULL)
2140: {
2141: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2142: return;
2143: }
2144:
2145: (*((real8 *) (*s_objet_resultat).objet)) = (*((real8 *)
2146: (*s_objet_argument_2).objet)) * (*((real8 *)
2147: (*s_objet_argument_1).objet));
2148: }
2149:
2150: /*
2151: --------------------------------------------------------------------------------
2152: Multiplication d'un réel et d'un complexe
2153: --------------------------------------------------------------------------------
2154: */
2155:
2156: else if ((((*s_objet_argument_1).type == REL) &&
2157: ((*s_objet_argument_2).type == CPL)) ||
2158: (((*s_objet_argument_1).type == CPL) &&
2159: ((*s_objet_argument_2).type == REL)))
2160: {
2161: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
2162: == NULL)
2163: {
2164: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2165: return;
2166: }
2167:
2168: if ((*s_objet_argument_1).type == REL)
2169: {
2170: f77multiplicationcr_((struct_complexe16 *)
2171: (*s_objet_argument_2).objet,
2172: (real8 *) (*s_objet_argument_1).objet,
2173: (struct_complexe16 *) (*s_objet_resultat).objet);
2174: }
2175: else
2176: {
2177: f77multiplicationcr_((struct_complexe16 *) (*s_objet_argument_1)
2178: .objet, (real8 *) (*s_objet_argument_2).objet,
2179: (struct_complexe16 *) (*s_objet_resultat).objet);
2180: }
2181: }
2182:
2183: /*
2184: --------------------------------------------------------------------------------
2185: Multiplication de deux complexes
2186: --------------------------------------------------------------------------------
2187: */
2188:
2189: else if (((*s_objet_argument_1).type == CPL) &&
2190: ((*s_objet_argument_2).type == CPL))
2191: {
2192: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
2193: == NULL)
2194: {
2195: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2196: return;
2197: }
2198:
2199: f77multiplicationcc_((struct_complexe16 *) (*s_objet_argument_2).objet,
2200: (struct_complexe16 *) (*s_objet_argument_1).objet,
2201: (struct_complexe16 *) (*s_objet_resultat).objet);
2202: }
2203:
2204: /*
2205: --------------------------------------------------------------------------------
2206: Multiplication d'un vecteur par un scalaire
2207: --------------------------------------------------------------------------------
2208: */
2209: /*
2210: * Vecteur d'entiers / Entier
2211: */
2212:
2213: else if ((((*s_objet_argument_1).type == VIN) &&
2214: ((*s_objet_argument_2).type == INT)) ||
2215: (((*s_objet_argument_1).type == INT) &&
2216: ((*s_objet_argument_2).type == VIN)))
2217: {
2218: if ((s_objet_resultat = allocation(s_etat_processus, VIN))
2219: == NULL)
2220: {
2221: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2222: return;
2223: }
2224:
2225: if ((*s_objet_argument_1).type == VIN)
2226: {
2227: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2228: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2229: }
2230: else
2231: {
2232: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2233: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2234: }
2235:
2236: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2237: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2238: .objet))).taille * sizeof(integer8))) == NULL)
2239: {
2240: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2241: return;
2242: }
2243:
2244: depassement = d_faux;
2245:
2246: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2247: .objet))).taille; i++)
2248: {
2249: if ((*s_objet_argument_1).type == VIN)
2250: {
2251: if (depassement_multiplication((integer8 *)
2252: (*s_objet_argument_2).objet, &(((integer8 *)
2253: (*((struct_vecteur *) (*s_objet_argument_1).objet))
2254: .tableau)[i]), &(((integer8 *) (*((struct_vecteur *)
2255: (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
2256: {
2257: depassement = d_vrai;
2258: }
2259: }
2260: else
2261: {
2262: if (depassement_multiplication((integer8 *)
2263: (*s_objet_argument_1).objet, &(((integer8 *)
2264: (*((struct_vecteur *) (*s_objet_argument_2).objet))
2265: .tableau)[i]), &(((integer8 *) (*((struct_vecteur *)
2266: (*s_objet_resultat).objet)).tableau)[i])) == d_erreur)
2267: {
2268: depassement = d_vrai;
2269: }
2270: }
2271: }
2272:
2273: if (depassement == d_vrai)
2274: {
2275: (*s_objet_resultat).type = VRL;
2276: (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
2277:
2278: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2279: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2280: .objet))).taille * sizeof(real8))) == NULL)
2281: {
2282: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2283: return;
2284: }
2285:
2286: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2287: .objet))).taille; i++)
2288: {
2289: if ((*s_objet_argument_1).type == VIN)
2290: {
2291: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2292: .tableau)[i] = ((real8) (*((integer8 *)
2293: (*s_objet_argument_2).objet))) * ((real8)
2294: ((integer8 *) (*((struct_vecteur *)
2295: (*s_objet_argument_1).objet)).tableau)[i]);
2296: }
2297: else
2298: {
2299: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2300: .tableau)[i] = ((real8) (*((integer8 *)
2301: (*s_objet_argument_1).objet))) * ((real8)
2302: ((integer8 *) (*((struct_vecteur *)
2303: (*s_objet_argument_2).objet)).tableau)[i]);
2304: }
2305: }
2306: }
2307: }
2308:
2309: /*
2310: * Vecteur de réels / Entier
2311: */
2312:
2313: else if ((((*s_objet_argument_1).type == VRL) &&
2314: ((*s_objet_argument_2).type == INT)) ||
2315: (((*s_objet_argument_1).type == INT) &&
2316: ((*s_objet_argument_2).type == VRL)))
2317: {
2318: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
2319: == NULL)
2320: {
2321: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2322: return;
2323: }
2324:
2325: if ((*s_objet_argument_1).type == VRL)
2326: {
2327: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2328: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2329: }
2330: else
2331: {
2332: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2333: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2334: }
2335:
2336: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2337: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2338: .objet))).taille * sizeof(real8))) == NULL)
2339: {
2340: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2341: return;
2342: }
2343:
2344: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2345: .objet))).taille; i++)
2346: {
2347: if ((*s_objet_argument_1).type == VRL)
2348: {
2349: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2350: .tableau)[i] = (*((integer8 *) (*s_objet_argument_2)
2351: .objet)) * ((real8 *) (*((struct_vecteur *)
2352: (*s_objet_argument_1).objet)).tableau)[i];
2353: }
2354: else
2355: {
2356: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2357: .tableau)[i] = (*((integer8 *) (*s_objet_argument_1)
2358: .objet)) * ((real8 *) (*((struct_vecteur *)
2359: (*s_objet_argument_2).objet)).tableau)[i];
2360: }
2361: }
2362: }
2363:
2364: /*
2365: * Vecteur de complexes / Entier
2366: */
2367:
2368: else if ((((*s_objet_argument_1).type == VCX) &&
2369: ((*s_objet_argument_2).type == INT)) ||
2370: (((*s_objet_argument_1).type == INT) &&
2371: ((*s_objet_argument_2).type == VCX)))
2372: {
2373: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
2374: == NULL)
2375: {
2376: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2377: return;
2378: }
2379:
2380: if ((*s_objet_argument_1).type == VCX)
2381: {
2382: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2383: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2384: }
2385: else
2386: {
2387: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2388: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2389: }
2390:
2391: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2392: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2393: .objet))).taille * sizeof(struct_complexe16))) == NULL)
2394: {
2395: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2396: return;
2397: }
2398:
2399: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2400: .objet))).taille; i++)
2401: {
2402: if ((*s_objet_argument_1).type == VCX)
2403: {
2404: f77multiplicationci_(&(((struct_complexe16 *)
2405: (*((struct_vecteur *)
2406: (*s_objet_argument_1).objet)).tableau)[i]),
2407: &((*((integer8 *) (*s_objet_argument_2).objet))),
2408: &(((struct_complexe16 *) (*((struct_vecteur *)
2409: (*s_objet_resultat).objet)).tableau)[i]));
2410: }
2411: else
2412: {
2413: f77multiplicationci_(&(((struct_complexe16 *)
2414: (*((struct_vecteur *)
2415: (*s_objet_argument_2).objet)).tableau)[i]),
2416: &((*((integer8 *) (*s_objet_argument_1).objet))),
2417: &(((struct_complexe16 *) (*((struct_vecteur *)
2418: (*s_objet_resultat).objet)).tableau)[i]));
2419: }
2420: }
2421: }
2422:
2423: /*
2424: * Vecteur d'entiers / Réel
2425: */
2426:
2427: else if ((((*s_objet_argument_1).type == VIN) &&
2428: ((*s_objet_argument_2).type == REL)) ||
2429: (((*s_objet_argument_1).type == REL) &&
2430: ((*s_objet_argument_2).type == VIN)))
2431: {
2432: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
2433: == NULL)
2434: {
2435: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2436: return;
2437: }
2438:
2439: if ((*s_objet_argument_1).type == VIN)
2440: {
2441: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2442: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2443: }
2444: else
2445: {
2446: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2447: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2448: }
2449:
2450: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2451: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2452: .objet))).taille * sizeof(real8))) == NULL)
2453: {
2454: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2455: return;
2456: }
2457:
2458: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2459: .objet))).taille; i++)
2460: {
2461: if ((*s_objet_argument_1).type == VIN)
2462: {
2463: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2464: .tableau)[i] = (*((real8 *) (*s_objet_argument_2)
2465: .objet)) * ((integer8 *) (*((struct_vecteur *)
2466: (*s_objet_argument_1).objet)).tableau)[i];
2467: }
2468: else
2469: {
2470: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2471: .tableau)[i] = (*((real8 *) (*s_objet_argument_1)
2472: .objet)) * ((integer8 *) (*((struct_vecteur *)
2473: (*s_objet_argument_2).objet)).tableau)[i];
2474: }
2475: }
2476: }
2477:
2478: /*
2479: * Vecteur de réels / Réel
2480: */
2481:
2482: else if ((((*s_objet_argument_1).type == VRL) &&
2483: ((*s_objet_argument_2).type == REL)) ||
2484: (((*s_objet_argument_1).type == REL) &&
2485: ((*s_objet_argument_2).type == VRL)))
2486: {
2487: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
2488: == NULL)
2489: {
2490: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2491: return;
2492: }
2493:
2494: if ((*s_objet_argument_1).type == VRL)
2495: {
2496: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2497: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2498: }
2499: else
2500: {
2501: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2502: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2503: }
2504:
2505: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2506: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2507: .objet))).taille * sizeof(real8))) == NULL)
2508: {
2509: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2510: return;
2511: }
2512:
2513: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2514: .objet))).taille; i++)
2515: {
2516: if ((*s_objet_argument_1).type == VRL)
2517: {
2518: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2519: .tableau)[i] = (*((real8 *) (*s_objet_argument_2)
2520: .objet)) * ((real8 *) (*((struct_vecteur *)
2521: (*s_objet_argument_1).objet)).tableau)[i];
2522: }
2523: else
2524: {
2525: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
2526: .tableau)[i] = (*((real8 *) (*s_objet_argument_1)
2527: .objet)) * ((real8 *) (*((struct_vecteur *)
2528: (*s_objet_argument_2).objet)).tableau)[i];
2529: }
2530: }
2531: }
2532:
2533: /*
2534: * Vecteur de complexes / Réel
2535: */
2536:
2537: else if ((((*s_objet_argument_1).type == VCX) &&
2538: ((*s_objet_argument_2).type == REL)) ||
2539: (((*s_objet_argument_1).type == REL) &&
2540: ((*s_objet_argument_2).type == VCX)))
2541: {
2542: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
2543: == NULL)
2544: {
2545: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2546: return;
2547: }
2548:
2549: if ((*s_objet_argument_1).type == VCX)
2550: {
2551: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2552: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2553: }
2554: else
2555: {
2556: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2557: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2558: }
2559:
2560: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2561: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2562: .objet))).taille * sizeof(struct_complexe16))) == NULL)
2563: {
2564: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2565: return;
2566: }
2567:
2568: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2569: .objet))).taille; i++)
2570: {
2571: if ((*s_objet_argument_1).type == VCX)
2572: {
2573: f77multiplicationcr_(&(((struct_complexe16 *)
2574: (*((struct_vecteur *)
2575: (*s_objet_argument_1).objet)).tableau)[i]),
2576: &((*((real8 *) (*s_objet_argument_2).objet))),
2577: &(((struct_complexe16 *) (*((struct_vecteur *)
2578: (*s_objet_resultat).objet)).tableau)[i]));
2579: }
2580: else
2581: {
2582: f77multiplicationcr_(&(((struct_complexe16 *)
2583: (*((struct_vecteur *)
2584: (*s_objet_argument_2).objet)).tableau)[i]),
2585: &((*((real8 *) (*s_objet_argument_1).objet))),
2586: &(((struct_complexe16 *) (*((struct_vecteur *)
2587: (*s_objet_resultat).objet)).tableau)[i]));
2588: }
2589: }
2590: }
2591:
2592: /*
2593: * Vecteur d'entiers / Complexe
2594: */
2595:
2596: else if ((((*s_objet_argument_1).type == VIN) &&
2597: ((*s_objet_argument_2).type == CPL)) ||
2598: (((*s_objet_argument_1).type == CPL) &&
2599: ((*s_objet_argument_2).type == VIN)))
2600: {
2601: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
2602: == NULL)
2603: {
2604: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2605: return;
2606: }
2607:
2608: if ((*s_objet_argument_1).type == VIN)
2609: {
2610: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2611: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2612: }
2613: else
2614: {
2615: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2616: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2617: }
2618:
2619: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2620: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2621: .objet))).taille * sizeof(struct_complexe16))) == NULL)
2622: {
2623: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2624: return;
2625: }
2626:
2627: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2628: .objet))).taille; i++)
2629: {
2630: if ((*s_objet_argument_1).type == VIN)
2631: {
2632: f77multiplicationci_(&((*((struct_complexe16 *)
2633: (*s_objet_argument_2).objet))),
2634: &(((integer8 *) (*((struct_vecteur *)
2635: (*s_objet_argument_1).objet)).tableau)[i]),
2636: &(((struct_complexe16 *) (*((struct_vecteur *)
2637: (*s_objet_resultat).objet)).tableau)[i]));
2638: }
2639: else
2640: {
2641: f77multiplicationci_(&((*((struct_complexe16 *)
2642: (*s_objet_argument_1).objet))),
2643: &(((integer8 *) (*((struct_vecteur *)
2644: (*s_objet_argument_2).objet)).tableau)[i]),
2645: &(((struct_complexe16 *) (*((struct_vecteur *)
2646: (*s_objet_resultat).objet)).tableau)[i]));
2647: }
2648: }
2649: }
2650:
2651: /*
2652: * Vecteur de réels / Complexe
2653: */
2654:
2655: else if ((((*s_objet_argument_1).type == VRL) &&
2656: ((*s_objet_argument_2).type == CPL)) ||
2657: (((*s_objet_argument_1).type == CPL) &&
2658: ((*s_objet_argument_2).type == VRL)))
2659: {
2660: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
2661: == NULL)
2662: {
2663: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2664: return;
2665: }
2666:
2667: if ((*s_objet_argument_1).type == VRL)
2668: {
2669: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2670: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2671: }
2672: else
2673: {
2674: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2675: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2676: }
2677:
2678: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2679: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2680: .objet))).taille * sizeof(struct_complexe16))) == NULL)
2681: {
2682: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2683: return;
2684: }
2685:
2686: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2687: .objet))).taille; i++)
2688: {
2689: if ((*s_objet_argument_1).type == VRL)
2690: {
2691: f77multiplicationcr_(&((*((struct_complexe16 *)
2692: (*s_objet_argument_2).objet))),
2693: &(((real8 *) (*((struct_vecteur *)
2694: (*s_objet_argument_1).objet)).tableau)[i]),
2695: &(((struct_complexe16 *) (*((struct_vecteur *)
2696: (*s_objet_resultat).objet)).tableau)[i]));
2697: }
2698: else
2699: {
2700: f77multiplicationcr_(&((*((struct_complexe16 *)
2701: (*s_objet_argument_1).objet))),
2702: &(((real8 *) (*((struct_vecteur *)
2703: (*s_objet_argument_2).objet)).tableau)[i]),
2704: &(((struct_complexe16 *) (*((struct_vecteur *)
2705: (*s_objet_resultat).objet)).tableau)[i]));
2706: }
2707: }
2708: }
2709:
2710: /*
2711: * Vecteur de complexes / Complexe
2712: */
2713:
2714: else if ((((*s_objet_argument_1).type == VCX) &&
2715: ((*s_objet_argument_2).type == CPL)) ||
2716: (((*s_objet_argument_1).type == CPL) &&
2717: ((*s_objet_argument_2).type == VCX)))
2718: {
2719: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
2720: == NULL)
2721: {
2722: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2723: return;
2724: }
2725:
2726: if ((*s_objet_argument_1).type == VCX)
2727: {
2728: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2729: (*((struct_vecteur *) (*s_objet_argument_1).objet)).taille;
2730: }
2731: else
2732: {
2733: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
2734: (*((struct_vecteur *) (*s_objet_argument_2).objet)).taille;
2735: }
2736:
2737: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
2738: malloc((*(((struct_vecteur *) (*s_objet_resultat)
2739: .objet))).taille * sizeof(struct_complexe16))) == NULL)
2740: {
2741: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2742: return;
2743: }
2744:
2745: for(i = 0; i < (*(((struct_vecteur *) (*s_objet_resultat)
2746: .objet))).taille; i++)
2747: {
2748: if ((*s_objet_argument_1).type == VCX)
2749: {
2750: f77multiplicationcc_(&(((struct_complexe16 *)
2751: (*((struct_vecteur *)
2752: (*s_objet_argument_1).objet)).tableau)[i]),
2753: &((*((struct_complexe16 *)
2754: (*s_objet_argument_2).objet))),
2755: &(((struct_complexe16 *) (*((struct_vecteur *)
2756: (*s_objet_resultat).objet)).tableau)[i]));
2757: }
2758: else
2759: {
2760: f77multiplicationcc_(&(((struct_complexe16 *)
2761: (*((struct_vecteur *)
2762: (*s_objet_argument_2).objet)).tableau)[i]),
2763: &((*((struct_complexe16 *)
2764: (*s_objet_argument_1).objet))),
2765: &(((struct_complexe16 *) (*((struct_vecteur *)
2766: (*s_objet_resultat).objet)).tableau)[i]));
2767: }
2768: }
2769: }
2770:
2771: /*
2772: --------------------------------------------------------------------------------
2773: Multiplication d'une matrice par un scalaire
2774: --------------------------------------------------------------------------------
2775: */
2776: /*
2777: * Matrice d'entiers / Entier
2778: */
2779:
2780: else if ((((*s_objet_argument_1).type == MIN) &&
2781: ((*s_objet_argument_2).type == INT)) ||
2782: (((*s_objet_argument_1).type == INT) &&
2783: ((*s_objet_argument_2).type == MIN)))
2784: {
2785: if ((s_objet_resultat = allocation(s_etat_processus, MIN))
2786: == NULL)
2787: {
2788: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2789: return;
2790: }
2791:
2792: if ((*s_objet_argument_1).type == MIN)
2793: {
2794: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
2795: (*((struct_matrice *) (*s_objet_argument_1).objet))
2796: .nombre_lignes;
2797: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
2798: (*((struct_matrice *) (*s_objet_argument_1).objet))
2799: .nombre_colonnes;
2800: }
2801: else
2802: {
2803: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
2804: (*((struct_matrice *) (*s_objet_argument_2).objet))
2805: .nombre_lignes;
2806: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
2807: (*((struct_matrice *) (*s_objet_argument_2).objet))
2808: .nombre_colonnes;
2809: }
2810:
2811: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
2812: malloc((*(((struct_matrice *) (*s_objet_resultat)
2813: .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
2814: {
2815: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2816: return;
2817: }
2818:
2819: depassement = d_faux;
2820:
2821: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
2822: .objet))).nombre_lignes; i++)
2823: {
2824: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
2825: malloc((*(((struct_matrice *) (*s_objet_resultat)
2826: .objet))).nombre_colonnes * sizeof(integer8))) == NULL)
2827: {
2828: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2829: return;
2830: }
2831:
2832: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
2833: .objet))).nombre_colonnes; j++)
2834: {
2835: if ((*s_objet_argument_1).type == MIN)
2836: {
2837: if (depassement_multiplication((integer8 *)
2838: (*s_objet_argument_2).objet, &(((integer8 **)
2839: (*((struct_matrice *) (*s_objet_argument_1).objet))
2840: .tableau)[i][j]), &(((integer8 **)
2841: (*((struct_matrice *) (*s_objet_resultat).objet))
2842: .tableau)[i][j])) == d_erreur)
2843: {
2844: depassement = d_vrai;
2845: }
2846: }
2847: else
2848: {
2849: if (depassement_multiplication((integer8 *)
2850: (*s_objet_argument_1).objet, &(((integer8 **)
2851: (*((struct_matrice *) (*s_objet_argument_2).objet))
2852: .tableau)[i][j]), &(((integer8 **)
2853: (*((struct_matrice *) (*s_objet_resultat).objet))
2854: .tableau)[i][j])) == d_erreur)
2855: {
2856: depassement = d_vrai;
2857: }
2858: }
2859: }
2860: }
2861:
2862: if (depassement == d_vrai)
2863: {
2864: (*s_objet_resultat).type = MRL;
2865: (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
2866:
2867: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
2868: .objet))).nombre_lignes; i++)
2869: {
2870: free(((integer8 **) (*((struct_matrice *)
2871: (*s_objet_resultat).objet)).tableau)[i]);
2872:
2873: if (((*((struct_matrice *) (*s_objet_resultat).objet))
2874: .tableau[i] = malloc((*(((struct_matrice *)
2875: (*s_objet_resultat).objet))).nombre_colonnes *
2876: sizeof(real8))) == NULL)
2877: {
2878: (*s_etat_processus).erreur_systeme =
2879: d_es_allocation_memoire;
2880: return;
2881: }
2882:
2883: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
2884: .objet))).nombre_colonnes; j++)
2885: {
2886: if ((*s_objet_argument_1).type == MIN)
2887: {
2888: ((real8 **) (*((struct_matrice *)
2889: (*s_objet_resultat).objet)).tableau)[i][j] =
2890: ((real8) (*((integer8 *) (*s_objet_argument_2)
2891: .objet))) * ((real8) ((integer8 **)
2892: (*((struct_matrice *) (*s_objet_argument_1).objet))
2893: .tableau)[i][j]);
2894: }
2895: else
2896: {
2897: ((real8 **) (*((struct_matrice *)
2898: (*s_objet_resultat).objet)).tableau)[i][j] =
2899: ((real8) (*((integer8 *) (*s_objet_argument_1)
2900: .objet))) * ((real8) ((integer8 **)
2901: (*((struct_matrice *) (*s_objet_argument_2).objet))
2902: .tableau)[i][j]);
2903: }
2904: }
2905: }
2906: }
2907: }
2908:
2909: /*
2910: * Matrice de réels / Entier
2911: */
2912:
2913: else if ((((*s_objet_argument_1).type == MRL) &&
2914: ((*s_objet_argument_2).type == INT)) ||
2915: (((*s_objet_argument_1).type == INT) &&
2916: ((*s_objet_argument_2).type == MRL)))
2917: {
2918: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
2919: == NULL)
2920: {
2921: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2922: return;
2923: }
2924:
2925: if ((*s_objet_argument_1).type == MRL)
2926: {
2927: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
2928: (*((struct_matrice *) (*s_objet_argument_1).objet))
2929: .nombre_lignes;
2930: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
2931: (*((struct_matrice *) (*s_objet_argument_1).objet))
2932: .nombre_colonnes;
2933: }
2934: else
2935: {
2936: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
2937: (*((struct_matrice *) (*s_objet_argument_2).objet))
2938: .nombre_lignes;
2939: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
2940: (*((struct_matrice *) (*s_objet_argument_2).objet))
2941: .nombre_colonnes;
2942: }
2943:
2944: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
2945: malloc((*(((struct_matrice *) (*s_objet_resultat)
2946: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
2947: {
2948: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2949: return;
2950: }
2951:
2952: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
2953: .objet))).nombre_lignes; i++)
2954: {
2955: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
2956: malloc((*(((struct_matrice *) (*s_objet_resultat)
2957: .objet))).nombre_colonnes * sizeof(real8))) == NULL)
2958: {
2959: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2960: return;
2961: }
2962:
2963: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
2964: .objet))).nombre_colonnes; j++)
2965: {
2966: if ((*s_objet_argument_1).type == MRL)
2967: {
2968: ((real8 **) (*((struct_matrice *)
2969: (*s_objet_resultat).objet)).tableau)[i][j] =
2970: (*((integer8 *) (*s_objet_argument_2)
2971: .objet)) * ((real8 **) (*((struct_matrice *)
2972: (*s_objet_argument_1).objet)).tableau)[i][j];
2973: }
2974: else
2975: {
2976: ((real8 **) (*((struct_matrice *)
2977: (*s_objet_resultat).objet)).tableau)[i][j] =
2978: (*((integer8 *) (*s_objet_argument_1)
2979: .objet)) * ((real8 **) (*((struct_matrice *)
2980: (*s_objet_argument_2).objet)).tableau)[i][j];
2981: }
2982: }
2983: }
2984: }
2985:
2986: /*
2987: * Matrice de complexes / Entier
2988: */
2989:
2990: else if ((((*s_objet_argument_1).type == MCX) &&
2991: ((*s_objet_argument_2).type == INT)) ||
2992: (((*s_objet_argument_1).type == INT) &&
2993: ((*s_objet_argument_2).type == MCX)))
2994: {
2995: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
2996: == NULL)
2997: {
2998: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2999: return;
3000: }
3001:
3002: if ((*s_objet_argument_1).type == MCX)
3003: {
3004: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3005: (*((struct_matrice *) (*s_objet_argument_1).objet))
3006: .nombre_lignes;
3007: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3008: (*((struct_matrice *) (*s_objet_argument_1).objet))
3009: .nombre_colonnes;
3010: }
3011: else
3012: {
3013: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3014: (*((struct_matrice *) (*s_objet_argument_2).objet))
3015: .nombre_lignes;
3016: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3017: (*((struct_matrice *) (*s_objet_argument_2).objet))
3018: .nombre_colonnes;
3019: }
3020:
3021: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3022: malloc((*(((struct_matrice *) (*s_objet_resultat)
3023: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
3024: {
3025: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3026: return;
3027: }
3028:
3029: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3030: .objet))).nombre_lignes; i++)
3031: {
3032: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3033: malloc((*(((struct_matrice *) (*s_objet_resultat)
3034: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
3035: == NULL)
3036: {
3037: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3038: return;
3039: }
3040:
3041: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3042: .objet))).nombre_colonnes; j++)
3043: {
3044: if ((*s_objet_argument_1).type == MCX)
3045: {
3046: f77multiplicationci_(&(((struct_complexe16 **)
3047: (*((struct_matrice *) (*s_objet_argument_1).objet))
3048: .tableau)[i][j]), &((*((integer8 *)
3049: (*s_objet_argument_2).objet))),
3050: &(((struct_complexe16 **) (*((struct_matrice *)
3051: (*s_objet_resultat).objet)).tableau)[i][j]));
3052: }
3053: else
3054: {
3055: f77multiplicationci_(&(((struct_complexe16 **)
3056: (*((struct_matrice *) (*s_objet_argument_2).objet))
3057: .tableau)[i][j]), &((*((integer8 *)
3058: (*s_objet_argument_1).objet))),
3059: &(((struct_complexe16 **) (*((struct_matrice *)
3060: (*s_objet_resultat).objet)).tableau)[i][j]));
3061: }
3062: }
3063: }
3064: }
3065:
3066: /*
3067: * Matrice d'entiers / Réel
3068: */
3069:
3070: else if ((((*s_objet_argument_1).type == MIN) &&
3071: ((*s_objet_argument_2).type == REL)) ||
3072: (((*s_objet_argument_1).type == REL) &&
3073: ((*s_objet_argument_2).type == MIN)))
3074: {
3075: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
3076: == NULL)
3077: {
3078: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3079: return;
3080: }
3081:
3082: if ((*s_objet_argument_1).type == MIN)
3083: {
3084: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3085: (*((struct_matrice *) (*s_objet_argument_1).objet))
3086: .nombre_lignes;
3087: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3088: (*((struct_matrice *) (*s_objet_argument_1).objet))
3089: .nombre_colonnes;
3090: }
3091: else
3092: {
3093: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3094: (*((struct_matrice *) (*s_objet_argument_2).objet))
3095: .nombre_lignes;
3096: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3097: (*((struct_matrice *) (*s_objet_argument_2).objet))
3098: .nombre_colonnes;
3099: }
3100:
3101: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3102: malloc((*(((struct_matrice *) (*s_objet_resultat)
3103: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
3104: {
3105: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3106: return;
3107: }
3108:
3109: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3110: .objet))).nombre_lignes; i++)
3111: {
3112: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3113: malloc((*(((struct_matrice *) (*s_objet_resultat)
3114: .objet))).nombre_colonnes * sizeof(real8))) == NULL)
3115: {
3116: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3117: return;
3118: }
3119:
3120: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3121: .objet))).nombre_colonnes; j++)
3122: {
3123: if ((*s_objet_argument_1).type == MIN)
3124: {
3125: ((real8 **) (*((struct_matrice *)
3126: (*s_objet_resultat).objet)).tableau)[i][j] =
3127: (*((real8 *) (*s_objet_argument_2)
3128: .objet)) * ((integer8 **) (*((struct_matrice *)
3129: (*s_objet_argument_1).objet)).tableau)[i][j];
3130: }
3131: else
3132: {
3133: ((real8 **) (*((struct_matrice *)
3134: (*s_objet_resultat).objet)).tableau)[i][j] =
3135: (*((real8 *) (*s_objet_argument_1)
3136: .objet)) * ((integer8 **) (*((struct_matrice *)
3137: (*s_objet_argument_2).objet)).tableau)[i][j];
3138: }
3139: }
3140: }
3141: }
3142:
3143: /*
3144: * Matrice de réels / Réel
3145: */
3146:
3147: else if ((((*s_objet_argument_1).type == MRL) &&
3148: ((*s_objet_argument_2).type == REL)) ||
3149: (((*s_objet_argument_1).type == REL) &&
3150: ((*s_objet_argument_2).type == MRL)))
3151: {
3152: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
3153: == NULL)
3154: {
3155: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3156: return;
3157: }
3158:
3159: if ((*s_objet_argument_1).type == MRL)
3160: {
3161: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3162: (*((struct_matrice *) (*s_objet_argument_1).objet))
3163: .nombre_lignes;
3164: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3165: (*((struct_matrice *) (*s_objet_argument_1).objet))
3166: .nombre_colonnes;
3167: }
3168: else
3169: {
3170: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3171: (*((struct_matrice *) (*s_objet_argument_2).objet))
3172: .nombre_lignes;
3173: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3174: (*((struct_matrice *) (*s_objet_argument_2).objet))
3175: .nombre_colonnes;
3176: }
3177:
3178: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3179: malloc((*(((struct_matrice *) (*s_objet_resultat)
3180: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
3181: {
3182: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3183: return;
3184: }
3185:
3186: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3187: .objet))).nombre_lignes; i++)
3188: {
3189: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3190: malloc((*(((struct_matrice *) (*s_objet_resultat)
3191: .objet))).nombre_colonnes * sizeof(real8))) == NULL)
3192: {
3193: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3194: return;
3195: }
3196:
3197: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3198: .objet))).nombre_colonnes; j++)
3199: {
3200: if ((*s_objet_argument_1).type == MRL)
3201: {
3202: ((real8 **) (*((struct_matrice *)
3203: (*s_objet_resultat).objet)).tableau)[i][j] =
3204: (*((real8 *) (*s_objet_argument_2)
3205: .objet)) * ((real8 **) (*((struct_matrice *)
3206: (*s_objet_argument_1).objet)).tableau)[i][j];
3207: }
3208: else
3209: {
3210: ((real8 **) (*((struct_matrice *)
3211: (*s_objet_resultat).objet)).tableau)[i][j] =
3212: (*((real8 *) (*s_objet_argument_1)
3213: .objet)) * ((real8 **) (*((struct_matrice *)
3214: (*s_objet_argument_2).objet)).tableau)[i][j];
3215: }
3216: }
3217: }
3218: }
3219:
3220: /*
3221: * Matrice de complexes / Réel
3222: */
3223:
3224: else if ((((*s_objet_argument_1).type == MCX) &&
3225: ((*s_objet_argument_2).type == REL)) ||
3226: (((*s_objet_argument_1).type == REL) &&
3227: ((*s_objet_argument_2).type == MCX)))
3228: {
3229: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
3230: == NULL)
3231: {
3232: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3233: return;
3234: }
3235:
3236: if ((*s_objet_argument_1).type == MCX)
3237: {
3238: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3239: (*((struct_matrice *) (*s_objet_argument_1).objet))
3240: .nombre_lignes;
3241: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3242: (*((struct_matrice *) (*s_objet_argument_1).objet))
3243: .nombre_colonnes;
3244: }
3245: else
3246: {
3247: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3248: (*((struct_matrice *) (*s_objet_argument_2).objet))
3249: .nombre_lignes;
3250: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3251: (*((struct_matrice *) (*s_objet_argument_2).objet))
3252: .nombre_colonnes;
3253: }
3254:
3255: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3256: malloc((*(((struct_matrice *) (*s_objet_resultat)
3257: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
3258: {
3259: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3260: return;
3261: }
3262:
3263: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3264: .objet))).nombre_lignes; i++)
3265: {
3266: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3267: malloc((*(((struct_matrice *) (*s_objet_resultat)
3268: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
3269: == NULL)
3270: {
3271: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3272: return;
3273: }
3274:
3275: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3276: .objet))).nombre_colonnes; j++)
3277: {
3278: if ((*s_objet_argument_1).type == MCX)
3279: {
3280: f77multiplicationcr_(&(((struct_complexe16 **)
3281: (*((struct_matrice *) (*s_objet_argument_1).objet))
3282: .tableau)[i][j]), &((*((real8 *)
3283: (*s_objet_argument_2).objet))),
3284: &(((struct_complexe16 **) (*((struct_matrice *)
3285: (*s_objet_resultat).objet)).tableau)[i][j]));
3286: }
3287: else
3288: {
3289: f77multiplicationcr_(&(((struct_complexe16 **)
3290: (*((struct_matrice *) (*s_objet_argument_2).objet))
3291: .tableau)[i][j]), &((*((real8 *)
3292: (*s_objet_argument_1).objet))),
3293: &(((struct_complexe16 **) (*((struct_matrice *)
3294: (*s_objet_resultat).objet)).tableau)[i][j]));
3295: }
3296: }
3297: }
3298: }
3299:
3300: /*
3301: * Matrice d'entiers / Complexe
3302: */
3303:
3304: else if ((((*s_objet_argument_1).type == MIN) &&
3305: ((*s_objet_argument_2).type == CPL)) ||
3306: (((*s_objet_argument_1).type == CPL) &&
3307: ((*s_objet_argument_2).type == MIN)))
3308: {
3309: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
3310: == NULL)
3311: {
3312: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3313: return;
3314: }
3315:
3316: if ((*s_objet_argument_1).type == MIN)
3317: {
3318: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3319: (*((struct_matrice *) (*s_objet_argument_1).objet))
3320: .nombre_lignes;
3321: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3322: (*((struct_matrice *) (*s_objet_argument_1).objet))
3323: .nombre_colonnes;
3324: }
3325: else
3326: {
3327: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3328: (*((struct_matrice *) (*s_objet_argument_2).objet))
3329: .nombre_lignes;
3330: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3331: (*((struct_matrice *) (*s_objet_argument_2).objet))
3332: .nombre_colonnes;
3333: }
3334:
3335: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3336: malloc((*(((struct_matrice *) (*s_objet_resultat)
3337: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
3338: {
3339: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3340: return;
3341: }
3342:
3343: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3344: .objet))).nombre_lignes; i++)
3345: {
3346: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3347: malloc((*(((struct_matrice *) (*s_objet_resultat)
3348: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
3349: == NULL)
3350: {
3351: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3352: return;
3353: }
3354:
3355: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3356: .objet))).nombre_colonnes; j++)
3357: {
3358: if ((*s_objet_argument_1).type == MIN)
3359: {
3360: f77multiplicationci_(&((*((struct_complexe16 *)
3361: (*s_objet_argument_2).objet))),
3362: &(((integer8 **) (*((struct_matrice *)
3363: (*s_objet_argument_1).objet)).tableau)[i][j]),
3364: &(((struct_complexe16 **) (*((struct_matrice *)
3365: (*s_objet_resultat).objet)).tableau)[i][j]));
3366: }
3367: else
3368: {
3369: f77multiplicationci_(&((*((struct_complexe16 *)
3370: (*s_objet_argument_1).objet))),
3371: &(((integer8 **) (*((struct_matrice *)
3372: (*s_objet_argument_2).objet)).tableau)[i][j]),
3373: &(((struct_complexe16 **) (*((struct_matrice *)
3374: (*s_objet_resultat).objet)).tableau)[i][j]));
3375: }
3376: }
3377: }
3378: }
3379:
3380: /*
3381: * Matrice de réels / Complexe
3382: */
3383:
3384: else if ((((*s_objet_argument_1).type == MRL) &&
3385: ((*s_objet_argument_2).type == CPL)) ||
3386: (((*s_objet_argument_1).type == CPL) &&
3387: ((*s_objet_argument_2).type == MRL)))
3388: {
3389: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
3390: == NULL)
3391: {
3392: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3393: return;
3394: }
3395:
3396: if ((*s_objet_argument_1).type == MRL)
3397: {
3398: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3399: (*((struct_matrice *) (*s_objet_argument_1).objet))
3400: .nombre_lignes;
3401: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3402: (*((struct_matrice *) (*s_objet_argument_1).objet))
3403: .nombre_colonnes;
3404: }
3405: else
3406: {
3407: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3408: (*((struct_matrice *) (*s_objet_argument_2).objet))
3409: .nombre_lignes;
3410: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3411: (*((struct_matrice *) (*s_objet_argument_2).objet))
3412: .nombre_colonnes;
3413: }
3414:
3415: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3416: malloc((*(((struct_matrice *) (*s_objet_resultat)
3417: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
3418: {
3419: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3420: return;
3421: }
3422:
3423: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3424: .objet))).nombre_lignes; i++)
3425: {
3426: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3427: malloc((*(((struct_matrice *) (*s_objet_resultat)
3428: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
3429: == NULL)
3430: {
3431: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3432: return;
3433: }
3434:
3435: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3436: .objet))).nombre_colonnes; j++)
3437: {
3438: if ((*s_objet_argument_1).type == MRL)
3439: {
3440: f77multiplicationcr_(&((*((struct_complexe16 *)
3441: (*s_objet_argument_2).objet))),
3442: &(((real8 **) (*((struct_matrice *)
3443: (*s_objet_argument_1).objet)).tableau)[i][j]),
3444: &(((struct_complexe16 **) (*((struct_matrice *)
3445: (*s_objet_resultat).objet)).tableau)[i][j]));
3446: }
3447: else
3448: {
3449: f77multiplicationcr_(&((*((struct_complexe16 *)
3450: (*s_objet_argument_1).objet))),
3451: &(((real8 **) (*((struct_matrice *)
3452: (*s_objet_argument_2).objet)).tableau)[i][j]),
3453: &(((struct_complexe16 **) (*((struct_matrice *)
3454: (*s_objet_resultat).objet)).tableau)[i][j]));
3455: }
3456: }
3457: }
3458: }
3459:
3460: /*
3461: * Matrice de complexes / Complexe
3462: */
3463:
3464: else if ((((*s_objet_argument_1).type == MCX) &&
3465: ((*s_objet_argument_2).type == CPL)) ||
3466: (((*s_objet_argument_1).type == CPL) &&
3467: ((*s_objet_argument_2).type == MCX)))
3468: {
3469: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
3470: == NULL)
3471: {
3472: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3473: return;
3474: }
3475:
3476: if ((*s_objet_argument_1).type == MCX)
3477: {
3478: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3479: (*((struct_matrice *) (*s_objet_argument_1).objet))
3480: .nombre_lignes;
3481: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3482: (*((struct_matrice *) (*s_objet_argument_1).objet))
3483: .nombre_colonnes;
3484: }
3485: else
3486: {
3487: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
3488: (*((struct_matrice *) (*s_objet_argument_2).objet))
3489: .nombre_lignes;
3490: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
3491: (*((struct_matrice *) (*s_objet_argument_2).objet))
3492: .nombre_colonnes;
3493: }
3494:
3495: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
3496: malloc((*(((struct_matrice *) (*s_objet_resultat)
3497: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
3498: {
3499: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3500: return;
3501: }
3502:
3503: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
3504: .objet))).nombre_lignes; i++)
3505: {
3506: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
3507: malloc((*(((struct_matrice *) (*s_objet_resultat)
3508: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
3509: == NULL)
3510: {
3511: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3512: return;
3513: }
3514:
3515: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
3516: .objet))).nombre_colonnes; j++)
3517: {
3518: if ((*s_objet_argument_1).type == MCX)
3519: {
3520: f77multiplicationcc_(&((*((struct_complexe16 *)
3521: (*s_objet_argument_2).objet))),
3522: &(((struct_complexe16 **) (*((struct_matrice *)
3523: (*s_objet_argument_1).objet)).tableau)[i][j]),
3524: &(((struct_complexe16 **) (*((struct_matrice *)
3525: (*s_objet_resultat).objet)).tableau)[i][j]));
3526: }
3527: else
3528: {
3529: f77multiplicationcc_(&((*((struct_complexe16 *)
3530: (*s_objet_argument_1).objet))),
3531: &(((struct_complexe16 **) (*((struct_matrice *)
3532: (*s_objet_argument_2).objet)).tableau)[i][j]),
3533: &(((struct_complexe16 **) (*((struct_matrice *)
3534: (*s_objet_resultat).objet)).tableau)[i][j]));
3535: }
3536: }
3537: }
3538: }
3539:
3540: /*
3541: --------------------------------------------------------------------------------
3542: Multiplication d'une matrice par un vecteur (résultat : vecteur)
3543: --------------------------------------------------------------------------------
3544: */
3545: /*
3546: * Matrice d'entiers / Vecteur d'entiers
3547: */
3548:
3549: else if (((*s_objet_argument_2).type == MIN) &&
3550: ((*s_objet_argument_1).type == VIN))
3551: {
3552: if ((s_objet_resultat = allocation(s_etat_processus, VIN))
3553: == NULL)
3554: {
3555: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3556: return;
3557: }
3558:
3559: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3560: (*(((struct_matrice *) (*s_objet_argument_2)
3561: .objet))).nombre_lignes;
3562:
3563: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3564: (*((struct_matrice *) (*s_objet_argument_2).objet))
3565: .nombre_colonnes)
3566: {
3567: liberation(s_etat_processus, s_objet_argument_1);
3568: liberation(s_etat_processus, s_objet_argument_2);
3569: liberation(s_etat_processus, s_objet_resultat);
3570:
3571: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3572: return;
3573: }
3574:
3575: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3576: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3577: .objet))).nombre_lignes * sizeof(integer8))) == NULL)
3578: {
3579: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3580: return;
3581: }
3582:
3583: depassement = d_faux;
3584:
3585: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3586: .objet))).nombre_lignes; i++)
3587: {
3588: ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3589: .tableau)[i] = 0;
3590:
3591: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3592: .objet))).nombre_colonnes; k++)
3593: {
3594: if (depassement_multiplication(&(((integer8 **)
3595: (*((struct_matrice *) (*s_objet_argument_2).objet))
3596: .tableau)[i][k]), &(((integer8 *) (*((struct_vecteur *)
3597: (*s_objet_argument_1).objet)).tableau)[k]), &tampon)
3598: == d_erreur)
3599: {
3600: depassement = d_vrai;
3601: }
3602:
3603: if (depassement_addition(&(((integer8 *) (*((struct_vecteur *)
3604: (*s_objet_resultat).objet)).tableau)[i]), &tampon,
3605: &cumul) == d_erreur)
3606: {
3607: depassement = d_vrai;
3608: }
3609:
3610: ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3611: .tableau)[i] = cumul;
3612: }
3613: }
3614:
3615: if (depassement == d_vrai)
3616: {
3617: (*s_objet_resultat).type = VRL;
3618: (*((struct_vecteur *) (*s_objet_resultat).objet)).type = 'R';
3619:
3620: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3621: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3622: .objet))).nombre_lignes * sizeof(real8))) == NULL)
3623: {
3624: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3625: return;
3626: }
3627:
3628: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3629: .objet))).nombre_lignes; i++)
3630: {
3631: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3632: .tableau)[i] = 0;
3633:
3634: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3635: .objet))).nombre_colonnes; k++)
3636: {
3637: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3638: .tableau)[i] = ((real8) ((integer8 *)
3639: (*((struct_vecteur *) (*s_objet_resultat).objet))
3640: .tableau)[i]) + ((real8) (((integer8 **)
3641: (*((struct_matrice *) (*s_objet_argument_2).objet))
3642: .tableau)[i][k]) * ((real8) ((integer8 *)
3643: (*((struct_vecteur *) (*s_objet_argument_1).objet))
3644: .tableau)[k]));
3645: }
3646: }
3647: }
3648: }
3649:
3650: /*
3651: * Matrice d'entiers / Vecteur de réels
3652: */
3653:
3654: else if (((*s_objet_argument_2).type == MIN) &&
3655: ((*s_objet_argument_1).type == VRL))
3656: {
3657: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
3658: == NULL)
3659: {
3660: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3661: return;
3662: }
3663:
3664: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3665: (*(((struct_matrice *) (*s_objet_argument_2)
3666: .objet))).nombre_lignes;
3667:
3668: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3669: (*((struct_matrice *) (*s_objet_argument_2).objet))
3670: .nombre_colonnes)
3671: {
3672: liberation(s_etat_processus, s_objet_argument_1);
3673: liberation(s_etat_processus, s_objet_argument_2);
3674: liberation(s_etat_processus, s_objet_resultat);
3675:
3676: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3677: return;
3678: }
3679:
3680: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3681: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3682: .objet))).nombre_lignes * sizeof(real8))) == NULL)
3683: {
3684: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3685: return;
3686: }
3687:
3688: if ((accumulateur = malloc((*(((struct_matrice *)
3689: (*s_objet_argument_2).objet))).nombre_colonnes *
3690: sizeof(real8))) == NULL)
3691: {
3692: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3693: return;
3694: }
3695:
3696: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3697: .objet))).nombre_lignes; i++)
3698: {
3699: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3700: .objet))).nombre_colonnes; k++)
3701: {
3702: ((real8 *) accumulateur)[k] = (((integer8 **)
3703: (*((struct_matrice *) (*s_objet_argument_2).objet))
3704: .tableau)[i][k] * ((real8 *) (*((struct_vecteur *)
3705: (*s_objet_argument_1).objet)).tableau)[k]);
3706: }
3707:
3708: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3709: .tableau)[i] = sommation_vecteur_reel(accumulateur,
3710: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
3711: .nombre_colonnes), &erreur_memoire);
3712:
3713: if (erreur_memoire == d_vrai)
3714: {
3715: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3716: return;
3717: }
3718: }
3719:
3720: free(accumulateur);
3721: }
3722:
3723: /*
3724: * Matrice d'entiers / Vecteur de complexes
3725: */
3726:
3727: else if (((*s_objet_argument_2).type == MIN) &&
3728: ((*s_objet_argument_1).type == VCX))
3729: {
3730: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
3731: == NULL)
3732: {
3733: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3734: return;
3735: }
3736:
3737: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3738: (*(((struct_matrice *) (*s_objet_argument_2)
3739: .objet))).nombre_lignes;
3740:
3741: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3742: (*((struct_matrice *) (*s_objet_argument_2).objet))
3743: .nombre_colonnes)
3744: {
3745: liberation(s_etat_processus, s_objet_argument_1);
3746: liberation(s_etat_processus, s_objet_argument_2);
3747: liberation(s_etat_processus, s_objet_resultat);
3748:
3749: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3750: return;
3751: }
3752:
3753: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3754: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3755: .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
3756: {
3757: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3758: return;
3759: }
3760:
3761: if ((accumulateur = malloc((*(((struct_matrice *)
3762: (*s_objet_argument_2).objet))).nombre_colonnes *
3763: sizeof(complex16))) == NULL)
3764: {
3765: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3766: return;
3767: }
3768:
3769: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3770: .objet))).nombre_lignes; i++)
3771: {
3772: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3773: .objet))).nombre_colonnes; k++)
3774: {
3775: f77multiplicationci_(&(((struct_complexe16 *)
3776: (*((struct_vecteur *) (*s_objet_argument_1).objet))
3777: .tableau)[k]), &(((integer8 **) (*((struct_matrice *)
3778: (*s_objet_argument_2).objet)).tableau)[i][k]),
3779: &(((complex16 *) accumulateur)[k]));
3780: }
3781:
3782: ((complex16 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3783: .tableau)[i] = sommation_vecteur_complexe(accumulateur,
3784: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
3785: .nombre_colonnes), &erreur_memoire);
3786:
3787: if (erreur_memoire == d_vrai)
3788: {
3789: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3790: return;
3791: }
3792: }
3793:
3794: free(accumulateur);
3795: }
3796:
3797: /*
3798: * Matrice de réels / Vecteur d'entiers
3799: */
3800:
3801: else if (((*s_objet_argument_2).type == MRL) &&
3802: ((*s_objet_argument_1).type == VIN))
3803: {
3804: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
3805: == NULL)
3806: {
3807: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3808: return;
3809: }
3810:
3811: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3812: (*(((struct_matrice *) (*s_objet_argument_2)
3813: .objet))).nombre_lignes;
3814:
3815: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3816: (*((struct_matrice *) (*s_objet_argument_2).objet))
3817: .nombre_colonnes)
3818: {
3819: liberation(s_etat_processus, s_objet_argument_1);
3820: liberation(s_etat_processus, s_objet_argument_2);
3821: liberation(s_etat_processus, s_objet_resultat);
3822:
3823: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3824: return;
3825: }
3826:
3827: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3828: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3829: .objet))).nombre_lignes * sizeof(real8))) == NULL)
3830: {
3831: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3832: return;
3833: }
3834:
3835: if ((accumulateur = malloc((*(((struct_matrice *)
3836: (*s_objet_argument_2).objet))).nombre_colonnes *
3837: sizeof(real8))) == NULL)
3838: {
3839: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3840: return;
3841: }
3842:
3843: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3844: .objet))).nombre_lignes; i++)
3845: {
3846: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3847: .objet))).nombre_colonnes; k++)
3848: {
3849: ((real8 *) accumulateur)[k] = (((real8 **) (*((struct_matrice *)
3850: (*s_objet_argument_2).objet)).tableau)[i][k] *
3851: ((integer8 *) (*((struct_vecteur *)
3852: (*s_objet_argument_1).objet)).tableau)[k]);
3853: }
3854:
3855: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3856: .tableau)[i] = sommation_vecteur_reel(accumulateur,
3857: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
3858: .nombre_colonnes), &erreur_memoire);
3859:
3860: if (erreur_memoire == d_vrai)
3861: {
3862: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3863: return;
3864: }
3865: }
3866:
3867: free(accumulateur);
3868: }
3869:
3870: /*
3871: * Matrice de réels / Vecteur de réels
3872: */
3873:
3874: else if (((*s_objet_argument_2).type == MRL) &&
3875: ((*s_objet_argument_1).type == VRL))
3876: {
3877: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
3878: == NULL)
3879: {
3880: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3881: return;
3882: }
3883:
3884: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3885: (*(((struct_matrice *) (*s_objet_argument_2)
3886: .objet))).nombre_lignes;
3887:
3888: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3889: (*((struct_matrice *) (*s_objet_argument_2).objet))
3890: .nombre_colonnes)
3891: {
3892: liberation(s_etat_processus, s_objet_argument_1);
3893: liberation(s_etat_processus, s_objet_argument_2);
3894: liberation(s_etat_processus, s_objet_resultat);
3895:
3896: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3897: return;
3898: }
3899:
3900: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3901: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3902: .objet))).nombre_lignes * sizeof(real8))) == NULL)
3903: {
3904: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3905: return;
3906: }
3907:
3908: if ((accumulateur = malloc((*(((struct_matrice *)
3909: (*s_objet_argument_2).objet))).nombre_colonnes *
3910: sizeof(real8))) == NULL)
3911: {
3912: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3913: return;
3914: }
3915:
3916: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3917: .objet))).nombre_lignes; i++)
3918: {
3919: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3920: .objet))).nombre_colonnes; k++)
3921: {
3922: ((real8 *) accumulateur)[k] = (((real8 **) (*((struct_matrice *)
3923: (*s_objet_argument_2).objet)).tableau)[i][k] *
3924: ((real8 *) (*((struct_vecteur *)
3925: (*s_objet_argument_1).objet)).tableau)[k]);
3926: }
3927:
3928: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat).objet))
3929: .tableau)[i] = sommation_vecteur_reel(accumulateur,
3930: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
3931: .nombre_colonnes), &erreur_memoire);
3932:
3933: if (erreur_memoire == d_vrai)
3934: {
3935: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3936: return;
3937: }
3938: }
3939:
3940: free(accumulateur);
3941: }
3942:
3943: /*
3944: * Matrice de réels / Vecteur de complexes
3945: */
3946:
3947: else if (((*s_objet_argument_2).type == MRL) &&
3948: ((*s_objet_argument_1).type == VCX))
3949: {
3950: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
3951: == NULL)
3952: {
3953: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3954: return;
3955: }
3956:
3957: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
3958: (*(((struct_matrice *) (*s_objet_argument_2)
3959: .objet))).nombre_lignes;
3960:
3961: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
3962: (*((struct_matrice *) (*s_objet_argument_2).objet))
3963: .nombre_colonnes)
3964: {
3965: liberation(s_etat_processus, s_objet_argument_1);
3966: liberation(s_etat_processus, s_objet_argument_2);
3967: liberation(s_etat_processus, s_objet_resultat);
3968:
3969: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3970: return;
3971: }
3972:
3973: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
3974: malloc((*(((struct_matrice *) (*s_objet_argument_2)
3975: .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
3976: {
3977: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3978: return;
3979: }
3980:
3981: if ((accumulateur = malloc((*(((struct_matrice *)
3982: (*s_objet_argument_2).objet))).nombre_colonnes *
3983: sizeof(complex16))) == NULL)
3984: {
3985: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3986: return;
3987: }
3988:
3989: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
3990: .objet))).nombre_lignes; i++)
3991: {
3992: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
3993: .objet))).nombre_colonnes; k++)
3994: {
3995: f77multiplicationcr_(&(((struct_complexe16 *)
3996: (*((struct_vecteur *) (*s_objet_argument_1).objet))
3997: .tableau)[k]), &(((real8 **) (*((struct_matrice *)
3998: (*s_objet_argument_2).objet)).tableau)[i][k]),
3999: &(((complex16 *) accumulateur)[k]));
4000: }
4001:
4002: ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
4003: .objet)).tableau)[i] = sommation_vecteur_complexe(
4004: accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
4005: .objet))).nombre_colonnes), &erreur_memoire);
4006:
4007: if (erreur_memoire == d_vrai)
4008: {
4009: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4010: return;
4011: }
4012: }
4013:
4014: free(accumulateur);
4015: }
4016:
4017: /*
4018: * Matrice de complexes / Vecteur d'entiers
4019: */
4020:
4021: else if (((*s_objet_argument_2).type == MCX) &&
4022: ((*s_objet_argument_1).type == VIN))
4023: {
4024: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
4025: == NULL)
4026: {
4027: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4028: return;
4029: }
4030:
4031: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
4032: (*(((struct_matrice *) (*s_objet_argument_2)
4033: .objet))).nombre_lignes;
4034:
4035: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
4036: (*((struct_matrice *) (*s_objet_argument_2).objet))
4037: .nombre_colonnes)
4038: {
4039: liberation(s_etat_processus, s_objet_argument_1);
4040: liberation(s_etat_processus, s_objet_argument_2);
4041: liberation(s_etat_processus, s_objet_resultat);
4042:
4043: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4044: return;
4045: }
4046:
4047: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
4048: malloc((*(((struct_matrice *) (*s_objet_argument_2)
4049: .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
4050: {
4051: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4052: return;
4053: }
4054:
4055: if ((accumulateur = malloc((*(((struct_matrice *)
4056: (*s_objet_argument_2).objet))).nombre_colonnes *
4057: sizeof(complex16))) == NULL)
4058: {
4059: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4060: return;
4061: }
4062:
4063: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
4064: .objet))).nombre_lignes; i++)
4065: {
4066: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4067: .objet))).nombre_colonnes; k++)
4068: {
4069: f77multiplicationci_(&(((struct_complexe16 **)
4070: (*((struct_matrice *) (*s_objet_argument_2).objet))
4071: .tableau)[i][k]), &(((integer8 *)
4072: (*((struct_vecteur *) (*s_objet_argument_1).objet))
4073: .tableau)[k]), &(((complex16 *) accumulateur)[k]));
4074: }
4075:
4076: ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
4077: .objet)).tableau)[i] = sommation_vecteur_complexe(
4078: accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
4079: .objet))).nombre_colonnes), &erreur_memoire);
4080:
4081: if (erreur_memoire == d_vrai)
4082: {
4083: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4084: return;
4085: }
4086: }
4087:
4088: free(accumulateur);
4089: }
4090:
4091: /*
4092: * Matrice de complexes / Vecteur de réels
4093: */
4094:
4095: else if (((*s_objet_argument_2).type == MCX) &&
4096: ((*s_objet_argument_1).type == VRL))
4097: {
4098: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
4099: == NULL)
4100: {
4101: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4102: return;
4103: }
4104:
4105: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
4106: (*(((struct_matrice *) (*s_objet_argument_2)
4107: .objet))).nombre_lignes;
4108:
4109: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
4110: (*((struct_matrice *) (*s_objet_argument_2).objet))
4111: .nombre_colonnes)
4112: {
4113: liberation(s_etat_processus, s_objet_argument_1);
4114: liberation(s_etat_processus, s_objet_argument_2);
4115: liberation(s_etat_processus, s_objet_resultat);
4116:
4117: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4118: return;
4119: }
4120:
4121: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
4122: malloc((*(((struct_matrice *) (*s_objet_argument_2)
4123: .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
4124: {
4125: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4126: return;
4127: }
4128:
4129: if ((accumulateur = malloc((*(((struct_matrice *)
4130: (*s_objet_argument_2).objet))).nombre_colonnes *
4131: sizeof(complex16))) == NULL)
4132: {
4133: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4134: return;
4135: }
4136:
4137: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
4138: .objet))).nombre_lignes; i++)
4139: {
4140: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4141: .objet))).nombre_colonnes; k++)
4142: {
4143: f77multiplicationcr_(&(((struct_complexe16 **)
4144: (*((struct_matrice *) (*s_objet_argument_2).objet))
4145: .tableau)[i][k]), &(((real8 *)
4146: (*((struct_vecteur *) (*s_objet_argument_1).objet))
4147: .tableau)[k]), &(((complex16 *) accumulateur)[k]));
4148: }
4149:
4150: ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
4151: .objet)).tableau)[i] = sommation_vecteur_complexe(
4152: accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
4153: .objet))).nombre_colonnes), &erreur_memoire);
4154:
4155: if (erreur_memoire == d_vrai)
4156: {
4157: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4158: return;
4159: }
4160: }
4161:
4162: free(accumulateur);
4163: }
4164:
4165: /*
4166: * Matrice de complexes / Vecteur de complexes
4167: */
4168:
4169: else if (((*s_objet_argument_2).type == MCX) &&
4170: ((*s_objet_argument_1).type == VCX))
4171: {
4172: if ((s_objet_resultat = allocation(s_etat_processus, VCX))
4173: == NULL)
4174: {
4175: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4176: return;
4177: }
4178:
4179: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
4180: (*(((struct_matrice *) (*s_objet_argument_2)
4181: .objet))).nombre_lignes;
4182:
4183: if ((*((struct_vecteur *) (*s_objet_argument_1).objet)).taille !=
4184: (*((struct_matrice *) (*s_objet_argument_2).objet))
4185: .nombre_colonnes)
4186: {
4187: liberation(s_etat_processus, s_objet_argument_1);
4188: liberation(s_etat_processus, s_objet_argument_2);
4189: liberation(s_etat_processus, s_objet_resultat);
4190:
4191: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4192: return;
4193: }
4194:
4195: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
4196: malloc((*(((struct_matrice *) (*s_objet_argument_2)
4197: .objet))).nombre_lignes * sizeof(struct_complexe16))) == NULL)
4198: {
4199: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4200: return;
4201: }
4202:
4203: if ((accumulateur = malloc((*(((struct_matrice *)
4204: (*s_objet_argument_2).objet))).nombre_colonnes *
4205: sizeof(complex16))) == NULL)
4206: {
4207: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4208: return;
4209: }
4210:
4211: for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument_2)
4212: .objet))).nombre_lignes; i++)
4213: {
4214: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4215: .objet))).nombre_colonnes; k++)
4216: {
4217: f77multiplicationcc_(&(((struct_complexe16 **)
4218: (*((struct_matrice *) (*s_objet_argument_2).objet))
4219: .tableau)[i][k]), &(((struct_complexe16 *)
4220: (*((struct_vecteur *) (*s_objet_argument_1).objet))
4221: .tableau)[k]), &(((complex16 *) accumulateur)[k]));
4222: }
4223:
4224: ((struct_complexe16 *) (*((struct_vecteur *) (*s_objet_resultat)
4225: .objet)).tableau)[i] = sommation_vecteur_complexe(
4226: accumulateur, &((*(((struct_matrice *) (*s_objet_argument_2)
4227: .objet))).nombre_colonnes), &erreur_memoire);
4228:
4229: if (erreur_memoire == d_vrai)
4230: {
4231: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4232: return;
4233: }
4234: }
4235:
4236: free(accumulateur);
4237: }
4238:
4239: /*
4240: --------------------------------------------------------------------------------
4241: Multiplication d'une matrice par une autre matrice
4242: --------------------------------------------------------------------------------
4243: */
4244: /*
4245: * Matrice d'entiers / Matrice d'entiers
4246: */
4247:
4248: else if (((*s_objet_argument_2).type == MIN) &&
4249: ((*s_objet_argument_1).type == MIN))
4250: {
4251: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4252: (*((struct_matrice *) (*s_objet_argument_2).objet))
4253: .nombre_colonnes)
4254: {
4255: liberation(s_etat_processus, s_objet_argument_1);
4256: liberation(s_etat_processus, s_objet_argument_2);
4257:
4258: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4259: return;
4260: }
4261:
4262: if ((s_objet_resultat = allocation(s_etat_processus, MIN))
4263: == NULL)
4264: {
4265: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4266: return;
4267: }
4268:
4269: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4270: (*(((struct_matrice *) (*s_objet_argument_2)
4271: .objet))).nombre_lignes;
4272: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4273: (*(((struct_matrice *) (*s_objet_argument_1)
4274: .objet))).nombre_colonnes;
4275:
4276: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4277: malloc((*(((struct_matrice *) (*s_objet_resultat)
4278: .objet))).nombre_lignes * sizeof(integer8 *))) == NULL)
4279: {
4280: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4281: return;
4282: }
4283:
4284: depassement = d_faux;
4285:
4286: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4287: .objet))).nombre_lignes; i++)
4288: {
4289: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4290: malloc((*(((struct_matrice *) (*s_objet_resultat)
4291: .objet))).nombre_colonnes * sizeof(integer8))) == NULL)
4292: {
4293: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4294: return;
4295: }
4296:
4297: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4298: .objet))).nombre_colonnes; j++)
4299: {
4300: ((integer8 **) (*((struct_matrice *)
4301: (*s_objet_resultat).objet)).tableau)[i][j] = 0;
4302:
4303: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4304: .objet))).nombre_colonnes; k++)
4305: {
4306: if (depassement_multiplication(&(((integer8 **)
4307: (*((struct_matrice *) (*s_objet_argument_2).objet))
4308: .tableau)[i][k]), &(((integer8 **)
4309: (*((struct_matrice *) (*s_objet_argument_1).objet))
4310: .tableau)[k][j]), &tampon) == d_erreur)
4311: {
4312: depassement = d_vrai;
4313: }
4314:
4315: if (depassement_addition(&(((integer8 **)
4316: (*((struct_matrice *) (*s_objet_resultat).objet))
4317: .tableau)[i][j]), &tampon, &cumul) == d_erreur)
4318: {
4319: depassement = d_vrai;
4320: }
4321:
4322: ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
4323: .objet)).tableau)[i][j] = cumul;
4324: }
4325: }
4326: }
4327:
4328: if (depassement == d_vrai)
4329: {
4330: (*s_objet_resultat).type = MRL;
4331: (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R';
4332:
4333: if ((accumulateur = malloc((*(((struct_matrice *)
4334: (*s_objet_argument_2).objet))).nombre_colonnes *
4335: sizeof(real8))) == NULL)
4336: {
4337: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4338: return;
4339: }
4340:
4341: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4342: .objet))).nombre_lignes; i++)
4343: {
4344: free(((integer8 **) (*((struct_matrice *)
4345: (*s_objet_resultat).objet)).tableau)[i]);
4346:
4347: if (((*((struct_matrice *) (*s_objet_resultat).objet))
4348: .tableau[i] = malloc((*(((struct_matrice *)
4349: (*s_objet_resultat).objet))).nombre_colonnes *
4350: sizeof(real8))) == NULL)
4351: {
4352: (*s_etat_processus).erreur_systeme =
4353: d_es_allocation_memoire;
4354: return;
4355: }
4356:
4357: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4358: .objet))).nombre_colonnes; j++)
4359: {
4360: ((real8 **) (*((struct_matrice *)
4361: (*s_objet_resultat).objet)).tableau)[i][j] = 0;
4362:
4363: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4364: .objet))).nombre_colonnes; k++)
4365: {
4366: ((real8 *) accumulateur)[k] = ((real8)
4367: (((integer8 **) (*((struct_matrice *)
4368: (*s_objet_argument_2).objet)).tableau)[i][k]) *
4369: ((real8) ((integer8 **) (*((struct_matrice *)
4370: (*s_objet_argument_1).objet)).tableau)[k][j]));
4371: }
4372:
4373: ((real8 **) (*((struct_matrice *)
4374: (*s_objet_resultat).objet)).tableau)[i][j] =
4375: sommation_vecteur_reel(accumulateur,
4376: &((*(((struct_matrice *) (*s_objet_argument_2)
4377: .objet))).nombre_colonnes), &erreur_memoire);
4378:
4379: if (erreur_memoire == d_vrai)
4380: {
4381: (*s_etat_processus).erreur_systeme =
4382: d_es_allocation_memoire;
4383: return;
4384: }
4385: }
4386: }
4387:
4388: free(accumulateur);
4389: }
4390: }
4391:
4392: /*
4393: * Matrice d'entiers / Matrice de réels
4394: */
4395:
4396: else if ((((*s_objet_argument_2).type == MIN) &&
4397: ((*s_objet_argument_1).type == MRL)) ||
4398: (((*s_objet_argument_2).type == MRL) &&
4399: ((*s_objet_argument_1).type == MIN)))
4400: {
4401: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4402: (*((struct_matrice *) (*s_objet_argument_2).objet))
4403: .nombre_colonnes)
4404: {
4405: liberation(s_etat_processus, s_objet_argument_1);
4406: liberation(s_etat_processus, s_objet_argument_2);
4407:
4408: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4409: return;
4410: }
4411:
4412: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
4413: == NULL)
4414: {
4415: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4416: return;
4417: }
4418:
4419: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4420: (*(((struct_matrice *) (*s_objet_argument_2)
4421: .objet))).nombre_lignes;
4422: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4423: (*(((struct_matrice *) (*s_objet_argument_1)
4424: .objet))).nombre_colonnes;
4425:
4426: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4427: malloc((*(((struct_matrice *) (*s_objet_resultat)
4428: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
4429: {
4430: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4431: return;
4432: }
4433:
4434: if ((accumulateur = malloc((*(((struct_matrice *)
4435: (*s_objet_argument_2).objet))).nombre_colonnes *
4436: sizeof(real8))) == NULL)
4437: {
4438: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4439: return;
4440: }
4441:
4442: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4443: .objet))).nombre_lignes; i++)
4444: {
4445: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4446: malloc((*(((struct_matrice *) (*s_objet_resultat)
4447: .objet))).nombre_colonnes * sizeof(real8))) == NULL)
4448: {
4449: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4450: return;
4451: }
4452:
4453: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4454: .objet))).nombre_colonnes; j++)
4455: {
4456: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4457: .objet))).nombre_colonnes; k++)
4458: {
4459: if ((*s_objet_argument_1).type == MRL)
4460: {
4461: ((real8 *) accumulateur)[k] =
4462: (((integer8 **) (*((struct_matrice *)
4463: (*s_objet_argument_2).objet)).tableau)[i][k] *
4464: ((real8 **) (*((struct_matrice *)
4465: (*s_objet_argument_1).objet)).tableau)[k][j]);
4466: }
4467: else
4468: {
4469: ((real8 *) accumulateur)[k] =
4470: (((real8 **) (*((struct_matrice *)
4471: (*s_objet_argument_2).objet)).tableau)[i][k] *
4472: ((integer8 **) (*((struct_matrice *)
4473: (*s_objet_argument_1).objet)).tableau)[k][j]);
4474: }
4475: }
4476:
4477: ((real8 **) (*((struct_matrice *)
4478: (*s_objet_resultat).objet)).tableau)[i][j] =
4479: sommation_vecteur_reel(accumulateur,
4480: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
4481: .nombre_colonnes), &erreur_memoire);
4482:
4483: if (erreur_memoire == d_vrai)
4484: {
4485: (*s_etat_processus).erreur_systeme =
4486: d_es_allocation_memoire;
4487: return;
4488: }
4489: }
4490: }
4491:
4492: free(accumulateur);
4493: }
4494:
4495: /*
4496: * Matrice d'entiers / Matrice de complexes
4497: */
4498:
4499: else if ((((*s_objet_argument_2).type == MIN) &&
4500: ((*s_objet_argument_1).type == MCX)) ||
4501: (((*s_objet_argument_2).type == MCX) &&
4502: ((*s_objet_argument_1).type == MIN)))
4503: {
4504: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4505: (*((struct_matrice *) (*s_objet_argument_2).objet))
4506: .nombre_colonnes)
4507: {
4508: liberation(s_etat_processus, s_objet_argument_1);
4509: liberation(s_etat_processus, s_objet_argument_2);
4510:
4511: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4512: return;
4513: }
4514:
4515: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
4516: == NULL)
4517: {
4518: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4519: return;
4520: }
4521:
4522: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4523: (*(((struct_matrice *) (*s_objet_argument_2)
4524: .objet))).nombre_lignes;
4525: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4526: (*(((struct_matrice *) (*s_objet_argument_1)
4527: .objet))).nombre_colonnes;
4528:
4529: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4530: malloc((*(((struct_matrice *) (*s_objet_resultat)
4531: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
4532: {
4533: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4534: return;
4535: }
4536:
4537: if ((accumulateur = malloc((*(((struct_matrice *)
4538: (*s_objet_argument_2).objet))).nombre_colonnes *
4539: sizeof(complex16))) == NULL)
4540: {
4541: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4542: return;
4543: }
4544:
4545: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4546: .objet))).nombre_lignes; i++)
4547: {
4548: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4549: malloc((*(((struct_matrice *) (*s_objet_resultat)
4550: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
4551: == NULL)
4552: {
4553: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4554: return;
4555: }
4556:
4557: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4558: .objet))).nombre_colonnes; j++)
4559: {
4560: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4561: .objet))).nombre_colonnes; k++)
4562: {
4563: if ((*s_objet_argument_1).type == MCX)
4564: {
4565: f77multiplicationci_(&(((struct_complexe16 **)
4566: (*((struct_matrice *)(*s_objet_argument_1)
4567: .objet)).tableau)[k][j]), &(((integer8 **)
4568: (*((struct_matrice *) (*s_objet_argument_2)
4569: .objet)).tableau)[i][k]), &(((complex16 *)
4570: accumulateur)[k]));
4571: }
4572: else
4573: {
4574: f77multiplicationci_(&(((struct_complexe16 **)
4575: (*((struct_matrice *)(*s_objet_argument_2)
4576: .objet)).tableau)[i][k]), &(((integer8 **)
4577: (*((struct_matrice *) (*s_objet_argument_1)
4578: .objet)).tableau)[k][j]), &(((complex16 *)
4579: accumulateur)[k]));
4580: }
4581: }
4582:
4583: ((struct_complexe16 **) (*((struct_matrice *)
4584: (*s_objet_resultat).objet)).tableau)[i][j] =
4585: sommation_vecteur_complexe(accumulateur,
4586: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
4587: .nombre_colonnes), &erreur_memoire);
4588:
4589: if (erreur_memoire == d_vrai)
4590: {
4591: (*s_etat_processus).erreur_systeme =
4592: d_es_allocation_memoire;
4593: return;
4594: }
4595: }
4596: }
4597:
4598: free(accumulateur);
4599: }
4600:
4601: /*
4602: * Matrice de réels / Matrice de réels
4603: */
4604:
4605: else if (((*s_objet_argument_2).type == MRL) &&
4606: ((*s_objet_argument_1).type == MRL))
4607: {
4608: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4609: (*((struct_matrice *) (*s_objet_argument_2).objet))
4610: .nombre_colonnes)
4611: {
4612: liberation(s_etat_processus, s_objet_argument_1);
4613: liberation(s_etat_processus, s_objet_argument_2);
4614:
4615: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4616: return;
4617: }
4618:
4619: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
4620: == NULL)
4621: {
4622: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4623: return;
4624: }
4625:
4626: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4627: (*(((struct_matrice *) (*s_objet_argument_2)
4628: .objet))).nombre_lignes;
4629: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4630: (*(((struct_matrice *) (*s_objet_argument_1)
4631: .objet))).nombre_colonnes;
4632:
4633: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4634: malloc((*(((struct_matrice *) (*s_objet_resultat)
4635: .objet))).nombre_lignes * sizeof(real8 *))) == NULL)
4636: {
4637: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4638: return;
4639: }
4640:
4641: if ((accumulateur = malloc((*(((struct_matrice *)
4642: (*s_objet_argument_2).objet))).nombre_colonnes *
4643: sizeof(real8))) == NULL)
4644: {
4645: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4646: return;
4647: }
4648:
4649: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4650: .objet))).nombre_lignes; i++)
4651: {
4652: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4653: malloc((*(((struct_matrice *) (*s_objet_resultat)
4654: .objet))).nombre_colonnes * sizeof(real8))) == NULL)
4655: {
4656: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4657: return;
4658: }
4659:
4660: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4661: .objet))).nombre_colonnes; j++)
4662: {
4663: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4664: .objet))).nombre_colonnes; k++)
4665: {
4666: ((real8 *) accumulateur)[k] =
4667: (((real8 **) (*((struct_matrice *)
4668: (*s_objet_argument_2).objet)).tableau)[i][k] *
4669: ((real8 **) (*((struct_matrice *)
4670: (*s_objet_argument_1).objet)).tableau)[k][j]);
4671: }
4672:
4673: ((real8 **) (*((struct_matrice *)
4674: (*s_objet_resultat).objet)).tableau)[i][j] =
4675: sommation_vecteur_reel(accumulateur,
4676: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
4677: .nombre_colonnes), &erreur_memoire);
4678:
4679: if (erreur_memoire == d_vrai)
4680: {
4681: (*s_etat_processus).erreur_systeme =
4682: d_es_allocation_memoire;
4683: return;
4684: }
4685: }
4686: }
4687:
4688: free(accumulateur);
4689: }
4690:
4691: /*
4692: * Matrice de réels / Matrice de complexes
4693: */
4694:
4695: else if ((((*s_objet_argument_2).type == MRL) &&
4696: ((*s_objet_argument_1).type == MCX)) ||
4697: (((*s_objet_argument_2).type == MCX) &&
4698: ((*s_objet_argument_1).type == MRL)))
4699: {
4700: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4701: (*((struct_matrice *) (*s_objet_argument_2).objet))
4702: .nombre_colonnes)
4703: {
4704: liberation(s_etat_processus, s_objet_argument_1);
4705: liberation(s_etat_processus, s_objet_argument_2);
4706:
4707: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4708: return;
4709: }
4710:
4711: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
4712: == NULL)
4713: {
4714: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4715: return;
4716: }
4717:
4718: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4719: (*(((struct_matrice *) (*s_objet_argument_2)
4720: .objet))).nombre_lignes;
4721: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4722: (*(((struct_matrice *) (*s_objet_argument_1)
4723: .objet))).nombre_colonnes;
4724:
4725: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4726: malloc((*(((struct_matrice *) (*s_objet_resultat)
4727: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
4728: {
4729: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4730: return;
4731: }
4732:
4733: if ((accumulateur = malloc((*(((struct_matrice *)
4734: (*s_objet_argument_2).objet))).nombre_colonnes *
4735: sizeof(complex16))) == NULL)
4736: {
4737: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4738: return;
4739: }
4740:
4741: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4742: .objet))).nombre_lignes; i++)
4743: {
4744: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4745: malloc((*(((struct_matrice *) (*s_objet_resultat)
4746: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
4747: == NULL)
4748: {
4749: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4750: return;
4751: }
4752:
4753: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4754: .objet))).nombre_colonnes; j++)
4755: {
4756: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4757: .objet))).nombre_colonnes; k++)
4758: {
4759: if ((*s_objet_argument_1).type == MCX)
4760: {
4761: f77multiplicationcr_(&(((struct_complexe16 **)
4762: (*((struct_matrice *)(*s_objet_argument_1)
4763: .objet)).tableau)[k][j]), &(((real8 **)
4764: (*((struct_matrice *) (*s_objet_argument_2)
4765: .objet)).tableau)[i][k]), &(((complex16 *)
4766: accumulateur)[k]));
4767: }
4768: else
4769: {
4770: f77multiplicationcr_(&(((struct_complexe16 **)
4771: (*((struct_matrice *)(*s_objet_argument_2)
4772: .objet)).tableau)[i][k]), &(((real8 **)
4773: (*((struct_matrice *) (*s_objet_argument_1)
4774: .objet)).tableau)[k][j]), &(((complex16 *)
4775: accumulateur)[k]));
4776: }
4777: }
4778:
4779: ((struct_complexe16 **) (*((struct_matrice *)
4780: (*s_objet_resultat).objet)).tableau)[i][j] =
4781: sommation_vecteur_complexe(accumulateur,
4782: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
4783: .nombre_colonnes), &erreur_memoire);
4784:
4785: if (erreur_memoire == d_vrai)
4786: {
4787: (*s_etat_processus).erreur_systeme =
4788: d_es_allocation_memoire;
4789: return;
4790: }
4791: }
4792: }
4793:
4794: free(accumulateur);
4795: }
4796:
4797: /*
4798: * Matrice de complexes / Matrice de complexes
4799: */
4800:
4801: else if (((*s_objet_argument_2).type == MCX) &&
4802: ((*s_objet_argument_1).type == MCX))
4803: {
4804: if ((*((struct_matrice *) (*s_objet_argument_1).objet)).nombre_lignes !=
4805: (*((struct_matrice *) (*s_objet_argument_2).objet))
4806: .nombre_colonnes)
4807: {
4808: liberation(s_etat_processus, s_objet_argument_1);
4809: liberation(s_etat_processus, s_objet_argument_2);
4810:
4811: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
4812: return;
4813: }
4814:
4815: if ((s_objet_resultat = allocation(s_etat_processus, MCX))
4816: == NULL)
4817: {
4818: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4819: return;
4820: }
4821:
4822: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_lignes =
4823: (*(((struct_matrice *) (*s_objet_argument_2)
4824: .objet))).nombre_lignes;
4825: (*((struct_matrice *) (*s_objet_resultat).objet)).nombre_colonnes =
4826: (*(((struct_matrice *) (*s_objet_argument_1)
4827: .objet))).nombre_colonnes;
4828:
4829: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
4830: malloc((*(((struct_matrice *) (*s_objet_resultat)
4831: .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL)
4832: {
4833: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4834: return;
4835: }
4836:
4837: if ((accumulateur = malloc((*(((struct_matrice *)
4838: (*s_objet_argument_2).objet))).nombre_colonnes *
4839: sizeof(complex16))) == NULL)
4840: {
4841: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4842: return;
4843: }
4844:
4845: for(i = 0; i < (*(((struct_matrice *) (*s_objet_resultat)
4846: .objet))).nombre_lignes; i++)
4847: {
4848: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] =
4849: malloc((*(((struct_matrice *) (*s_objet_resultat)
4850: .objet))).nombre_colonnes * sizeof(struct_complexe16)))
4851: == NULL)
4852: {
4853: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4854: return;
4855: }
4856:
4857: for(j = 0; j < (*(((struct_matrice *) (*s_objet_resultat)
4858: .objet))).nombre_colonnes; j++)
4859: {
4860: ((struct_complexe16 **) (*((struct_matrice *)
4861: (*s_objet_resultat).objet)).tableau)[i][j]
4862: .partie_reelle = 0;
4863: ((struct_complexe16 **) (*((struct_matrice *)
4864: (*s_objet_resultat).objet)).tableau)[i][j]
4865: .partie_imaginaire = 0;
4866:
4867: for(k = 0; k < (*(((struct_matrice *) (*s_objet_argument_2)
4868: .objet))).nombre_colonnes; k++)
4869: {
4870: f77multiplicationcc_(&(((struct_complexe16 **)
4871: (*((struct_matrice *)(*s_objet_argument_1)
4872: .objet)).tableau)[k][j]), &(((struct_complexe16 **)
4873: (*((struct_matrice *) (*s_objet_argument_2)
4874: .objet)).tableau)[i][k]), &(((complex16 *)
4875: accumulateur)[k]));
4876: }
4877:
4878: ((struct_complexe16 **) (*((struct_matrice *)
4879: (*s_objet_resultat).objet)).tableau)[i][j] =
4880: sommation_vecteur_complexe(accumulateur,
4881: &((*(((struct_matrice *) (*s_objet_argument_2).objet)))
4882: .nombre_colonnes), &erreur_memoire);
4883:
4884: if (erreur_memoire == d_vrai)
4885: {
4886: (*s_etat_processus).erreur_systeme =
4887: d_es_allocation_memoire;
4888: return;
4889: }
4890: }
4891: }
4892:
4893: free(accumulateur);
4894: }
4895:
4896: /*
4897: --------------------------------------------------------------------------------
4898: Multiplication mettant en oeuvre des binaires
4899: --------------------------------------------------------------------------------
4900: */
4901: /*
4902: * Binaire / Binaire
4903: */
4904:
4905: else if (((*s_objet_argument_1).type == BIN) &&
4906: ((*s_objet_argument_2).type == BIN))
4907: {
4908: if ((s_objet_resultat = allocation(s_etat_processus, BIN))
4909: == NULL)
4910: {
4911: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4912: return;
4913: }
4914:
4915: (*((logical8 *) (*s_objet_resultat).objet)) =
4916: (*((logical8 *) (*s_objet_argument_2).objet))
4917: * (*((logical8 *) (*s_objet_argument_1).objet));
4918: }
4919:
4920: /*
4921: * Binaire / Entier
4922: */
4923:
4924: else if ((((*s_objet_argument_1).type == BIN) &&
4925: ((*s_objet_argument_2).type == INT)) ||
4926: (((*s_objet_argument_1).type == INT) &&
4927: ((*s_objet_argument_2).type == BIN)))
4928: {
4929: if ((s_objet_resultat = allocation(s_etat_processus, BIN))
4930: == NULL)
4931: {
4932: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4933: return;
4934: }
4935:
4936: if ((*s_objet_argument_1).type == BIN)
4937: {
4938: (*((logical8 *) (*s_objet_resultat).objet)) =
4939: (*((integer8 *) (*s_objet_argument_2).objet))
4940: * (*((logical8 *) (*s_objet_argument_1).objet));
4941: }
4942: else
4943: {
4944: (*((logical8 *) (*s_objet_resultat).objet)) =
4945: (*((logical8 *) (*s_objet_argument_2).objet))
4946: * (*((integer8 *) (*s_objet_argument_1).objet));
4947: }
4948: }
4949:
4950: /*
4951: --------------------------------------------------------------------------------
4952: Multiplication mettant en oeuvre un nom ou une expression algébrique
4953: --------------------------------------------------------------------------------
4954: */
4955: /*
4956: * Nom ou valeur numérique / Nom ou valeur numérique
4957: */
4958:
4959: else if ((((*s_objet_argument_1).type == NOM) &&
4960: (((*s_objet_argument_2).type == NOM) ||
4961: ((*s_objet_argument_2).type == INT) ||
4962: ((*s_objet_argument_2).type == REL) ||
4963: ((*s_objet_argument_2).type == CPL))) ||
4964: (((*s_objet_argument_2).type == NOM) &&
4965: (((*s_objet_argument_1).type == INT) ||
4966: ((*s_objet_argument_1).type == REL) ||
4967: ((*s_objet_argument_1).type == CPL))))
4968: {
4969: drapeau = d_vrai;
4970:
4971: if ((*s_objet_argument_1).type == NOM)
4972: {
4973: if ((*s_objet_argument_2).type == INT)
4974: {
4975: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
4976: {
4977: drapeau = d_faux;
4978:
4979: if ((s_objet_resultat = allocation(s_etat_processus,
4980: INT)) == NULL)
4981: {
4982: (*s_etat_processus).erreur_systeme =
4983: d_es_allocation_memoire;
4984: return;
4985: }
4986:
4987: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
4988: }
4989: else if ((*((integer8 *) (*s_objet_argument_2).objet)) == 1)
4990: {
4991: drapeau = d_faux;
4992:
4993: s_objet_resultat = s_objet_argument_1;
4994: s_objet_argument_1 = NULL;
4995: }
4996: }
4997: else if ((*s_objet_argument_2).type == REL)
4998: {
4999: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
5000: {
5001: drapeau = d_faux;
5002:
5003: if ((s_objet_resultat = allocation(s_etat_processus,
5004: REL)) == NULL)
5005: {
5006: (*s_etat_processus).erreur_systeme =
5007: d_es_allocation_memoire;
5008: return;
5009: }
5010:
5011: (*((real8 *) (*s_objet_resultat).objet)) = 0;
5012: }
5013: else if ((*((real8 *) (*s_objet_argument_2).objet)) == 1)
5014: {
5015: drapeau = d_faux;
5016:
5017: s_objet_resultat = s_objet_argument_1;
5018: s_objet_argument_1 = NULL;
5019: }
5020: }
5021: else if ((*s_objet_argument_2).type == CPL)
5022: {
5023: if (((*((complex16 *) (*s_objet_argument_2).objet))
5024: .partie_reelle == 0) && ((*((complex16 *)
5025: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
5026: {
5027: drapeau = d_faux;
5028:
5029: if ((s_objet_resultat = allocation(s_etat_processus,
5030: CPL)) == NULL)
5031: {
5032: (*s_etat_processus).erreur_systeme =
5033: d_es_allocation_memoire;
5034: return;
5035: }
5036:
5037: (*((complex16 *) (*s_objet_resultat).objet))
5038: .partie_reelle = 0;
5039: (*((complex16 *) (*s_objet_resultat).objet))
5040: .partie_imaginaire = 0;
5041: }
5042: else if (((*((complex16 *) (*s_objet_argument_2).objet))
5043: .partie_reelle == 1) && ((*((complex16 *)
5044: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
5045: {
5046: drapeau = d_faux;
5047:
5048: s_objet_resultat = s_objet_argument_1;
5049: s_objet_argument_1 = NULL;
5050: }
5051: }
5052: }
5053: else if ((*s_objet_argument_2).type == NOM)
5054: {
5055: if ((*s_objet_argument_1).type == INT)
5056: {
5057: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
5058: {
5059: drapeau = d_faux;
5060:
5061: if ((s_objet_resultat = allocation(s_etat_processus,
5062: INT)) == NULL)
5063: {
5064: (*s_etat_processus).erreur_systeme =
5065: d_es_allocation_memoire;
5066: return;
5067: }
5068:
5069: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
5070: }
5071: else if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
5072: {
5073: drapeau = d_faux;
5074:
5075: s_objet_resultat = s_objet_argument_2;
5076: s_objet_argument_2 = NULL;
5077: }
5078: }
5079: else if ((*s_objet_argument_1).type == REL)
5080: {
5081: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
5082: {
5083: drapeau = d_faux;
5084:
5085: if ((s_objet_resultat = allocation(s_etat_processus,
5086: REL)) == NULL)
5087: {
5088: (*s_etat_processus).erreur_systeme =
5089: d_es_allocation_memoire;
5090: return;
5091: }
5092:
5093: (*((real8 *) (*s_objet_resultat).objet)) = 0;
5094: }
5095: else if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
5096: {
5097: drapeau = d_faux;
5098:
5099: s_objet_resultat = s_objet_argument_2;
5100: s_objet_argument_2 = NULL;
5101: }
5102: }
5103: else if ((*s_objet_argument_1).type == CPL)
5104: {
5105: if (((*((complex16 *) (*s_objet_argument_1).objet))
5106: .partie_reelle == 0) && ((*((complex16 *)
5107: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
5108: {
5109: drapeau = d_faux;
5110:
5111: if ((s_objet_resultat = allocation(s_etat_processus,
5112: CPL)) == NULL)
5113: {
5114: (*s_etat_processus).erreur_systeme =
5115: d_es_allocation_memoire;
5116: return;
5117: }
5118:
5119: (*((complex16 *) (*s_objet_resultat).objet))
5120: .partie_reelle = 0;
5121: (*((complex16 *) (*s_objet_resultat).objet))
5122: .partie_imaginaire = 0;
5123: }
5124: else if (((*((complex16 *) (*s_objet_argument_1).objet))
5125: .partie_reelle == 1) && ((*((complex16 *)
5126: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
5127: {
5128: drapeau = d_faux;
5129:
5130: s_objet_resultat = s_objet_argument_2;
5131: s_objet_argument_2 = NULL;
5132: }
5133: }
5134: }
5135:
5136: if (drapeau == d_vrai)
5137: {
5138: if ((s_objet_resultat = allocation(s_etat_processus, ALG))
5139: == NULL)
5140: {
5141: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5142: return;
5143: }
5144:
5145: if (((*s_objet_resultat).objet =
5146: allocation_maillon(s_etat_processus)) == NULL)
5147: {
5148: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5149: return;
5150: }
5151:
5152: l_element_courant = (*s_objet_resultat).objet;
5153:
5154: if (((*l_element_courant).donnee = allocation(s_etat_processus,
5155: FCT)) == NULL)
5156: {
5157: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5158: return;
5159: }
5160:
5161: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5162: .nombre_arguments = 0;
5163: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5164: .fonction = instruction_vers_niveau_superieur;
5165:
5166: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5167: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
5168: {
5169: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5170: return;
5171: }
5172:
5173: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5174: .nom_fonction, "<<");
5175:
5176: if (((*l_element_courant).suivant =
5177: allocation_maillon(s_etat_processus)) == NULL)
5178: {
5179: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5180: return;
5181: }
5182:
5183: l_element_courant = (*l_element_courant).suivant;
5184: (*l_element_courant).donnee = s_objet_argument_2;
5185:
5186: if (((*l_element_courant).suivant =
5187: allocation_maillon(s_etat_processus)) == NULL)
5188: {
5189: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5190: return;
5191: }
5192:
5193: l_element_courant = (*l_element_courant).suivant;
5194: (*l_element_courant).donnee = s_objet_argument_1;
5195:
5196: if (((*l_element_courant).suivant =
5197: allocation_maillon(s_etat_processus)) == NULL)
5198: {
5199: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5200: return;
5201: }
5202:
5203: l_element_courant = (*l_element_courant).suivant;
5204:
5205: if (((*l_element_courant).donnee = allocation(s_etat_processus,
5206: FCT)) == NULL)
5207: {
5208: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5209: return;
5210: }
5211:
5212: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5213: .nombre_arguments = 0;
5214: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5215: .fonction = instruction_multiplication;
5216:
5217: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5218: .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
5219: {
5220: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5221: return;
5222: }
5223:
5224: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5225: .nom_fonction, "*");
5226:
5227: if (((*l_element_courant).suivant =
5228: allocation_maillon(s_etat_processus)) == NULL)
5229: {
5230: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5231: return;
5232: }
5233:
5234: l_element_courant = (*l_element_courant).suivant;
5235:
5236: if (((*l_element_courant).donnee =
5237: allocation(s_etat_processus, FCT)) == NULL)
5238: {
5239: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5240: return;
5241: }
5242:
5243: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5244: .nombre_arguments = 0;
5245: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5246: .fonction = instruction_vers_niveau_inferieur;
5247:
5248: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5249: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
5250: {
5251: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5252: return;
5253: }
5254:
5255: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5256: .nom_fonction, ">>");
5257:
5258: (*l_element_courant).suivant = NULL;
5259:
5260: s_objet_argument_1 = NULL;
5261: s_objet_argument_2 = NULL;
5262: }
5263: }
5264:
5265: /*
5266: * Nom ou valeur numérique / Expression
5267: */
5268:
5269: else if ((((*s_objet_argument_1).type == ALG) ||
5270: ((*s_objet_argument_1).type == RPN)) &&
5271: (((*s_objet_argument_2).type == NOM) ||
5272: ((*s_objet_argument_2).type == INT) ||
5273: ((*s_objet_argument_2).type == REL) ||
5274: ((*s_objet_argument_2).type == CPL)))
5275: {
5276: drapeau = d_vrai;
5277:
5278: nombre_elements = 0;
5279: l_element_courant = (struct_liste_chainee *)
5280: (*s_objet_argument_1).objet;
5281:
5282: while(l_element_courant != NULL)
5283: {
5284: nombre_elements++;
5285: l_element_courant = (*l_element_courant).suivant;
5286: }
5287:
5288: if (nombre_elements == 2)
5289: {
5290: liberation(s_etat_processus, s_objet_argument_1);
5291: liberation(s_etat_processus, s_objet_argument_2);
5292:
5293: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
5294: return;
5295: }
5296:
5297: if ((*s_objet_argument_2).type == INT)
5298: {
5299: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
5300: {
5301: drapeau = d_faux;
5302:
5303: if ((s_objet_resultat = allocation(s_etat_processus, INT))
5304: == NULL)
5305: {
5306: (*s_etat_processus).erreur_systeme =
5307: d_es_allocation_memoire;
5308: return;
5309: }
5310:
5311: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
5312: }
5313: else if ((*((integer8 *) (*s_objet_argument_2).objet)) == 1)
5314: {
5315: drapeau = d_faux;
5316:
5317: s_objet_resultat = s_objet_argument_1;
5318: s_objet_argument_1 = NULL;
5319: }
5320: }
5321: else if ((*s_objet_argument_2).type == REL)
5322: {
5323: if ((*((integer8 *) (*s_objet_argument_2).objet)) == 0)
5324: {
5325: drapeau = d_faux;
5326:
5327: if ((s_objet_resultat = allocation(s_etat_processus, REL))
5328: == NULL)
5329: {
5330: (*s_etat_processus).erreur_systeme =
5331: d_es_allocation_memoire;
5332: return;
5333: }
5334:
5335: (*((real8 *) (*s_objet_resultat).objet)) = 0;
5336: }
5337: else if ((*((real8 *) (*s_objet_argument_2).objet)) == 1)
5338: {
5339: drapeau = d_faux;
5340:
5341: s_objet_resultat = s_objet_argument_1;
5342: s_objet_argument_1 = NULL;
5343: }
5344: }
5345: else if ((*s_objet_argument_2).type == CPL)
5346: {
5347: if (((*((complex16 *) (*s_objet_argument_2).objet))
5348: .partie_reelle == 0) && ((*((complex16 *)
5349: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
5350: {
5351: drapeau = d_faux;
5352:
5353: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
5354: == NULL)
5355: {
5356: (*s_etat_processus).erreur_systeme =
5357: d_es_allocation_memoire;
5358: return;
5359: }
5360:
5361: (*((complex16 *) (*s_objet_resultat).objet))
5362: .partie_reelle = 0;
5363: (*((complex16 *) (*s_objet_resultat).objet))
5364: .partie_imaginaire = 0;
5365: }
5366: else if (((*((complex16 *) (*s_objet_argument_2).objet))
5367: .partie_reelle == 1) && ((*((complex16 *)
5368: (*s_objet_argument_2).objet)).partie_imaginaire == 0))
5369: {
5370: drapeau = d_faux;
5371:
5372: s_objet_resultat = s_objet_argument_1;
5373: s_objet_argument_1 = NULL;
5374: }
5375: }
5376:
5377: if (drapeau == d_vrai)
5378: {
5379: if ((s_objet_resultat = copie_objet(s_etat_processus,
5380: s_objet_argument_1, 'N')) == NULL)
5381: {
5382: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5383: return;
5384: }
5385:
5386: l_element_courant = (struct_liste_chainee *)
5387: (*s_objet_resultat).objet;
5388: l_element_precedent = l_element_courant;
5389: l_element_courant = (*l_element_courant).suivant;
5390:
5391: if (((*l_element_precedent).suivant =
5392: allocation_maillon(s_etat_processus)) == NULL)
5393: {
5394: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5395: return;
5396: }
5397:
5398: (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
5399: (*(*l_element_precedent).suivant).suivant = l_element_courant;
5400:
5401: while((*l_element_courant).suivant != NULL)
5402: {
5403: l_element_precedent = l_element_courant;
5404: l_element_courant = (*l_element_courant).suivant;
5405: }
5406:
5407: if (((*l_element_precedent).suivant =
5408: allocation_maillon(s_etat_processus)) == NULL)
5409: {
5410: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5411: return;
5412: }
5413:
5414: if (((*(*l_element_precedent).suivant).donnee =
5415: allocation(s_etat_processus, FCT)) == NULL)
5416: {
5417: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5418: return;
5419: }
5420:
5421: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
5422: .donnee).objet)).nombre_arguments = 0;
5423: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
5424: .donnee).objet)).fonction = instruction_multiplication;
5425:
5426: if (((*((struct_fonction *) (*(*(*l_element_precedent)
5427: .suivant).donnee).objet)).nom_fonction =
5428: malloc(2 * sizeof(unsigned char))) == NULL)
5429: {
5430: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5431: return;
5432: }
5433:
5434: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
5435: .suivant).donnee).objet)).nom_fonction, "*");
5436:
5437: (*(*l_element_precedent).suivant).suivant = l_element_courant;
5438:
5439: s_objet_argument_2 = NULL;
5440: }
5441: }
5442:
5443: /*
5444: * Expression / Nom ou valeur numérique
5445: */
5446:
5447: else if ((((*s_objet_argument_1).type == NOM) ||
5448: ((*s_objet_argument_1).type == INT) ||
5449: ((*s_objet_argument_1).type == REL) ||
5450: ((*s_objet_argument_1).type == CPL)) &&
5451: (((*s_objet_argument_2).type == ALG)||
5452: ((*s_objet_argument_2).type == RPN)))
5453: {
5454: drapeau = d_vrai;
5455:
5456: nombre_elements = 0;
5457: l_element_courant = (struct_liste_chainee *)
5458: (*s_objet_argument_2).objet;
5459:
5460: while(l_element_courant != NULL)
5461: {
5462: nombre_elements++;
5463: l_element_courant = (*l_element_courant).suivant;
5464: }
5465:
5466: if (nombre_elements == 2)
5467: {
5468: liberation(s_etat_processus, s_objet_argument_1);
5469: liberation(s_etat_processus, s_objet_argument_2);
5470:
5471: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
5472: return;
5473: }
5474:
5475: if ((*s_objet_argument_1).type == INT)
5476: {
5477: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
5478: {
5479: drapeau = d_faux;
5480:
5481: if ((s_objet_resultat = allocation(s_etat_processus, INT))
5482: == NULL)
5483: {
5484: (*s_etat_processus).erreur_systeme =
5485: d_es_allocation_memoire;
5486: return;
5487: }
5488:
5489: (*((integer8 *) (*s_objet_resultat).objet)) = 0;
5490: }
5491: else if ((*((integer8 *) (*s_objet_argument_1).objet)) == 1)
5492: {
5493: drapeau = d_faux;
5494:
5495: s_objet_resultat = s_objet_argument_2;
5496: s_objet_argument_2 = NULL;
5497: }
5498: }
5499: else if ((*s_objet_argument_1).type == REL)
5500: {
5501: if ((*((integer8 *) (*s_objet_argument_1).objet)) == 0)
5502: {
5503: drapeau = d_faux;
5504:
5505: if ((s_objet_resultat = allocation(s_etat_processus, REL))
5506: == NULL)
5507: {
5508: (*s_etat_processus).erreur_systeme =
5509: d_es_allocation_memoire;
5510: return;
5511: }
5512:
5513: (*((real8 *) (*s_objet_resultat).objet)) = 0;
5514: }
5515: else if ((*((real8 *) (*s_objet_argument_1).objet)) == 1)
5516: {
5517: drapeau = d_faux;
5518:
5519: s_objet_resultat = s_objet_argument_2;
5520: s_objet_argument_2 = NULL;
5521: }
5522: }
5523: else if ((*s_objet_argument_1).type == CPL)
5524: {
5525: if (((*((complex16 *) (*s_objet_argument_1).objet))
5526: .partie_reelle == 0) && ((*((complex16 *)
5527: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
5528: {
5529: drapeau = d_faux;
5530:
5531: if ((s_objet_resultat = allocation(s_etat_processus, CPL))
5532: == NULL)
5533: {
5534: (*s_etat_processus).erreur_systeme =
5535: d_es_allocation_memoire;
5536: return;
5537: }
5538:
5539: (*((complex16 *) (*s_objet_resultat).objet))
5540: .partie_reelle = 0;
5541: (*((complex16 *) (*s_objet_resultat).objet))
5542: .partie_imaginaire = 0;
5543: }
5544: else if (((*((complex16 *) (*s_objet_argument_1).objet))
5545: .partie_reelle == 1) && ((*((complex16 *)
5546: (*s_objet_argument_1).objet)).partie_imaginaire == 0))
5547: {
5548: drapeau = d_faux;
5549:
5550: s_objet_resultat = s_objet_argument_2;
5551: s_objet_argument_2 = NULL;
5552: }
5553: }
5554:
5555: if (drapeau == d_vrai)
5556: {
5557: if ((s_objet_resultat = copie_objet(s_etat_processus,
5558: s_objet_argument_2, 'N')) == NULL)
5559: {
5560: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5561: return;
5562: }
5563:
5564: l_element_courant = (struct_liste_chainee *)
5565: (*s_objet_resultat).objet;
5566: l_element_precedent = l_element_courant;
5567:
5568: while((*l_element_courant).suivant != NULL)
5569: {
5570: l_element_precedent = l_element_courant;
5571: l_element_courant = (*l_element_courant).suivant;
5572: }
5573:
5574: if (((*l_element_precedent).suivant =
5575: allocation_maillon(s_etat_processus)) == NULL)
5576: {
5577: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5578: return;
5579: }
5580:
5581: (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
5582: l_element_precedent = (*l_element_precedent).suivant;
5583:
5584: if (((*l_element_precedent).suivant =
5585: allocation_maillon(s_etat_processus)) == NULL)
5586: {
5587: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5588: return;
5589: }
5590:
5591: if (((*(*l_element_precedent).suivant).donnee =
5592: allocation(s_etat_processus, FCT)) == NULL)
5593: {
5594: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5595: return;
5596: }
5597:
5598: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
5599: .donnee).objet)).nombre_arguments = 0;
5600: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
5601: .donnee).objet)).fonction = instruction_multiplication;
5602:
5603: if (((*((struct_fonction *) (*(*(*l_element_precedent)
5604: .suivant).donnee).objet)).nom_fonction =
5605: malloc(2 * sizeof(unsigned char))) == NULL)
5606: {
5607: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5608: return;
5609: }
5610:
5611: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
5612: .suivant).donnee).objet)).nom_fonction, "*");
5613:
5614: (*(*l_element_precedent).suivant).suivant = l_element_courant;
5615:
5616: s_objet_argument_1 = NULL;
5617: }
5618: }
5619:
5620: /*
5621: * Expression / Expression
5622: */
5623:
5624: else if ((((*s_objet_argument_1).type == ALG) &&
5625: ((*s_objet_argument_2).type == ALG)) ||
5626: (((*s_objet_argument_1).type == RPN) &&
5627: ((*s_objet_argument_2).type == RPN)))
5628: {
5629: nombre_elements = 0;
5630: l_element_courant = (struct_liste_chainee *)
5631: (*s_objet_argument_1).objet;
5632:
5633: while(l_element_courant != NULL)
5634: {
5635: nombre_elements++;
5636: l_element_courant = (*l_element_courant).suivant;
5637: }
5638:
5639: if (nombre_elements == 2)
5640: {
5641: liberation(s_etat_processus, s_objet_argument_1);
5642: liberation(s_etat_processus, s_objet_argument_2);
5643:
5644: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
5645: return;
5646: }
5647:
5648: nombre_elements = 0;
5649: l_element_courant = (struct_liste_chainee *)
5650: (*s_objet_argument_2).objet;
5651:
5652: while(l_element_courant != NULL)
5653: {
5654: nombre_elements++;
5655: l_element_courant = (*l_element_courant).suivant;
5656: }
5657:
5658: if (nombre_elements == 2)
5659: {
5660: liberation(s_etat_processus, s_objet_argument_1);
5661: liberation(s_etat_processus, s_objet_argument_2);
5662:
5663: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
5664: return;
5665: }
5666:
5667: if ((s_copie_argument_1 = copie_objet(s_etat_processus,
5668: s_objet_argument_1, 'N')) == NULL)
5669: {
5670: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5671: return;
5672: }
5673:
5674: if ((s_copie_argument_2 = copie_objet(s_etat_processus,
5675: s_objet_argument_2, 'N')) == NULL)
5676: {
5677: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5678: return;
5679: }
5680:
5681: l_element_courant = (struct_liste_chainee *)
5682: (*s_copie_argument_1).objet;
5683: (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
5684: (*s_copie_argument_1).objet)).suivant;
5685:
5686: liberation(s_etat_processus, (*l_element_courant).donnee);
5687: free(l_element_courant);
5688:
5689: l_element_courant = (struct_liste_chainee *)
5690: (*s_copie_argument_2).objet;
5691: l_element_precedent = l_element_courant;
5692: s_objet_resultat = s_copie_argument_2;
5693:
5694: while((*l_element_courant).suivant != NULL)
5695: {
5696: l_element_precedent = l_element_courant;
5697: l_element_courant = (*l_element_courant).suivant;
5698: }
5699:
5700: liberation(s_etat_processus, (*l_element_courant).donnee);
5701: free(l_element_courant);
5702:
5703: (*l_element_precedent).suivant = (struct_liste_chainee *)
5704: (*s_copie_argument_1).objet;
5705: free(s_copie_argument_1);
5706:
5707: l_element_courant = (*l_element_precedent).suivant;
5708: while((*l_element_courant).suivant != NULL)
5709: {
5710: l_element_precedent = l_element_courant;
5711: l_element_courant = (*l_element_courant).suivant;
5712: }
5713:
5714: if (((*l_element_precedent).suivant =
5715: allocation_maillon(s_etat_processus)) == NULL)
5716: {
5717: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5718: return;
5719: }
5720:
5721: (*(*l_element_precedent).suivant).suivant = l_element_courant;
5722: l_element_courant = (*l_element_precedent).suivant;
5723:
5724: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
5725: == NULL)
5726: {
5727: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5728: return;
5729: }
5730:
5731: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5732: .nombre_arguments = 0;
5733: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5734: .fonction = instruction_multiplication;
5735:
5736: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5737: .nom_fonction = malloc(2 * sizeof(unsigned char))) == NULL)
5738: {
5739: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5740: return;
5741: }
5742:
5743: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5744: .nom_fonction, "*");
5745: }
5746:
5747: /*
5748: --------------------------------------------------------------------------------
5749: Multiplication impossible
5750: --------------------------------------------------------------------------------
5751: */
5752:
5753: else
5754: {
5755: liberation(s_etat_processus, s_objet_argument_1);
5756: liberation(s_etat_processus, s_objet_argument_2);
5757:
5758: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
5759: return;
5760: }
5761:
5762: liberation(s_etat_processus, s_objet_argument_1);
5763: liberation(s_etat_processus, s_objet_argument_2);
5764:
5765: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
5766: s_objet_resultat) == d_erreur)
5767: {
5768: return;
5769: }
5770:
5771: return;
5772: }
5773:
5774:
5775: /*
5776: ================================================================================
5777: Fonction 'mant'
5778: ================================================================================
5779: Entrées :
5780: --------------------------------------------------------------------------------
5781: Sorties :
5782: --------------------------------------------------------------------------------
5783: Effets de bord : néant
5784: ================================================================================
5785: */
5786:
5787: void
5788: instruction_mant(struct_processus *s_etat_processus)
5789: {
5790: real8 base_reelle;
5791: real8 reduction_reelle;
5792:
5793: integer8 base_entiere;
5794: integer8 exposant;
5795: integer8 reduction_entiere;
5796:
5797: struct_liste_chainee *l_element_courant;
5798: struct_liste_chainee *l_element_precedent;
5799:
5800: struct_objet *s_copie_argument;
5801: struct_objet *s_objet_argument;
5802: struct_objet *s_objet_resultat;
5803:
5804: (*s_etat_processus).erreur_execution = d_ex;
5805:
5806: if ((*s_etat_processus).affichage_arguments == 'Y')
5807: {
5808: printf("\n MANT ");
5809:
5810: if ((*s_etat_processus).langue == 'F')
5811: {
5812: printf("(mantisse)\n\n");
5813: }
5814: else
5815: {
5816: printf("(mantissa)\n\n");
5817: }
5818:
5819: printf(" 1: %s, %s\n", d_INT, d_REL);
5820: printf("-> 1: %s\n\n", d_REL);
5821:
5822: printf(" 1: %s, %s\n", d_NOM, d_ALG);
5823: printf("-> 1: %s\n\n", d_ALG);
5824:
5825: printf(" 1: %s\n", d_RPN);
5826: printf("-> 1: %s\n", d_RPN);
5827:
5828: return;
5829: }
5830: else if ((*s_etat_processus).test_instruction == 'Y')
5831: {
5832: (*s_etat_processus).nombre_arguments = 1;
5833: return;
5834: }
5835:
5836: if (test_cfsf(s_etat_processus, 31) == d_vrai)
5837: {
5838: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
5839: {
5840: return;
5841: }
5842: }
5843:
5844: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
5845: &s_objet_argument) == d_erreur)
5846: {
5847: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
5848: return;
5849: }
5850:
5851: /*
5852: --------------------------------------------------------------------------------
5853: Mantisse d'un entier
5854: --------------------------------------------------------------------------------
5855: */
5856:
5857: if ((*s_objet_argument).type == INT)
5858: {
5859: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
5860: {
5861: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5862: return;
5863: }
5864:
5865: exposant = (integer8) floor(log10((*((integer8 *)
5866: (*s_objet_argument).objet))));
5867:
5868: base_entiere = 10;
5869: f77puissanceii_(&base_entiere, &exposant, &reduction_entiere);
5870:
5871: (*((real8 *) (*s_objet_resultat).objet)) = ((real8)
5872: (*((integer8 *) (*s_objet_argument).objet))) /
5873: reduction_entiere;
5874: }
5875:
5876: /*
5877: --------------------------------------------------------------------------------
5878: Mantisse d'un réel
5879: --------------------------------------------------------------------------------
5880: */
5881:
5882: else if ((*s_objet_argument).type == REL)
5883: {
5884: if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL)
5885: {
5886: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5887: return;
5888: }
5889:
5890: exposant = (integer8) floor(log10((*((real8 *)
5891: (*s_objet_argument).objet))));
5892:
5893: base_reelle = 10;
5894: f77puissanceri_(&base_reelle, &exposant, &reduction_reelle);
5895:
5896: (*((real8 *) (*s_objet_resultat).objet)) =
5897: (*((real8 *) (*s_objet_argument).objet)) / reduction_reelle;
5898: }
5899:
5900: /*
5901: --------------------------------------------------------------------------------
5902: Mantisse d'un nom
5903: --------------------------------------------------------------------------------
5904: */
5905:
5906: else if ((*s_objet_argument).type == NOM)
5907: {
5908: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
5909: {
5910: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5911: return;
5912: }
5913:
5914: if (((*s_objet_resultat).objet =
5915: allocation_maillon(s_etat_processus)) == NULL)
5916: {
5917: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5918: return;
5919: }
5920:
5921: l_element_courant = (*s_objet_resultat).objet;
5922:
5923: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
5924: == NULL)
5925: {
5926: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5927: return;
5928: }
5929:
5930: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5931: .nombre_arguments = 0;
5932: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5933: .fonction = instruction_vers_niveau_superieur;
5934:
5935: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5936: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
5937: {
5938: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5939: return;
5940: }
5941:
5942: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5943: .nom_fonction, "<<");
5944:
5945: if (((*l_element_courant).suivant =
5946: allocation_maillon(s_etat_processus)) == NULL)
5947: {
5948: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5949: return;
5950: }
5951:
5952: l_element_courant = (*l_element_courant).suivant;
5953: (*l_element_courant).donnee = s_objet_argument;
5954:
5955: if (((*l_element_courant).suivant =
5956: allocation_maillon(s_etat_processus)) == NULL)
5957: {
5958: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5959: return;
5960: }
5961:
5962: l_element_courant = (*l_element_courant).suivant;
5963:
5964: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
5965: == NULL)
5966: {
5967: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5968: return;
5969: }
5970:
5971: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5972: .nombre_arguments = 1;
5973: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5974: .fonction = instruction_mant;
5975:
5976: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5977: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
5978: {
5979: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5980: return;
5981: }
5982:
5983: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
5984: .nom_fonction, "MANT");
5985:
5986: if (((*l_element_courant).suivant =
5987: allocation_maillon(s_etat_processus)) == NULL)
5988: {
5989: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5990: return;
5991: }
5992:
5993: l_element_courant = (*l_element_courant).suivant;
5994:
5995: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
5996: == NULL)
5997: {
5998: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
5999: return;
6000: }
6001:
6002: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6003: .nombre_arguments = 0;
6004: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6005: .fonction = instruction_vers_niveau_inferieur;
6006:
6007: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6008: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
6009: {
6010: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6011: return;
6012: }
6013:
6014: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6015: .nom_fonction, ">>");
6016:
6017: (*l_element_courant).suivant = NULL;
6018: s_objet_argument = NULL;
6019: }
6020:
6021: /*
6022: --------------------------------------------------------------------------------
6023: Mantisse d'une expression
6024: --------------------------------------------------------------------------------
6025: */
6026:
6027: else if (((*s_objet_argument).type == ALG) ||
6028: ((*s_objet_argument).type == RPN))
6029: {
6030: if ((s_copie_argument = copie_objet(s_etat_processus,
6031: s_objet_argument, 'N')) == NULL)
6032: {
6033: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6034: return;
6035: }
6036:
6037: l_element_courant = (struct_liste_chainee *)
6038: (*s_copie_argument).objet;
6039: l_element_precedent = l_element_courant;
6040:
6041: while((*l_element_courant).suivant != NULL)
6042: {
6043: l_element_precedent = l_element_courant;
6044: l_element_courant = (*l_element_courant).suivant;
6045: }
6046:
6047: if (((*l_element_precedent).suivant =
6048: allocation_maillon(s_etat_processus)) == NULL)
6049: {
6050: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6051: return;
6052: }
6053:
6054: if (((*(*l_element_precedent).suivant).donnee =
6055: allocation(s_etat_processus, FCT)) == NULL)
6056: {
6057: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6058: return;
6059: }
6060:
6061: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6062: .donnee).objet)).nombre_arguments = 1;
6063: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6064: .donnee).objet)).fonction = instruction_mant;
6065:
6066: if (((*((struct_fonction *) (*(*(*l_element_precedent)
6067: .suivant).donnee).objet)).nom_fonction =
6068: malloc(5 * sizeof(unsigned char))) == NULL)
6069: {
6070: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6071: return;
6072: }
6073:
6074: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
6075: .suivant).donnee).objet)).nom_fonction, "MANT");
6076:
6077: (*(*l_element_precedent).suivant).suivant = l_element_courant;
6078:
6079: s_objet_resultat = s_copie_argument;
6080: }
6081:
6082: /*
6083: --------------------------------------------------------------------------------
6084: Fonction mantisse impossible à réaliser
6085: --------------------------------------------------------------------------------
6086: */
6087:
6088: else
6089: {
6090: liberation(s_etat_processus, s_objet_argument);
6091:
6092: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
6093: return;
6094: }
6095:
6096: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
6097: s_objet_resultat) == d_erreur)
6098: {
6099: return;
6100: }
6101:
6102: liberation(s_etat_processus, s_objet_argument);
6103:
6104: return;
6105: }
6106:
6107:
6108: /*
6109: ================================================================================
6110: Fonction 'mod'
6111: ================================================================================
6112: Entrées :
6113: --------------------------------------------------------------------------------
6114: Sorties :
6115: --------------------------------------------------------------------------------
6116: Effets de bord : néant
6117: ================================================================================
6118: */
6119:
6120: void
6121: instruction_mod(struct_processus *s_etat_processus)
6122: {
6123: struct_liste_chainee *l_element_courant;
6124: struct_liste_chainee *l_element_precedent;
6125:
6126: struct_objet *s_copie_argument_1;
6127: struct_objet *s_copie_argument_2;
6128: struct_objet *s_objet_argument_1;
6129: struct_objet *s_objet_argument_2;
6130: struct_objet *s_objet_resultat;
6131:
6132: unsigned long i;
6133: unsigned long j;
6134: unsigned long nombre_elements;
6135:
6136: (*s_etat_processus).erreur_execution = d_ex;
6137:
6138: if ((*s_etat_processus).affichage_arguments == 'Y')
6139: {
6140: printf("\n MOD ");
6141:
6142: if ((*s_etat_processus).langue == 'F')
6143: {
6144: printf("(modulo)\n\n");
6145: }
6146: else
6147: {
6148: printf("(modulo)\n\n");
6149: }
6150:
6151: printf(" 2: %s, %s\n", d_INT, d_REL);
6152: printf(" 1: %s, %s\n", d_INT, d_REL);
6153: printf("-> 1: %s, %s\n\n", d_INT, d_REL);
6154:
6155: printf(" 2: %s, %s, %s, %s, %s, %s\n",
6156: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
6157: printf(" 1: %s, %s, %s, %s, %s, %s\n",
6158: d_INT, d_REL, d_CPL, d_NOM, d_ALG, d_RPN);
6159: printf("-> 1: %s, %s\n", d_ALG, d_RPN);
6160:
6161: return;
6162: }
6163: else if ((*s_etat_processus).test_instruction == 'Y')
6164: {
6165: (*s_etat_processus).nombre_arguments = 2;
6166: return;
6167: }
6168:
6169: if (test_cfsf(s_etat_processus, 31) == d_vrai)
6170: {
6171: if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
6172: {
6173: return;
6174: }
6175: }
6176:
6177: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
6178: &s_objet_argument_1) == d_erreur)
6179: {
6180: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
6181: return;
6182: }
6183:
6184: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
6185: &s_objet_argument_2) == d_erreur)
6186: {
6187: liberation(s_etat_processus, s_objet_argument_1);
6188:
6189: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
6190: return;
6191: }
6192:
6193: /*
6194: --------------------------------------------------------------------------------
6195: MOD portant sur des valeurs numériques
6196: --------------------------------------------------------------------------------
6197: */
6198:
6199: if ((((*s_objet_argument_1).type == INT) ||
6200: ((*s_objet_argument_1).type == REL)) &&
6201: (((*s_objet_argument_2).type == INT) ||
6202: ((*s_objet_argument_2).type == REL)))
6203: {
6204: if ((*s_objet_argument_1).type == INT)
6205: {
6206: if ((*s_objet_argument_2).type == INT)
6207: {
6208: if ((s_objet_resultat = allocation(s_etat_processus, INT))
6209: == NULL)
6210: {
6211: (*s_etat_processus).erreur_systeme =
6212: d_es_allocation_memoire;
6213: return;
6214: }
6215:
6216: (*((integer8 *) (*s_objet_resultat).objet)) =
6217: (*((integer8 *) (*s_objet_argument_2).objet)) -
6218: ((*((integer8 *) (*s_objet_argument_1).objet)) *
6219: floor(((real8) (*((integer8 *) (*s_objet_argument_2)
6220: .objet))) / ((real8) (*((integer8 *)
6221: (*s_objet_argument_1).objet)))));
6222: }
6223: else
6224: {
6225: if ((s_objet_resultat = allocation(s_etat_processus, REL))
6226: == NULL)
6227: {
6228: (*s_etat_processus).erreur_systeme =
6229: d_es_allocation_memoire;
6230: return;
6231: }
6232:
6233: (*((real8 *) (*s_objet_resultat).objet)) =
6234: (*((real8 *) (*s_objet_argument_2).objet)) -
6235: ((*((integer8 *) (*s_objet_argument_1).objet)) *
6236: floor((*((real8 *) (*s_objet_argument_2)
6237: .objet)) / ((real8) (*((integer8 *)
6238: (*s_objet_argument_1).objet)))));
6239: }
6240: }
6241: else
6242: {
6243: if ((*s_objet_argument_2).type == INT)
6244: {
6245: if ((s_objet_resultat = allocation(s_etat_processus, REL))
6246: == NULL)
6247: {
6248: (*s_etat_processus).erreur_systeme =
6249: d_es_allocation_memoire;
6250: return;
6251: }
6252:
6253: (*((real8 *) (*s_objet_resultat).objet)) =
6254: (*((integer8 *) (*s_objet_argument_2).objet)) -
6255: ((*((real8 *) (*s_objet_argument_1).objet)) *
6256: floor(((real8) (*((integer8 *) (*s_objet_argument_2)
6257: .objet))) / (*((real8 *)
6258: (*s_objet_argument_1).objet))));
6259: }
6260: else
6261: {
6262: if ((s_objet_resultat = allocation(s_etat_processus, REL))
6263: == NULL)
6264: {
6265: (*s_etat_processus).erreur_systeme =
6266: d_es_allocation_memoire;
6267: return;
6268: }
6269:
6270: (*((real8 *) (*s_objet_resultat).objet)) =
6271: (*((real8 *) (*s_objet_argument_2).objet)) -
6272: ((*((real8 *) (*s_objet_argument_1).objet)) *
6273: floor((*((real8 *) (*s_objet_argument_2)
6274: .objet)) / (*((real8 *)
6275: (*s_objet_argument_1).objet))));
6276: }
6277: }
6278: }
6279:
6280: /*
6281: --------------------------------------------------------------------------------
6282: MOD portant sur des vecteurs
6283: --------------------------------------------------------------------------------
6284: */
6285:
6286: else if ((((*s_objet_argument_1).type == INT) ||
6287: ((*s_objet_argument_1).type == REL)) &&
6288: (((*s_objet_argument_2).type == VIN) ||
6289: ((*s_objet_argument_2).type == VRL)))
6290: {
6291: if ((*s_objet_argument_1).type == INT)
6292: {
6293: if ((*s_objet_argument_2).type == VIN)
6294: {
6295: if ((s_objet_resultat = allocation(s_etat_processus, VIN))
6296: == NULL)
6297: {
6298: (*s_etat_processus).erreur_systeme =
6299: d_es_allocation_memoire;
6300: return;
6301: }
6302:
6303: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
6304: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6305: .taille;
6306:
6307: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
6308: malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
6309: .taille * sizeof(integer8))) == NULL)
6310: {
6311: (*s_etat_processus).erreur_systeme =
6312: d_es_allocation_memoire;
6313: return;
6314: }
6315:
6316: for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
6317: .taille; i++)
6318: {
6319: ((integer8 *) (*((struct_vecteur *) (*s_objet_resultat)
6320: .objet)).tableau)[i] = ((integer8 *)
6321: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6322: .tableau)[i] - ((*((integer8 *)
6323: (*s_objet_argument_1).objet)) * floor(((real8)
6324: ((integer8 *) (*((struct_vecteur *)
6325: (*s_objet_argument_2).objet)).tableau)[i]) /
6326: ((real8) (*((integer8 *) (*s_objet_argument_1)
6327: .objet)))));
6328: }
6329: }
6330: else
6331: {
6332: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
6333: == NULL)
6334: {
6335: (*s_etat_processus).erreur_systeme =
6336: d_es_allocation_memoire;
6337: return;
6338: }
6339:
6340: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
6341: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6342: .taille;
6343:
6344: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
6345: malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
6346: .taille * sizeof(real8))) == NULL)
6347: {
6348: (*s_etat_processus).erreur_systeme =
6349: d_es_allocation_memoire;
6350: return;
6351: }
6352:
6353: for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
6354: .taille; i++)
6355: {
6356: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
6357: .objet)).tableau)[i] = ((real8 *)
6358: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6359: .tableau)[i] - ((*((integer8 *)
6360: (*s_objet_argument_1).objet)) * floor(
6361: ((real8 *) (*((struct_vecteur *)
6362: (*s_objet_argument_2).objet)).tableau)[i] /
6363: ((real8) (*((integer8 *) (*s_objet_argument_1)
6364: .objet)))));
6365: }
6366: }
6367: }
6368: else
6369: {
6370: if ((*s_objet_argument_2).type == VIN)
6371: {
6372: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
6373: == NULL)
6374: {
6375: (*s_etat_processus).erreur_systeme =
6376: d_es_allocation_memoire;
6377: return;
6378: }
6379:
6380: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
6381: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6382: .taille;
6383:
6384: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
6385: malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
6386: .taille * sizeof(real8))) == NULL)
6387: {
6388: (*s_etat_processus).erreur_systeme =
6389: d_es_allocation_memoire;
6390: return;
6391: }
6392:
6393: for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
6394: .taille; i++)
6395: {
6396: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
6397: .objet)).tableau)[i] = ((integer8 *)
6398: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6399: .tableau)[i] - ((*((real8 *)
6400: (*s_objet_argument_1).objet)) * floor(((real8)
6401: ((integer8 *) (*((struct_vecteur *)
6402: (*s_objet_argument_2).objet)).tableau)[i]) /
6403: (*((real8 *) (*s_objet_argument_1)
6404: .objet))));
6405: }
6406: }
6407: else
6408: {
6409: if ((s_objet_resultat = allocation(s_etat_processus, VRL))
6410: == NULL)
6411: {
6412: (*s_etat_processus).erreur_systeme =
6413: d_es_allocation_memoire;
6414: return;
6415: }
6416:
6417: (*((struct_vecteur *) (*s_objet_resultat).objet)).taille =
6418: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6419: .taille;
6420:
6421: if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau =
6422: malloc((*((struct_vecteur *) (*s_objet_resultat).objet))
6423: .taille * sizeof(real8))) == NULL)
6424: {
6425: (*s_etat_processus).erreur_systeme =
6426: d_es_allocation_memoire;
6427: return;
6428: }
6429:
6430: for(i = 0; i < (*((struct_vecteur *) (*s_objet_resultat).objet))
6431: .taille; i++)
6432: {
6433: ((real8 *) (*((struct_vecteur *) (*s_objet_resultat)
6434: .objet)).tableau)[i] = ((real8 *)
6435: (*((struct_vecteur *) (*s_objet_argument_2).objet))
6436: .tableau)[i] - ((*((real8 *)
6437: (*s_objet_argument_1).objet)) * floor(
6438: ((real8 *) (*((struct_vecteur *)
6439: (*s_objet_argument_2).objet)).tableau)[i] /
6440: (*((real8 *) (*s_objet_argument_1)
6441: .objet))));
6442: }
6443: }
6444: }
6445: }
6446:
6447: /*
6448: --------------------------------------------------------------------------------
6449: MOD portant sur des matrices
6450: --------------------------------------------------------------------------------
6451: */
6452:
6453: else if ((((*s_objet_argument_1).type == INT) ||
6454: ((*s_objet_argument_1).type == REL)) &&
6455: (((*s_objet_argument_2).type == MIN) ||
6456: ((*s_objet_argument_2).type == MRL)))
6457: {
6458: if ((*s_objet_argument_1).type == INT)
6459: {
6460: if ((*s_objet_argument_2).type == MIN)
6461: {
6462: if ((s_objet_resultat = allocation(s_etat_processus, MIN))
6463: == NULL)
6464: {
6465: (*s_etat_processus).erreur_systeme =
6466: d_es_allocation_memoire;
6467: return;
6468: }
6469:
6470: (*((struct_matrice *) (*s_objet_resultat).objet))
6471: .nombre_lignes = (*((struct_matrice *)
6472: (*s_objet_argument_2).objet)).nombre_lignes;
6473: (*((struct_matrice *) (*s_objet_resultat).objet))
6474: .nombre_colonnes = (*((struct_matrice *)
6475: (*s_objet_argument_2).objet)).nombre_colonnes;
6476:
6477: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
6478: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
6479: .nombre_lignes * sizeof(integer8 *))) == NULL)
6480: {
6481: (*s_etat_processus).erreur_systeme =
6482: d_es_allocation_memoire;
6483: return;
6484: }
6485:
6486: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
6487: .nombre_lignes; i++)
6488: {
6489: if ((((integer8 **) (*((struct_matrice *)
6490: (*s_objet_resultat).objet)).tableau)[i] =
6491: malloc((*((struct_matrice *) (*s_objet_resultat)
6492: .objet)).nombre_colonnes * sizeof(integer8)))
6493: == NULL)
6494: {
6495: (*s_etat_processus).erreur_systeme =
6496: d_es_allocation_memoire;
6497: return;
6498: }
6499:
6500: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
6501: .objet)).nombre_colonnes; j++)
6502: {
6503: ((integer8 **) (*((struct_matrice *) (*s_objet_resultat)
6504: .objet)).tableau)[i][j] = ((integer8 **)
6505: (*((struct_matrice *) (*s_objet_argument_2)
6506: .objet)).tableau)[i][j] - ((*((integer8 *)
6507: (*s_objet_argument_1).objet)) * floor(((real8)
6508: ((integer8 **) (*((struct_matrice *)
6509: (*s_objet_argument_2).objet)).tableau)[i][j]) /
6510: ((real8) (*((integer8 *) (*s_objet_argument_1)
6511: .objet)))));
6512: }
6513: }
6514: }
6515: else
6516: {
6517: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
6518: == NULL)
6519: {
6520: (*s_etat_processus).erreur_systeme =
6521: d_es_allocation_memoire;
6522: return;
6523: }
6524:
6525: (*((struct_matrice *) (*s_objet_resultat).objet))
6526: .nombre_lignes = (*((struct_matrice *)
6527: (*s_objet_argument_2).objet)).nombre_lignes;
6528: (*((struct_matrice *) (*s_objet_resultat).objet))
6529: .nombre_colonnes = (*((struct_matrice *)
6530: (*s_objet_argument_2).objet)).nombre_colonnes;
6531:
6532: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
6533: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
6534: .nombre_lignes * sizeof(real8 *))) == NULL)
6535: {
6536: (*s_etat_processus).erreur_systeme =
6537: d_es_allocation_memoire;
6538: return;
6539: }
6540:
6541: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
6542: .nombre_lignes; i++)
6543: {
6544: if ((((real8 **) (*((struct_matrice *)
6545: (*s_objet_resultat).objet)).tableau)[i] =
6546: malloc((*((struct_matrice *) (*s_objet_resultat)
6547: .objet)).nombre_colonnes * sizeof(real8)))
6548: == NULL)
6549: {
6550: (*s_etat_processus).erreur_systeme =
6551: d_es_allocation_memoire;
6552: return;
6553: }
6554:
6555: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
6556: .objet)).nombre_colonnes; j++)
6557: {
6558: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
6559: .objet)).tableau)[i][j] = ((real8 **)
6560: (*((struct_matrice *) (*s_objet_argument_2)
6561: .objet)).tableau)[i][j] - ((*((integer8 *)
6562: (*s_objet_argument_1).objet)) * floor(
6563: ((real8 **) (*((struct_matrice *)
6564: (*s_objet_argument_2).objet)).tableau)[i][j] /
6565: ((real8) (*((integer8 *) (*s_objet_argument_1)
6566: .objet)))));
6567: }
6568: }
6569: }
6570: }
6571: else
6572: {
6573: if ((*s_objet_argument_2).type == MIN)
6574: {
6575: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
6576: == NULL)
6577: {
6578: (*s_etat_processus).erreur_systeme =
6579: d_es_allocation_memoire;
6580: return;
6581: }
6582:
6583: (*((struct_matrice *) (*s_objet_resultat).objet))
6584: .nombre_lignes = (*((struct_matrice *)
6585: (*s_objet_argument_2).objet)).nombre_lignes;
6586: (*((struct_matrice *) (*s_objet_resultat).objet))
6587: .nombre_colonnes = (*((struct_matrice *)
6588: (*s_objet_argument_2).objet)).nombre_colonnes;
6589:
6590: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
6591: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
6592: .nombre_lignes * sizeof(real8 *))) == NULL)
6593: {
6594: (*s_etat_processus).erreur_systeme =
6595: d_es_allocation_memoire;
6596: return;
6597: }
6598:
6599: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
6600: .nombre_lignes; i++)
6601: {
6602: if ((((real8 **) (*((struct_matrice *)
6603: (*s_objet_resultat).objet)).tableau)[i] =
6604: malloc((*((struct_matrice *) (*s_objet_resultat)
6605: .objet)).nombre_colonnes * sizeof(real8)))
6606: == NULL)
6607: {
6608: (*s_etat_processus).erreur_systeme =
6609: d_es_allocation_memoire;
6610: return;
6611: }
6612:
6613: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
6614: .objet)).nombre_colonnes; j++)
6615: {
6616: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
6617: .objet)).tableau)[i][j] = ((integer8 **)
6618: (*((struct_matrice *) (*s_objet_argument_2)
6619: .objet)).tableau)[i][j] - ((*((real8 *)
6620: (*s_objet_argument_1).objet)) * floor(((real8)
6621: ((integer8 **) (*((struct_matrice *)
6622: (*s_objet_argument_2).objet)).tableau)[i][j]) /
6623: (*((real8 *) (*s_objet_argument_1)
6624: .objet))));
6625: }
6626: }
6627: }
6628: else
6629: {
6630: if ((s_objet_resultat = allocation(s_etat_processus, MRL))
6631: == NULL)
6632: {
6633: (*s_etat_processus).erreur_systeme =
6634: d_es_allocation_memoire;
6635: return;
6636: }
6637:
6638: (*((struct_matrice *) (*s_objet_resultat).objet))
6639: .nombre_lignes = (*((struct_matrice *)
6640: (*s_objet_argument_2).objet)).nombre_lignes;
6641: (*((struct_matrice *) (*s_objet_resultat).objet))
6642: .nombre_colonnes = (*((struct_matrice *)
6643: (*s_objet_argument_2).objet)).nombre_colonnes;
6644:
6645: if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
6646: malloc((*((struct_matrice *) (*s_objet_resultat).objet))
6647: .nombre_lignes * sizeof(real8 *))) == NULL)
6648: {
6649: (*s_etat_processus).erreur_systeme =
6650: d_es_allocation_memoire;
6651: return;
6652: }
6653:
6654: for(i = 0; i < (*((struct_matrice *) (*s_objet_resultat).objet))
6655: .nombre_lignes; i++)
6656: {
6657: if ((((real8 **) (*((struct_matrice *)
6658: (*s_objet_resultat).objet)).tableau)[i] =
6659: malloc((*((struct_matrice *) (*s_objet_resultat)
6660: .objet)).nombre_colonnes * sizeof(real8)))
6661: == NULL)
6662: {
6663: (*s_etat_processus).erreur_systeme =
6664: d_es_allocation_memoire;
6665: return;
6666: }
6667:
6668: for(j = 0; j < (*((struct_matrice *) (*s_objet_resultat)
6669: .objet)).nombre_colonnes; j++)
6670: {
6671: ((real8 **) (*((struct_matrice *) (*s_objet_resultat)
6672: .objet)).tableau)[i][j] = ((real8 **)
6673: (*((struct_matrice *) (*s_objet_argument_2)
6674: .objet)).tableau)[i][j] - ((*((real8 *)
6675: (*s_objet_argument_1).objet)) * floor(
6676: ((real8 **) (*((struct_matrice *)
6677: (*s_objet_argument_2).objet)).tableau)[i][j] /
6678: (*((real8 *) (*s_objet_argument_1)
6679: .objet))));
6680: }
6681: }
6682: }
6683: }
6684: }
6685:
6686: /*
6687: --------------------------------------------------------------------------------
6688: MOD entre des arguments complexes
6689: --------------------------------------------------------------------------------
6690: */
6691:
6692: /*
6693: * Nom ou valeur numérique / Nom ou valeur numérique
6694: */
6695:
6696: else if ((((*s_objet_argument_1).type == NOM) &&
6697: (((*s_objet_argument_2).type == NOM) ||
6698: ((*s_objet_argument_2).type == INT) ||
6699: ((*s_objet_argument_2).type == REL))) ||
6700: (((*s_objet_argument_2).type == NOM) &&
6701: (((*s_objet_argument_1).type == INT) ||
6702: ((*s_objet_argument_1).type == REL))))
6703: {
6704: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
6705: {
6706: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6707: return;
6708: }
6709:
6710: if (((*s_objet_resultat).objet =
6711: allocation_maillon(s_etat_processus)) == NULL)
6712: {
6713: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6714: return;
6715: }
6716:
6717: l_element_courant = (*s_objet_resultat).objet;
6718:
6719: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
6720: == NULL)
6721: {
6722: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6723: return;
6724: }
6725:
6726: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6727: .nombre_arguments = 0;
6728: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6729: .fonction = instruction_vers_niveau_superieur;
6730:
6731: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6732: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
6733: {
6734: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6735: return;
6736: }
6737:
6738: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6739: .nom_fonction, "<<");
6740:
6741: if (((*l_element_courant).suivant =
6742: allocation_maillon(s_etat_processus)) == NULL)
6743: {
6744: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6745: return;
6746: }
6747:
6748: l_element_courant = (*l_element_courant).suivant;
6749: (*l_element_courant).donnee = s_objet_argument_2;
6750:
6751: if (((*l_element_courant).suivant =
6752: allocation_maillon(s_etat_processus)) == NULL)
6753: {
6754: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6755: return;
6756: }
6757:
6758: l_element_courant = (*l_element_courant).suivant;
6759: (*l_element_courant).donnee = s_objet_argument_1;
6760:
6761: if (((*l_element_courant).suivant =
6762: allocation_maillon(s_etat_processus)) == NULL)
6763: {
6764: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6765: return;
6766: }
6767:
6768: l_element_courant = (*l_element_courant).suivant;
6769:
6770: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
6771: == NULL)
6772: {
6773: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6774: return;
6775: }
6776:
6777: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6778: .nombre_arguments = 2;
6779: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6780: .fonction = instruction_mod;
6781:
6782: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6783: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
6784: {
6785: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6786: return;
6787: }
6788:
6789: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6790: .nom_fonction, "MOD");
6791:
6792: if (((*l_element_courant).suivant =
6793: allocation_maillon(s_etat_processus)) == NULL)
6794: {
6795: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6796: return;
6797: }
6798:
6799: l_element_courant = (*l_element_courant).suivant;
6800:
6801: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
6802: == NULL)
6803: {
6804: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6805: return;
6806: }
6807:
6808: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6809: .nombre_arguments = 0;
6810: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6811: .fonction = instruction_vers_niveau_inferieur;
6812:
6813: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6814: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
6815: {
6816: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6817: return;
6818: }
6819:
6820: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
6821: .nom_fonction, ">>");
6822:
6823: (*l_element_courant).suivant = NULL;
6824:
6825: s_objet_argument_1 = NULL;
6826: s_objet_argument_2 = NULL;
6827: }
6828:
6829: /*
6830: * Nom ou valeur numérique / Expression
6831: */
6832:
6833: else if (((((*s_objet_argument_1).type == ALG) ||
6834: ((*s_objet_argument_1).type == RPN))) &&
6835: (((*s_objet_argument_2).type == NOM) ||
6836: ((*s_objet_argument_2).type == INT) ||
6837: ((*s_objet_argument_2).type == REL)))
6838: {
6839: nombre_elements = 0;
6840: l_element_courant = (struct_liste_chainee *)
6841: (*s_objet_argument_1).objet;
6842:
6843: while(l_element_courant != NULL)
6844: {
6845: nombre_elements++;
6846: l_element_courant = (*l_element_courant).suivant;
6847: }
6848:
6849: if (nombre_elements == 2)
6850: {
6851: liberation(s_etat_processus, s_objet_argument_1);
6852: liberation(s_etat_processus, s_objet_argument_2);
6853:
6854: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
6855: return;
6856: }
6857:
6858: if ((s_objet_resultat = copie_objet(s_etat_processus,
6859: s_objet_argument_1, 'N')) == NULL)
6860: {
6861: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6862: return;
6863: }
6864:
6865: l_element_courant = (struct_liste_chainee *)
6866: (*s_objet_resultat).objet;
6867: l_element_precedent = l_element_courant;
6868: l_element_courant = (*l_element_courant).suivant;
6869:
6870: if (((*l_element_precedent).suivant =
6871: allocation_maillon(s_etat_processus)) == NULL)
6872: {
6873: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6874: return;
6875: }
6876:
6877: (*(*l_element_precedent).suivant).donnee = s_objet_argument_2;
6878: (*(*l_element_precedent).suivant).suivant = l_element_courant;
6879:
6880: while((*l_element_courant).suivant != NULL)
6881: {
6882: l_element_precedent = l_element_courant;
6883: l_element_courant = (*l_element_courant).suivant;
6884: }
6885:
6886: if (((*l_element_precedent).suivant =
6887: allocation_maillon(s_etat_processus)) == NULL)
6888: {
6889: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6890: return;
6891: }
6892:
6893: if (((*(*l_element_precedent).suivant).donnee =
6894: allocation(s_etat_processus, FCT)) == NULL)
6895: {
6896: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6897: return;
6898: }
6899:
6900: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6901: .donnee).objet)).nombre_arguments = 2;
6902: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6903: .donnee).objet)).fonction = instruction_mod;
6904:
6905: if (((*((struct_fonction *) (*(*(*l_element_precedent)
6906: .suivant).donnee).objet)).nom_fonction =
6907: malloc(4 * sizeof(unsigned char))) == NULL)
6908: {
6909: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6910: return;
6911: }
6912:
6913: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
6914: .suivant).donnee).objet)).nom_fonction, "MOD");
6915:
6916: (*(*l_element_precedent).suivant).suivant = l_element_courant;
6917:
6918: s_objet_argument_2 = NULL;
6919: }
6920:
6921: /*
6922: * Expression / Nom ou valeur numérique
6923: */
6924:
6925: else if ((((*s_objet_argument_1).type == NOM) ||
6926: ((*s_objet_argument_1).type == INT) ||
6927: ((*s_objet_argument_1).type == REL)) &&
6928: ((((*s_objet_argument_2).type == ALG) ||
6929: ((*s_objet_argument_2).type == RPN))))
6930: {
6931: nombre_elements = 0;
6932: l_element_courant = (struct_liste_chainee *)
6933: (*s_objet_argument_2).objet;
6934:
6935: while(l_element_courant != NULL)
6936: {
6937: nombre_elements++;
6938: l_element_courant = (*l_element_courant).suivant;
6939: }
6940:
6941: if (nombre_elements == 2)
6942: {
6943: liberation(s_etat_processus, s_objet_argument_1);
6944: liberation(s_etat_processus, s_objet_argument_2);
6945:
6946: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
6947: return;
6948: }
6949:
6950: if ((s_objet_resultat = copie_objet(s_etat_processus,
6951: s_objet_argument_2, 'N')) == NULL)
6952: {
6953: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6954: return;
6955: }
6956:
6957: l_element_courant = (struct_liste_chainee *)
6958: (*s_objet_resultat).objet;
6959: l_element_precedent = l_element_courant;
6960:
6961: while((*l_element_courant).suivant != NULL)
6962: {
6963: l_element_precedent = l_element_courant;
6964: l_element_courant = (*l_element_courant).suivant;
6965: }
6966:
6967: if (((*l_element_precedent).suivant =
6968: allocation_maillon(s_etat_processus)) == NULL)
6969: {
6970: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6971: return;
6972: }
6973:
6974: (*(*l_element_precedent).suivant).donnee = s_objet_argument_1;
6975: l_element_precedent = (*l_element_precedent).suivant;
6976:
6977: if (((*l_element_precedent).suivant =
6978: allocation_maillon(s_etat_processus)) == NULL)
6979: {
6980: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6981: return;
6982: }
6983:
6984: if (((*(*l_element_precedent).suivant).donnee =
6985: allocation(s_etat_processus, FCT)) == NULL)
6986: {
6987: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
6988: return;
6989: }
6990:
6991: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6992: .donnee).objet)).nombre_arguments = 2;
6993: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
6994: .donnee).objet)).fonction = instruction_mod;
6995:
6996: if (((*((struct_fonction *) (*(*(*l_element_precedent)
6997: .suivant).donnee).objet)).nom_fonction =
6998: malloc(4 * sizeof(unsigned char))) == NULL)
6999: {
7000: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7001: return;
7002: }
7003:
7004: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
7005: .suivant).donnee).objet)).nom_fonction, "MOD");
7006:
7007: (*(*l_element_precedent).suivant).suivant = l_element_courant;
7008:
7009: s_objet_argument_1 = NULL;
7010: }
7011:
7012: /*
7013: * Expression / Expression
7014: */
7015:
7016: else if ((((*s_objet_argument_1).type == ALG) &&
7017: ((*s_objet_argument_2).type == ALG)) ||
7018: (((*s_objet_argument_1).type == RPN) &&
7019: ((*s_objet_argument_2).type == RPN)))
7020: {
7021: nombre_elements = 0;
7022: l_element_courant = (struct_liste_chainee *)
7023: (*s_objet_argument_1).objet;
7024:
7025: while(l_element_courant != NULL)
7026: {
7027: nombre_elements++;
7028: l_element_courant = (*l_element_courant).suivant;
7029: }
7030:
7031: if (nombre_elements == 2)
7032: {
7033: liberation(s_etat_processus, s_objet_argument_1);
7034: liberation(s_etat_processus, s_objet_argument_2);
7035:
7036: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
7037: return;
7038: }
7039:
7040: nombre_elements = 0;
7041: l_element_courant = (struct_liste_chainee *)
7042: (*s_objet_argument_2).objet;
7043:
7044: while(l_element_courant != NULL)
7045: {
7046: nombre_elements++;
7047: l_element_courant = (*l_element_courant).suivant;
7048: }
7049:
7050: if (nombre_elements == 2)
7051: {
7052: liberation(s_etat_processus, s_objet_argument_1);
7053: liberation(s_etat_processus, s_objet_argument_2);
7054:
7055: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
7056: return;
7057: }
7058:
7059: if ((s_copie_argument_1 = copie_objet(s_etat_processus,
7060: s_objet_argument_1, 'N')) == NULL)
7061: {
7062: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7063: return;
7064: }
7065:
7066: if ((s_copie_argument_2 = copie_objet(s_etat_processus,
7067: s_objet_argument_2, 'N')) == NULL)
7068: {
7069: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7070: return;
7071: }
7072:
7073: l_element_courant = (struct_liste_chainee *)
7074: (*s_copie_argument_1).objet;
7075: (*s_copie_argument_1).objet = (void *) (*((struct_liste_chainee *)
7076: (*s_copie_argument_1).objet)).suivant;
7077:
7078: liberation(s_etat_processus, (*l_element_courant).donnee);
7079: free(l_element_courant);
7080:
7081: l_element_courant = (struct_liste_chainee *)
7082: (*s_copie_argument_2).objet;
7083: l_element_precedent = l_element_courant;
7084: s_objet_resultat = s_copie_argument_2;
7085:
7086: while((*l_element_courant).suivant != NULL)
7087: {
7088: l_element_precedent = l_element_courant;
7089: l_element_courant = (*l_element_courant).suivant;
7090: }
7091:
7092: liberation(s_etat_processus, (*l_element_courant).donnee);
7093: free(l_element_courant);
7094:
7095: (*l_element_precedent).suivant = (struct_liste_chainee *)
7096: (*s_copie_argument_1).objet;
7097: free(s_copie_argument_1);
7098:
7099: l_element_courant = (*l_element_precedent).suivant;
7100: while((*l_element_courant).suivant != NULL)
7101: {
7102: l_element_precedent = l_element_courant;
7103: l_element_courant = (*l_element_courant).suivant;
7104: }
7105:
7106: if (((*l_element_precedent).suivant =
7107: allocation_maillon(s_etat_processus)) == NULL)
7108: {
7109: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7110: return;
7111: }
7112:
7113: (*(*l_element_precedent).suivant).suivant = l_element_courant;
7114: l_element_courant = (*l_element_precedent).suivant;
7115:
7116: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
7117: == NULL)
7118: {
7119: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7120: return;
7121: }
7122:
7123: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
7124: .nombre_arguments = 2;
7125: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
7126: .fonction = instruction_mod;
7127:
7128: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
7129: .nom_fonction = malloc(4 * sizeof(unsigned char))) == NULL)
7130: {
7131: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
7132: return;
7133: }
7134:
7135: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
7136: .nom_fonction, "MOD");
7137: }
7138:
7139: /*
7140: --------------------------------------------------------------------------------
7141: Arguments incorrects
7142: --------------------------------------------------------------------------------
7143: */
7144:
7145: else
7146: {
7147: liberation(s_etat_processus, s_objet_argument_1);
7148: liberation(s_etat_processus, s_objet_argument_2);
7149:
7150: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
7151: return;
7152: }
7153:
7154: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
7155: s_objet_resultat) == d_erreur)
7156: {
7157: return;
7158: }
7159:
7160: liberation(s_etat_processus, s_objet_argument_1);
7161: liberation(s_etat_processus, s_objet_argument_2);
7162:
7163: return;
7164: }
7165:
7166: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>