![]() ![]() | ![]() |
1.1 bertrand 1: /*
2: ================================================================================
1.16 ! bertrand 3: RPL/2 (R) version 4.0.21
1.15 bertrand 4: Copyright (C) 1989-2011 Dr. BERTRAND Joël
1.1 bertrand 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:
1.11 bertrand 23: #include "rpl-conv.h"
1.1 bertrand 24:
25:
26: /*
27: ================================================================================
28: Fonction 'p->r'
29: ================================================================================
30: Entrées : pointeur sur une structure struct_processus
31: --------------------------------------------------------------------------------
32: Sorties :
33: --------------------------------------------------------------------------------
34: Effets de bord : néant
35: ================================================================================
36: */
37:
38: void
39: instruction_p_vers_r(struct_processus *s_etat_processus)
40: {
41: struct_liste_chainee *l_element_courant;
42: struct_liste_chainee *l_element_precedent;
43:
44: struct_objet *s_copie_argument;
45: struct_objet *s_objet_argument;
46: struct_objet *s_objet_resultat;
47:
48: (*s_etat_processus).erreur_execution = d_ex;
49:
50: if ((*s_etat_processus).affichage_arguments == 'Y')
51: {
52: printf("\n P->R ");
53:
54: if ((*s_etat_processus).langue == 'F')
55: {
56: printf("(coordonnées polaires vers cartésiennes)\n\n");
57: }
58: else
59: {
60: printf("(polar to cartesian coordinates)\n\n");
61: }
62:
63: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
64: printf("-> 1: %s\n\n", d_CPL);
65:
66: printf(" 1: %s, %s\n", d_NOM, d_ALG);
67: printf("-> 1: %s\n\n", d_ALG);
68:
69: printf(" 1: %s\n", d_RPN);
70: printf("-> 1: %s\n", d_RPN);
71:
72: return;
73: }
74: else if ((*s_etat_processus).test_instruction == 'Y')
75: {
76: (*s_etat_processus).nombre_arguments = -1;
77: return;
78: }
79:
80: if (test_cfsf(s_etat_processus, 31) == d_vrai)
81: {
82: if (empilement_pile_last(s_etat_processus, 1) == d_erreur)
83: {
84: return;
85: }
86: }
87:
88: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
89: &s_objet_argument) == d_erreur)
90: {
91: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
92: return;
93: }
94:
95: /*
96: --------------------------------------------------------------------------------
97: Conversion d'un entier ou d'un réel
98: --------------------------------------------------------------------------------
99: */
100:
101: if (((*s_objet_argument).type == INT) ||
102: ((*s_objet_argument).type == REL))
103: {
104: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
105: {
106: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
107: return;
108: }
109:
110: if ((*s_objet_argument).type == INT)
111: {
112: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle
113: = (*((integer8 *) (*s_objet_argument).objet));
114: }
115: else
116: {
117: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle
118: = (*((real8 *) (*s_objet_argument).objet));
119: }
120:
121: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_imaginaire
122: = 0;
123: }
124:
125: /*
126: --------------------------------------------------------------------------------
127: Conversion d'un complexe
128: --------------------------------------------------------------------------------
129: */
130:
131: else if ((*s_objet_argument).type == CPL)
132: {
133: if ((s_objet_resultat = allocation(s_etat_processus, CPL)) == NULL)
134: {
135: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
136: return;
137: }
138:
139: if (test_cfsf(s_etat_processus, 60) == d_faux)
140: {
141: conversion_degres_vers_radians(&((*((struct_complexe16 *)
142: (*s_objet_argument).objet)).partie_imaginaire));
143: }
144:
145: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_reelle =
146: (*((struct_complexe16 *) (*s_objet_argument).objet))
147: .partie_reelle * cos((*((struct_complexe16 *)
148: (*s_objet_argument).objet)).partie_imaginaire);
149: (*((struct_complexe16 *) (*s_objet_resultat).objet)).partie_imaginaire =
150: (*((struct_complexe16 *) (*s_objet_argument).objet))
151: .partie_reelle * sin((*((struct_complexe16 *)
152: (*s_objet_argument).objet)).partie_imaginaire);
153: }
154:
155: /*
156: --------------------------------------------------------------------------------
157: Conversion d'un nom
158: --------------------------------------------------------------------------------
159: */
160:
161: else if ((*s_objet_argument).type == NOM)
162: {
163: if ((s_objet_resultat = allocation(s_etat_processus, ALG)) == NULL)
164: {
165: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
166: return;
167: }
168:
169: if (((*s_objet_resultat).objet =
170: allocation_maillon(s_etat_processus)) == NULL)
171: {
172: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
173: return;
174: }
175:
176: l_element_courant = (*s_objet_resultat).objet;
177:
178: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
179: == NULL)
180: {
181: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
182: return;
183: }
184:
185: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
186: .nombre_arguments = 0;
187: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
188: .fonction = instruction_vers_niveau_superieur;
189:
190: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
191: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
192: {
193: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
194: return;
195: }
196:
197: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
198: .nom_fonction, "<<");
199:
200: if (((*l_element_courant).suivant =
201: allocation_maillon(s_etat_processus)) == NULL)
202: {
203: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
204: return;
205: }
206:
207: l_element_courant = (*l_element_courant).suivant;
208: (*l_element_courant).donnee = s_objet_argument;
209:
210: if (((*l_element_courant).suivant =
211: allocation_maillon(s_etat_processus)) == NULL)
212: {
213: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
214: return;
215: }
216:
217: l_element_courant = (*l_element_courant).suivant;
218:
219: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
220: == NULL)
221: {
222: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
223: return;
224: }
225:
226: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
227: .nombre_arguments = 1;
228: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
229: .fonction = instruction_p_vers_r;
230:
231: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
232: .nom_fonction = malloc(5 * sizeof(unsigned char))) == NULL)
233: {
234: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
235: return;
236: }
237:
238: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
239: .nom_fonction, "P->R");
240:
241: if (((*l_element_courant).suivant =
242: allocation_maillon(s_etat_processus)) == NULL)
243: {
244: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
245: return;
246: }
247:
248: l_element_courant = (*l_element_courant).suivant;
249:
250: if (((*l_element_courant).donnee = allocation(s_etat_processus, FCT))
251: == NULL)
252: {
253: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
254: return;
255: }
256:
257: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
258: .nombre_arguments = 0;
259: (*((struct_fonction *) (*(*l_element_courant).donnee).objet))
260: .fonction = instruction_vers_niveau_inferieur;
261:
262: if (((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
263: .nom_fonction = malloc(3 * sizeof(unsigned char))) == NULL)
264: {
265: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
266: return;
267: }
268:
269: strcpy((*((struct_fonction *) (*(*l_element_courant).donnee).objet))
270: .nom_fonction, ">>");
271:
272: (*l_element_courant).suivant = NULL;
273: s_objet_argument = NULL;
274: }
275:
276: /*
277: --------------------------------------------------------------------------------
278: Conversion d'une expression
279: --------------------------------------------------------------------------------
280: */
281:
282: else if (((*s_objet_argument).type == ALG) ||
283: ((*s_objet_argument).type == RPN))
284: {
285: if ((s_copie_argument = copie_objet(s_etat_processus, s_objet_argument,
286: 'N')) == NULL)
287: {
288: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
289: return;
290: }
291:
292: l_element_courant = (struct_liste_chainee *)
293: (*s_copie_argument).objet;
294: l_element_precedent = l_element_courant;
295:
296: while((*l_element_courant).suivant != NULL)
297: {
298: l_element_precedent = l_element_courant;
299: l_element_courant = (*l_element_courant).suivant;
300: }
301:
302: if (((*l_element_precedent).suivant =
303: allocation_maillon(s_etat_processus)) == NULL)
304: {
305: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
306: return;
307: }
308:
309: if (((*(*l_element_precedent).suivant).donnee =
310: allocation(s_etat_processus, FCT)) == NULL)
311: {
312: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
313: return;
314: }
315:
316: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
317: .donnee).objet)).nombre_arguments = 1;
318: (*((struct_fonction *) (*(*(*l_element_precedent).suivant)
319: .donnee).objet)).fonction = instruction_p_vers_r;
320:
321: if (((*((struct_fonction *) (*(*(*l_element_precedent)
322: .suivant).donnee).objet)).nom_fonction =
323: malloc(5 * sizeof(unsigned char))) == NULL)
324: {
325: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
326: return;
327: }
328:
329: strcpy((*((struct_fonction *) (*(*(*l_element_precedent)
330: .suivant).donnee).objet)).nom_fonction, "P->R");
331:
332: (*(*l_element_precedent).suivant).suivant = l_element_courant;
333:
334: s_objet_resultat = s_copie_argument;
335: }
336:
337: /*
338: --------------------------------------------------------------------------------
339: Réalisation impossible de la fonction P->R
340: --------------------------------------------------------------------------------
341: */
342:
343: else
344: {
345: liberation(s_etat_processus, s_objet_argument);
346:
347: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
348: return;
349: }
350:
351: liberation(s_etat_processus, s_objet_argument);
352:
353: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
354: s_objet_resultat) == d_erreur)
355: {
356: return;
357: }
358:
359: return;
360: }
361:
362:
363: /*
364: ================================================================================
365: Fonction 'put'
366: ================================================================================
367: Entrées : pointeur sur une structure struct_processus
368: --------------------------------------------------------------------------------
369: Sorties :
370: --------------------------------------------------------------------------------
371: Effets de bord : néant
372: ================================================================================
373: */
374:
375: void
376: instruction_put(struct_processus *s_etat_processus)
377: {
378: logical1 variable_partagee;
379:
380: struct_liste_chainee *l_element_courant;
381:
382: struct_objet *s_copie_3;
383: struct_objet *s_copie_4;
384: struct_objet *s_objet_1;
385: struct_objet *s_objet_2;
386: struct_objet *s_objet_3;
387: struct_objet *s_objet_4;
388: struct_objet *s_objet_element;
389:
390: unsigned long i;
391: unsigned long indice_i;
392: unsigned long indice_j;
393: unsigned long j;
394: unsigned long nombre_dimensions;
395:
396: void *tampon;
397:
398: (*s_etat_processus).erreur_execution = d_ex;
399:
400: if ((*s_etat_processus).affichage_arguments == 'Y')
401: {
402: printf("\n PUT ");
403:
404: if ((*s_etat_processus).langue == 'F')
405: {
406: printf("(change un élément)\n\n");
407: }
408: else
409: {
410: printf("(change element)\n\n");
411: }
412:
413: printf(" 3: %s, %s, %s\n", d_VIN, d_VRL, d_VCX);
414: printf(" 2: %s\n", d_LST);
415: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
416: printf("-> 1: %s, %s, %s\n\n", d_VIN, d_VRL, d_VCX);
417:
418: printf(" 3: %s, %s, %s\n", d_MIN, d_MRL, d_MCX);
419: printf(" 2: %s\n", d_LST);
420: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
421: printf("-> 1: %s, %s, %s\n\n", d_MIN, d_MRL, d_MCX);
422:
423: printf(" 3: %s\n", d_LST);
424: printf(" 2: %s\n", d_INT);
425: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
426: " %s, %s, %s, %s, %s,\n"
427: " %s, %s, %s, %s, %s,\n"
428: " %s, %s, %s, %s,\n"
429: " %s, %s\n",
430: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
431: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
432: d_SQL, d_SLB, d_PRC, d_MTX);
433: printf("-> 1: %s\n\n", d_LST);
434:
435: printf(" 3: %s\n", d_TAB);
436: printf(" 2: %s\n", d_LST);
437: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
438: " %s, %s, %s, %s, %s,\n"
439: " %s, %s, %s, %s, %s,\n"
440: " %s, %s, %s, %s,\n"
441: " %s, %s\n",
442: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
443: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
444: d_SQL, d_SLB, d_PRC, d_MTX);
445: printf("-> 1: %s\n\n", d_TAB);
446:
447: printf(" 3: %s\n", d_NOM);
448: printf(" 2: %s, %s\n", d_LST, d_INT);
449: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
450: " %s, %s, %s, %s, %s,\n"
451: " %s, %s, %s, %s, %s,\n"
452: " %s, %s, %s, %s,\n"
453: " %s, %s\n",
454: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
455: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
456: d_SQL, d_SLB, d_PRC, d_MTX);
457:
458: return;
459: }
460: else if ((*s_etat_processus).test_instruction == 'Y')
461: {
462: (*s_etat_processus).nombre_arguments = -1;
463: return;
464: }
465:
466: if (test_cfsf(s_etat_processus, 31) == d_vrai)
467: {
468: if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
469: {
470: return;
471: }
472: }
473:
474: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
475: &s_objet_1) == d_erreur)
476: {
477: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
478: return;
479: }
480:
481: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
482: &s_objet_2) == d_erreur)
483: {
484: liberation(s_etat_processus, s_objet_1);
485:
486: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
487: return;
488: }
489:
490: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
491: &s_objet_3) == d_erreur)
492: {
493: liberation(s_etat_processus, s_objet_1);
494: liberation(s_etat_processus, s_objet_2);
495:
496: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
497: return;
498: }
499:
500: /*
501: --------------------------------------------------------------------------------
502: Traitement des éléments des vecteurs
503: --------------------------------------------------------------------------------
504: */
505:
506: if (((*s_objet_3).type == VIN) ||
507: ((*s_objet_3).type == VRL) ||
508: ((*s_objet_3).type == VCX))
509: {
510: if ((*s_objet_2).type != LST)
511: {
512: liberation(s_etat_processus, s_objet_1);
513: liberation(s_etat_processus, s_objet_2);
514: liberation(s_etat_processus, s_objet_3);
515:
516: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
517: return;
518: }
519:
520: l_element_courant = (*s_objet_2).objet;
521: nombre_dimensions = 0;
522:
523: while(l_element_courant != NULL)
524: {
525: nombre_dimensions++;
526: l_element_courant = (*l_element_courant).suivant;
527: }
528:
529: if (nombre_dimensions != 1)
530: {
531: liberation(s_etat_processus, s_objet_1);
532: liberation(s_etat_processus, s_objet_2);
533: liberation(s_etat_processus, s_objet_3);
534:
535: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
536: return;
537: }
538:
539: l_element_courant = (*s_objet_2).objet;
540:
541: if ((*(*l_element_courant).donnee).type != INT)
542: {
543: liberation(s_etat_processus, s_objet_1);
544: liberation(s_etat_processus, s_objet_2);
545: liberation(s_etat_processus, s_objet_3);
546:
547: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
548: return;
549: }
550:
551: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
552: {
553: liberation(s_etat_processus, s_objet_1);
554: liberation(s_etat_processus, s_objet_2);
555: liberation(s_etat_processus, s_objet_3);
556:
557: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
558: return;
559: }
560: else if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) >
561: (integer8) (*((struct_vecteur *) (*s_objet_3).objet)).taille)
562: {
563: liberation(s_etat_processus, s_objet_1);
564: liberation(s_etat_processus, s_objet_2);
565: liberation(s_etat_processus, s_objet_3);
566:
567: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
568: return;
569: }
570:
571: indice_i = (*((integer8 *) (*(*l_element_courant).donnee).objet));
572:
573: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'Q')) == NULL)
574: {
575: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
576: return;
577: }
578:
579: liberation(s_etat_processus, s_objet_3);
580: s_objet_3 = s_copie_3;
581:
582: if ((*s_objet_3).type == VIN)
583: {
584: /*
585: * Vecteur d'entiers
586: */
587:
588: if ((*s_objet_1).type == INT)
589: {
590: /*
591: * Aucune conversion de type
592: */
593:
594: ((integer8 *) (*((struct_vecteur *) (*s_objet_3).objet))
595: .tableau)[indice_i - 1] = (*((integer8 *)
596: (*s_objet_1).objet));
597: }
598: else if ((*s_objet_1).type == REL)
599: {
600: /*
601: * Conversion du vecteur en vecteur réel
602: */
603:
604: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
605: (*s_objet_3).objet)).tableau);
606:
607: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'R';
608: (*s_objet_3).type = VRL;
609:
610: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
611: = malloc((*((struct_vecteur *)
612: (*s_objet_3).objet)).taille * sizeof(real8)))
613: == NULL)
614: {
615: (*s_etat_processus).erreur_systeme =
616: d_es_allocation_memoire;
617: return;
618: }
619:
620: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
621: .taille; i++)
622: {
623: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
624: .tableau)[i] = (real8) (((integer8 *) tampon)[i]);
625: }
626:
627: free((integer8 *) tampon);
628:
629: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
630: .tableau)[indice_i - 1] = (*((real8 *)
631: (*s_objet_1).objet));
632: }
633: else if ((*s_objet_1).type == CPL)
634: {
635: /*
636: * Conversion du vecteur en vecteur complexe
637: */
638:
639: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
640: (*s_objet_3).objet)).tableau);
641:
642: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'C';
643: (*s_objet_3).type = VCX;
644:
645: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
646: = malloc((*((struct_vecteur *)
647: (*s_objet_3).objet)).taille *
648: sizeof(struct_complexe16))) == NULL)
649: {
650: (*s_etat_processus).erreur_systeme =
651: d_es_allocation_memoire;
652: return;
653: }
654:
655: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
656: .taille; i++)
657: {
658: ((struct_complexe16 *) (*((struct_vecteur *)
659: (*s_objet_3).objet)).tableau)[i].partie_reelle =
660: (real8) (((integer8 *) tampon)[i]);
661: ((struct_complexe16 *) (*((struct_vecteur *)
662: (*s_objet_3).objet)).tableau)[i]
663: .partie_imaginaire = (real8) 0;
664: }
665:
666: free((integer8 *) tampon);
667:
668: ((struct_complexe16 *) (*((struct_vecteur *)
669: (*s_objet_3).objet)).tableau)[indice_i - 1]
670: .partie_reelle = (*((struct_complexe16 *)
671: (*s_objet_1).objet)).partie_reelle;
672: ((struct_complexe16 *) (*((struct_vecteur *)
673: (*s_objet_3).objet)).tableau)[indice_i - 1]
674: .partie_imaginaire = (*((struct_complexe16 *)
675: (*s_objet_1).objet)).partie_imaginaire;
676: }
677: else
678: {
679: liberation(s_etat_processus, s_objet_1);
680: liberation(s_etat_processus, s_objet_2);
681: liberation(s_etat_processus, s_objet_3);
682:
683: (*s_etat_processus).erreur_execution =
684: d_ex_erreur_type_argument;
685: return;
686: }
687: }
688: else if ((*s_objet_3).type == VRL)
689: {
690: /*
691: * Vecteur de réels
692: */
693:
694: if ((*s_objet_1).type == INT)
695: {
696: /*
697: * Conversion de l'élément à insérer en réel
698: */
699:
700: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
701: .tableau)[indice_i - 1] = (real8) (*((integer8 *)
702: (*s_objet_1).objet));
703: }
704: else if ((*s_objet_1).type == REL)
705: {
706: /*
707: * Aucune conversion de type
708: */
709:
710: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
711: .tableau)[indice_i - 1] = (*((real8 *)
712: (*s_objet_1).objet));
713: }
714: else if ((*s_objet_1).type == CPL)
715: {
716: /*
717: * Conversion du vecteur en vecteur complexe
718: */
719:
720: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
721: (*s_objet_3).objet)).tableau);
722:
723: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'C';
724: (*s_objet_3).type = VCX;
725:
726: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
727: = malloc((*((struct_vecteur *)
728: (*s_objet_3).objet)).taille *
729: sizeof(struct_complexe16))) == NULL)
730: {
731: (*s_etat_processus).erreur_systeme =
732: d_es_allocation_memoire;
733: return;
734: }
735:
736: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
737: .taille; i++)
738: {
739: ((struct_complexe16 *) (*((struct_vecteur *)
740: (*s_objet_3).objet)).tableau)[i].partie_reelle =
741: ((real8 *) tampon)[i];
742: ((struct_complexe16 *) (*((struct_vecteur *)
743: (*s_objet_3).objet)).tableau)[i]
744: .partie_imaginaire = (real8) 0;
745: }
746:
747: free((real8 *) tampon);
748:
749: ((struct_complexe16 *) (*((struct_vecteur *)
750: (*s_objet_3).objet)).tableau)[indice_i - 1]
751: .partie_reelle = (*((struct_complexe16 *)
752: (*s_objet_1).objet)).partie_reelle;
753: ((struct_complexe16 *) (*((struct_vecteur *)
754: (*s_objet_3).objet)).tableau)[indice_i - 1]
755: .partie_imaginaire = (*((struct_complexe16 *)
756: (*s_objet_1).objet)).partie_imaginaire;
757: }
758: else
759: {
760: liberation(s_etat_processus, s_objet_1);
761: liberation(s_etat_processus, s_objet_2);
762: liberation(s_etat_processus, s_objet_3);
763:
764: (*s_etat_processus).erreur_execution =
765: d_ex_erreur_type_argument;
766: return;
767: }
768: }
769: else
770: {
771: /*
772: * Vecteur de complexes
773: */
774:
775: if ((*s_objet_1).type == INT)
776: {
777: /*
778: * Conversion de l'élément à insérer en complexe
779: */
780:
781: ((struct_complexe16 *) (*((struct_vecteur *)
782: (*s_objet_3).objet)).tableau)[indice_i - 1]
783: .partie_reelle = (real8) (*((integer8 *)
784: (*s_objet_1).objet));
785: ((struct_complexe16 *) (*((struct_vecteur *)
786: (*s_objet_3).objet)).tableau)[indice_i - 1]
787: .partie_imaginaire = (real8) 0;
788: }
789: else if ((*s_objet_1).type == REL)
790: {
791: /*
792: * Conversion de l'élément à insérer en complexe
793: */
794:
795: ((struct_complexe16 *) (*((struct_vecteur *)
796: (*s_objet_3).objet)).tableau)[indice_i - 1]
797: .partie_reelle = (*((real8 *) (*s_objet_1).objet));
798: ((struct_complexe16 *) (*((struct_vecteur *)
799: (*s_objet_3).objet)).tableau)[indice_i - 1]
800: .partie_imaginaire = (real8) 0;
801: }
802: else if ((*s_objet_1).type == CPL)
803: {
804: /*
805: * Aucune conversion de type
806: */
807:
808: ((struct_complexe16 *) (*((struct_vecteur *)
809: (*s_objet_3).objet)).tableau)[indice_i - 1]
810: .partie_reelle = (*((struct_complexe16 *)
811: (*s_objet_1).objet)).partie_reelle;
812: ((struct_complexe16 *) (*((struct_vecteur *)
813: (*s_objet_3).objet)).tableau)[indice_i - 1]
814: .partie_imaginaire = (*((struct_complexe16 *)
815: (*s_objet_1).objet)).partie_imaginaire;
816: }
817: else
818: {
819: liberation(s_etat_processus, s_objet_1);
820: liberation(s_etat_processus, s_objet_2);
821: liberation(s_etat_processus, s_objet_3);
822:
823: (*s_etat_processus).erreur_execution =
824: d_ex_erreur_type_argument;
825: return;
826: }
827: }
828:
829: liberation(s_etat_processus, s_objet_1);
830: liberation(s_etat_processus, s_objet_2);
831:
832: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
833: s_objet_3) == d_erreur)
834: {
835: return;
836: }
837: }
838:
839: /*
840: --------------------------------------------------------------------------------
841: Traitement des éléments des matrices
842: --------------------------------------------------------------------------------
843: */
844:
845: else if (((*s_objet_3).type == MIN) ||
846: ((*s_objet_3).type == MRL) ||
847: ((*s_objet_3).type == MCX))
848: {
849: if ((*s_objet_2).type != LST)
850: {
851: liberation(s_etat_processus, s_objet_1);
852: liberation(s_etat_processus, s_objet_2);
853: liberation(s_etat_processus, s_objet_3);
854:
855: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
856: return;
857: }
858:
859: l_element_courant = (*s_objet_2).objet;
860: nombre_dimensions = 0;
861:
862: while(l_element_courant != NULL)
863: {
864: nombre_dimensions++;
865: l_element_courant = (*l_element_courant).suivant;
866: }
867:
868: if (nombre_dimensions != 2)
869: {
870: liberation(s_etat_processus, s_objet_1);
871: liberation(s_etat_processus, s_objet_2);
872: liberation(s_etat_processus, s_objet_3);
873:
874: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
875: return;
876: }
877:
878: l_element_courant = (*s_objet_2).objet;
879:
880: indice_i = 0;
881: indice_j = 0;
882:
883: while(l_element_courant != NULL)
884: {
885: if ((*(*l_element_courant).donnee).type != INT)
886: {
887: liberation(s_etat_processus, s_objet_1);
888: liberation(s_etat_processus, s_objet_2);
889: liberation(s_etat_processus, s_objet_3);
890:
891: (*s_etat_processus).erreur_execution =
892: d_ex_erreur_type_argument;
893: return;
894: }
895:
896: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
897: {
898: liberation(s_etat_processus, s_objet_1);
899: liberation(s_etat_processus, s_objet_2);
900: liberation(s_etat_processus, s_objet_3);
901:
902: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
903: return;
904: }
905:
906: if (indice_i == 0)
907: {
908: indice_i = (*((integer8 *)
909: (*(*l_element_courant).donnee).objet));
910: }
911: else
912: {
913: indice_j = (*((integer8 *)
914: (*(*l_element_courant).donnee).objet));
915: }
916:
917: l_element_courant = (*l_element_courant).suivant;
918: }
919:
920: if ((indice_i > (*((struct_matrice *) (*s_objet_3).objet))
921: .nombre_lignes) || (indice_j > (*((struct_matrice *)
922: (*s_objet_3).objet)).nombre_colonnes))
923: {
924: liberation(s_etat_processus, s_objet_1);
925: liberation(s_etat_processus, s_objet_2);
926: liberation(s_etat_processus, s_objet_3);
927:
928: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
929: return;
930: }
931:
932: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'Q')) == NULL)
933: {
934: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
935: return;
936: }
937:
938: liberation(s_etat_processus, s_objet_3);
939: s_objet_3 = s_copie_3;
940:
941: if ((*s_objet_3).type == MIN)
942: {
943: /*
944: * Matrice d'entiers
945: */
946:
947: if ((*s_objet_1).type == INT)
948: {
949: /*
950: * Aucune conversion de type
951: */
952:
953: ((integer8 **) (*((struct_matrice *) (*s_objet_3).objet))
954: .tableau)[indice_i - 1][indice_j - 1] =
955: (*((integer8 *) (*s_objet_1).objet));
956: }
957: else if ((*s_objet_1).type == REL)
958: {
959: /*
960: * Conversion de la matrice en matrice réelle
961: */
962:
963: tampon = (void *) ((integer8 **) (*((struct_matrice *)
964: (*s_objet_3).objet)).tableau);
965:
966: (*((struct_matrice *) (*s_objet_3).objet)).type = 'R';
967: (*s_objet_3).type = MRL;
968:
969: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
970: = malloc((*((struct_matrice *)
971: (*s_objet_3).objet)).nombre_lignes * sizeof(real8 *)))
972: == NULL)
973: {
974: (*s_etat_processus).erreur_systeme =
975: d_es_allocation_memoire;
976: return;
977: }
978:
979: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
980: .nombre_lignes; i++)
981: {
982: if ((((real8 **) (*((struct_matrice *)
983: (*s_objet_3).objet)).tableau)[i]
984: = malloc((*((struct_matrice *)
985: (*s_objet_3).objet)).nombre_colonnes *
986: sizeof(real8))) == NULL)
987: {
988: (*s_etat_processus).erreur_systeme =
989: d_es_allocation_memoire;
990: return;
991: }
992:
993: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
994: .nombre_colonnes; j++)
995: {
996: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
997: .tableau)[i][j] = (real8) (((integer8 **)
998: tampon)[i][j]);
999: }
1000:
1001: free(((integer8 **) tampon)[i]);
1002: }
1003:
1004: free((integer8 **) tampon);
1005:
1006: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
1007: .tableau)[indice_i - 1][indice_j - 1] = (*((real8 *)
1008: (*s_objet_1).objet));
1009: }
1010: else if ((*s_objet_1).type == CPL)
1011: {
1012: /*
1013: * Conversion de la matrice en matrice complexe
1014: */
1015:
1016: tampon = (void *) ((integer8 **) (*((struct_matrice *)
1017: (*s_objet_3).objet)).tableau);
1018:
1019: (*((struct_matrice *) (*s_objet_3).objet)).type = 'C';
1020: (*s_objet_3).type = MCX;
1021:
1022: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
1023: = malloc((*((struct_matrice *)
1024: (*s_objet_3).objet)).nombre_lignes *
1025: sizeof(struct_complexe16 *))) == NULL)
1026: {
1027: (*s_etat_processus).erreur_systeme =
1028: d_es_allocation_memoire;
1029: return;
1030: }
1031:
1032: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
1033: .nombre_lignes; i++)
1034: {
1035: if ((((struct_complexe16 **) (*((struct_matrice *)
1036: (*s_objet_3).objet)).tableau)[i]
1037: = malloc((*((struct_matrice *)
1038: (*s_objet_3).objet)).nombre_colonnes *
1039: sizeof(struct_complexe16))) == NULL)
1040: {
1041: (*s_etat_processus).erreur_systeme =
1042: d_es_allocation_memoire;
1043: return;
1044: }
1045:
1046: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
1047: .nombre_colonnes; j++)
1048: {
1049: ((struct_complexe16 **) (*((struct_matrice *)
1050: (*s_objet_3).objet)).tableau)[i][j]
1051: .partie_reelle = (real8) (((integer8 **)
1052: tampon)[i][j]);
1053: ((struct_complexe16 **) (*((struct_matrice *)
1054: (*s_objet_3).objet)).tableau)[i][j]
1055: .partie_imaginaire = (real8) 0;
1056: }
1057:
1058: free(((integer8 **) tampon)[i]);
1059: }
1060:
1061: free((integer8 **) tampon);
1062:
1063: ((struct_complexe16 **) (*((struct_matrice *)
1064: (*s_objet_3).objet)).tableau)[indice_i - 1]
1065: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
1066: (*s_objet_1).objet)).partie_reelle;
1067: ((struct_complexe16 **) (*((struct_matrice *)
1068: (*s_objet_3).objet)).tableau)[indice_i - 1]
1069: [indice_j - 1].partie_imaginaire =
1070: (*((struct_complexe16 *)
1071: (*s_objet_1).objet)).partie_imaginaire;
1072: }
1073: else
1074: {
1075: liberation(s_etat_processus, s_objet_1);
1076: liberation(s_etat_processus, s_objet_2);
1077: liberation(s_etat_processus, s_objet_3);
1078:
1079: (*s_etat_processus).erreur_execution =
1080: d_ex_erreur_type_argument;
1081: return;
1082: }
1083: }
1084: else if ((*s_objet_3).type == MRL)
1085: {
1086: /*
1087: * Matrice de réels
1088: */
1089:
1090: if ((*s_objet_1).type == INT)
1091: {
1092: /*
1093: * Conversion de l'élément à insérer en réel
1094: */
1095:
1096: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
1097: .tableau)[indice_i - 1][indice_j - 1] =
1098: (real8) (*((integer8 *) (*s_objet_1).objet));
1099: }
1100: else if ((*s_objet_1).type == REL)
1101: {
1102: /*
1103: * Aucune conversion de type
1104: */
1105:
1106: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
1107: .tableau)[indice_i - 1][indice_j - 1] = (*((real8 *)
1108: (*s_objet_1).objet));
1109: }
1110: else if ((*s_objet_1).type == CPL)
1111: {
1112: /*
1113: * Conversion de la matrice en matrice complexe
1114: */
1115:
1116: tampon = (void *) ((real8 **) (*((struct_matrice *)
1117: (*s_objet_3).objet)).tableau);
1118:
1119: (*((struct_matrice *) (*s_objet_3).objet)).type = 'C';
1120: (*s_objet_3).type = MCX;
1121:
1122: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
1123: = malloc((*((struct_matrice *)
1124: (*s_objet_3).objet)).nombre_lignes *
1125: sizeof(struct_complexe16 *))) == NULL)
1126: {
1127: (*s_etat_processus).erreur_systeme =
1128: d_es_allocation_memoire;
1129: return;
1130: }
1131:
1132: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
1133: .nombre_lignes; i++)
1134: {
1135: if ((((struct_complexe16 **) (*((struct_matrice *)
1136: (*s_objet_3).objet)).tableau)[i]
1137: = malloc((*((struct_matrice *)
1138: (*s_objet_3).objet)).nombre_colonnes *
1139: sizeof(struct_complexe16))) == NULL)
1140: {
1141: (*s_etat_processus).erreur_systeme =
1142: d_es_allocation_memoire;
1143: return;
1144: }
1145:
1146: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
1147: .nombre_colonnes; j++)
1148: {
1149: ((struct_complexe16 **) (*((struct_matrice *)
1150: (*s_objet_3).objet)).tableau)[i][j]
1151: .partie_reelle = (((real8 **)
1152: tampon)[i][j]);
1153: ((struct_complexe16 **) (*((struct_matrice *)
1154: (*s_objet_3).objet)).tableau)[i][j]
1155: .partie_imaginaire = (real8) 0;
1156: }
1157:
1158: free(((integer8 **) tampon)[i]);
1159: }
1160:
1161: free((integer8 **) tampon);
1162:
1163: ((struct_complexe16 **) (*((struct_matrice *)
1164: (*s_objet_3).objet)).tableau)[indice_i - 1]
1165: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
1166: (*s_objet_1).objet)).partie_reelle;
1167: ((struct_complexe16 **) (*((struct_matrice *)
1168: (*s_objet_3).objet)).tableau)[indice_i - 1]
1169: [indice_j - 1].partie_imaginaire =
1170: (*((struct_complexe16 *)
1171: (*s_objet_1).objet)).partie_imaginaire;
1172: }
1173: else
1174: {
1175: liberation(s_etat_processus, s_objet_1);
1176: liberation(s_etat_processus, s_objet_2);
1177: liberation(s_etat_processus, s_objet_3);
1178:
1179: (*s_etat_processus).erreur_execution =
1180: d_ex_erreur_type_argument;
1181: return;
1182: }
1183: }
1184: else
1185: {
1186: /*
1187: * Matrice de complexes
1188: */
1189:
1190: if ((*s_objet_1).type == INT)
1191: {
1192: /*
1193: * Conversion de l'élément à insérer en complexe
1194: */
1195:
1196: ((struct_complexe16 **) (*((struct_matrice *)
1197: (*s_objet_3).objet)).tableau)[indice_i - 1]
1198: [indice_j - 1].partie_reelle = (real8) (*((integer8 *)
1199: (*s_objet_1).objet));
1200: ((struct_complexe16 **) (*((struct_matrice *)
1201: (*s_objet_3).objet)).tableau)[indice_i - 1]
1202: [indice_j - 1].partie_imaginaire = (real8) 0;
1203: }
1204: else if ((*s_objet_1).type == REL)
1205: {
1206: /*
1207: * Conversion de l'élément à insérer en complexe
1208: */
1209:
1210: ((struct_complexe16 **) (*((struct_matrice *)
1211: (*s_objet_3).objet)).tableau)[indice_i - 1]
1212: [indice_j - 1].partie_reelle =
1213: (*((real8 *) (*s_objet_1).objet));
1214: ((struct_complexe16 **) (*((struct_matrice *)
1215: (*s_objet_3).objet)).tableau)[indice_i - 1]
1216: [indice_j - 1].partie_imaginaire = (real8) 0;
1217: }
1218: else if ((*s_objet_1).type == CPL)
1219: {
1220: /*
1221: * Aucune conversion de type
1222: */
1223:
1224: ((struct_complexe16 **) (*((struct_matrice *)
1225: (*s_objet_3).objet)).tableau)[indice_i - 1]
1226: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
1227: (*s_objet_1).objet)).partie_reelle;
1228: ((struct_complexe16 **) (*((struct_matrice *)
1229: (*s_objet_3).objet)).tableau)[indice_i - 1]
1230: [indice_j - 1].partie_imaginaire =
1231: (*((struct_complexe16 *)
1232: (*s_objet_1).objet)).partie_imaginaire;
1233: }
1234: else
1235: {
1236: liberation(s_etat_processus, s_objet_1);
1237: liberation(s_etat_processus, s_objet_2);
1238: liberation(s_etat_processus, s_objet_3);
1239:
1240: (*s_etat_processus).erreur_execution =
1241: d_ex_erreur_type_argument;
1242: return;
1243: }
1244: }
1245:
1246: liberation(s_etat_processus, s_objet_1);
1247: liberation(s_etat_processus, s_objet_2);
1248:
1249: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
1250: s_objet_3) == d_erreur)
1251: {
1252: return;
1253: }
1254: }
1255:
1256: /*
1257: --------------------------------------------------------------------------------
1258: Traitement des éléments des listes
1259: --------------------------------------------------------------------------------
1260: */
1261:
1262: else if ((*s_objet_3).type == LST)
1263: {
1264: if ((*s_objet_2).type != INT)
1265: {
1266: liberation(s_etat_processus, s_objet_1);
1267: liberation(s_etat_processus, s_objet_2);
1268: liberation(s_etat_processus, s_objet_3);
1269:
1270: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
1271: return;
1272: }
1273:
1274: indice_i = (*((integer8 *) (*s_objet_2).objet));
1275: indice_j = 1;
1276:
1277: if ((*s_objet_3).nombre_occurrences > 1)
1278: {
1279: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'N'))
1280: == NULL)
1281: {
1282: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1283: return;
1284: }
1285:
1286: liberation(s_etat_processus, s_objet_3);
1287: s_objet_3 = s_copie_3;
1288: }
1289:
1290: l_element_courant = (*s_objet_3).objet;
1291:
1292: while((l_element_courant != NULL) && (indice_j != indice_i))
1293: {
1294: l_element_courant = (*l_element_courant).suivant;
1295: indice_j++;
1296: }
1297:
1298: if (l_element_courant != NULL)
1299: {
1300: liberation(s_etat_processus, (*l_element_courant).donnee);
1301: (*l_element_courant).donnee = s_objet_1;
1302: }
1303: else
1304: {
1305: liberation(s_etat_processus, s_objet_1);
1306: liberation(s_etat_processus, s_objet_2);
1307: liberation(s_etat_processus, s_objet_3);
1308:
1309: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
1310: return;
1311: }
1312:
1313: liberation(s_etat_processus, s_objet_2);
1314:
1315: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
1316: s_objet_3) == d_erreur)
1317: {
1318: return;
1319: }
1320: }
1321:
1322: /*
1323: --------------------------------------------------------------------------------
1324: Traitement des éléments des tables
1325: --------------------------------------------------------------------------------
1326: */
1327:
1328: else if ((*s_objet_3).type == TBL)
1329: {
1330: if ((*s_objet_2).type != LST)
1331: {
1332: liberation(s_etat_processus, s_objet_1);
1333: liberation(s_etat_processus, s_objet_2);
1334: liberation(s_etat_processus, s_objet_3);
1335:
1336: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
1337: return;
1338: }
1339:
1340: if ((*s_objet_3).nombre_occurrences > 1)
1341: {
1342: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'N'))
1343: == NULL)
1344: {
1345: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1346: return;
1347: }
1348:
1349: liberation(s_etat_processus, s_objet_3);
1350: s_objet_3 = s_copie_3;
1351: }
1352:
1353: s_objet_element = s_objet_3;
1354: l_element_courant = (*s_objet_2).objet;
1355: indice_i = 0;
1356:
1357: while(l_element_courant != NULL)
1358: {
1359: if ((*(*l_element_courant).donnee).type != INT)
1360: {
1361: liberation(s_etat_processus, s_objet_1);
1362: liberation(s_etat_processus, s_objet_2);
1363: liberation(s_etat_processus, s_objet_3);
1364:
1365: (*s_etat_processus).erreur_execution =
1366: d_ex_erreur_type_argument;
1367: return;
1368: }
1369:
1370: if ((*s_objet_element).type != TBL)
1371: {
1372: liberation(s_etat_processus, s_objet_1);
1373: liberation(s_etat_processus, s_objet_2);
1374: liberation(s_etat_processus, s_objet_3);
1375:
1376: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
1377: return;
1378: }
1379:
1380: indice_i = (*((integer8 *) (*(*l_element_courant).donnee).objet));
1381:
1382: if ((indice_i < 1) || (indice_i > (*((struct_tableau *)
1383: (*s_objet_element).objet)).nombre_elements))
1384: {
1385: liberation(s_etat_processus, s_objet_1);
1386: liberation(s_etat_processus, s_objet_2);
1387: liberation(s_etat_processus, s_objet_3);
1388:
1389: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
1390: return;
1391: }
1392:
1393: if ((*l_element_courant).suivant != NULL)
1394: {
1395: s_objet_element = (*((struct_tableau *) (*s_objet_element)
1396: .objet)).elements[indice_i - 1];
1397: }
1398:
1399: l_element_courant = (*l_element_courant).suivant;
1400: }
1401:
1402: liberation(s_etat_processus, (*((struct_tableau *)
1403: (*s_objet_element).objet)).elements[indice_i - 1]);
1404: (*((struct_tableau *) (*s_objet_element).objet)).elements[indice_i - 1]
1405: = s_objet_1;
1406:
1407: liberation(s_etat_processus, s_objet_2);
1408:
1409: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
1410: s_objet_3) == d_erreur)
1411: {
1412: return;
1413: }
1414: }
1415:
1416: /*
1417: --------------------------------------------------------------------------------
1418: Traitement des noms
1419: --------------------------------------------------------------------------------
1420: */
1421:
1422: else if ((*s_objet_3).type == NOM)
1423: {
1424: variable_partagee = d_faux;
1425:
1426: if (recherche_variable(s_etat_processus, (*((struct_nom *)
1427: (*s_objet_3).objet)).nom) == d_faux)
1428: {
1429: (*s_etat_processus).erreur_systeme = d_es;
1430: (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
1431:
1432: liberation(s_etat_processus, s_objet_1);
1433: liberation(s_etat_processus, s_objet_2);
1434: liberation(s_etat_processus, s_objet_3);
1435:
1436: return;
1437: }
1438:
1439: if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
1440: .position_variable_courante].variable_verrouillee == d_vrai)
1441: {
1442: (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
1443:
1444: liberation(s_etat_processus, s_objet_1);
1445: liberation(s_etat_processus, s_objet_2);
1446: liberation(s_etat_processus, s_objet_3);
1447:
1448: return;
1449: }
1450:
1451: s_objet_4 = (*s_etat_processus).s_liste_variables
1452: [(*s_etat_processus).position_variable_courante].objet;
1453:
1454: if (s_objet_4 == NULL)
1455: {
1456: if (pthread_mutex_lock(&((*(*s_etat_processus)
1457: .s_liste_variables_partagees).mutex)) != 0)
1458: {
1459: (*s_etat_processus).erreur_systeme = d_es_processus;
1460: return;
1461: }
1462:
1463: if (recherche_variable_partagee(s_etat_processus,
1464: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
1465: .position_variable_courante].nom,
1466: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
1467: .position_variable_courante].variable_partagee,
1468: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
1469: .position_variable_courante].origine) == d_faux)
1470: {
1471: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1472: .s_liste_variables_partagees).mutex)) != 0)
1473: {
1474: (*s_etat_processus).erreur_systeme = d_es_processus;
1475: return;
1476: }
1477:
1478: (*s_etat_processus).erreur_systeme = d_es;
1479: (*s_etat_processus).erreur_execution =
1480: d_ex_variable_non_definie;
1481:
1482: liberation(s_etat_processus, s_objet_1);
1483: liberation(s_etat_processus, s_objet_2);
1484: liberation(s_etat_processus, s_objet_3);
1485:
1486: return;
1487: }
1488:
1489: s_objet_4 = (*(*s_etat_processus).s_liste_variables_partagees)
1490: .table[(*(*s_etat_processus).s_liste_variables_partagees)
1491: .position_variable].objet;
1492: variable_partagee = d_vrai;
1493: }
1494:
1495: if (((*s_objet_4).type == VIN) ||
1496: ((*s_objet_4).type == VRL) ||
1497: ((*s_objet_4).type == VCX))
1498: {
1499: if ((*s_objet_2).type != LST)
1500: {
1501: if (variable_partagee == d_vrai)
1502: {
1503: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1504: .s_liste_variables_partagees).mutex)) != 0)
1505: {
1506: (*s_etat_processus).erreur_systeme = d_es_processus;
1507: return;
1508: }
1509: }
1510:
1511: liberation(s_etat_processus, s_objet_1);
1512: liberation(s_etat_processus, s_objet_2);
1513: liberation(s_etat_processus, s_objet_3);
1514:
1515: (*s_etat_processus).erreur_execution =
1516: d_ex_erreur_type_argument;
1517: return;
1518: }
1519:
1520: l_element_courant = (*s_objet_2).objet;
1521: nombre_dimensions = 0;
1522:
1523: while(l_element_courant != NULL)
1524: {
1525: nombre_dimensions++;
1526: l_element_courant = (*l_element_courant).suivant;
1527: }
1528:
1529: if (nombre_dimensions != 1)
1530: {
1531: if (variable_partagee == d_vrai)
1532: {
1533: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1534: .s_liste_variables_partagees).mutex)) != 0)
1535: {
1536: (*s_etat_processus).erreur_systeme = d_es_processus;
1537: return;
1538: }
1539: }
1540:
1541: liberation(s_etat_processus, s_objet_1);
1542: liberation(s_etat_processus, s_objet_2);
1543: liberation(s_etat_processus, s_objet_3);
1544:
1545: (*s_etat_processus).erreur_execution =
1546: d_ex_dimensions_invalides;
1547: return;
1548: }
1549:
1550: l_element_courant = (*s_objet_2).objet;
1551:
1552: if ((*(*l_element_courant).donnee).type != INT)
1553: {
1554: if (variable_partagee == d_vrai)
1555: {
1556: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1557: .s_liste_variables_partagees).mutex)) != 0)
1558: {
1559: (*s_etat_processus).erreur_systeme = d_es_processus;
1560: return;
1561: }
1562: }
1563:
1564: liberation(s_etat_processus, s_objet_1);
1565: liberation(s_etat_processus, s_objet_2);
1566: liberation(s_etat_processus, s_objet_3);
1567:
1568: (*s_etat_processus).erreur_execution =
1569: d_ex_erreur_type_argument;
1570: return;
1571: }
1572:
1573: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
1574: {
1575: if (variable_partagee == d_vrai)
1576: {
1577: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1578: .s_liste_variables_partagees).mutex)) != 0)
1579: {
1580: (*s_etat_processus).erreur_systeme = d_es_processus;
1581: return;
1582: }
1583: }
1584:
1585: liberation(s_etat_processus, s_objet_1);
1586: liberation(s_etat_processus, s_objet_2);
1587: liberation(s_etat_processus, s_objet_3);
1588:
1589: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
1590: return;
1591: }
1592: else if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) >
1593: (integer8) (*((struct_vecteur *) (*s_objet_4).objet))
1594: .taille)
1595: {
1596: if (variable_partagee == d_vrai)
1597: {
1598: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1599: .s_liste_variables_partagees).mutex)) != 0)
1600: {
1601: (*s_etat_processus).erreur_systeme = d_es_processus;
1602: return;
1603: }
1604: }
1605:
1606: liberation(s_etat_processus, s_objet_1);
1607: liberation(s_etat_processus, s_objet_2);
1608: liberation(s_etat_processus, s_objet_3);
1609:
1610: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
1611: return;
1612: }
1613:
1614: indice_i = (*((integer8 *) (*(*l_element_courant).donnee).objet));
1615:
1616: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'Q'))
1617: == NULL)
1618: {
1619: if (variable_partagee == d_vrai)
1620: {
1621: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1622: .s_liste_variables_partagees).mutex)) != 0)
1623: {
1624: (*s_etat_processus).erreur_systeme = d_es_processus;
1625: return;
1626: }
1627: }
1628:
1629: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1630: return;
1631: }
1632:
1633: liberation(s_etat_processus, s_objet_4);
1634: s_objet_4 = s_copie_4;
1635:
1636: if ((*s_objet_4).type == VIN)
1637: {
1638: /*
1639: * Vecteur d'entiers
1640: */
1641:
1642: if ((*s_objet_1).type == INT)
1643: {
1644: /*
1645: * Aucune conversion de type
1646: */
1647:
1648: ((integer8 *) (*((struct_vecteur *) (*s_objet_4).objet))
1649: .tableau)[indice_i - 1] = (*((integer8 *)
1650: (*s_objet_1).objet));
1651: }
1652: else if ((*s_objet_1).type == REL)
1653: {
1654: /*
1655: * Conversion du vecteur en vecteur réel
1656: */
1657:
1658: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
1659: (*s_objet_4).objet)).tableau);
1660:
1661: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'R';
1662: (*s_objet_4).type = VRL;
1663:
1664: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
1665: = malloc((*((struct_vecteur *)
1666: (*s_objet_4).objet)).taille * sizeof(real8)))
1667: == NULL)
1668: {
1669: if (variable_partagee == d_vrai)
1670: {
1671: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1672: .s_liste_variables_partagees).mutex)) != 0)
1673: {
1674: (*s_etat_processus).erreur_systeme =
1675: d_es_processus;
1676: return;
1677: }
1678: }
1679:
1680: (*s_etat_processus).erreur_systeme =
1681: d_es_allocation_memoire;
1682: return;
1683: }
1684:
1685: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
1686: .taille; i++)
1687: {
1688: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
1689: .tableau)[i] = (real8) (((integer8 *)
1690: tampon)[i]);
1691: }
1692:
1693: free((integer8 *) tampon);
1694:
1695: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
1696: .tableau)[indice_i - 1] = (*((real8 *)
1697: (*s_objet_1).objet));
1698: }
1699: else if ((*s_objet_1).type == CPL)
1700: {
1701: /*
1702: * Conversion du vecteur en vecteur complexe
1703: */
1704:
1705: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
1706: (*s_objet_4).objet)).tableau);
1707:
1708: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'C';
1709: (*s_objet_4).type = VCX;
1710:
1711: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
1712: = malloc((*((struct_vecteur *)
1713: (*s_objet_4).objet)).taille *
1714: sizeof(struct_complexe16))) == NULL)
1715: {
1716: if (variable_partagee == d_vrai)
1717: {
1718: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1719: .s_liste_variables_partagees).mutex)) != 0)
1720: {
1721: (*s_etat_processus).erreur_systeme =
1722: d_es_processus;
1723: return;
1724: }
1725: }
1726:
1727: (*s_etat_processus).erreur_systeme =
1728: d_es_allocation_memoire;
1729: return;
1730: }
1731:
1732: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
1733: .taille; i++)
1734: {
1735: ((struct_complexe16 *) (*((struct_vecteur *)
1736: (*s_objet_4).objet)).tableau)[i].partie_reelle =
1737: (real8) (((integer8 *) tampon)[i]);
1738: ((struct_complexe16 *) (*((struct_vecteur *)
1739: (*s_objet_4).objet)).tableau)[i]
1740: .partie_imaginaire = (real8) 0;
1741: }
1742:
1743: free((integer8 *) tampon);
1744:
1745: ((struct_complexe16 *) (*((struct_vecteur *)
1746: (*s_objet_4).objet)).tableau)[indice_i - 1]
1747: .partie_reelle = (*((struct_complexe16 *)
1748: (*s_objet_1).objet)).partie_reelle;
1749: ((struct_complexe16 *) (*((struct_vecteur *)
1750: (*s_objet_4).objet)).tableau)[indice_i - 1]
1751: .partie_imaginaire = (*((struct_complexe16 *)
1752: (*s_objet_1).objet)).partie_imaginaire;
1753: }
1754: else
1755: {
1756: if (variable_partagee == d_vrai)
1757: {
1758: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1759: .s_liste_variables_partagees).mutex)) != 0)
1760: {
1761: (*s_etat_processus).erreur_systeme =
1762: d_es_processus;
1763: return;
1764: }
1765: }
1766:
1767: liberation(s_etat_processus, s_objet_1);
1768: liberation(s_etat_processus, s_objet_2);
1769: liberation(s_etat_processus, s_objet_3);
1770:
1771: (*s_etat_processus).erreur_execution =
1772: d_ex_erreur_type_argument;
1773: return;
1774: }
1775: }
1776: else if ((*s_objet_4).type == VRL)
1777: {
1778: /*
1779: * Vecteur de réels
1780: */
1781:
1782: if ((*s_objet_1).type == INT)
1783: {
1784: /*
1785: * Conversion de l'élément à insérer en réel
1786: */
1787:
1788: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
1789: .tableau)[indice_i - 1] = (real8) (*((integer8 *)
1790: (*s_objet_1).objet));
1791: }
1792: else if ((*s_objet_1).type == REL)
1793: {
1794: /*
1795: * Aucune conversion de type
1796: */
1797:
1798: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
1799: .tableau)[indice_i - 1] = (*((real8 *)
1800: (*s_objet_1).objet));
1801: }
1802: else if ((*s_objet_1).type == CPL)
1803: {
1804: /*
1805: * Conversion du vecteur en vecteur complexe
1806: */
1807:
1808: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
1809: (*s_objet_4).objet)).tableau);
1810:
1811: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'C';
1812: (*s_objet_4).type = VCX;
1813:
1814: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
1815: = malloc((*((struct_vecteur *)
1816: (*s_objet_4).objet)).taille *
1817: sizeof(struct_complexe16))) == NULL)
1818: {
1819: if (variable_partagee == d_vrai)
1820: {
1821: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1822: .s_liste_variables_partagees).mutex)) != 0)
1823: {
1824: (*s_etat_processus).erreur_systeme =
1825: d_es_processus;
1826: return;
1827: }
1828: }
1829:
1830: (*s_etat_processus).erreur_systeme =
1831: d_es_allocation_memoire;
1832: return;
1833: }
1834:
1835: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
1836: .taille; i++)
1837: {
1838: ((struct_complexe16 *) (*((struct_vecteur *)
1839: (*s_objet_4).objet)).tableau)[i].partie_reelle =
1840: ((real8 *) tampon)[i];
1841: ((struct_complexe16 *) (*((struct_vecteur *)
1842: (*s_objet_4).objet)).tableau)[i]
1843: .partie_imaginaire = (real8) 0;
1844: }
1845:
1846: free((real8 *) tampon);
1847:
1848: ((struct_complexe16 *) (*((struct_vecteur *)
1849: (*s_objet_4).objet)).tableau)[indice_i - 1]
1850: .partie_reelle = (*((struct_complexe16 *)
1851: (*s_objet_1).objet)).partie_reelle;
1852: ((struct_complexe16 *) (*((struct_vecteur *)
1853: (*s_objet_4).objet)).tableau)[indice_i - 1]
1854: .partie_imaginaire = (*((struct_complexe16 *)
1855: (*s_objet_1).objet)).partie_imaginaire;
1856: }
1857: else
1858: {
1859: if (variable_partagee == d_vrai)
1860: {
1861: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1862: .s_liste_variables_partagees).mutex)) != 0)
1863: {
1864: (*s_etat_processus).erreur_systeme =
1865: d_es_processus;
1866: return;
1867: }
1868: }
1869:
1870: liberation(s_etat_processus, s_objet_1);
1871: liberation(s_etat_processus, s_objet_2);
1872: liberation(s_etat_processus, s_objet_3);
1873:
1874: (*s_etat_processus).erreur_execution =
1875: d_ex_erreur_type_argument;
1876: return;
1877: }
1878: }
1879: else
1880: {
1881: /*
1882: * Vecteur de complexes
1883: */
1884:
1885: if ((*s_objet_1).type == INT)
1886: {
1887: /*
1888: * Conversion de l'élément à insérer en complexe
1889: */
1890:
1891: ((struct_complexe16 *) (*((struct_vecteur *)
1892: (*s_objet_4).objet)).tableau)[indice_i - 1]
1893: .partie_reelle = (real8) (*((integer8 *)
1894: (*s_objet_1).objet));
1895: ((struct_complexe16 *) (*((struct_vecteur *)
1896: (*s_objet_4).objet)).tableau)[indice_i - 1]
1897: .partie_imaginaire = (real8) 0;
1898: }
1899: else if ((*s_objet_1).type == REL)
1900: {
1901: /*
1902: * Conversion de l'élément à insérer en complexe
1903: */
1904:
1905: ((struct_complexe16 *) (*((struct_vecteur *)
1906: (*s_objet_4).objet)).tableau)[indice_i - 1]
1907: .partie_reelle = (*((real8 *) (*s_objet_1).objet));
1908: ((struct_complexe16 *) (*((struct_vecteur *)
1909: (*s_objet_4).objet)).tableau)[indice_i - 1]
1910: .partie_imaginaire = (real8) 0;
1911: }
1912: else if ((*s_objet_1).type == CPL)
1913: {
1914: /*
1915: * Aucune conversion de type
1916: */
1917:
1918: ((struct_complexe16 *) (*((struct_vecteur *)
1919: (*s_objet_4).objet)).tableau)[indice_i - 1]
1920: .partie_reelle = (*((struct_complexe16 *)
1921: (*s_objet_1).objet)).partie_reelle;
1922: ((struct_complexe16 *) (*((struct_vecteur *)
1923: (*s_objet_4).objet)).tableau)[indice_i - 1]
1924: .partie_imaginaire = (*((struct_complexe16 *)
1925: (*s_objet_1).objet)).partie_imaginaire;
1926: }
1927: else
1928: {
1929: if (variable_partagee == d_vrai)
1930: {
1931: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1932: .s_liste_variables_partagees).mutex)) != 0)
1933: {
1934: (*s_etat_processus).erreur_systeme =
1935: d_es_processus;
1936: return;
1937: }
1938: }
1939:
1940: liberation(s_etat_processus, s_objet_1);
1941: liberation(s_etat_processus, s_objet_2);
1942: liberation(s_etat_processus, s_objet_3);
1943:
1944: (*s_etat_processus).erreur_execution =
1945: d_ex_erreur_type_argument;
1946: return;
1947: }
1948: }
1949:
1950: if (variable_partagee == d_faux)
1951: {
1952: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
1953: .position_variable_courante].objet = s_objet_4;
1954: }
1955: else
1956: {
1957: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
1958: .position_variable_courante].objet = NULL;
1959: (*(*s_etat_processus).s_liste_variables_partagees).table
1960: [(*(*s_etat_processus).s_liste_variables_partagees)
1961: .position_variable].objet = s_objet_4;
1962:
1963: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1964: .s_liste_variables_partagees).mutex)) != 0)
1965: {
1966: (*s_etat_processus).erreur_systeme = d_es_processus;
1967: return;
1968: }
1969: }
1970:
1971: liberation(s_etat_processus, s_objet_1);
1972: liberation(s_etat_processus, s_objet_2);
1973: liberation(s_etat_processus, s_objet_3);
1974: }
1975: else if (((*s_objet_4).type == MIN) ||
1976: ((*s_objet_4).type == MRL) ||
1977: ((*s_objet_4).type == MCX))
1978: {
1979: if ((*s_objet_2).type != LST)
1980: {
1981: if (variable_partagee == d_vrai)
1982: {
1983: if (pthread_mutex_unlock(&((*(*s_etat_processus)
1984: .s_liste_variables_partagees).mutex)) != 0)
1985: {
1986: (*s_etat_processus).erreur_systeme = d_es_processus;
1987: return;
1988: }
1989: }
1990:
1991: liberation(s_etat_processus, s_objet_1);
1992: liberation(s_etat_processus, s_objet_2);
1993: liberation(s_etat_processus, s_objet_3);
1994:
1995: (*s_etat_processus).erreur_execution =
1996: d_ex_erreur_type_argument;
1997: return;
1998: }
1999:
2000: l_element_courant = (*s_objet_2).objet;
2001: nombre_dimensions = 0;
2002:
2003: while(l_element_courant != NULL)
2004: {
2005: nombre_dimensions++;
2006: l_element_courant = (*l_element_courant).suivant;
2007: }
2008:
2009: if (nombre_dimensions != 2)
2010: {
2011: if (variable_partagee == d_vrai)
2012: {
2013: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2014: .s_liste_variables_partagees).mutex)) != 0)
2015: {
2016: (*s_etat_processus).erreur_systeme = d_es_processus;
2017: return;
2018: }
2019: }
2020:
2021: liberation(s_etat_processus, s_objet_1);
2022: liberation(s_etat_processus, s_objet_2);
2023: liberation(s_etat_processus, s_objet_3);
2024:
2025: (*s_etat_processus).erreur_execution =
2026: d_ex_dimensions_invalides;
2027: return;
2028: }
2029:
2030: l_element_courant = (*s_objet_2).objet;
2031:
2032: indice_i = 0;
2033: indice_j = 0;
2034:
2035: while(l_element_courant != NULL)
2036: {
2037: if ((*(*l_element_courant).donnee).type != INT)
2038: {
2039: if (variable_partagee == d_vrai)
2040: {
2041: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2042: .s_liste_variables_partagees).mutex)) != 0)
2043: {
2044: (*s_etat_processus).erreur_systeme = d_es_processus;
2045: return;
2046: }
2047: }
2048:
2049: liberation(s_etat_processus, s_objet_1);
2050: liberation(s_etat_processus, s_objet_2);
2051: liberation(s_etat_processus, s_objet_3);
2052:
2053: (*s_etat_processus).erreur_execution =
2054: d_ex_erreur_type_argument;
2055: return;
2056: }
2057:
2058: if ((*((integer8 *) (*(*l_element_courant).donnee).objet))
2059: <= 0)
2060: {
2061: if (variable_partagee == d_vrai)
2062: {
2063: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2064: .s_liste_variables_partagees).mutex)) != 0)
2065: {
2066: (*s_etat_processus).erreur_systeme = d_es_processus;
2067: return;
2068: }
2069: }
2070:
2071: liberation(s_etat_processus, s_objet_1);
2072: liberation(s_etat_processus, s_objet_2);
2073: liberation(s_etat_processus, s_objet_3);
2074:
2075: (*s_etat_processus).erreur_execution =
2076: d_ex_argument_invalide;
2077: return;
2078: }
2079:
2080: if (indice_i == 0)
2081: {
2082: indice_i = (*((integer8 *)
2083: (*(*l_element_courant).donnee).objet));
2084: }
2085: else
2086: {
2087: indice_j = (*((integer8 *)
2088: (*(*l_element_courant).donnee).objet));
2089: }
2090:
2091: l_element_courant = (*l_element_courant).suivant;
2092: }
2093:
2094: if ((indice_i > (*((struct_matrice *) (*s_objet_4).objet))
2095: .nombre_lignes) || (indice_j > (*((struct_matrice *)
2096: (*s_objet_4).objet)).nombre_colonnes))
2097: {
2098: if (variable_partagee == d_vrai)
2099: {
2100: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2101: .s_liste_variables_partagees).mutex)) != 0)
2102: {
2103: (*s_etat_processus).erreur_systeme = d_es_processus;
2104: return;
2105: }
2106: }
2107:
2108: liberation(s_etat_processus, s_objet_1);
2109: liberation(s_etat_processus, s_objet_2);
2110: liberation(s_etat_processus, s_objet_3);
2111:
2112: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
2113: return;
2114: }
2115:
2116: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'Q'))
2117: == NULL)
2118: {
2119: if (variable_partagee == d_vrai)
2120: {
2121: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2122: .s_liste_variables_partagees).mutex)) != 0)
2123: {
2124: (*s_etat_processus).erreur_systeme = d_es_processus;
2125: return;
2126: }
2127: }
2128:
2129: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2130: return;
2131: }
2132:
2133: liberation(s_etat_processus, s_objet_4);
2134: s_objet_4 = s_copie_4;
2135:
2136: if ((*s_objet_4).type == MIN)
2137: {
2138: /*
2139: * Matrice d'entiers
2140: */
2141:
2142: if ((*s_objet_1).type == INT)
2143: {
2144: /*
2145: * Aucune conversion de type
2146: */
2147:
2148: ((integer8 **) (*((struct_matrice *) (*s_objet_4).objet))
2149: .tableau)[indice_i - 1][indice_j - 1] =
2150: (*((integer8 *) (*s_objet_1).objet));
2151: }
2152: else if ((*s_objet_1).type == REL)
2153: {
2154: /*
2155: * Conversion de la matrice en matrice réelle
2156: */
2157:
2158: tampon = (void *) ((integer8 **) (*((struct_matrice *)
2159: (*s_objet_4).objet)).tableau);
2160:
2161: (*((struct_matrice *) (*s_objet_4).objet)).type = 'R';
2162: (*s_objet_4).type = MRL;
2163:
2164: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
2165: = malloc((*((struct_matrice *)
2166: (*s_objet_4).objet)).nombre_lignes *
2167: sizeof(real8 *))) == NULL)
2168: {
2169: if (variable_partagee == d_vrai)
2170: {
2171: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2172: .s_liste_variables_partagees).mutex)) != 0)
2173: {
2174: (*s_etat_processus).erreur_systeme =
2175: d_es_processus;
2176: return;
2177: }
2178: }
2179:
2180: (*s_etat_processus).erreur_systeme =
2181: d_es_allocation_memoire;
2182: return;
2183: }
2184:
2185: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
2186: .nombre_lignes; i++)
2187: {
2188: if ((((real8 **) (*((struct_matrice *)
2189: (*s_objet_4).objet)).tableau)[i]
2190: = malloc((*((struct_matrice *)
2191: (*s_objet_4).objet)).nombre_colonnes *
2192: sizeof(real8))) == NULL)
2193: {
2194: if (variable_partagee == d_vrai)
2195: {
2196: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2197: .s_liste_variables_partagees).mutex))
2198: != 0)
2199: {
2200: (*s_etat_processus).erreur_systeme =
2201: d_es_processus;
2202: return;
2203: }
2204: }
2205:
2206: (*s_etat_processus).erreur_systeme =
2207: d_es_allocation_memoire;
2208: return;
2209: }
2210:
2211: for(j = 0; j < (*((struct_matrice *)
2212: (*s_objet_4).objet)).nombre_colonnes; j++)
2213: {
2214: ((real8 **) (*((struct_matrice *) (*s_objet_4)
2215: .objet)).tableau)[i][j] = (real8)
2216: (((integer8 **) tampon)[i][j]);
2217: }
2218:
2219: free(((integer8 **) tampon)[i]);
2220: }
2221:
2222: free((integer8 **) tampon);
2223:
2224: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
2225: .tableau)[indice_i - 1][indice_j - 1] =
2226: (*((real8 *) (*s_objet_1).objet));
2227: }
2228: else if ((*s_objet_1).type == CPL)
2229: {
2230: /*
2231: * Conversion de la matrice en matrice complexe
2232: */
2233:
2234: tampon = (void *) ((integer8 **) (*((struct_matrice *)
2235: (*s_objet_4).objet)).tableau);
2236:
2237: (*((struct_matrice *) (*s_objet_4).objet)).type = 'C';
2238: (*s_objet_4).type = MCX;
2239:
2240: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
2241: = malloc((*((struct_matrice *)
2242: (*s_objet_4).objet)).nombre_lignes *
2243: sizeof(struct_complexe16 *))) == NULL)
2244: {
2245: if (variable_partagee == d_vrai)
2246: {
2247: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2248: .s_liste_variables_partagees).mutex)) != 0)
2249: {
2250: (*s_etat_processus).erreur_systeme =
2251: d_es_processus;
2252: return;
2253: }
2254: }
2255:
2256: (*s_etat_processus).erreur_systeme =
2257: d_es_allocation_memoire;
2258: return;
2259: }
2260:
2261: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
2262: .nombre_lignes; i++)
2263: {
2264: if ((((struct_complexe16 **) (*((struct_matrice *)
2265: (*s_objet_4).objet)).tableau)[i]
2266: = malloc((*((struct_matrice *)
2267: (*s_objet_4).objet)).nombre_colonnes *
2268: sizeof(struct_complexe16))) == NULL)
2269: {
2270: if (variable_partagee == d_vrai)
2271: {
2272: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2273: .s_liste_variables_partagees).mutex))
2274: != 0)
2275: {
2276: (*s_etat_processus).erreur_systeme =
2277: d_es_processus;
2278: return;
2279: }
2280: }
2281:
2282: (*s_etat_processus).erreur_systeme =
2283: d_es_allocation_memoire;
2284: return;
2285: }
2286:
2287: for(j = 0; j < (*((struct_matrice *)
2288: (*s_objet_4).objet)).nombre_colonnes; j++)
2289: {
2290: ((struct_complexe16 **) (*((struct_matrice *)
2291: (*s_objet_4).objet)).tableau)[i][j]
2292: .partie_reelle = (real8) (((integer8 **)
2293: tampon)[i][j]);
2294: ((struct_complexe16 **) (*((struct_matrice *)
2295: (*s_objet_4).objet)).tableau)[i][j]
2296: .partie_imaginaire = (real8) 0;
2297: }
2298:
2299: free(((integer8 **) tampon)[i]);
2300: }
2301:
2302: free((integer8 **) tampon);
2303:
2304: ((struct_complexe16 **) (*((struct_matrice *)
2305: (*s_objet_4).objet)).tableau)[indice_i - 1]
2306: [indice_j - 1].partie_reelle =
2307: (*((struct_complexe16 *)
2308: (*s_objet_1).objet)).partie_reelle;
2309: ((struct_complexe16 **) (*((struct_matrice *)
2310: (*s_objet_4).objet)).tableau)[indice_i - 1]
2311: [indice_j - 1].partie_imaginaire =
2312: (*((struct_complexe16 *)
2313: (*s_objet_1).objet)).partie_imaginaire;
2314: }
2315: else
2316: {
2317: if (variable_partagee == d_vrai)
2318: {
2319: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2320: .s_liste_variables_partagees).mutex)) != 0)
2321: {
2322: (*s_etat_processus).erreur_systeme =
2323: d_es_processus;
2324: return;
2325: }
2326: }
2327:
2328: liberation(s_etat_processus, s_objet_1);
2329: liberation(s_etat_processus, s_objet_2);
2330: liberation(s_etat_processus, s_objet_3);
2331:
2332: (*s_etat_processus).erreur_execution =
2333: d_ex_erreur_type_argument;
2334: return;
2335: }
2336: }
2337: else if ((*s_objet_4).type == MRL)
2338: {
2339: /*
2340: * Matrice de réels
2341: */
2342:
2343: if ((*s_objet_1).type == INT)
2344: {
2345: /*
2346: * Conversion de l'élément à insérer en réel
2347: */
2348:
2349: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
2350: .tableau)[indice_i - 1][indice_j - 1] =
2351: (real8) (*((integer8 *) (*s_objet_1).objet));
2352: }
2353: else if ((*s_objet_1).type == REL)
2354: {
2355: /*
2356: * Aucune conversion de type
2357: */
2358:
2359: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
2360: .tableau)[indice_i - 1][indice_j - 1] =
2361: (*((real8 *) (*s_objet_1).objet));
2362: }
2363: else if ((*s_objet_1).type == CPL)
2364: {
2365: /*
2366: * Conversion de la matrice en matrice complexe
2367: */
2368:
2369: tampon = (void *) ((real8 **) (*((struct_matrice *)
2370: (*s_objet_4).objet)).tableau);
2371:
2372: (*((struct_matrice *) (*s_objet_4).objet)).type = 'C';
2373: (*s_objet_4).type = MCX;
2374:
2375: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
2376: = malloc((*((struct_matrice *)
2377: (*s_objet_4).objet)).nombre_lignes *
2378: sizeof(struct_complexe16 *))) == NULL)
2379: {
2380: if (variable_partagee == d_vrai)
2381: {
2382: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2383: .s_liste_variables_partagees).mutex))
2384: != 0)
2385: {
2386: (*s_etat_processus).erreur_systeme =
2387: d_es_processus;
2388: return;
2389: }
2390: }
2391:
2392: (*s_etat_processus).erreur_systeme =
2393: d_es_allocation_memoire;
2394: return;
2395: }
2396:
2397: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
2398: .nombre_lignes; i++)
2399: {
2400: if ((((struct_complexe16 **) (*((struct_matrice *)
2401: (*s_objet_4).objet)).tableau)[i]
2402: = malloc((*((struct_matrice *)
2403: (*s_objet_4).objet)).nombre_colonnes *
2404: sizeof(struct_complexe16))) == NULL)
2405: {
2406: if (variable_partagee == d_vrai)
2407: {
2408: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2409: .s_liste_variables_partagees).mutex))
2410: != 0)
2411: {
2412: (*s_etat_processus).erreur_systeme =
2413: d_es_processus;
2414: return;
2415: }
2416: }
2417:
2418: (*s_etat_processus).erreur_systeme =
2419: d_es_allocation_memoire;
2420: return;
2421: }
2422:
2423: for(j = 0; j < (*((struct_matrice *)
2424: (*s_objet_4).objet)).nombre_colonnes; j++)
2425: {
2426: ((struct_complexe16 **) (*((struct_matrice *)
2427: (*s_objet_4).objet)).tableau)[i][j]
2428: .partie_reelle = (((real8 **)
2429: tampon)[i][j]);
2430: ((struct_complexe16 **) (*((struct_matrice *)
2431: (*s_objet_4).objet)).tableau)[i][j]
2432: .partie_imaginaire = (real8) 0;
2433: }
2434:
2435: free(((integer8 **) tampon)[i]);
2436: }
2437:
2438: free((integer8 **) tampon);
2439:
2440: ((struct_complexe16 **) (*((struct_matrice *)
2441: (*s_objet_4).objet)).tableau)[indice_i - 1]
2442: [indice_j - 1].partie_reelle =
2443: (*((struct_complexe16 *)
2444: (*s_objet_1).objet)).partie_reelle;
2445: ((struct_complexe16 **) (*((struct_matrice *)
2446: (*s_objet_4).objet)).tableau)[indice_i - 1]
2447: [indice_j - 1].partie_imaginaire =
2448: (*((struct_complexe16 *)
2449: (*s_objet_1).objet)).partie_imaginaire;
2450: }
2451: else
2452: {
2453: if (variable_partagee == d_vrai)
2454: {
2455: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2456: .s_liste_variables_partagees).mutex)) != 0)
2457: {
2458: (*s_etat_processus).erreur_systeme =
2459: d_es_processus;
2460: return;
2461: }
2462: }
2463:
2464: liberation(s_etat_processus, s_objet_1);
2465: liberation(s_etat_processus, s_objet_2);
2466: liberation(s_etat_processus, s_objet_3);
2467:
2468: (*s_etat_processus).erreur_execution =
2469: d_ex_erreur_type_argument;
2470: return;
2471: }
2472: }
2473: else
2474: {
2475: /*
2476: * Matrice de complexes
2477: */
2478:
2479: if ((*s_objet_1).type == INT)
2480: {
2481: /*
2482: * Conversion de l'élément à insérer en complexe
2483: */
2484:
2485: ((struct_complexe16 **) (*((struct_matrice *)
2486: (*s_objet_4).objet)).tableau)[indice_i - 1]
2487: [indice_j - 1].partie_reelle = (real8)
2488: (*((integer8 *) (*s_objet_1).objet));
2489: ((struct_complexe16 **) (*((struct_matrice *)
2490: (*s_objet_4).objet)).tableau)[indice_i - 1]
2491: [indice_j - 1].partie_imaginaire = (real8) 0;
2492: }
2493: else if ((*s_objet_1).type == REL)
2494: {
2495: /*
2496: * Conversion de l'élément à insérer en complexe
2497: */
2498:
2499: ((struct_complexe16 **) (*((struct_matrice *)
2500: (*s_objet_4).objet)).tableau)[indice_i - 1]
2501: [indice_j - 1].partie_reelle =
2502: (*((real8 *) (*s_objet_1).objet));
2503: ((struct_complexe16 **) (*((struct_matrice *)
2504: (*s_objet_4).objet)).tableau)[indice_i - 1]
2505: [indice_j - 1].partie_imaginaire = (real8) 0;
2506: }
2507: else if ((*s_objet_1).type == CPL)
2508: {
2509: /*
2510: * Aucune conversion de type
2511: */
2512:
2513: ((struct_complexe16 **) (*((struct_matrice *)
2514: (*s_objet_4).objet)).tableau)[indice_i - 1]
2515: [indice_j - 1].partie_reelle =
2516: (*((struct_complexe16 *)
2517: (*s_objet_1).objet)).partie_reelle;
2518: ((struct_complexe16 **) (*((struct_matrice *)
2519: (*s_objet_4).objet)).tableau)[indice_i - 1]
2520: [indice_j - 1].partie_imaginaire =
2521: (*((struct_complexe16 *)
2522: (*s_objet_1).objet)).partie_imaginaire;
2523: }
2524: else
2525: {
2526: if (variable_partagee == d_vrai)
2527: {
2528: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2529: .s_liste_variables_partagees).mutex)) != 0)
2530: {
2531: (*s_etat_processus).erreur_systeme =
2532: d_es_processus;
2533: return;
2534: }
2535: }
2536:
2537: liberation(s_etat_processus, s_objet_1);
2538: liberation(s_etat_processus, s_objet_2);
2539: liberation(s_etat_processus, s_objet_3);
2540:
2541: (*s_etat_processus).erreur_execution =
2542: d_ex_erreur_type_argument;
2543: return;
2544: }
2545: }
2546:
2547: if (variable_partagee == d_faux)
2548: {
2549: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2550: .position_variable_courante].objet = s_objet_4;
2551: }
2552: else
2553: {
2554: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2555: .position_variable_courante].objet = NULL;
2556: (*(*s_etat_processus).s_liste_variables_partagees).table
2557: [(*(*s_etat_processus).s_liste_variables_partagees)
2558: .position_variable].objet = s_objet_4;
2559:
2560: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2561: .s_liste_variables_partagees).mutex))
2562: != 0)
2563: {
2564: (*s_etat_processus).erreur_systeme =
2565: d_es_processus;
2566: return;
2567: }
2568: }
2569:
2570: liberation(s_etat_processus, s_objet_1);
2571: liberation(s_etat_processus, s_objet_2);
2572: liberation(s_etat_processus, s_objet_3);
2573: }
2574: else if ((*s_objet_4).type == LST)
2575: {
2576: if ((*s_objet_2).type != INT)
2577: {
2578: if (variable_partagee == d_vrai)
2579: {
2580: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2581: .s_liste_variables_partagees).mutex))
2582: != 0)
2583: {
2584: (*s_etat_processus).erreur_systeme =
2585: d_es_processus;
2586: return;
2587: }
2588: }
2589:
2590: liberation(s_etat_processus, s_objet_1);
2591: liberation(s_etat_processus, s_objet_2);
2592: liberation(s_etat_processus, s_objet_3);
2593:
2594: (*s_etat_processus).erreur_execution =
2595: d_ex_erreur_type_argument;
2596: return;
2597: }
2598:
2599: indice_i = (*((integer8 *) (*s_objet_2).objet));
2600: indice_j = 1;
2601:
2602: if ((*s_objet_4).nombre_occurrences > 1)
2603: {
2604: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'N'))
2605: == NULL)
2606: {
2607: if (variable_partagee == d_vrai)
2608: {
2609: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2610: .s_liste_variables_partagees).mutex))
2611: != 0)
2612: {
2613: (*s_etat_processus).erreur_systeme =
2614: d_es_processus;
2615: return;
2616: }
2617: }
2618:
2619: (*s_etat_processus).erreur_systeme =
2620: d_es_allocation_memoire;
2621: return;
2622: }
2623:
2624: liberation(s_etat_processus, s_objet_4);
2625: s_objet_4 = s_copie_4;
2626: }
2627:
2628: l_element_courant = (*s_objet_4).objet;
2629:
2630: while((l_element_courant != NULL) && (indice_j != indice_i))
2631: {
2632: l_element_courant = (*l_element_courant).suivant;
2633: indice_j++;
2634: }
2635:
2636: if (l_element_courant != NULL)
2637: {
2638: liberation(s_etat_processus, (*l_element_courant).donnee);
2639: (*l_element_courant).donnee = s_objet_1;
2640: }
2641: else
2642: {
2643: if (variable_partagee == d_vrai)
2644: {
2645: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2646: .s_liste_variables_partagees).mutex)) != 0)
2647: {
2648: (*s_etat_processus).erreur_systeme =
2649: d_es_processus;
2650: return;
2651: }
2652: }
2653:
2654: liberation(s_etat_processus, s_objet_1);
2655: liberation(s_etat_processus, s_objet_2);
2656: liberation(s_etat_processus, s_objet_3);
2657:
2658: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
2659: return;
2660: }
2661:
2662: if (variable_partagee == d_faux)
2663: {
2664: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2665: .position_variable_courante].objet = s_objet_4;
2666: }
2667: else
2668: {
2669: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2670: .position_variable_courante].objet = NULL;
2671: (*(*s_etat_processus).s_liste_variables_partagees).table
2672: [(*(*s_etat_processus).s_liste_variables_partagees)
2673: .position_variable].objet = s_objet_4;
2674:
2675: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2676: .s_liste_variables_partagees).mutex)) != 0)
2677: {
2678: (*s_etat_processus).erreur_systeme =
2679: d_es_processus;
2680: return;
2681: }
2682: }
2683:
2684: liberation(s_etat_processus, s_objet_2);
2685: liberation(s_etat_processus, s_objet_3);
2686: }
2687: else if ((*s_objet_4).type == TBL)
2688: {
2689: if ((*s_objet_2).type != LST)
2690: {
2691: if (variable_partagee == d_vrai)
2692: {
2693: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2694: .s_liste_variables_partagees).mutex)) != 0)
2695: {
2696: (*s_etat_processus).erreur_systeme =
2697: d_es_processus;
2698: return;
2699: }
2700: }
2701:
2702: liberation(s_etat_processus, s_objet_1);
2703: liberation(s_etat_processus, s_objet_2);
2704: liberation(s_etat_processus, s_objet_3);
2705:
2706: (*s_etat_processus).erreur_execution =
2707: d_ex_erreur_type_argument;
2708: return;
2709: }
2710:
2711: if ((*s_objet_4).nombre_occurrences > 1)
2712: {
2713: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'N'))
2714: == NULL)
2715: {
2716: if (variable_partagee == d_vrai)
2717: {
2718: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2719: .s_liste_variables_partagees).mutex)) != 0)
2720: {
2721: (*s_etat_processus).erreur_systeme =
2722: d_es_processus;
2723: return;
2724: }
2725: }
2726:
2727: (*s_etat_processus).erreur_systeme =
2728: d_es_allocation_memoire;
2729: return;
2730: }
2731:
2732: liberation(s_etat_processus, s_objet_4);
2733: s_objet_4 = s_copie_4;
2734: }
2735:
2736: s_objet_element = s_objet_4;
2737: l_element_courant = (*s_objet_2).objet;
2738: indice_i = 0;
2739:
2740: while(l_element_courant != NULL)
2741: {
2742: if ((*(*l_element_courant).donnee).type != INT)
2743: {
2744: if (variable_partagee == d_vrai)
2745: {
2746: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2747: .s_liste_variables_partagees).mutex)) != 0)
2748: {
2749: (*s_etat_processus).erreur_systeme =
2750: d_es_processus;
2751: return;
2752: }
2753: }
2754:
2755: liberation(s_etat_processus, s_objet_1);
2756: liberation(s_etat_processus, s_objet_2);
2757: liberation(s_etat_processus, s_objet_3);
2758:
2759: (*s_etat_processus).erreur_execution =
2760: d_ex_erreur_type_argument;
2761: return;
2762: }
2763:
2764: if ((*s_objet_element).type != TBL)
2765: {
2766: if (variable_partagee == d_vrai)
2767: {
2768: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2769: .s_liste_variables_partagees).mutex)) != 0)
2770: {
2771: (*s_etat_processus).erreur_systeme =
2772: d_es_processus;
2773: return;
2774: }
2775: }
2776:
2777: liberation(s_etat_processus, s_objet_1);
2778: liberation(s_etat_processus, s_objet_2);
2779: liberation(s_etat_processus, s_objet_3);
2780:
2781: (*s_etat_processus).erreur_execution =
2782: d_ex_element_inexistant;
2783: return;
2784: }
2785:
2786: indice_i = (*((integer8 *) (*(*l_element_courant)
2787: .donnee).objet));
2788:
2789: if ((indice_i < 1) || (indice_i > (*((struct_tableau *)
2790: (*s_objet_element).objet)).nombre_elements))
2791: {
2792: if (variable_partagee == d_vrai)
2793: {
2794: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2795: .s_liste_variables_partagees).mutex)) != 0)
2796: {
2797: (*s_etat_processus).erreur_systeme =
2798: d_es_processus;
2799: return;
2800: }
2801: }
2802:
2803: liberation(s_etat_processus, s_objet_1);
2804: liberation(s_etat_processus, s_objet_2);
2805: liberation(s_etat_processus, s_objet_3);
2806:
2807: (*s_etat_processus).erreur_execution =
2808: d_ex_element_inexistant;
2809: return;
2810: }
2811:
2812: if ((*l_element_courant).suivant != NULL)
2813: {
2814: s_objet_element = (*((struct_tableau *) (*s_objet_element)
2815: .objet)).elements[indice_i - 1];
2816: }
2817:
2818: l_element_courant = (*l_element_courant).suivant;
2819: }
2820:
2821: liberation(s_etat_processus, (*((struct_tableau *)
2822: (*s_objet_element).objet)).elements[indice_i - 1]);
2823: (*((struct_tableau *) (*s_objet_element).objet)).elements
2824: [indice_i - 1] = s_objet_1;
2825:
2826: if (variable_partagee == d_faux)
2827: {
2828: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2829: .position_variable_courante].objet = s_objet_4;
2830: }
2831: else
2832: {
2833: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
2834: .position_variable_courante].objet = NULL;
2835: (*(*s_etat_processus).s_liste_variables_partagees).table
2836: [(*(*s_etat_processus).s_liste_variables_partagees)
2837: .position_variable].objet = s_objet_4;
2838:
2839: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2840: .s_liste_variables_partagees).mutex)) != 0)
2841: {
2842: (*s_etat_processus).erreur_systeme =
2843: d_es_processus;
2844: return;
2845: }
2846: }
2847:
2848: liberation(s_etat_processus, s_objet_2);
2849: }
2850: else
2851: {
2852: if (variable_partagee == d_vrai)
2853: {
2854: if (pthread_mutex_unlock(&((*(*s_etat_processus)
2855: .s_liste_variables_partagees).mutex)) != 0)
2856: {
2857: (*s_etat_processus).erreur_systeme =
2858: d_es_processus;
2859: return;
2860: }
2861: }
2862:
2863: liberation(s_etat_processus, s_objet_1);
2864: liberation(s_etat_processus, s_objet_2);
2865: liberation(s_etat_processus, s_objet_3);
2866:
2867: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
2868: return;
2869: }
2870: }
2871:
2872: /*
2873: --------------------------------------------------------------------------------
2874: Arguments incompatibles
2875: --------------------------------------------------------------------------------
2876: */
2877:
2878: else
2879: {
2880: liberation(s_etat_processus, s_objet_1);
2881: liberation(s_etat_processus, s_objet_2);
2882: liberation(s_etat_processus, s_objet_3);
2883:
2884: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
2885: return;
2886: }
2887:
2888: return;
2889: }
2890:
2891:
2892: /*
2893: ================================================================================
2894: Fonction 'puti'
2895: ================================================================================
2896: Entrées : pointeur sur une structure struct_processus
2897: --------------------------------------------------------------------------------
2898: Sorties :
2899: --------------------------------------------------------------------------------
2900: Effets de bord : néant
2901: ================================================================================
2902: */
2903:
2904: void
2905: instruction_puti(struct_processus *s_etat_processus)
2906: {
2907: logical1 variable_partagee;
2908:
2909: struct_liste_chainee *l_element_courant;
2910:
2911: struct_objet *s_copie_2;
2912: struct_objet *s_copie_3;
2913: struct_objet *s_copie_4;
2914: struct_objet *s_objet_1;
2915: struct_objet *s_objet_2;
2916: struct_objet *s_objet_3;
2917: struct_objet *s_objet_4;
2918:
2919: unsigned long i;
2920: unsigned long indice_i;
2921: unsigned long indice_j;
2922: unsigned long j;
2923: unsigned long nombre_dimensions;
2924: unsigned long nombre_elements;
2925:
2926: void *tampon;
2927:
2928: (*s_etat_processus).erreur_execution = d_ex;
2929:
2930: if ((*s_etat_processus).affichage_arguments == 'Y')
2931: {
2932: printf("\n PUTI ");
2933:
2934: if ((*s_etat_processus).langue == 'F')
2935: {
2936: printf("(change un élément)\n\n");
2937: }
2938: else
2939: {
2940: printf("(change element)\n\n");
2941: }
2942:
2943: printf(" 3: %s, %s, %s, %s\n", d_VIN, d_VRL, d_VCX, d_NOM);
2944: printf(" 2: %s\n", d_LST);
2945: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
2946: printf("-> 2: %s, %s, %s, %s\n", d_VIN, d_VRL, d_VCX, d_NOM);
2947: printf(" 1: %s\n\n", d_LST);
2948:
2949: printf(" 3: %s, %s, %s, %s\n", d_MIN, d_MRL, d_MCX, d_NOM);
2950: printf(" 2: %s\n", d_LST);
2951: printf(" 1: %s, %s, %s\n", d_INT, d_REL, d_CPL);
2952: printf("-> 2: %s, %s, %s, %s\n", d_MIN, d_MRL, d_MCX, d_NOM);
2953: printf(" 1: %s\n\n", d_LST);
2954:
2955: printf(" 3: %s, %s\n", d_LST, d_NOM);
2956: printf(" 2: %s\n", d_INT);
2957: printf(" 1: %s, %s, %s, %s, %s, %s,\n"
2958: " %s, %s, %s, %s, %s,\n"
2959: " %s, %s, %s, %s, %s,\n"
2960: " %s, %s, %s, %s,\n"
2961: " %s, %s\n",
2962: d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX,
2963: d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK,
2964: d_SQL, d_SLB, d_PRC, d_MTX);
2965: printf("-> 2: %s, %s\n", d_LST, d_NOM);
2966: printf(" 1: %s\n", d_INT);
2967:
2968: return;
2969: }
2970: else if ((*s_etat_processus).test_instruction == 'Y')
2971: {
2972: (*s_etat_processus).nombre_arguments = -1;
2973: return;
2974: }
2975:
2976: if (test_cfsf(s_etat_processus, 31) == d_vrai)
2977: {
2978: if (empilement_pile_last(s_etat_processus, 3) == d_erreur)
2979: {
2980: return;
2981: }
2982: }
2983:
2984: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
2985: &s_objet_1) == d_erreur)
2986: {
2987: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
2988: return;
2989: }
2990:
2991: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
2992: &s_objet_2) == d_erreur)
2993: {
2994: liberation(s_etat_processus, s_objet_1);
2995:
2996: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
2997: return;
2998: }
2999:
3000: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3001: &s_objet_3) == d_erreur)
3002: {
3003: liberation(s_etat_processus, s_objet_1);
3004: liberation(s_etat_processus, s_objet_2);
3005:
3006: (*s_etat_processus).erreur_execution = d_ex_manque_argument;
3007: return;
3008: }
3009:
3010: if ((s_copie_2 = copie_objet(s_etat_processus, s_objet_2, 'O')) == NULL)
3011: {
3012: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3013: return;
3014: }
3015:
3016: liberation(s_etat_processus, s_objet_2);
3017: s_objet_2 = s_copie_2;
3018:
3019: /*
3020: --------------------------------------------------------------------------------
3021: Traitement des éléments des vecteurs
3022: --------------------------------------------------------------------------------
3023: */
3024:
3025: if (((*s_objet_3).type == VIN) ||
3026: ((*s_objet_3).type == VRL) ||
3027: ((*s_objet_3).type == VCX))
3028: {
3029: if ((*s_objet_2).type != LST)
3030: {
3031: liberation(s_etat_processus, s_objet_1);
3032: liberation(s_etat_processus, s_objet_2);
3033: liberation(s_etat_processus, s_objet_3);
3034:
3035: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
3036: return;
3037: }
3038:
3039: l_element_courant = (*s_objet_2).objet;
3040: nombre_dimensions = 0;
3041:
3042: while(l_element_courant != NULL)
3043: {
3044: nombre_dimensions++;
3045: l_element_courant = (*l_element_courant).suivant;
3046: }
3047:
3048: if (nombre_dimensions != 1)
3049: {
3050: liberation(s_etat_processus, s_objet_1);
3051: liberation(s_etat_processus, s_objet_2);
3052: liberation(s_etat_processus, s_objet_3);
3053:
3054: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3055: return;
3056: }
3057:
3058: l_element_courant = (*s_objet_2).objet;
3059:
3060: if ((*(*l_element_courant).donnee).type != INT)
3061: {
3062: liberation(s_etat_processus, s_objet_1);
3063: liberation(s_etat_processus, s_objet_2);
3064: liberation(s_etat_processus, s_objet_3);
3065:
3066: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
3067: return;
3068: }
3069:
3070: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
3071: {
3072: liberation(s_etat_processus, s_objet_1);
3073: liberation(s_etat_processus, s_objet_2);
3074: liberation(s_etat_processus, s_objet_3);
3075:
3076: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
3077: return;
3078: }
3079: else if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) >
3080: (integer8) (*((struct_vecteur *) (*s_objet_3).objet)).taille)
3081: {
3082: liberation(s_etat_processus, s_objet_1);
3083: liberation(s_etat_processus, s_objet_2);
3084: liberation(s_etat_processus, s_objet_3);
3085:
3086: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
3087: return;
3088: }
3089:
3090: indice_i = (*((integer8 *) (*(*l_element_courant).donnee).objet));
3091:
3092: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'Q')) == NULL)
3093: {
3094: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3095: return;
3096: }
3097:
3098: liberation(s_etat_processus, s_objet_3);
3099: s_objet_3 = s_copie_3;
3100:
3101: if ((*s_objet_3).type == VIN)
3102: {
3103: /*
3104: * Vecteur d'entiers
3105: */
3106:
3107: if ((*s_objet_1).type == INT)
3108: {
3109: /*
3110: * Aucune conversion de type
3111: */
3112:
3113: ((integer8 *) (*((struct_vecteur *) (*s_objet_3).objet))
3114: .tableau)[indice_i - 1] = (*((integer8 *)
3115: (*s_objet_1).objet));
3116: }
3117: else if ((*s_objet_1).type == REL)
3118: {
3119: /*
3120: * Conversion du vecteur en vecteur réel
3121: */
3122:
3123: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
3124: (*s_objet_3).objet)).tableau);
3125:
3126: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'R';
3127: (*s_objet_3).type = VRL;
3128:
3129: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
3130: = malloc((*((struct_vecteur *)
3131: (*s_objet_3).objet)).taille * sizeof(real8)))
3132: == NULL)
3133: {
3134: (*s_etat_processus).erreur_systeme =
3135: d_es_allocation_memoire;
3136: return;
3137: }
3138:
3139: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
3140: .taille; i++)
3141: {
3142: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
3143: .tableau)[i] = (real8) (((integer8 *) tampon)[i]);
3144: }
3145:
3146: free((integer8 *) tampon);
3147:
3148: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
3149: .tableau)[indice_i - 1] = (*((real8 *)
3150: (*s_objet_1).objet));
3151: }
3152: else if ((*s_objet_1).type == CPL)
3153: {
3154: /*
3155: * Conversion du vecteur en vecteur complexe
3156: */
3157:
3158: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
3159: (*s_objet_3).objet)).tableau);
3160:
3161: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'C';
3162: (*s_objet_3).type = VCX;
3163:
3164: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
3165: = malloc((*((struct_vecteur *)
3166: (*s_objet_3).objet)).taille *
3167: sizeof(struct_complexe16))) == NULL)
3168: {
3169: (*s_etat_processus).erreur_systeme =
3170: d_es_allocation_memoire;
3171: return;
3172: }
3173:
3174: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
3175: .taille; i++)
3176: {
3177: ((struct_complexe16 *) (*((struct_vecteur *)
3178: (*s_objet_3).objet)).tableau)[i].partie_reelle =
3179: (real8) (((integer8 *) tampon)[i]);
3180: ((struct_complexe16 *) (*((struct_vecteur *)
3181: (*s_objet_3).objet)).tableau)[i]
3182: .partie_imaginaire = (real8) 0;
3183: }
3184:
3185: free((integer8 *) tampon);
3186:
3187: ((struct_complexe16 *) (*((struct_vecteur *)
3188: (*s_objet_3).objet)).tableau)[indice_i - 1]
3189: .partie_reelle = (*((struct_complexe16 *)
3190: (*s_objet_1).objet)).partie_reelle;
3191: ((struct_complexe16 *) (*((struct_vecteur *)
3192: (*s_objet_3).objet)).tableau)[indice_i - 1]
3193: .partie_imaginaire = (*((struct_complexe16 *)
3194: (*s_objet_1).objet)).partie_imaginaire;
3195: }
3196: else
3197: {
3198: liberation(s_etat_processus, s_objet_1);
3199: liberation(s_etat_processus, s_objet_2);
3200: liberation(s_etat_processus, s_objet_3);
3201:
3202: (*s_etat_processus).erreur_execution =
3203: d_ex_erreur_type_argument;
3204: return;
3205: }
3206: }
3207: else if ((*s_objet_3).type == VRL)
3208: {
3209: /*
3210: * Vecteur de réels
3211: */
3212:
3213: if ((*s_objet_1).type == INT)
3214: {
3215: /*
3216: * Conversion de l'élément à insérer en réel
3217: */
3218:
3219: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
3220: .tableau)[indice_i - 1] = (real8) (*((integer8 *)
3221: (*s_objet_1).objet));
3222: }
3223: else if ((*s_objet_1).type == REL)
3224: {
3225: /*
3226: * Aucune conversion de type
3227: */
3228:
3229: ((real8 *) (*((struct_vecteur *) (*s_objet_3).objet))
3230: .tableau)[indice_i - 1] = (*((real8 *)
3231: (*s_objet_1).objet));
3232: }
3233: else if ((*s_objet_1).type == CPL)
3234: {
3235: /*
3236: * Conversion du vecteur en vecteur complexe
3237: */
3238:
3239: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
3240: (*s_objet_3).objet)).tableau);
3241:
3242: (*((struct_vecteur *) (*s_objet_3).objet)).type = 'C';
3243: (*s_objet_3).type = VCX;
3244:
3245: if (((*((struct_vecteur *) (*s_objet_3).objet)).tableau
3246: = malloc((*((struct_vecteur *)
3247: (*s_objet_3).objet)).taille *
3248: sizeof(struct_complexe16))) == NULL)
3249: {
3250: (*s_etat_processus).erreur_systeme =
3251: d_es_allocation_memoire;
3252: return;
3253: }
3254:
3255: for(i = 0; i < (*((struct_vecteur *) (*s_objet_3).objet))
3256: .taille; i++)
3257: {
3258: ((struct_complexe16 *) (*((struct_vecteur *)
3259: (*s_objet_3).objet)).tableau)[i].partie_reelle =
3260: ((real8 *) tampon)[i];
3261: ((struct_complexe16 *) (*((struct_vecteur *)
3262: (*s_objet_3).objet)).tableau)[i]
3263: .partie_imaginaire = (real8) 0;
3264: }
3265:
3266: free((real8 *) tampon);
3267:
3268: ((struct_complexe16 *) (*((struct_vecteur *)
3269: (*s_objet_3).objet)).tableau)[indice_i - 1]
3270: .partie_reelle = (*((struct_complexe16 *)
3271: (*s_objet_1).objet)).partie_reelle;
3272: ((struct_complexe16 *) (*((struct_vecteur *)
3273: (*s_objet_3).objet)).tableau)[indice_i - 1]
3274: .partie_imaginaire = (*((struct_complexe16 *)
3275: (*s_objet_1).objet)).partie_imaginaire;
3276: }
3277: else
3278: {
3279: liberation(s_etat_processus, s_objet_1);
3280: liberation(s_etat_processus, s_objet_2);
3281: liberation(s_etat_processus, s_objet_3);
3282:
3283: (*s_etat_processus).erreur_execution =
3284: d_ex_erreur_type_argument;
3285: return;
3286: }
3287: }
3288: else
3289: {
3290: /*
3291: * Vecteur de complexes
3292: */
3293:
3294: if ((*s_objet_1).type == INT)
3295: {
3296: /*
3297: * Conversion de l'élément à insérer en complexe
3298: */
3299:
3300: ((struct_complexe16 *) (*((struct_vecteur *)
3301: (*s_objet_3).objet)).tableau)[indice_i - 1]
3302: .partie_reelle = (real8) (*((integer8 *)
3303: (*s_objet_1).objet));
3304: ((struct_complexe16 *) (*((struct_vecteur *)
3305: (*s_objet_3).objet)).tableau)[indice_i - 1]
3306: .partie_imaginaire = (real8) 0;
3307: }
3308: else if ((*s_objet_1).type == REL)
3309: {
3310: /*
3311: * Conversion de l'élément à insérer en complexe
3312: */
3313:
3314: ((struct_complexe16 *) (*((struct_vecteur *)
3315: (*s_objet_3).objet)).tableau)[indice_i - 1]
3316: .partie_reelle = (*((real8 *) (*s_objet_1).objet));
3317: ((struct_complexe16 *) (*((struct_vecteur *)
3318: (*s_objet_3).objet)).tableau)[indice_i - 1]
3319: .partie_imaginaire = (real8) 0;
3320: }
3321: else if ((*s_objet_1).type == CPL)
3322: {
3323: /*
3324: * Aucune conversion de type
3325: */
3326:
3327: ((struct_complexe16 *) (*((struct_vecteur *)
3328: (*s_objet_3).objet)).tableau)[indice_i - 1]
3329: .partie_reelle = (*((struct_complexe16 *)
3330: (*s_objet_1).objet)).partie_reelle;
3331: ((struct_complexe16 *) (*((struct_vecteur *)
3332: (*s_objet_3).objet)).tableau)[indice_i - 1]
3333: .partie_imaginaire = (*((struct_complexe16 *)
3334: (*s_objet_1).objet)).partie_imaginaire;
3335: }
3336: else
3337: {
3338: liberation(s_etat_processus, s_objet_1);
3339: liberation(s_etat_processus, s_objet_2);
3340: liberation(s_etat_processus, s_objet_3);
3341:
3342: (*s_etat_processus).erreur_execution =
3343: d_ex_erreur_type_argument;
3344: return;
3345: }
3346: }
3347:
3348: liberation(s_etat_processus, s_objet_1);
3349:
3350: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3351: s_objet_3) == d_erreur)
3352: {
3353: return;
3354: }
3355:
3356: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
3357: (indice_i % (*((struct_vecteur *) (*s_objet_3).objet))
3358: .taille) + 1;
3359:
3360: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3361: s_objet_2) == d_erreur)
3362: {
3363: return;
3364: }
3365: }
3366:
3367: /*
3368: --------------------------------------------------------------------------------
3369: Traitement des éléments des matrices
3370: --------------------------------------------------------------------------------
3371: */
3372:
3373: else if (((*s_objet_3).type == MIN) ||
3374: ((*s_objet_3).type == MRL) ||
3375: ((*s_objet_3).type == MCX))
3376: {
3377: if ((*s_objet_2).type != LST)
3378: {
3379: liberation(s_etat_processus, s_objet_1);
3380: liberation(s_etat_processus, s_objet_2);
3381: liberation(s_etat_processus, s_objet_3);
3382:
3383: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
3384: return;
3385: }
3386:
3387: l_element_courant = (*s_objet_2).objet;
3388: nombre_dimensions = 0;
3389:
3390: while(l_element_courant != NULL)
3391: {
3392: nombre_dimensions++;
3393: l_element_courant = (*l_element_courant).suivant;
3394: }
3395:
3396: if (nombre_dimensions != 2)
3397: {
3398: liberation(s_etat_processus, s_objet_1);
3399: liberation(s_etat_processus, s_objet_2);
3400: liberation(s_etat_processus, s_objet_3);
3401:
3402: (*s_etat_processus).erreur_execution = d_ex_dimensions_invalides;
3403: return;
3404: }
3405:
3406: l_element_courant = (*s_objet_2).objet;
3407:
3408: indice_i = 0;
3409: indice_j = 0;
3410:
3411: while(l_element_courant != NULL)
3412: {
3413: if ((*(*l_element_courant).donnee).type != INT)
3414: {
3415: liberation(s_etat_processus, s_objet_1);
3416: liberation(s_etat_processus, s_objet_2);
3417: liberation(s_etat_processus, s_objet_3);
3418:
3419: (*s_etat_processus).erreur_execution =
3420: d_ex_erreur_type_argument;
3421: return;
3422: }
3423:
3424: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
3425: {
3426: liberation(s_etat_processus, s_objet_1);
3427: liberation(s_etat_processus, s_objet_2);
3428: liberation(s_etat_processus, s_objet_3);
3429:
3430: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
3431: return;
3432: }
3433:
3434: if (indice_i == 0)
3435: {
3436: indice_i = (*((integer8 *)
3437: (*(*l_element_courant).donnee).objet));
3438: }
3439: else
3440: {
3441: indice_j = (*((integer8 *)
3442: (*(*l_element_courant).donnee).objet));
3443: }
3444:
3445: l_element_courant = (*l_element_courant).suivant;
3446: }
3447:
3448: if ((indice_i > (*((struct_matrice *) (*s_objet_3).objet))
3449: .nombre_lignes) || (indice_j > (*((struct_matrice *)
3450: (*s_objet_3).objet)).nombre_colonnes))
3451: {
3452: liberation(s_etat_processus, s_objet_1);
3453: liberation(s_etat_processus, s_objet_2);
3454: liberation(s_etat_processus, s_objet_3);
3455:
3456: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
3457: return;
3458: }
3459:
3460: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'Q')) == NULL)
3461: {
3462: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3463: return;
3464: }
3465:
3466: liberation(s_etat_processus, s_objet_3);
3467: s_objet_3 = s_copie_3;
3468:
3469: if ((*s_objet_3).type == MIN)
3470: {
3471: /*
3472: * Matrice d'entiers
3473: */
3474:
3475: if ((*s_objet_1).type == INT)
3476: {
3477: /*
3478: * Aucune conversion de type
3479: */
3480:
3481: ((integer8 **) (*((struct_matrice *) (*s_objet_3).objet))
3482: .tableau)[indice_i - 1][indice_j - 1] =
3483: (*((integer8 *) (*s_objet_1).objet));
3484: }
3485: else if ((*s_objet_1).type == REL)
3486: {
3487: /*
3488: * Conversion de la matrice en matrice réelle
3489: */
3490:
3491: tampon = (void *) ((integer8 **) (*((struct_matrice *)
3492: (*s_objet_3).objet)).tableau);
3493:
3494: (*((struct_matrice *) (*s_objet_3).objet)).type = 'R';
3495: (*s_objet_3).type = MRL;
3496:
3497: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
3498: = malloc((*((struct_matrice *)
3499: (*s_objet_3).objet)).nombre_lignes * sizeof(real8 *)))
3500: == NULL)
3501: {
3502: (*s_etat_processus).erreur_systeme =
3503: d_es_allocation_memoire;
3504: return;
3505: }
3506:
3507: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
3508: .nombre_lignes; i++)
3509: {
3510: if ((((real8 **) (*((struct_matrice *)
3511: (*s_objet_3).objet)).tableau)[i]
3512: = malloc((*((struct_matrice *)
3513: (*s_objet_3).objet)).nombre_colonnes *
3514: sizeof(real8))) == NULL)
3515: {
3516: (*s_etat_processus).erreur_systeme =
3517: d_es_allocation_memoire;
3518: return;
3519: }
3520:
3521: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
3522: .nombre_colonnes; j++)
3523: {
3524: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
3525: .tableau)[i][j] = (real8) (((integer8 **)
3526: tampon)[i][j]);
3527: }
3528:
3529: free(((integer8 **) tampon)[i]);
3530: }
3531:
3532: free((integer8 **) tampon);
3533:
3534: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
3535: .tableau)[indice_i - 1][indice_j - 1] = (*((real8 *)
3536: (*s_objet_1).objet));
3537: }
3538: else if ((*s_objet_1).type == CPL)
3539: {
3540: /*
3541: * Conversion de la matrice en matrice complexe
3542: */
3543:
3544: tampon = (void *) ((integer8 **) (*((struct_matrice *)
3545: (*s_objet_3).objet)).tableau);
3546:
3547: (*((struct_matrice *) (*s_objet_3).objet)).type = 'C';
3548: (*s_objet_3).type = MCX;
3549:
3550: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
3551: = malloc((*((struct_matrice *)
3552: (*s_objet_3).objet)).nombre_lignes *
3553: sizeof(struct_complexe16 *))) == NULL)
3554: {
3555: (*s_etat_processus).erreur_systeme =
3556: d_es_allocation_memoire;
3557: return;
3558: }
3559:
3560: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
3561: .nombre_lignes; i++)
3562: {
3563: if ((((struct_complexe16 **) (*((struct_matrice *)
3564: (*s_objet_3).objet)).tableau)[i]
3565: = malloc((*((struct_matrice *)
3566: (*s_objet_3).objet)).nombre_colonnes *
3567: sizeof(struct_complexe16))) == NULL)
3568: {
3569: (*s_etat_processus).erreur_systeme =
3570: d_es_allocation_memoire;
3571: return;
3572: }
3573:
3574: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
3575: .nombre_colonnes; j++)
3576: {
3577: ((struct_complexe16 **) (*((struct_matrice *)
3578: (*s_objet_3).objet)).tableau)[i][j]
3579: .partie_reelle = (real8) (((integer8 **)
3580: tampon)[i][j]);
3581: ((struct_complexe16 **) (*((struct_matrice *)
3582: (*s_objet_3).objet)).tableau)[i][j]
3583: .partie_imaginaire = (real8) 0;
3584: }
3585:
3586: free(((integer8 **) tampon)[i]);
3587: }
3588:
3589: free((integer8 **) tampon);
3590:
3591: ((struct_complexe16 **) (*((struct_matrice *)
3592: (*s_objet_3).objet)).tableau)[indice_i - 1]
3593: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
3594: (*s_objet_1).objet)).partie_reelle;
3595: ((struct_complexe16 **) (*((struct_matrice *)
3596: (*s_objet_3).objet)).tableau)[indice_i - 1]
3597: [indice_j - 1].partie_imaginaire =
3598: (*((struct_complexe16 *)
3599: (*s_objet_1).objet)).partie_imaginaire;
3600: }
3601: else
3602: {
3603: liberation(s_etat_processus, s_objet_1);
3604: liberation(s_etat_processus, s_objet_2);
3605: liberation(s_etat_processus, s_objet_3);
3606:
3607: (*s_etat_processus).erreur_execution =
3608: d_ex_erreur_type_argument;
3609: return;
3610: }
3611: }
3612: else if ((*s_objet_3).type == MRL)
3613: {
3614: /*
3615: * Matrice de réels
3616: */
3617:
3618: if ((*s_objet_1).type == INT)
3619: {
3620: /*
3621: * Conversion de l'élément à insérer en réel
3622: */
3623:
3624: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
3625: .tableau)[indice_i - 1][indice_j - 1] =
3626: (real8) (*((integer8 *) (*s_objet_1).objet));
3627: }
3628: else if ((*s_objet_1).type == REL)
3629: {
3630: /*
3631: * Aucune conversion de type
3632: */
3633:
3634: ((real8 **) (*((struct_matrice *) (*s_objet_3).objet))
3635: .tableau)[indice_i - 1][indice_j - 1] = (*((real8 *)
3636: (*s_objet_1).objet));
3637: }
3638: else if ((*s_objet_1).type == CPL)
3639: {
3640: /*
3641: * Conversion de la matrice en matrice complexe
3642: */
3643:
3644: tampon = (void *) ((real8 **) (*((struct_matrice *)
3645: (*s_objet_3).objet)).tableau);
3646:
3647: (*((struct_matrice *) (*s_objet_3).objet)).type = 'C';
3648: (*s_objet_3).type = MCX;
3649:
3650: if (((*((struct_matrice *) (*s_objet_3).objet)).tableau
3651: = malloc((*((struct_matrice *)
3652: (*s_objet_3).objet)).nombre_lignes *
3653: sizeof(struct_complexe16 *))) == NULL)
3654: {
3655: (*s_etat_processus).erreur_systeme =
3656: d_es_allocation_memoire;
3657: return;
3658: }
3659:
3660: for(i = 0; i < (*((struct_matrice *) (*s_objet_3).objet))
3661: .nombre_lignes; i++)
3662: {
3663: if ((((struct_complexe16 **) (*((struct_matrice *)
3664: (*s_objet_3).objet)).tableau)[i]
3665: = malloc((*((struct_matrice *)
3666: (*s_objet_3).objet)).nombre_colonnes *
3667: sizeof(struct_complexe16))) == NULL)
3668: {
3669: (*s_etat_processus).erreur_systeme =
3670: d_es_allocation_memoire;
3671: return;
3672: }
3673:
3674: for(j = 0; j < (*((struct_matrice *) (*s_objet_3).objet))
3675: .nombre_colonnes; j++)
3676: {
3677: ((struct_complexe16 **) (*((struct_matrice *)
3678: (*s_objet_3).objet)).tableau)[i][j]
3679: .partie_reelle = (((real8 **)
3680: tampon)[i][j]);
3681: ((struct_complexe16 **) (*((struct_matrice *)
3682: (*s_objet_3).objet)).tableau)[i][j]
3683: .partie_imaginaire = (real8) 0;
3684: }
3685:
3686: free(((integer8 **) tampon)[i]);
3687: }
3688:
3689: free((integer8 **) tampon);
3690:
3691: ((struct_complexe16 **) (*((struct_matrice *)
3692: (*s_objet_3).objet)).tableau)[indice_i - 1]
3693: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
3694: (*s_objet_1).objet)).partie_reelle;
3695: ((struct_complexe16 **) (*((struct_matrice *)
3696: (*s_objet_3).objet)).tableau)[indice_i - 1]
3697: [indice_j - 1].partie_imaginaire =
3698: (*((struct_complexe16 *)
3699: (*s_objet_1).objet)).partie_imaginaire;
3700: }
3701: else
3702: {
3703: liberation(s_etat_processus, s_objet_1);
3704: liberation(s_etat_processus, s_objet_2);
3705: liberation(s_etat_processus, s_objet_3);
3706:
3707: (*s_etat_processus).erreur_execution =
3708: d_ex_erreur_type_argument;
3709: return;
3710: }
3711: }
3712: else
3713: {
3714: /*
3715: * Matrice de complexes
3716: */
3717:
3718: if ((*s_objet_1).type == INT)
3719: {
3720: /*
3721: * Conversion de l'élément à insérer en complexe
3722: */
3723:
3724: ((struct_complexe16 **) (*((struct_matrice *)
3725: (*s_objet_3).objet)).tableau)[indice_i - 1]
3726: [indice_j - 1].partie_reelle = (real8) (*((integer8 *)
3727: (*s_objet_1).objet));
3728: ((struct_complexe16 **) (*((struct_matrice *)
3729: (*s_objet_3).objet)).tableau)[indice_i - 1]
3730: [indice_j - 1].partie_imaginaire = (real8) 0;
3731: }
3732: else if ((*s_objet_1).type == REL)
3733: {
3734: /*
3735: * Conversion de l'élément à insérer en complexe
3736: */
3737:
3738: ((struct_complexe16 **) (*((struct_matrice *)
3739: (*s_objet_3).objet)).tableau)[indice_i - 1]
3740: [indice_j - 1].partie_reelle =
3741: (*((real8 *) (*s_objet_1).objet));
3742: ((struct_complexe16 **) (*((struct_matrice *)
3743: (*s_objet_3).objet)).tableau)[indice_i - 1]
3744: [indice_j - 1].partie_imaginaire = (real8) 0;
3745: }
3746: else if ((*s_objet_1).type == CPL)
3747: {
3748: /*
3749: * Aucune conversion de type
3750: */
3751:
3752: ((struct_complexe16 **) (*((struct_matrice *)
3753: (*s_objet_3).objet)).tableau)[indice_i - 1]
3754: [indice_j - 1].partie_reelle = (*((struct_complexe16 *)
3755: (*s_objet_1).objet)).partie_reelle;
3756: ((struct_complexe16 **) (*((struct_matrice *)
3757: (*s_objet_3).objet)).tableau)[indice_i - 1]
3758: [indice_j - 1].partie_imaginaire =
3759: (*((struct_complexe16 *)
3760: (*s_objet_1).objet)).partie_imaginaire;
3761: }
3762: else
3763: {
3764: liberation(s_etat_processus, s_objet_1);
3765: liberation(s_etat_processus, s_objet_2);
3766: liberation(s_etat_processus, s_objet_3);
3767:
3768: (*s_etat_processus).erreur_execution =
3769: d_ex_erreur_type_argument;
3770: return;
3771: }
3772: }
3773:
3774: liberation(s_etat_processus, s_objet_1);
3775:
3776: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3777: s_objet_3) == d_erreur)
3778: {
3779: return;
3780: }
3781:
3782: if ((++(*((integer8 *) (*(*(*((struct_liste_chainee *)
3783: (*s_objet_2).objet)).suivant).donnee).objet))) > (integer8)
3784: (*((struct_matrice *) (*s_objet_3).objet)).nombre_colonnes)
3785: {
3786: (*((integer8 *) (*(*(*((struct_liste_chainee *) (*s_objet_2)
3787: .objet)).suivant).donnee).objet)) = 1;
3788:
3789: if ((++(*((integer8 *) (*(*((struct_liste_chainee *)
3790: (*s_objet_2).objet)).donnee).objet))) > (integer8)
3791: (*((struct_matrice *) (*s_objet_3).objet)).nombre_lignes)
3792: {
3793: (*((integer8 *) (*(*((struct_liste_chainee *)
3794: (*s_objet_2).objet)).donnee).objet)) = 1;
3795: }
3796: }
3797:
3798: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3799: s_objet_2) == d_erreur)
3800: {
3801: return;
3802: }
3803: }
3804:
3805: /*
3806: --------------------------------------------------------------------------------
3807: Traitement des éléments des listes
3808: --------------------------------------------------------------------------------
3809: */
3810:
3811: else if ((*s_objet_3).type == LST)
3812: {
3813: if ((*s_objet_2).type != INT)
3814: {
3815: liberation(s_etat_processus, s_objet_1);
3816: liberation(s_etat_processus, s_objet_2);
3817: liberation(s_etat_processus, s_objet_3);
3818:
3819: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
3820: return;
3821: }
3822:
3823: indice_i = (*((integer8 *) (*s_objet_2).objet));
3824: indice_j = 1;
3825:
3826: if ((*s_objet_3).nombre_occurrences > 1)
3827: {
3828: if ((s_copie_3 = copie_objet(s_etat_processus, s_objet_3, 'N'))
3829: == NULL)
3830: {
3831: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3832: return;
3833: }
3834:
3835: liberation(s_etat_processus, s_objet_3);
3836: s_objet_3 = s_copie_3;
3837: }
3838:
3839: l_element_courant = (*s_objet_3).objet;
3840: nombre_elements = 0;
3841:
3842: while(l_element_courant != NULL)
3843: {
3844: l_element_courant = (*l_element_courant).suivant;
3845: nombre_elements++;
3846: }
3847:
3848: l_element_courant = (*s_objet_3).objet;
3849:
3850: while((l_element_courant != NULL) && (indice_j != indice_i))
3851: {
3852: l_element_courant = (*l_element_courant).suivant;
3853: indice_j++;
3854: }
3855:
3856: if (l_element_courant != NULL)
3857: {
3858: liberation(s_etat_processus, (*l_element_courant).donnee);
3859: (*l_element_courant).donnee = s_objet_1;
3860: }
3861: else
3862: {
3863: liberation(s_etat_processus, s_objet_1);
3864: liberation(s_etat_processus, s_objet_2);
3865: liberation(s_etat_processus, s_objet_3);
3866:
3867: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
3868: return;
3869: }
3870:
3871: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3872: s_objet_3) == d_erreur)
3873: {
3874: return;
3875: }
3876:
3877: (*((integer8 *) (*s_objet_2).objet)) =
3878: (indice_i % nombre_elements) + 1;
3879:
3880: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
3881: s_objet_2) == d_erreur)
3882: {
3883: return;
3884: }
3885: }
3886:
3887: /*
3888: --------------------------------------------------------------------------------
3889: Traitement des noms
3890: --------------------------------------------------------------------------------
3891: */
3892:
3893: else if ((*s_objet_3).type == NOM)
3894: {
3895: variable_partagee = d_faux;
3896:
3897: if (recherche_variable(s_etat_processus, (*((struct_nom *)
3898: (*s_objet_3).objet)).nom) == d_faux)
3899: {
3900: (*s_etat_processus).erreur_systeme = d_es;
3901: (*s_etat_processus).erreur_execution = d_ex_variable_non_definie;
3902:
3903: liberation(s_etat_processus, s_objet_1);
3904: liberation(s_etat_processus, s_objet_2);
3905: liberation(s_etat_processus, s_objet_3);
3906:
3907: return;
3908: }
3909:
3910: if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)
3911: .position_variable_courante].variable_verrouillee == d_vrai)
3912: {
3913: (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee;
3914:
3915: liberation(s_etat_processus, s_objet_1);
3916: liberation(s_etat_processus, s_objet_2);
3917: liberation(s_etat_processus, s_objet_3);
3918:
3919: return;
3920: }
3921:
3922: s_objet_4 = (*s_etat_processus).s_liste_variables[(*s_etat_processus)
3923: .position_variable_courante].objet;
3924:
3925: if (s_objet_4 == NULL)
3926: {
3927: if (pthread_mutex_lock(&((*(*s_etat_processus)
3928: .s_liste_variables_partagees).mutex)) != 0)
3929: {
3930: (*s_etat_processus).erreur_systeme = d_es_processus;
3931: return;
3932: }
3933:
3934: if (recherche_variable_partagee(s_etat_processus,
3935: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
3936: .position_variable_courante].nom,
3937: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
3938: .position_variable_courante].variable_partagee,
3939: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
3940: .position_variable_courante].origine) == d_faux)
3941: {
3942: if (pthread_mutex_unlock(&((*(*s_etat_processus)
3943: .s_liste_variables_partagees).mutex)) != 0)
3944: {
3945: (*s_etat_processus).erreur_systeme = d_es_processus;
3946: return;
3947: }
3948:
3949: (*s_etat_processus).erreur_systeme = d_es;
3950: (*s_etat_processus).erreur_execution =
3951: d_ex_variable_non_definie;
3952:
3953: liberation(s_etat_processus, s_objet_1);
3954: liberation(s_etat_processus, s_objet_2);
3955: liberation(s_etat_processus, s_objet_3);
3956:
3957: return;
3958: }
3959:
3960: s_objet_4 = (*(*s_etat_processus).s_liste_variables_partagees)
3961: .table[(*(*s_etat_processus).s_liste_variables_partagees)
3962: .position_variable].objet;
3963: variable_partagee = d_vrai;
3964: }
3965:
3966: if (((*s_objet_4).type == VIN) ||
3967: ((*s_objet_4).type == VRL) ||
3968: ((*s_objet_4).type == VCX))
3969: {
3970: if ((*s_objet_2).type != LST)
3971: {
3972: if (variable_partagee == d_vrai)
3973: {
3974: if (pthread_mutex_unlock(&((*(*s_etat_processus)
3975: .s_liste_variables_partagees).mutex)) != 0)
3976: {
3977: (*s_etat_processus).erreur_systeme = d_es_processus;
3978: return;
3979: }
3980: }
3981:
3982: liberation(s_etat_processus, s_objet_1);
3983: liberation(s_etat_processus, s_objet_2);
3984: liberation(s_etat_processus, s_objet_3);
3985:
3986: (*s_etat_processus).erreur_execution =
3987: d_ex_erreur_type_argument;
3988: return;
3989: }
3990:
3991: l_element_courant = (*s_objet_2).objet;
3992: nombre_dimensions = 0;
3993:
3994: while(l_element_courant != NULL)
3995: {
3996: nombre_dimensions++;
3997: l_element_courant = (*l_element_courant).suivant;
3998: }
3999:
4000: if (nombre_dimensions != 1)
4001: {
4002: if (variable_partagee == d_vrai)
4003: {
4004: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4005: .s_liste_variables_partagees).mutex)) != 0)
4006: {
4007: (*s_etat_processus).erreur_systeme = d_es_processus;
4008: return;
4009: }
4010: }
4011:
4012: liberation(s_etat_processus, s_objet_1);
4013: liberation(s_etat_processus, s_objet_2);
4014: liberation(s_etat_processus, s_objet_3);
4015:
4016: (*s_etat_processus).erreur_execution =
4017: d_ex_dimensions_invalides;
4018: return;
4019: }
4020:
4021: l_element_courant = (*s_objet_2).objet;
4022:
4023: if ((*(*l_element_courant).donnee).type != INT)
4024: {
4025: if (variable_partagee == d_vrai)
4026: {
4027: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4028: .s_liste_variables_partagees).mutex)) != 0)
4029: {
4030: (*s_etat_processus).erreur_systeme = d_es_processus;
4031: return;
4032: }
4033: }
4034:
4035: liberation(s_etat_processus, s_objet_1);
4036: liberation(s_etat_processus, s_objet_2);
4037: liberation(s_etat_processus, s_objet_3);
4038:
4039: (*s_etat_processus).erreur_execution =
4040: d_ex_erreur_type_argument;
4041: return;
4042: }
4043:
4044: if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) <= 0)
4045: {
4046: if (variable_partagee == d_vrai)
4047: {
4048: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4049: .s_liste_variables_partagees).mutex)) != 0)
4050: {
4051: (*s_etat_processus).erreur_systeme = d_es_processus;
4052: return;
4053: }
4054: }
4055:
4056: liberation(s_etat_processus, s_objet_1);
4057: liberation(s_etat_processus, s_objet_2);
4058: liberation(s_etat_processus, s_objet_3);
4059:
4060: (*s_etat_processus).erreur_execution = d_ex_argument_invalide;
4061: return;
4062: }
4063: else if ((*((integer8 *) (*(*l_element_courant).donnee).objet)) >
4064: (integer8) (*((struct_vecteur *) (*s_objet_4).objet))
4065: .taille)
4066: {
4067: if (variable_partagee == d_vrai)
4068: {
4069: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4070: .s_liste_variables_partagees).mutex)) != 0)
4071: {
4072: (*s_etat_processus).erreur_systeme = d_es_processus;
4073: return;
4074: }
4075: }
4076:
4077: liberation(s_etat_processus, s_objet_1);
4078: liberation(s_etat_processus, s_objet_2);
4079: liberation(s_etat_processus, s_objet_3);
4080:
4081: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
4082: return;
4083: }
4084:
4085: indice_i = (*((integer8 *) (*(*l_element_courant).donnee).objet));
4086:
4087: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'Q'))
4088: == NULL)
4089: {
4090: if (variable_partagee == d_vrai)
4091: {
4092: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4093: .s_liste_variables_partagees).mutex)) != 0)
4094: {
4095: (*s_etat_processus).erreur_systeme = d_es_processus;
4096: return;
4097: }
4098: }
4099:
4100: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4101: return;
4102: }
4103:
4104: liberation(s_etat_processus, s_objet_4);
4105: s_objet_4 = s_copie_4;
4106:
4107: if ((*s_objet_4).type == VIN)
4108: {
4109: /*
4110: * Vecteur d'entiers
4111: */
4112:
4113: if ((*s_objet_1).type == INT)
4114: {
4115: /*
4116: * Aucune conversion de type
4117: */
4118:
4119: ((integer8 *) (*((struct_vecteur *) (*s_objet_4).objet))
4120: .tableau)[indice_i - 1] = (*((integer8 *)
4121: (*s_objet_1).objet));
4122: }
4123: else if ((*s_objet_1).type == REL)
4124: {
4125: /*
4126: * Conversion du vecteur en vecteur réel
4127: */
4128:
4129: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
4130: (*s_objet_4).objet)).tableau);
4131:
4132: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'R';
4133: (*s_objet_4).type = VRL;
4134:
4135: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
4136: = malloc((*((struct_vecteur *)
4137: (*s_objet_4).objet)).taille * sizeof(real8)))
4138: == NULL)
4139: {
4140: if (variable_partagee == d_vrai)
4141: {
4142: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4143: .s_liste_variables_partagees).mutex)) != 0)
4144: {
4145: (*s_etat_processus).erreur_systeme =
4146: d_es_processus;
4147: return;
4148: }
4149: }
4150:
4151: (*s_etat_processus).erreur_systeme =
4152: d_es_allocation_memoire;
4153: return;
4154: }
4155:
4156: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
4157: .taille; i++)
4158: {
4159: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
4160: .tableau)[i] = (real8) (((integer8 *)
4161: tampon)[i]);
4162: }
4163:
4164: free((integer8 *) tampon);
4165:
4166: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
4167: .tableau)[indice_i - 1] = (*((real8 *)
4168: (*s_objet_1).objet));
4169: }
4170: else if ((*s_objet_1).type == CPL)
4171: {
4172: /*
4173: * Conversion du vecteur en vecteur complexe
4174: */
4175:
4176: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
4177: (*s_objet_4).objet)).tableau);
4178:
4179: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'C';
4180: (*s_objet_4).type = VCX;
4181:
4182: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
4183: = malloc((*((struct_vecteur *)
4184: (*s_objet_4).objet)).taille *
4185: sizeof(struct_complexe16))) == NULL)
4186: {
4187: if (variable_partagee == d_vrai)
4188: {
4189: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4190: .s_liste_variables_partagees).mutex)) != 0)
4191: {
4192: (*s_etat_processus).erreur_systeme =
4193: d_es_processus;
4194: return;
4195: }
4196: }
4197:
4198: (*s_etat_processus).erreur_systeme =
4199: d_es_allocation_memoire;
4200: return;
4201: }
4202:
4203: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
4204: .taille; i++)
4205: {
4206: ((struct_complexe16 *) (*((struct_vecteur *)
4207: (*s_objet_4).objet)).tableau)[i].partie_reelle =
4208: (real8) (((integer8 *) tampon)[i]);
4209: ((struct_complexe16 *) (*((struct_vecteur *)
4210: (*s_objet_4).objet)).tableau)[i]
4211: .partie_imaginaire = (real8) 0;
4212: }
4213:
4214: free((integer8 *) tampon);
4215:
4216: ((struct_complexe16 *) (*((struct_vecteur *)
4217: (*s_objet_4).objet)).tableau)[indice_i - 1]
4218: .partie_reelle = (*((struct_complexe16 *)
4219: (*s_objet_1).objet)).partie_reelle;
4220: ((struct_complexe16 *) (*((struct_vecteur *)
4221: (*s_objet_4).objet)).tableau)[indice_i - 1]
4222: .partie_imaginaire = (*((struct_complexe16 *)
4223: (*s_objet_1).objet)).partie_imaginaire;
4224: }
4225: else
4226: {
4227: if (variable_partagee == d_vrai)
4228: {
4229: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4230: .s_liste_variables_partagees).mutex)) != 0)
4231: {
4232: (*s_etat_processus).erreur_systeme =
4233: d_es_processus;
4234: return;
4235: }
4236: }
4237:
4238: liberation(s_etat_processus, s_objet_1);
4239: liberation(s_etat_processus, s_objet_2);
4240: liberation(s_etat_processus, s_objet_3);
4241:
4242: (*s_etat_processus).erreur_execution =
4243: d_ex_erreur_type_argument;
4244: return;
4245: }
4246: }
4247: else if ((*s_objet_4).type == VRL)
4248: {
4249: /*
4250: * Vecteur de réels
4251: */
4252:
4253: if ((*s_objet_1).type == INT)
4254: {
4255: /*
4256: * Conversion de l'élément à insérer en réel
4257: */
4258:
4259: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
4260: .tableau)[indice_i - 1] = (real8) (*((integer8 *)
4261: (*s_objet_1).objet));
4262: }
4263: else if ((*s_objet_1).type == REL)
4264: {
4265: /*
4266: * Aucune conversion de type
4267: */
4268:
4269: ((real8 *) (*((struct_vecteur *) (*s_objet_4).objet))
4270: .tableau)[indice_i - 1] = (*((real8 *)
4271: (*s_objet_1).objet));
4272: }
4273: else if ((*s_objet_1).type == CPL)
4274: {
4275: /*
4276: * Conversion du vecteur en vecteur complexe
4277: */
4278:
4279: tampon = (void *) ((integer8 *) (*((struct_vecteur *)
4280: (*s_objet_4).objet)).tableau);
4281:
4282: (*((struct_vecteur *) (*s_objet_4).objet)).type = 'C';
4283: (*s_objet_4).type = VCX;
4284:
4285: if (((*((struct_vecteur *) (*s_objet_4).objet)).tableau
4286: = malloc((*((struct_vecteur *)
4287: (*s_objet_4).objet)).taille *
4288: sizeof(struct_complexe16))) == NULL)
4289: {
4290: if (variable_partagee == d_vrai)
4291: {
4292: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4293: .s_liste_variables_partagees).mutex)) != 0)
4294: {
4295: (*s_etat_processus).erreur_systeme =
4296: d_es_processus;
4297: return;
4298: }
4299: }
4300:
4301: (*s_etat_processus).erreur_systeme =
4302: d_es_allocation_memoire;
4303: return;
4304: }
4305:
4306: for(i = 0; i < (*((struct_vecteur *) (*s_objet_4).objet))
4307: .taille; i++)
4308: {
4309: ((struct_complexe16 *) (*((struct_vecteur *)
4310: (*s_objet_4).objet)).tableau)[i].partie_reelle =
4311: ((real8 *) tampon)[i];
4312: ((struct_complexe16 *) (*((struct_vecteur *)
4313: (*s_objet_4).objet)).tableau)[i]
4314: .partie_imaginaire = (real8) 0;
4315: }
4316:
4317: free((real8 *) tampon);
4318:
4319: ((struct_complexe16 *) (*((struct_vecteur *)
4320: (*s_objet_4).objet)).tableau)[indice_i - 1]
4321: .partie_reelle = (*((struct_complexe16 *)
4322: (*s_objet_1).objet)).partie_reelle;
4323: ((struct_complexe16 *) (*((struct_vecteur *)
4324: (*s_objet_4).objet)).tableau)[indice_i - 1]
4325: .partie_imaginaire = (*((struct_complexe16 *)
4326: (*s_objet_1).objet)).partie_imaginaire;
4327: }
4328: else
4329: {
4330: if (variable_partagee == d_vrai)
4331: {
4332: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4333: .s_liste_variables_partagees).mutex)) != 0)
4334: {
4335: (*s_etat_processus).erreur_systeme =
4336: d_es_processus;
4337: return;
4338: }
4339: }
4340:
4341: liberation(s_etat_processus, s_objet_1);
4342: liberation(s_etat_processus, s_objet_2);
4343: liberation(s_etat_processus, s_objet_3);
4344:
4345: (*s_etat_processus).erreur_execution =
4346: d_ex_erreur_type_argument;
4347: return;
4348: }
4349: }
4350: else
4351: {
4352: /*
4353: * Vecteur de complexes
4354: */
4355:
4356: if ((*s_objet_1).type == INT)
4357: {
4358: /*
4359: * Conversion de l'élément à insérer en complexe
4360: */
4361:
4362: ((struct_complexe16 *) (*((struct_vecteur *)
4363: (*s_objet_4).objet)).tableau)[indice_i - 1]
4364: .partie_reelle = (real8) (*((integer8 *)
4365: (*s_objet_1).objet));
4366: ((struct_complexe16 *) (*((struct_vecteur *)
4367: (*s_objet_4).objet)).tableau)[indice_i - 1]
4368: .partie_imaginaire = (real8) 0;
4369: }
4370: else if ((*s_objet_1).type == REL)
4371: {
4372: /*
4373: * Conversion de l'élément à insérer en complexe
4374: */
4375:
4376: ((struct_complexe16 *) (*((struct_vecteur *)
4377: (*s_objet_4).objet)).tableau)[indice_i - 1]
4378: .partie_reelle = (*((real8 *) (*s_objet_1).objet));
4379: ((struct_complexe16 *) (*((struct_vecteur *)
4380: (*s_objet_4).objet)).tableau)[indice_i - 1]
4381: .partie_imaginaire = (real8) 0;
4382: }
4383: else if ((*s_objet_1).type == CPL)
4384: {
4385: /*
4386: * Aucune conversion de type
4387: */
4388:
4389: ((struct_complexe16 *) (*((struct_vecteur *)
4390: (*s_objet_4).objet)).tableau)[indice_i - 1]
4391: .partie_reelle = (*((struct_complexe16 *)
4392: (*s_objet_1).objet)).partie_reelle;
4393: ((struct_complexe16 *) (*((struct_vecteur *)
4394: (*s_objet_4).objet)).tableau)[indice_i - 1]
4395: .partie_imaginaire = (*((struct_complexe16 *)
4396: (*s_objet_1).objet)).partie_imaginaire;
4397: }
4398: else
4399: {
4400: if (variable_partagee == d_vrai)
4401: {
4402: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4403: .s_liste_variables_partagees).mutex)) != 0)
4404: {
4405: (*s_etat_processus).erreur_systeme =
4406: d_es_processus;
4407: return;
4408: }
4409: }
4410:
4411: liberation(s_etat_processus, s_objet_1);
4412: liberation(s_etat_processus, s_objet_2);
4413: liberation(s_etat_processus, s_objet_3);
4414:
4415: (*s_etat_processus).erreur_execution =
4416: d_ex_erreur_type_argument;
4417: return;
4418: }
4419: }
4420:
4421: (*((integer8 *) (*(*l_element_courant).donnee).objet)) =
4422: (indice_i % (*((struct_vecteur *) (*s_objet_4).objet))
4423: .taille) + 1;
4424:
4425: if (variable_partagee == d_faux)
4426: {
4427: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
4428: .position_variable_courante].objet = s_objet_4;
4429: }
4430: else
4431: {
4432: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
4433: .position_variable_courante].objet = NULL;
4434: (*(*s_etat_processus).s_liste_variables_partagees)
4435: .table[(*(*s_etat_processus)
4436: .s_liste_variables_partagees).position_variable].objet
4437: = s_objet_4;
4438:
4439: if (variable_partagee == d_vrai)
4440: {
4441: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4442: .s_liste_variables_partagees).mutex)) != 0)
4443: {
4444: (*s_etat_processus).erreur_systeme = d_es_processus;
4445: return;
4446: }
4447: }
4448: }
4449:
4450: liberation(s_etat_processus, s_objet_1);
4451: }
4452: else if (((*s_objet_4).type == MIN) ||
4453: ((*s_objet_4).type == MRL) ||
4454: ((*s_objet_4).type == MCX))
4455: {
4456: if ((*s_objet_2).type != LST)
4457: {
4458: if (variable_partagee == d_vrai)
4459: {
4460: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4461: .s_liste_variables_partagees).mutex)) != 0)
4462: {
4463: (*s_etat_processus).erreur_systeme = d_es_processus;
4464: return;
4465: }
4466: }
4467:
4468: liberation(s_etat_processus, s_objet_1);
4469: liberation(s_etat_processus, s_objet_2);
4470: liberation(s_etat_processus, s_objet_3);
4471:
4472: (*s_etat_processus).erreur_execution =
4473: d_ex_erreur_type_argument;
4474: return;
4475: }
4476:
4477: l_element_courant = (*s_objet_2).objet;
4478: nombre_dimensions = 0;
4479:
4480: while(l_element_courant != NULL)
4481: {
4482: nombre_dimensions++;
4483: l_element_courant = (*l_element_courant).suivant;
4484: }
4485:
4486: if (nombre_dimensions != 2)
4487: {
4488: if (variable_partagee == d_vrai)
4489: {
4490: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4491: .s_liste_variables_partagees).mutex)) != 0)
4492: {
4493: (*s_etat_processus).erreur_systeme = d_es_processus;
4494: return;
4495: }
4496: }
4497:
4498: liberation(s_etat_processus, s_objet_1);
4499: liberation(s_etat_processus, s_objet_2);
4500: liberation(s_etat_processus, s_objet_3);
4501:
4502: (*s_etat_processus).erreur_execution =
4503: d_ex_dimensions_invalides;
4504: return;
4505: }
4506:
4507: l_element_courant = (*s_objet_2).objet;
4508:
4509: indice_i = 0;
4510: indice_j = 0;
4511:
4512: while(l_element_courant != NULL)
4513: {
4514: if ((*(*l_element_courant).donnee).type != INT)
4515: {
4516: if (variable_partagee == d_vrai)
4517: {
4518: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4519: .s_liste_variables_partagees).mutex)) != 0)
4520: {
4521: (*s_etat_processus).erreur_systeme = d_es_processus;
4522: return;
4523: }
4524: }
4525:
4526: liberation(s_etat_processus, s_objet_1);
4527: liberation(s_etat_processus, s_objet_2);
4528: liberation(s_etat_processus, s_objet_3);
4529:
4530: (*s_etat_processus).erreur_execution =
4531: d_ex_erreur_type_argument;
4532: return;
4533: }
4534:
4535: if ((*((integer8 *) (*(*l_element_courant).donnee).objet))
4536: <= 0)
4537: {
4538: if (variable_partagee == d_vrai)
4539: {
4540: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4541: .s_liste_variables_partagees).mutex)) != 0)
4542: {
4543: (*s_etat_processus).erreur_systeme = d_es_processus;
4544: return;
4545: }
4546: }
4547:
4548: liberation(s_etat_processus, s_objet_1);
4549: liberation(s_etat_processus, s_objet_2);
4550: liberation(s_etat_processus, s_objet_3);
4551:
4552: (*s_etat_processus).erreur_execution =
4553: d_ex_argument_invalide;
4554: return;
4555: }
4556:
4557: if (indice_i == 0)
4558: {
4559: indice_i = (*((integer8 *)
4560: (*(*l_element_courant).donnee).objet));
4561: }
4562: else
4563: {
4564: indice_j = (*((integer8 *)
4565: (*(*l_element_courant).donnee).objet));
4566: }
4567:
4568: l_element_courant = (*l_element_courant).suivant;
4569: }
4570:
4571: if ((indice_i > (*((struct_matrice *) (*s_objet_4).objet))
4572: .nombre_lignes) || (indice_j > (*((struct_matrice *)
4573: (*s_objet_4).objet)).nombre_colonnes))
4574: {
4575: if (variable_partagee == d_vrai)
4576: {
4577: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4578: .s_liste_variables_partagees).mutex)) != 0)
4579: {
4580: (*s_etat_processus).erreur_systeme = d_es_processus;
4581: return;
4582: }
4583: }
4584:
4585: liberation(s_etat_processus, s_objet_1);
4586: liberation(s_etat_processus, s_objet_2);
4587: liberation(s_etat_processus, s_objet_3);
4588:
4589: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
4590: return;
4591: }
4592:
4593: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'Q'))
4594: == NULL)
4595: {
4596: if (variable_partagee == d_vrai)
4597: {
4598: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4599: .s_liste_variables_partagees).mutex)) != 0)
4600: {
4601: (*s_etat_processus).erreur_systeme = d_es_processus;
4602: return;
4603: }
4604: }
4605:
4606: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
4607: return;
4608: }
4609:
4610: liberation(s_etat_processus, s_objet_4);
4611: s_objet_4 = s_copie_4;
4612:
4613: if ((*s_objet_4).type == MIN)
4614: {
4615: /*
4616: * Matrice d'entiers
4617: */
4618:
4619: if ((*s_objet_1).type == INT)
4620: {
4621: /*
4622: * Aucune conversion de type
4623: */
4624:
4625: ((integer8 **) (*((struct_matrice *) (*s_objet_4).objet))
4626: .tableau)[indice_i - 1][indice_j - 1] =
4627: (*((integer8 *) (*s_objet_1).objet));
4628: }
4629: else if ((*s_objet_1).type == REL)
4630: {
4631: /*
4632: * Conversion de la matrice en matrice réelle
4633: */
4634:
4635: tampon = (void *) ((integer8 **) (*((struct_matrice *)
4636: (*s_objet_4).objet)).tableau);
4637:
4638: (*((struct_matrice *) (*s_objet_4).objet)).type = 'R';
4639: (*s_objet_4).type = MRL;
4640:
4641: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
4642: = malloc((*((struct_matrice *)
4643: (*s_objet_4).objet)).nombre_lignes *
4644: sizeof(real8 *))) == NULL)
4645: {
4646: if (variable_partagee == d_vrai)
4647: {
4648: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4649: .s_liste_variables_partagees).mutex)) != 0)
4650: {
4651: (*s_etat_processus).erreur_systeme =
4652: d_es_processus;
4653: return;
4654: }
4655: }
4656:
4657: (*s_etat_processus).erreur_systeme =
4658: d_es_allocation_memoire;
4659: return;
4660: }
4661:
4662: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
4663: .nombre_lignes; i++)
4664: {
4665: if ((((real8 **) (*((struct_matrice *)
4666: (*s_objet_4).objet)).tableau)[i]
4667: = malloc((*((struct_matrice *)
4668: (*s_objet_4).objet)).nombre_colonnes *
4669: sizeof(real8))) == NULL)
4670: {
4671: if (variable_partagee == d_vrai)
4672: {
4673: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4674: .s_liste_variables_partagees).mutex))
4675: != 0)
4676: {
4677: (*s_etat_processus).erreur_systeme =
4678: d_es_processus;
4679: return;
4680: }
4681: }
4682:
4683: (*s_etat_processus).erreur_systeme =
4684: d_es_allocation_memoire;
4685: return;
4686: }
4687:
4688: for(j = 0; j < (*((struct_matrice *)
4689: (*s_objet_4).objet)).nombre_colonnes; j++)
4690: {
4691: ((real8 **) (*((struct_matrice *) (*s_objet_4)
4692: .objet)).tableau)[i][j] = (real8)
4693: (((integer8 **) tampon)[i][j]);
4694: }
4695:
4696: free(((integer8 **) tampon)[i]);
4697: }
4698:
4699: free((integer8 **) tampon);
4700:
4701: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
4702: .tableau)[indice_i - 1][indice_j - 1] =
4703: (*((real8 *) (*s_objet_1).objet));
4704: }
4705: else if ((*s_objet_1).type == CPL)
4706: {
4707: /*
4708: * Conversion de la matrice en matrice complexe
4709: */
4710:
4711: tampon = (void *) ((integer8 **) (*((struct_matrice *)
4712: (*s_objet_4).objet)).tableau);
4713:
4714: (*((struct_matrice *) (*s_objet_4).objet)).type = 'C';
4715: (*s_objet_4).type = MCX;
4716:
4717: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
4718: = malloc((*((struct_matrice *)
4719: (*s_objet_4).objet)).nombre_lignes *
4720: sizeof(struct_complexe16 *))) == NULL)
4721: {
4722: if (variable_partagee == d_vrai)
4723: {
4724: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4725: .s_liste_variables_partagees).mutex)) != 0)
4726: {
4727: (*s_etat_processus).erreur_systeme =
4728: d_es_processus;
4729: return;
4730: }
4731: }
4732:
4733: (*s_etat_processus).erreur_systeme =
4734: d_es_allocation_memoire;
4735: return;
4736: }
4737:
4738: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
4739: .nombre_lignes; i++)
4740: {
4741: if ((((struct_complexe16 **) (*((struct_matrice *)
4742: (*s_objet_4).objet)).tableau)[i]
4743: = malloc((*((struct_matrice *)
4744: (*s_objet_4).objet)).nombre_colonnes *
4745: sizeof(struct_complexe16))) == NULL)
4746: {
4747: if (variable_partagee == d_vrai)
4748: {
4749: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4750: .s_liste_variables_partagees).mutex))
4751: != 0)
4752: {
4753: (*s_etat_processus).erreur_systeme =
4754: d_es_processus;
4755: return;
4756: }
4757: }
4758:
4759: (*s_etat_processus).erreur_systeme =
4760: d_es_allocation_memoire;
4761: return;
4762: }
4763:
4764: for(j = 0; j < (*((struct_matrice *)
4765: (*s_objet_4).objet)).nombre_colonnes; j++)
4766: {
4767: ((struct_complexe16 **) (*((struct_matrice *)
4768: (*s_objet_4).objet)).tableau)[i][j]
4769: .partie_reelle = (real8) (((integer8 **)
4770: tampon)[i][j]);
4771: ((struct_complexe16 **) (*((struct_matrice *)
4772: (*s_objet_4).objet)).tableau)[i][j]
4773: .partie_imaginaire = (real8) 0;
4774: }
4775:
4776: free(((integer8 **) tampon)[i]);
4777: }
4778:
4779: free((integer8 **) tampon);
4780:
4781: ((struct_complexe16 **) (*((struct_matrice *)
4782: (*s_objet_4).objet)).tableau)[indice_i - 1]
4783: [indice_j - 1].partie_reelle =
4784: (*((struct_complexe16 *)
4785: (*s_objet_1).objet)).partie_reelle;
4786: ((struct_complexe16 **) (*((struct_matrice *)
4787: (*s_objet_4).objet)).tableau)[indice_i - 1]
4788: [indice_j - 1].partie_imaginaire =
4789: (*((struct_complexe16 *)
4790: (*s_objet_1).objet)).partie_imaginaire;
4791: }
4792: else
4793: {
4794: if (variable_partagee == d_vrai)
4795: {
4796: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4797: .s_liste_variables_partagees).mutex)) != 0)
4798: {
4799: (*s_etat_processus).erreur_systeme =
4800: d_es_processus;
4801: return;
4802: }
4803: }
4804:
4805: liberation(s_etat_processus, s_objet_1);
4806: liberation(s_etat_processus, s_objet_2);
4807: liberation(s_etat_processus, s_objet_3);
4808:
4809: (*s_etat_processus).erreur_execution =
4810: d_ex_erreur_type_argument;
4811: return;
4812: }
4813: }
4814: else if ((*s_objet_4).type == MRL)
4815: {
4816: /*
4817: * Matrice de réels
4818: */
4819:
4820: if ((*s_objet_1).type == INT)
4821: {
4822: /*
4823: * Conversion de l'élément à insérer en réel
4824: */
4825:
4826: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
4827: .tableau)[indice_i - 1][indice_j - 1] =
4828: (real8) (*((integer8 *) (*s_objet_1).objet));
4829: }
4830: else if ((*s_objet_1).type == REL)
4831: {
4832: /*
4833: * Aucune conversion de type
4834: */
4835:
4836: ((real8 **) (*((struct_matrice *) (*s_objet_4).objet))
4837: .tableau)[indice_i - 1][indice_j - 1] =
4838: (*((real8 *) (*s_objet_1).objet));
4839: }
4840: else if ((*s_objet_1).type == CPL)
4841: {
4842: /*
4843: * Conversion de la matrice en matrice complexe
4844: */
4845:
4846: tampon = (void *) ((real8 **) (*((struct_matrice *)
4847: (*s_objet_4).objet)).tableau);
4848:
4849: (*((struct_matrice *) (*s_objet_4).objet)).type = 'C';
4850: (*s_objet_4).type = MCX;
4851:
4852: if (((*((struct_matrice *) (*s_objet_4).objet)).tableau
4853: = malloc((*((struct_matrice *)
4854: (*s_objet_4).objet)).nombre_lignes *
4855: sizeof(struct_complexe16 *))) == NULL)
4856: {
4857: if (variable_partagee == d_vrai)
4858: {
4859: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4860: .s_liste_variables_partagees).mutex)) != 0)
4861: {
4862: (*s_etat_processus).erreur_systeme =
4863: d_es_processus;
4864: return;
4865: }
4866: }
4867:
4868: (*s_etat_processus).erreur_systeme =
4869: d_es_allocation_memoire;
4870: return;
4871: }
4872:
4873: for(i = 0; i < (*((struct_matrice *) (*s_objet_4).objet))
4874: .nombre_lignes; i++)
4875: {
4876: if ((((struct_complexe16 **) (*((struct_matrice *)
4877: (*s_objet_4).objet)).tableau)[i]
4878: = malloc((*((struct_matrice *)
4879: (*s_objet_4).objet)).nombre_colonnes *
4880: sizeof(struct_complexe16))) == NULL)
4881: {
4882: if (variable_partagee == d_vrai)
4883: {
4884: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4885: .s_liste_variables_partagees).mutex))
4886: != 0)
4887: {
4888: (*s_etat_processus).erreur_systeme =
4889: d_es_processus;
4890: return;
4891: }
4892: }
4893:
4894: (*s_etat_processus).erreur_systeme =
4895: d_es_allocation_memoire;
4896: return;
4897: }
4898:
4899: for(j = 0; j < (*((struct_matrice *)
4900: (*s_objet_4).objet)).nombre_colonnes; j++)
4901: {
4902: ((struct_complexe16 **) (*((struct_matrice *)
4903: (*s_objet_4).objet)).tableau)[i][j]
4904: .partie_reelle = (((real8 **)
4905: tampon)[i][j]);
4906: ((struct_complexe16 **) (*((struct_matrice *)
4907: (*s_objet_4).objet)).tableau)[i][j]
4908: .partie_imaginaire = (real8) 0;
4909: }
4910:
4911: free(((integer8 **) tampon)[i]);
4912: }
4913:
4914: free((integer8 **) tampon);
4915:
4916: ((struct_complexe16 **) (*((struct_matrice *)
4917: (*s_objet_4).objet)).tableau)[indice_i - 1]
4918: [indice_j - 1].partie_reelle =
4919: (*((struct_complexe16 *)
4920: (*s_objet_1).objet)).partie_reelle;
4921: ((struct_complexe16 **) (*((struct_matrice *)
4922: (*s_objet_4).objet)).tableau)[indice_i - 1]
4923: [indice_j - 1].partie_imaginaire =
4924: (*((struct_complexe16 *)
4925: (*s_objet_1).objet)).partie_imaginaire;
4926: }
4927: else
4928: {
4929: if (variable_partagee == d_vrai)
4930: {
4931: if (pthread_mutex_unlock(&((*(*s_etat_processus)
4932: .s_liste_variables_partagees).mutex))
4933: != 0)
4934: {
4935: (*s_etat_processus).erreur_systeme =
4936: d_es_processus;
4937: return;
4938: }
4939: }
4940:
4941: liberation(s_etat_processus, s_objet_1);
4942: liberation(s_etat_processus, s_objet_2);
4943: liberation(s_etat_processus, s_objet_3);
4944:
4945: (*s_etat_processus).erreur_execution =
4946: d_ex_erreur_type_argument;
4947: return;
4948: }
4949: }
4950: else
4951: {
4952: /*
4953: * Matrice de complexes
4954: */
4955:
4956: if ((*s_objet_1).type == INT)
4957: {
4958: /*
4959: * Conversion de l'élément à insérer en complexe
4960: */
4961:
4962: ((struct_complexe16 **) (*((struct_matrice *)
4963: (*s_objet_4).objet)).tableau)[indice_i - 1]
4964: [indice_j - 1].partie_reelle = (real8)
4965: (*((integer8 *) (*s_objet_1).objet));
4966: ((struct_complexe16 **) (*((struct_matrice *)
4967: (*s_objet_4).objet)).tableau)[indice_i - 1]
4968: [indice_j - 1].partie_imaginaire = (real8) 0;
4969: }
4970: else if ((*s_objet_1).type == REL)
4971: {
4972: /*
4973: * Conversion de l'élément à insérer en complexe
4974: */
4975:
4976: ((struct_complexe16 **) (*((struct_matrice *)
4977: (*s_objet_4).objet)).tableau)[indice_i - 1]
4978: [indice_j - 1].partie_reelle =
4979: (*((real8 *) (*s_objet_1).objet));
4980: ((struct_complexe16 **) (*((struct_matrice *)
4981: (*s_objet_4).objet)).tableau)[indice_i - 1]
4982: [indice_j - 1].partie_imaginaire = (real8) 0;
4983: }
4984: else if ((*s_objet_1).type == CPL)
4985: {
4986: /*
4987: * Aucune conversion de type
4988: */
4989:
4990: ((struct_complexe16 **) (*((struct_matrice *)
4991: (*s_objet_4).objet)).tableau)[indice_i - 1]
4992: [indice_j - 1].partie_reelle =
4993: (*((struct_complexe16 *)
4994: (*s_objet_1).objet)).partie_reelle;
4995: ((struct_complexe16 **) (*((struct_matrice *)
4996: (*s_objet_4).objet)).tableau)[indice_i - 1]
4997: [indice_j - 1].partie_imaginaire =
4998: (*((struct_complexe16 *)
4999: (*s_objet_1).objet)).partie_imaginaire;
5000: }
5001: else
5002: {
5003: if (variable_partagee == d_vrai)
5004: {
5005: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5006: .s_liste_variables_partagees).mutex))
5007: != 0)
5008: {
5009: (*s_etat_processus).erreur_systeme =
5010: d_es_processus;
5011: return;
5012: }
5013: }
5014:
5015: liberation(s_etat_processus, s_objet_1);
5016: liberation(s_etat_processus, s_objet_2);
5017: liberation(s_etat_processus, s_objet_3);
5018:
5019: (*s_etat_processus).erreur_execution =
5020: d_ex_erreur_type_argument;
5021: return;
5022: }
5023: }
5024:
5025: if ((++(*((integer8 *) (*(*(*((struct_liste_chainee *)
5026: (*s_objet_2).objet)).suivant).donnee).objet))) > (integer8)
5027: (*((struct_matrice *) (*s_objet_4).objet)).nombre_colonnes)
5028: {
5029: (*((integer8 *) (*(*(*((struct_liste_chainee *) (*s_objet_2)
5030: .objet)).suivant).donnee).objet)) = 1;
5031:
5032: if ((++(*((integer8 *) (*(*((struct_liste_chainee *)
5033: (*s_objet_2).objet)).donnee).objet))) > (integer8)
5034: (*((struct_matrice *) (*s_objet_4).objet))
5035: .nombre_lignes)
5036: {
5037: (*((integer8 *) (*(*((struct_liste_chainee *)
5038: (*s_objet_2).objet)).donnee).objet)) = 1;
5039: }
5040: }
5041:
5042: if (variable_partagee == d_faux)
5043: {
5044: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
5045: .position_variable_courante].objet = s_objet_4;
5046: }
5047: else
5048: {
5049: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
5050: .position_variable_courante].objet = NULL;
5051: (*(*s_etat_processus).s_liste_variables_partagees).table
5052: [(*(*s_etat_processus).s_liste_variables_partagees)
5053: .position_variable].objet = s_objet_4;
5054:
5055: if (variable_partagee == d_vrai)
5056: {
5057: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5058: .s_liste_variables_partagees).mutex)) != 0)
5059: {
5060: (*s_etat_processus).erreur_systeme =
5061: d_es_processus;
5062: return;
5063: }
5064: }
5065: }
5066:
5067: liberation(s_etat_processus, s_objet_1);
5068: }
5069: else if ((*s_objet_4).type == LST)
5070: {
5071: if ((*s_objet_2).type != INT)
5072: {
5073: if (variable_partagee == d_vrai)
5074: {
5075: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5076: .s_liste_variables_partagees).mutex)) != 0)
5077: {
5078: (*s_etat_processus).erreur_systeme =
5079: d_es_processus;
5080: return;
5081: }
5082: }
5083:
5084: liberation(s_etat_processus, s_objet_1);
5085: liberation(s_etat_processus, s_objet_2);
5086: liberation(s_etat_processus, s_objet_3);
5087:
5088: (*s_etat_processus).erreur_execution =
5089: d_ex_erreur_type_argument;
5090: return;
5091: }
5092:
5093: indice_i = (*((integer8 *) (*s_objet_2).objet));
5094: indice_j = 1;
5095:
5096: if ((*s_objet_4).nombre_occurrences > 1)
5097: {
5098: if ((s_copie_4 = copie_objet(s_etat_processus, s_objet_4, 'N'))
5099: == NULL)
5100: {
5101: if (variable_partagee == d_vrai)
5102: {
5103: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5104: .s_liste_variables_partagees).mutex)) != 0)
5105: {
5106: (*s_etat_processus).erreur_systeme =
5107: d_es_processus;
5108: return;
5109: }
5110: }
5111:
5112: (*s_etat_processus).erreur_systeme =
5113: d_es_allocation_memoire;
5114: return;
5115: }
5116:
5117: liberation(s_etat_processus, s_objet_4);
5118: s_objet_4 = s_copie_4;
5119: }
5120:
5121: l_element_courant = (*s_objet_4).objet;
5122: nombre_elements = 0;
5123:
5124: while(l_element_courant != NULL)
5125: {
5126: l_element_courant = (*l_element_courant).suivant;
5127: nombre_elements++;
5128: }
5129:
5130: l_element_courant = (*s_objet_4).objet;
5131:
5132: while((l_element_courant != NULL) && (indice_j != indice_i))
5133: {
5134: l_element_courant = (*l_element_courant).suivant;
5135: indice_j++;
5136: }
5137:
5138: if (l_element_courant != NULL)
5139: {
5140: liberation(s_etat_processus, (*l_element_courant).donnee);
5141: (*l_element_courant).donnee = s_objet_1;
5142: }
5143: else
5144: {
5145: if (variable_partagee == d_vrai)
5146: {
5147: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5148: .s_liste_variables_partagees).mutex)) != 0)
5149: {
5150: (*s_etat_processus).erreur_systeme =
5151: d_es_processus;
5152: return;
5153: }
5154: }
5155:
5156: liberation(s_etat_processus, s_objet_1);
5157: liberation(s_etat_processus, s_objet_2);
5158: liberation(s_etat_processus, s_objet_3);
5159:
5160: (*s_etat_processus).erreur_execution = d_ex_element_inexistant;
5161: return;
5162: }
5163:
5164: (*((integer8 *) (*s_objet_2).objet)) =
5165: (indice_i % nombre_elements) + 1;
5166:
5167: if (variable_partagee == d_faux)
5168: {
5169: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
5170: .position_variable_courante].objet = s_objet_4;
5171: }
5172: else
5173: {
5174: (*s_etat_processus).s_liste_variables[(*s_etat_processus)
5175: .position_variable_courante].objet = NULL;
5176: (*(*s_etat_processus).s_liste_variables_partagees).table
5177: [(*(*s_etat_processus).s_liste_variables_partagees)
5178: .position_variable].objet = s_objet_4;
5179:
5180: if (variable_partagee == d_vrai)
5181: {
5182: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5183: .s_liste_variables_partagees).mutex)) != 0)
5184: {
5185: (*s_etat_processus).erreur_systeme =
5186: d_es_processus;
5187: return;
5188: }
5189: }
5190: }
5191: }
5192: else
5193: {
5194: if (variable_partagee == d_vrai)
5195: {
5196: if (pthread_mutex_unlock(&((*(*s_etat_processus)
5197: .s_liste_variables_partagees).mutex)) != 0)
5198: {
5199: (*s_etat_processus).erreur_systeme =
5200: d_es_processus;
5201: return;
5202: }
5203: }
5204:
5205: liberation(s_etat_processus, s_objet_1);
5206: liberation(s_etat_processus, s_objet_2);
5207: liberation(s_etat_processus, s_objet_3);
5208:
5209: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
5210: return;
5211: }
5212:
5213: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
5214: s_objet_3) == d_erreur)
5215: {
5216: return;
5217: }
5218:
5219: if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
5220: s_objet_2) == d_erreur)
5221: {
5222: return;
5223: }
5224: }
5225:
5226: /*
5227: --------------------------------------------------------------------------------
5228: Arguments incompatibles
5229: --------------------------------------------------------------------------------
5230: */
5231:
5232: else
5233: {
5234: liberation(s_etat_processus, s_objet_1);
5235: liberation(s_etat_processus, s_objet_2);
5236: liberation(s_etat_processus, s_objet_3);
5237:
5238: (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument;
5239: return;
5240: }
5241:
5242: return;
5243: }
5244:
5245: // vim: ts=4