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