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