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