![]() ![]() | ![]() |
1.1 bertrand 1: /*
2: ================================================================================
1.2 ! bertrand 3: RPL/2 (R) version 4.0.10
1.1 bertrand 4: Copyright (C) 1989-2010 Dr. BERTRAND Joël
5:
6: This file is part of RPL/2.
7:
8: RPL/2 is free software; you can redistribute it and/or modify it
9: under the terms of the CeCILL V2 License as published by the french
10: CEA, CNRS and INRIA.
11:
12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
15: for more details.
16:
17: You should have received a copy of the CeCILL License
18: along with RPL/2. If not, write to info@cecill.info.
19: ================================================================================
20: */
21:
22:
23: #include "rpl.conv.h"
24:
25:
26: /*
27: ================================================================================
28: Routine de formation des données pour l'affichage
29: ================================================================================
30: Entrées : structure sur l'état du processus et objet à afficher
31: --------------------------------------------------------------------------------
32: Sorties : chaine de caractères
33: --------------------------------------------------------------------------------
34: Effets de bord : néant
35: ================================================================================
36: */
37:
38: unsigned char *
39: formateur(struct_processus *s_etat_processus, long offset_initial,
40: struct_objet *s_objet)
41: {
42: int parentheses_groupe_gauche;
43: int parentheses_groupe_droit;
44:
45: logical1 registre45;
46:
47: logical4 autorisation_parenthese;
48: logical4 presence_signe;
49:
50: struct_liste_chainee *l_atome;
51: struct_liste_chainee *l_element_courant;
52: struct_liste_chainee *l_liste1;
53: struct_liste_chainee *l_liste2;
54:
55: struct_objet *s_sous_objet;
56: struct_objet *s_sous_objet_1;
57: struct_objet *s_sous_objet_2;
58: struct_objet *s_sous_objet_3;
59:
60: unsigned char base[1 + 1];
61: unsigned char *chaine;
62: unsigned char *chaine_fonction;
63: unsigned char *chaine_formatee;
64: unsigned char *chaine_tampon;
65: unsigned char *chaine_sauvegarde;
66: unsigned char *format;
67: unsigned char *format_majuscule;
68: unsigned char *ptre;
69: unsigned char *ptrl;
70: unsigned char *registre;
71: unsigned char tampon[1024 + 1];
72:
73: unsigned long i;
74: unsigned long j;
75: unsigned long k;
76: unsigned long longueur_binaire;
77: unsigned long longueur_courante;
78: unsigned long longueur_decimale_courante;
79: unsigned long *longueurs_maximales;
80: unsigned long nombre_arguments;
81: unsigned long nombre_arguments_fonction;
82: unsigned long nombre_colonnes;
83: unsigned long nombre_elements;
84: unsigned long nombre_lignes;
85: unsigned long offset;
86:
87: integer8 masque_binaire;
88:
89: chaine = NULL;
90: chaine_formatee = NULL;
91: chaine_sauvegarde = NULL;
92:
93: strcpy(base, " ");
94:
95: longueur_binaire = 0;
96: masque_binaire = 0;
97:
98: if ((*s_objet).type == ADR)
99: {
100:
101: /*
102: --------------------------------------------------------------------------------
103: Adresse
104: --------------------------------------------------------------------------------
105: */
106:
107: sprintf(tampon, "%016lX", (*((unsigned long *) ((*s_objet).objet))));
108:
109: chaine = (unsigned char *) malloc((strlen(tampon) + 3)
110: * sizeof(unsigned char));
111:
112: if (chaine == NULL)
113: {
114: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
115: return(NULL);
116: }
117:
118: strcpy(chaine, "@ ");
119: strcat(chaine, tampon);
120: }
121: else if ((*s_objet).type == SLB)
122: {
123:
124: /*
125: --------------------------------------------------------------------------------
126: Bibliothèque partagée
127: --------------------------------------------------------------------------------
128: */
129:
130: sprintf(tampon, " %016lX", (unsigned long) (*((struct_bibliotheque *)
131: (*s_objet).objet)).descripteur);
132:
133: chaine = (unsigned char *) malloc((strlen(tampon) + 10)
134: * sizeof(unsigned char));
135:
136: if (chaine == NULL)
137: {
138: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
139: return(NULL);
140: }
141:
142: strcpy(chaine, "Library $");
143: strcat(chaine, tampon);
144:
145: registre = chaine;
146:
147: if ((chaine = malloc((strlen(registre) + 2 +
148: strlen((*(struct_bibliotheque *) ((*s_objet).objet)).nom)
149: + 2) * sizeof(unsigned char))) == NULL)
150: {
151: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
152: return(NULL);
153: }
154:
155: sprintf(chaine, "%s [%s]", registre, (*((struct_bibliotheque *)
156: (*s_objet).objet)).nom);
157: free(registre);
158: }
159: else if ((*s_objet).type == SPH)
160: {
161:
162: /*
163: --------------------------------------------------------------------------------
164: Sémaphore
165: --------------------------------------------------------------------------------
166: */
167:
168: sprintf(tampon, "%016lX", (unsigned long)
169: &((*((struct_semaphore *) (*s_objet).objet)).semaphore));
170:
171: chaine = (unsigned char *) malloc((strlen(tampon) + 15 +
172: strlen((*((struct_semaphore *) (*s_objet).objet)).nom))
173: * sizeof(unsigned char));
174:
175: if (chaine == NULL)
176: {
177: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
178: return(NULL);
179: }
180:
181: sprintf(chaine, "Semaphore $%s '%s'", tampon,
182: (*((struct_semaphore *) (*s_objet).objet)).nom);
183: }
184: else if ((*s_objet).type == SQL)
185: {
186:
187: /*
188: --------------------------------------------------------------------------------
189: Connecteur SQL
190: --------------------------------------------------------------------------------
191: */
192:
193: if (strcmp((*((struct_connecteur_sql *) (*s_objet).objet)).type,
194: "MYSQL") == 0)
195: {
196: # ifdef MYSQL_SUPPORT
197: sprintf(tampon, "Sql $%016lX (%s)",
198: (long unsigned int) (*((struct_connecteur_sql *)
199: (*s_objet).objet)).descripteur.mysql,
200: (*((struct_connecteur_sql *) (*s_objet).objet)).type);
201: # else
202: if ((*s_etat_processus).langue == 'F')
203: {
204: printf("+++Attention : Support de MySQL "
205: "non compilé !\n");
206: }
207: else
208: {
209: printf("+++Warning : MySQL support "
210: "not available !\n");
211: }
212:
213: fflush(stdout);
214: # endif
215: }
216: else if (strcmp((*((struct_connecteur_sql *) (*s_objet).objet)).type,
217: "POSTGRESQL") == 0)
218: {
219: # ifdef POSTGRESQL_SUPPORT
220: sprintf(tampon, "Sql $%016lX [ %s ]",
221: (long unsigned int) (*((struct_connecteur_sql *)
222: (*s_objet).objet)).descripteur.postgresql,
223: (*((struct_connecteur_sql *) (*s_objet).objet)).type);
224: # else
225: if ((*s_etat_processus).langue == 'F')
226: {
227: printf("+++Attention : Support de PostgreSQL "
228: "non compilé !\n");
229: }
230: else
231: {
232: printf("+++Warning : PostgreSQL support "
233: "not available !\n");
234: }
235:
236: fflush(stdout);
237: # endif
238: }
239: else
240: {
241: BUG(1, printf("SQL type '%s' not allowed!",
242: (*((struct_connecteur_sql *) (*s_objet).objet))
243: .type));
244: }
245:
246: chaine = (unsigned char *) malloc((strlen(tampon) + 1)
247: * sizeof(unsigned char));
248:
249: if (chaine == NULL)
250: {
251: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
252: return(NULL);
253: }
254:
255: strcpy(chaine, tampon);
256: }
257: else if ((*s_objet).type == PRC)
258: {
259:
260: /*
261: --------------------------------------------------------------------------------
262: Processus
263: --------------------------------------------------------------------------------
264: */
265:
266: if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread)
267: .processus_detache == d_vrai)
268: {
269: sprintf(tampon, " %016lX", (unsigned long)
270: (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
271: .pid);
272:
273: chaine = (unsigned char *) malloc((strlen(tampon) + 10)
274: * sizeof(unsigned char));
275:
276: if (chaine == NULL)
277: {
278: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
279: return(NULL);
280: }
281:
282: strcpy(chaine, "Process $");
283: strcat(chaine, tampon);
284: }
285: else
286: {
287: sprintf(tampon, " %016lX/%016lX",
288: (unsigned long) (*(*((struct_processus_fils *)
289: (*s_objet).objet)).thread).pid,
290: (unsigned long) (*(*((struct_processus_fils *)
291: (*s_objet).objet)).thread).tid);
292:
293: chaine = (unsigned char *) malloc((strlen(tampon) + 23)
294: * sizeof(unsigned char));
295:
296: if (chaine == NULL)
297: {
298: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
299: return(NULL);
300: }
301:
302: strcpy(chaine, "Light weight process $");
303: strcat(chaine, tampon);
304: }
305: }
306: else if ((*s_objet).type == FCH)
307: {
308:
309: /*
310: --------------------------------------------------------------------------------
311: Fichier
312: --------------------------------------------------------------------------------
313: */
314:
315: sprintf(tampon, " %016lX", (unsigned long) (*((struct_fichier *)
316: ((*s_objet).objet))).descripteur);
317:
318: chaine = (unsigned char *) malloc((strlen(tampon) + 7)
319: * sizeof(unsigned char));
320:
321: if (chaine == NULL)
322: {
323: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
324: return(NULL);
325: }
326:
327: strcpy(chaine, "File $");
328: strcat(chaine, tampon);
329:
330: registre45 = test_cfsf(s_etat_processus, 45);
331: cf(s_etat_processus, 45);
332:
333: if ((format = formateur(s_etat_processus, 0, (*((struct_fichier *)
334: ((*s_objet).objet))).format)) == NULL)
335: {
336: return(NULL);
337: }
338:
339: if (registre45 == d_vrai)
340: {
341: sf(s_etat_processus, 45);
342: }
343: else
344: {
345: cf(s_etat_processus, 45);
346: }
347:
348: if ((format_majuscule = conversion_majuscule(format)) == NULL)
349: {
350: return(NULL);
351: }
352:
353: free(format);
354:
355: registre = chaine;
356:
357: if ((chaine = malloc((strlen(registre) + 1 +
358: strlen(format_majuscule) + 1) * sizeof(unsigned char)))
359: == NULL)
360: {
361: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
362: return(NULL);
363: }
364:
365: sprintf(chaine, "%s %s", registre, format_majuscule);
366: free(registre);
367:
368: tampon[0] = d_code_fin_chaine;
369:
370: if ((*((struct_fichier *) ((*s_objet).objet))).acces == 'S')
371: {
372: strcat(tampon, "SEQUENTIAL, ");
373: }
374: else if ((*((struct_fichier *) ((*s_objet).objet))).acces == 'D')
375: {
376: strcat(tampon, "DIRECT, ");
377: }
378: else
379: {
380: strcat(tampon, "KEYED, ");
381: }
382:
383: if ((*((struct_fichier *) ((*s_objet).objet))).binaire == 'N')
384: {
385: strcat(tampon, "FORMATTED, ");
386: }
387: else if ((*((struct_fichier *) ((*s_objet).objet))).binaire == 'Y')
388: {
389: strcat(tampon, "UNFORMATTED, ");
390: }
391: else
392: {
393: strcat(tampon, "FLOW, ");
394: }
395:
396: if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'N')
397: {
398: strcat(tampon, "NEW, ");
399: }
400: else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'O')
401: {
402: strcat(tampon, "OLD, ");
403: }
404: else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'R')
405: {
406: strcat(tampon, "REPLACE, ");
407: }
408: else if ((*((struct_fichier *) ((*s_objet).objet))).ouverture == 'U')
409: {
410: strcat(tampon, "UNKNOWN, ");
411: }
412: else
413: {
414: strcat(tampon, "SCRATCH, ");
415: }
416:
417: if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'R')
418: {
419: strcat(tampon, "READONLY");
420: }
421: else if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'W')
422: {
423: strcat(tampon, "WRITEONLY");
424: }
425: else
426: {
427: strcat(tampon, "READWRITE");
428: }
429:
430: registre = chaine;
431:
432: if ((chaine = malloc((strlen(chaine) + 6 + strlen(tampon) +
433: strlen((*((struct_fichier *) ((*s_objet).objet))).nom) + 1) *
434: sizeof(unsigned char))) == NULL)
435: {
436: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
437: return(NULL);
438: }
439:
440: sprintf(chaine, "%s [%s <%s>]", registre, (*((struct_fichier *)
441: ((*s_objet).objet))).nom, tampon);
442: free(registre);
443:
444: free(format_majuscule);
445: }
446: else if ((*s_objet).type == SCK)
447: {
448:
449: /*
450: --------------------------------------------------------------------------------
451: Socket
452: --------------------------------------------------------------------------------
453: */
454:
455: sprintf(tampon, " %016lX", (unsigned long) (*((struct_socket *)
456: ((*s_objet).objet))).socket);
457:
458: chaine = (unsigned char *) malloc((strlen(tampon) + 9)
459: * sizeof(unsigned char));
460:
461: if (chaine == NULL)
462: {
463: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
464: return(NULL);
465: }
466:
467: strcpy(chaine, "Socket $");
468: strcat(chaine, tampon);
469:
470: registre45 = test_cfsf(s_etat_processus, 45);
471: cf(s_etat_processus, 45);
472:
473: if ((format = formateur(s_etat_processus, 0, (*((struct_socket *)
474: ((*s_objet).objet))).format)) == NULL)
475: {
476: return(NULL);
477: }
478:
479: if (registre45 == d_vrai)
480: {
481: sf(s_etat_processus, 45);
482: }
483: else
484: {
485: cf(s_etat_processus, 45);
486: }
487:
488: if ((format_majuscule = conversion_majuscule(format)) == NULL)
489: {
490: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
491: return(NULL);
492: }
493:
494: free(format);
495:
496: registre = chaine;
497:
498: if ((chaine = malloc((strlen(registre) + 1 +
499: strlen(format_majuscule) + 1) * sizeof(unsigned char)))
500: == NULL)
501: {
502: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
503: return(NULL);
504: }
505:
506: sprintf(chaine, "%s %s", registre, format_majuscule);
507: free(registre);
508:
509: tampon[0] = d_code_fin_chaine;
510:
511: strcat(tampon, (*((struct_socket *) ((*s_objet).objet))).type);
512: strcat(tampon, ", ");
513:
514: if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_UNIX)
515: {
516: strcat(tampon, "UNIX, ");
517: }
518: else if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_INET)
519: {
520: strcat(tampon, "IPV4, ");
521: }
522: else if ((*((struct_socket *) ((*s_objet).objet))).domaine == PF_INET6)
523: {
524: strcat(tampon, "IPV6, ");
525: }
526:
527: if ((*((struct_socket *) ((*s_objet).objet))).localisation == 'L')
528: {
529: strcat(tampon, "LOCAL, ");
530: }
531: else
532: {
533: strcat(tampon, "FOREIGN, ");
534: }
535:
536: if ((*((struct_socket *) ((*s_objet).objet))).binaire == 'N')
537: {
538: strcat(tampon, "FORMATTED, ");
539: }
540: else if ((*((struct_socket *) ((*s_objet).objet))).binaire == 'Y')
541: {
542: strcat(tampon, "UNFORMATTED, ");
543: }
544: else
545: {
546: strcat(tampon, "FLOW, ");
547: }
548:
549: if ((*((struct_socket *) ((*s_objet).objet))).protection == 'R')
550: {
551: strcat(tampon, "READONLY");
552: }
553: else if ((*((struct_fichier *) ((*s_objet).objet))).protection == 'W')
554: {
555: strcat(tampon, "WRITEONLY");
556: }
557: else
558: {
559: strcat(tampon, "READWRITE");
560: }
561:
562: registre = chaine;
563:
564: if ((*((struct_socket *) ((*s_objet).objet))).localisation == 'L')
565: { // Socket locale
566: if ((strcmp((*((struct_socket *) ((*s_objet).objet))).type,
567: "STREAM") == 0) || (strcmp((*((struct_socket *)
568: ((*s_objet).objet))).type, "SEQUENTIAL DATAGRAM") == 0))
569: {
570: if (strcmp((*((struct_socket *) ((*s_objet).objet)))
571: .adresse_distante, "") == 0)
572: { // Socket connectée en écoute
573: if ((chaine = malloc((strlen(registre) + 16 +
574: strlen(tampon) + strlen((*((struct_socket *)
575: ((*s_objet).objet))).adresse) +
576: + 1) * sizeof(unsigned char))) == NULL)
577: {
578: (*s_etat_processus).erreur_systeme =
579: d_es_allocation_memoire;
580: return(NULL);
581: }
582:
583: sprintf(chaine, "%s [%s LISTENING <%s>]", registre,
584: (*((struct_socket *) ((*s_objet).objet))).adresse,
585: tampon);
586: }
587: else
588: { // Socket connecté
589: if ((chaine = malloc((strlen(registre) + 12 +
590: strlen(tampon) + strlen((*((struct_socket *)
591: ((*s_objet).objet))).adresse) +
592: strlen((*((struct_socket *) ((*s_objet).objet)))
593: .adresse_distante)
594: + 1) * sizeof(unsigned char))) == NULL)
595: {
596: (*s_etat_processus).erreur_systeme =
597: d_es_allocation_memoire;
598: return(NULL);
599: }
600:
601: sprintf(chaine, "%s [%s FROM %s <%s>]", registre,
602: (*((struct_socket *) ((*s_objet).objet))).adresse,
603: (*((struct_socket *) ((*s_objet).objet)))
604: .adresse_distante, tampon);
605: }
606: }
607: else // Socket non connectée
608: {
609: if ((chaine = malloc((strlen(registre) + 6 +
610: strlen(tampon) + strlen((*((struct_socket *)
611: ((*s_objet).objet))).adresse) +
612: + 1) * sizeof(unsigned char))) == NULL)
613: {
614: (*s_etat_processus).erreur_systeme =
615: d_es_allocation_memoire;
616: return(NULL);
617: }
618:
619: sprintf(chaine, "%s [%s <%s>]", registre,
620: (*((struct_socket *) ((*s_objet).objet))).adresse,
621: tampon);
622: }
623: }
624: else
625: { // Socket distante
626: if ((strcmp((*((struct_socket *) ((*s_objet).objet))).type,
627: "STREAM") == 0) || (strcmp((*((struct_socket *)
628: ((*s_objet).objet))).type, "SEQUENTIAL DATAGRAM") == 0))
629: {
630: if ((chaine = malloc((strlen(registre) + 9 +
631: strlen((*((struct_socket *) ((*s_objet).objet)))
632: .adresse) + strlen(tampon)
633: + 1) * sizeof(unsigned char))) == NULL)
634: {
635: (*s_etat_processus).erreur_systeme =
636: d_es_allocation_memoire;
637: return(NULL);
638: }
639:
640: sprintf(chaine, "%s [TO %s <%s>]", registre,
641: (*((struct_socket *) ((*s_objet).objet)))
642: .adresse, tampon);
643: }
644: else
645: {
646: if (strcmp((*((struct_socket *) ((*s_objet).objet)))
647: .adresse_distante, "") == 0)
648: {
649: if ((chaine = malloc((strlen(registre) + 5 +
650: strlen(tampon) + 1) * sizeof(unsigned char)))
651: == NULL)
652: {
653: (*s_etat_processus).erreur_systeme =
654: d_es_allocation_memoire;
655: return(NULL);
656: }
657:
658: sprintf(chaine, "%s [<%s>]", registre, tampon);
659: }
660: else
661: {
662: if ((chaine = malloc((strlen(registre) + 9 +
663: strlen((*((struct_socket *) ((*s_objet).objet)))
664: .adresse_distante) + strlen(tampon)
665: + 1) * sizeof(unsigned char))) == NULL)
666: {
667: (*s_etat_processus).erreur_systeme =
668: d_es_allocation_memoire;
669: return(NULL);
670: }
671:
672: sprintf(chaine, "%s [TO %s <%s>]", registre,
673: (*((struct_socket *) ((*s_objet).objet)))
674: .adresse_distante, tampon);
675: }
676: }
677: }
678:
679: free(registre);
680: free(format_majuscule);
681: }
682: else if ((*s_objet).type == ALG)
683: {
684:
685: /*
686: --------------------------------------------------------------------------------
687: Expression algébrique
688: --------------------------------------------------------------------------------
689: */
690:
691: l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
692:
693: while(l_element_courant != NULL)
694: {
695: if ((*(*l_element_courant).donnee).type == FCT)
696: {
697: if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
698: .donnee).objet)).nom_fonction, "<<") != 0) &&
699: (strcmp((*((struct_fonction *) (*(*l_element_courant)
700: .donnee).objet)).nom_fonction, ">>") != 0))
701: {
702: if ((strcmp((*((struct_fonction *) (*(*l_element_courant)
703: .donnee).objet)).nom_fonction, "+") == 0) ||
704: (strcmp((*((struct_fonction *)
705: (*(*l_element_courant).donnee).objet))
706: .nom_fonction, "-") == 0) || (strcmp(
707: (*((struct_fonction *) (*(*l_element_courant)
708: .donnee).objet)).nom_fonction, "*") == 0) ||
709: (strcmp((*((struct_fonction *)
710: (*(*l_element_courant).donnee).objet)).nom_fonction,
711: "/") == 0) || (strcmp((*((struct_fonction *)
712: (*(*l_element_courant).donnee).objet)).nom_fonction,
713: "^") == 0) || (strcmp((*((struct_fonction *)
714: (*(*l_element_courant).donnee).objet)).nom_fonction,
715: "<") == 0) || (strcmp((*((struct_fonction *)
716: (*(*l_element_courant).donnee).objet)).nom_fonction,
717: ">") == 0) || (strcmp((*((struct_fonction *)
718: (*(*l_element_courant).donnee).objet)).nom_fonction,
719: "==") == 0) || (strcmp((*((struct_fonction *)
720: (*(*l_element_courant).donnee).objet)).nom_fonction,
721: "<>") == 0) || (strcmp((*((struct_fonction *)
722: (*(*l_element_courant).donnee).objet)).nom_fonction,
723: "<=") == 0) || (strcmp((*((struct_fonction *)
724: (*(*l_element_courant).donnee).objet)).nom_fonction,
725: "=<") == 0) || (strcmp((*((struct_fonction *)
726: (*(*l_element_courant).donnee).objet)).nom_fonction,
727: ">=") == 0) || (strcmp((*((struct_fonction *)
728: (*(*l_element_courant).donnee).objet)).nom_fonction,
729: "=>") == 0))
730: {
731: if (depilement(s_etat_processus, &((*s_etat_processus)
732: .l_base_pile), &s_sous_objet_2) == d_erreur)
733: {
734: return(NULL);
735: }
736:
737: chaine_sauvegarde = (*s_etat_processus)
738: .instruction_courante;
739:
740: if (((*s_etat_processus).instruction_courante =
741: (unsigned char *) malloc((strlen(
742: (unsigned char *) (*s_sous_objet_2).objet) + 2
743: + 1) * sizeof(unsigned char))) == NULL)
744: {
745: (*s_etat_processus).instruction_courante =
746: chaine_sauvegarde;
747: (*s_etat_processus).erreur_systeme =
748: d_es_allocation_memoire;
749: return(NULL);
750: }
751:
752: sprintf((*s_etat_processus).instruction_courante,
753: "'%s'", (unsigned char *)
754: (*s_sous_objet_2).objet);
755:
756: presence_signe = (((*s_etat_processus)
757: .instruction_courante[1] == '+')
758: || ((*s_etat_processus).instruction_courante[1]
759: == '-')) ? d_vrai : d_faux;
760:
761: recherche_type(s_etat_processus);
762:
763: if ((*s_etat_processus).erreur_execution != d_ex)
764: {
765: // Aucune erreur d'exécution ne peut être
766: // retournée, car l'argument est cohérent.
767:
768: return(NULL);
769: }
770:
771: if (depilement(s_etat_processus, &((*s_etat_processus)
772: .l_base_pile), &s_sous_objet_3) == d_erreur)
773: {
774: return(NULL);
775: }
776:
777: free((*s_etat_processus).instruction_courante);
778:
779: (*s_etat_processus).instruction_courante =
780: chaine_sauvegarde;
781:
782: autorisation_parenthese = d_faux;
783:
784: if ((*s_sous_objet_3).type == ALG)
785: {
786: l_atome = (struct_liste_chainee *)
787: (*s_sous_objet_3).objet;
788: chaine_fonction = "";
789: nombre_arguments_fonction = 0;
790:
791: while(l_atome != NULL)
792: {
793: if ((*(*l_atome).donnee).type == FCT)
794: {
795: if (strcmp((*((struct_fonction *)
796: (*(*l_atome).donnee).objet))
797: .nom_fonction, ">>") != 0)
798: {
799: chaine_fonction = (*((struct_fonction *)
800: (*(*l_atome).donnee).objet))
801: .nom_fonction;
802: nombre_arguments_fonction =
803: (*((struct_fonction *)
804: (*(*l_atome).donnee).objet))
805: .nombre_arguments;
806: }
807: }
808:
809: l_atome = (*l_atome).suivant;
810: }
811:
812: if (strcmp((*((struct_fonction *)
813: (*(*l_element_courant).donnee).objet))
814: .nom_fonction, "+") == 0)
815: {
816: if ((strcmp(chaine_fonction, "AND") == 0) ||
817: (strcmp(chaine_fonction, "XOR") == 0) ||
818: (strcmp(chaine_fonction, "OR") == 0))
819: {
820: autorisation_parenthese = d_vrai;
821: }
822: }
823: else if (strcmp((*((struct_fonction *)
824: (*(*l_element_courant).donnee).objet))
825: .nom_fonction, "-") == 0)
826: {
827: if (nombre_arguments_fonction != 0)
828: {
829: autorisation_parenthese = d_faux;
830: }
831: else
832: {
833: autorisation_parenthese = d_vrai;
834: }
835: }
836: else if (strcmp((*((struct_fonction *)
837: (*(*l_element_courant).donnee).objet))
838: .nom_fonction, "*") == 0)
839: {
840: if ((strcmp(chaine_fonction, "+") == 0) ||
841: (strcmp(chaine_fonction, "-") == 0) ||
842: (strcmp(chaine_fonction, "AND") == 0) ||
843: (strcmp(chaine_fonction, "XOR") == 0) ||
844: (strcmp(chaine_fonction, "OR") == 0))
845: {
846: autorisation_parenthese = d_vrai;
847: }
848: }
849: else if (strcmp((*((struct_fonction *)
850: (*(*l_element_courant).donnee).objet))
851: .nom_fonction, "/") == 0)
852: {
853: if (nombre_arguments_fonction != 0)
854: {
855: autorisation_parenthese = d_faux;
856: }
857: else
858: {
859: autorisation_parenthese = d_vrai;
860: }
861: }
862: else if ((strcmp((*((struct_fonction *)
863: (*(*l_element_courant).donnee).objet))
864: .nom_fonction, "^") == 0))
865: {
866: if (nombre_arguments_fonction != 0)
867: {
868: autorisation_parenthese = d_faux;
869: }
870: else
871: {
872: autorisation_parenthese = d_vrai;
873: }
874: }
875: }
876:
877: if ((autorisation_parenthese == d_vrai) ||
878: (presence_signe == d_vrai))
879: {
880: chaine_sauvegarde = (unsigned char *)
881: (*s_sous_objet_2).objet;
882:
883: if (((*s_sous_objet_2).objet = (void *)
884: malloc((strlen(chaine_sauvegarde) + 2 + 1)
885: * sizeof(unsigned char))) == NULL)
886: {
887: (*s_etat_processus).erreur_systeme =
888: d_es_allocation_memoire;
889: return(NULL);
890: }
891:
892: sprintf((unsigned char *) (*s_sous_objet_2).objet,
893: "(%s)", chaine_sauvegarde);
894: free(chaine_sauvegarde);
895: }
896:
897: liberation(s_etat_processus, s_sous_objet_3);
898:
899: if (depilement(s_etat_processus, &((*s_etat_processus)
900: .l_base_pile), &s_sous_objet_1) == d_erreur)
901: {
902: return(NULL);
903: }
904:
905: chaine_sauvegarde = (*s_etat_processus)
906: .instruction_courante;
907:
908: if (((*s_etat_processus).instruction_courante =
909: (unsigned char *) malloc((strlen(
910: (unsigned char *) (*s_sous_objet_1).objet) + 2
911: + 1) * sizeof(unsigned char))) == NULL)
912: {
913: (*s_etat_processus).instruction_courante =
914: chaine_sauvegarde;
915: (*s_etat_processus).erreur_systeme =
916: d_es_allocation_memoire;
917: return(NULL);
918: }
919:
920: sprintf((*s_etat_processus).instruction_courante,
921: "'%s'", (unsigned char *)
922: (*s_sous_objet_1).objet);
923:
924: recherche_type(s_etat_processus);
925:
926: if ((*s_etat_processus).erreur_execution != d_ex)
927: {
928: // Aucune erreur d'exécution ne peut être
929: // retournée, car l'argument est cohérent.
930:
931: return(NULL);
932: }
933:
934: if (depilement(s_etat_processus, &((*s_etat_processus)
935: .l_base_pile), &s_sous_objet_3) == d_erreur)
936: {
937: return(NULL);
938: }
939:
940: free((*s_etat_processus).instruction_courante);
941:
942: (*s_etat_processus).instruction_courante =
943: chaine_sauvegarde;
944:
945: autorisation_parenthese = d_faux;
946:
947: if ((*s_sous_objet_3).type == ALG)
948: {
949: l_atome = (struct_liste_chainee *)
950: (*s_sous_objet_3).objet;
951: chaine_fonction = "";
952:
953: while(l_atome != NULL)
954: {
955: if ((*(*l_atome).donnee).type == FCT)
956: {
957: if (strcmp((*((struct_fonction *)
958: (*(*l_atome).donnee).objet))
959: .nom_fonction, ">>") != 0)
960: {
961: chaine_fonction = (*((struct_fonction *)
962: (*(*l_atome).donnee).objet))
963: .nom_fonction;
964: }
965: }
966:
967: l_atome = (*l_atome).suivant;
968: }
969:
970: if ((strcmp((*((struct_fonction *)
971: (*(*l_element_courant).donnee).objet))
972: .nom_fonction, "+") == 0) ||
973: (strcmp((*((struct_fonction *)
974: (*(*l_element_courant).donnee).objet))
975: .nom_fonction, "-") == 0))
976: {
977: if ((strcmp(chaine_fonction, "AND") == 0) ||
978: (strcmp(chaine_fonction, "XOR") == 0) ||
979: (strcmp(chaine_fonction, "OR") == 0))
980: {
981: autorisation_parenthese = d_vrai;
982: }
983: }
984: else if ((strcmp((*((struct_fonction *)
985: (*(*l_element_courant).donnee).objet))
986: .nom_fonction, "*") == 0) ||
987: (strcmp((*((struct_fonction *)
988: (*(*l_element_courant).donnee).objet))
989: .nom_fonction, "/") == 0))
990: {
991: if ((strcmp(chaine_fonction, "+") == 0) ||
992: (strcmp(chaine_fonction, "-") == 0) ||
993: (strcmp(chaine_fonction, "AND") == 0) ||
994: (strcmp(chaine_fonction, "XOR") == 0) ||
995: (strcmp(chaine_fonction, "OR") == 0))
996: {
997: autorisation_parenthese = d_vrai;
998: }
999: }
1000: else if ((strcmp((*((struct_fonction *)
1001: (*(*l_element_courant).donnee).objet))
1002: .nom_fonction, "^") == 0))
1003: {
1004: autorisation_parenthese = d_vrai;
1005: }
1006: }
1007:
1008: if (autorisation_parenthese == d_vrai)
1009: {
1010: chaine_sauvegarde = (unsigned char *)
1011: (*s_sous_objet_1).objet;
1012:
1013: if (((*s_sous_objet_1).objet = (void *)
1014: malloc((strlen(chaine_sauvegarde) + 2 + 1)
1015: * sizeof(unsigned char))) == NULL)
1016: {
1017: (*s_etat_processus).erreur_systeme =
1018: d_es_allocation_memoire;
1019: return(NULL);
1020: }
1021:
1022: sprintf((unsigned char *) (*s_sous_objet_1).objet,
1023: "(%s)", chaine_sauvegarde);
1024: free(chaine_sauvegarde);
1025: }
1026:
1027: liberation(s_etat_processus, s_sous_objet_3);
1028:
1029: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1030: == NULL)
1031: {
1032: (*s_etat_processus).erreur_systeme =
1033: d_es_allocation_memoire;
1034: return(NULL);
1035: }
1036:
1037: if (((*s_sous_objet).objet = (void *) malloc((strlen(
1038: (unsigned char *) (*s_sous_objet_1).objet) +
1039: strlen((*((struct_fonction *)
1040: (*(*l_element_courant).donnee).objet))
1041: .nom_fonction) + strlen((unsigned char *)
1042: (*s_sous_objet_2).objet) + 1) *
1043: sizeof(unsigned char))) == NULL)
1044: {
1045: (*s_etat_processus).erreur_systeme =
1046: d_es_allocation_memoire;
1047: return(NULL);
1048: }
1049:
1050: sprintf((unsigned char *) (*s_sous_objet).objet,
1051: "%s%s%s", (unsigned char *)
1052: (*s_sous_objet_1)
1053: .objet, (*((struct_fonction *)
1054: (*(*l_element_courant).donnee).objet))
1055: .nom_fonction, (unsigned char *)
1056: (*s_sous_objet_2).objet);
1057:
1058: liberation(s_etat_processus, s_sous_objet_1);
1059: liberation(s_etat_processus, s_sous_objet_2);
1060:
1061: if (empilement(s_etat_processus, &((*s_etat_processus)
1062: .l_base_pile), s_sous_objet) == d_erreur)
1063: {
1064: return(NULL);
1065: }
1066: }
1067: else if (strcmp((*((struct_fonction *)
1068: (*(*l_element_courant).donnee).objet)).nom_fonction,
1069: "=") == 0)
1070: {
1071: if (depilement(s_etat_processus, &((*s_etat_processus)
1072: .l_base_pile), &s_sous_objet_2) == d_erreur)
1073: {
1074: return(NULL);
1075: }
1076:
1077: if (depilement(s_etat_processus, &((*s_etat_processus)
1078: .l_base_pile), &s_sous_objet_1) == d_erreur)
1079: {
1080: return(NULL);
1081: }
1082:
1083: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1084: == NULL)
1085: {
1086: (*s_etat_processus).erreur_systeme =
1087: d_es_allocation_memoire;
1088: return(NULL);
1089: }
1090:
1091: autorisation_parenthese = d_vrai;
1092: l_atome = l_element_courant;
1093:
1094: if (l_atome != NULL)
1095: {
1096: if ((*l_atome).suivant != NULL)
1097: {
1098: l_atome = (*l_atome).suivant;
1099:
1100: if ((*(*l_atome).donnee).type == FCT)
1101: {
1102: if (strcmp((*((struct_fonction *)
1103: (*(*l_atome).donnee).objet))
1104: .nom_fonction, ">>") == 0)
1105: {
1106: if ((*l_atome).suivant == NULL)
1107: {
1108: autorisation_parenthese = d_faux;
1109: }
1110: }
1111: }
1112: }
1113: }
1114:
1115: if (autorisation_parenthese == d_vrai)
1116: {
1117: if (((*s_sous_objet).objet =
1118: (void *) malloc((strlen(
1119: (unsigned char *) (*s_sous_objet_1).objet) +
1120: strlen((*((struct_fonction *)
1121: (*(*l_element_courant).donnee).objet))
1122: .nom_fonction) + strlen((unsigned char *)
1123: (*s_sous_objet_2).objet) + 2 + 1) *
1124: sizeof(unsigned char))) == NULL)
1125: {
1126: (*s_etat_processus).erreur_systeme =
1127: d_es_allocation_memoire;
1128: return(NULL);
1129: }
1130:
1131: sprintf((unsigned char *) (*s_sous_objet).objet,
1132: "(%s%s%s)", (unsigned char *)
1133: (*s_sous_objet_1)
1134: .objet, (*((struct_fonction *)
1135: (*(*l_element_courant).donnee).objet))
1136: .nom_fonction, (unsigned char *)
1137: (*s_sous_objet_2).objet);
1138: }
1139: else
1140: {
1141: if (((*s_sous_objet).objet =
1142: (void *) malloc((strlen(
1143: (unsigned char *) (*s_sous_objet_1).objet) +
1144: strlen((*((struct_fonction *)
1145: (*(*l_element_courant).donnee).objet))
1146: .nom_fonction) + strlen((unsigned char *)
1147: (*s_sous_objet_2).objet) + 1) *
1148: sizeof(unsigned char))) == NULL)
1149: {
1150: (*s_etat_processus).erreur_systeme =
1151: d_es_allocation_memoire;
1152: return(NULL);
1153: }
1154:
1155: sprintf((unsigned char *) (*s_sous_objet).objet,
1156: "%s%s%s", (unsigned char *)
1157: (*s_sous_objet_1)
1158: .objet, (*((struct_fonction *)
1159: (*(*l_element_courant).donnee).objet))
1160: .nom_fonction, (unsigned char *)
1161: (*s_sous_objet_2).objet);
1162: }
1163:
1164: liberation(s_etat_processus, s_sous_objet_1);
1165: liberation(s_etat_processus, s_sous_objet_2);
1166:
1167: if (empilement(s_etat_processus, &((*s_etat_processus)
1168: .l_base_pile), s_sous_objet) == d_erreur)
1169: {
1170: return(NULL);
1171: }
1172: }
1173: else if (strcmp((*((struct_fonction *)
1174: (*(*l_element_courant).donnee).objet)).nom_fonction,
1175: "NOT") == 0)
1176: {
1177: if (depilement(s_etat_processus, &((*s_etat_processus)
1178: .l_base_pile), &s_sous_objet_1) == d_erreur)
1179: {
1180: return(NULL);
1181: }
1182:
1183: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1184: == NULL)
1185: {
1186: (*s_etat_processus).erreur_systeme =
1187: d_es_allocation_memoire;
1188: return(NULL);
1189: }
1190:
1191: if (((*s_sous_objet).objet = (unsigned char *) malloc(
1192: (strlen((unsigned char *) (*s_sous_objet_1)
1193: .objet) + 5 + 1) * sizeof(unsigned char))) ==
1194: NULL)
1195: {
1196: (*s_etat_processus).erreur_systeme =
1197: d_es_allocation_memoire;
1198: return(NULL);
1199: }
1200:
1201: sprintf((unsigned char *) (*s_sous_objet).objet,
1202: "%s(%s)", (*((struct_fonction *)
1203: (*(*l_element_courant).donnee).objet))
1204: .nom_fonction, (unsigned char *)
1205: (*s_sous_objet_1).objet );
1206:
1207: liberation(s_etat_processus, s_sous_objet_1);
1208:
1209: if (empilement(s_etat_processus, &((*s_etat_processus)
1210: .l_base_pile), s_sous_objet) == d_erreur)
1211: {
1212: return(NULL);
1213: }
1214: }
1215: else if ((strcmp((*((struct_fonction *)
1216: (*(*l_element_courant).donnee).objet)).nom_fonction,
1217: "OR") == 0) || (strcmp((*((struct_fonction *)
1218: (*(*l_element_courant).donnee).objet)).nom_fonction,
1219: "XOR") == 0) || (strcmp((*((struct_fonction *)
1220: (*(*l_element_courant).donnee).objet)).nom_fonction,
1221: "AND") == 0))
1222: {
1223: if (depilement(s_etat_processus, &((*s_etat_processus)
1224: .l_base_pile), &s_sous_objet_2) == d_erreur)
1225: {
1226: return(NULL);
1227: }
1228:
1229: if (depilement(s_etat_processus, &((*s_etat_processus)
1230: .l_base_pile), &s_sous_objet_1) == d_erreur)
1231: {
1232: return(NULL);
1233: }
1234:
1235: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1236: == NULL)
1237: {
1238: (*s_etat_processus).erreur_systeme =
1239: d_es_allocation_memoire;
1240: return(NULL);
1241: }
1242:
1243: parentheses_groupe_gauche = 0;
1244: parentheses_groupe_droit = 0;
1245:
1246: chaine_sauvegarde = (*s_etat_processus)
1247: .instruction_courante;
1248:
1249: if (((*s_etat_processus).instruction_courante =
1250: (unsigned char *) malloc((strlen(
1251: (unsigned char *) (*s_sous_objet_1).objet) + 2
1252: + 1) * sizeof(unsigned char))) == NULL)
1253: {
1254: (*s_etat_processus).instruction_courante =
1255: chaine_sauvegarde;
1256: (*s_etat_processus).erreur_systeme =
1257: d_es_allocation_memoire;
1258: return(NULL);
1259: }
1260:
1261: sprintf((*s_etat_processus).instruction_courante,
1262: "'%s'", (unsigned char *)
1263: (*s_sous_objet_1).objet);
1264:
1265: recherche_type(s_etat_processus);
1266:
1267: if ((*s_etat_processus).erreur_execution != d_ex)
1268: {
1269: // Aucune erreur d'exécution ne peut être
1270: // retournée, car l'argument est cohérent.
1271:
1272: return(NULL);
1273: }
1274:
1275: if (depilement(s_etat_processus, &((*s_etat_processus)
1276: .l_base_pile), &s_sous_objet_3) == d_erreur)
1277: {
1278: return(NULL);
1279: }
1280:
1281: free((*s_etat_processus).instruction_courante);
1282:
1283: (*s_etat_processus).instruction_courante =
1284: chaine_sauvegarde;
1285:
1286: if ((*s_sous_objet_3).type == ALG)
1287: {
1288: l_atome = (struct_liste_chainee *)
1289: (*s_sous_objet_3).objet;
1290: chaine_fonction = "";
1291:
1292: while(l_atome != NULL)
1293: {
1294: if ((*(*l_atome).donnee).type == FCT)
1295: {
1296: if (strcmp((*((struct_fonction *)
1297: (*(*l_atome).donnee).objet))
1298: .nom_fonction, ">>") != 0)
1299: {
1300: chaine_fonction = (*((struct_fonction *)
1301: (*(*l_atome).donnee).objet))
1302: .nom_fonction;
1303: }
1304: }
1305:
1306: l_atome = (*l_atome).suivant;
1307: }
1308:
1309: if (((strcmp(chaine_fonction, "OR") == 0) ||
1310: (strcmp(chaine_fonction, "XOR") == 0)) &&
1311: (strcmp((*((struct_fonction *)
1312: (*(*l_element_courant).donnee).objet))
1313: .nom_fonction, "AND") == 0))
1314: {
1315: parentheses_groupe_gauche = 2;
1316: }
1317: }
1318:
1319: liberation(s_etat_processus, s_sous_objet_3);
1320:
1321: chaine_sauvegarde = (*s_etat_processus)
1322: .instruction_courante;
1323:
1324: if (((*s_etat_processus).instruction_courante =
1325: (unsigned char *) malloc((strlen(
1326: (unsigned char *) (*s_sous_objet_2).objet) + 2
1327: + 1) * sizeof(unsigned char))) == NULL)
1328: {
1329: (*s_etat_processus).instruction_courante =
1330: chaine_sauvegarde;
1331: (*s_etat_processus).erreur_systeme =
1332: d_es_allocation_memoire;
1333: return(NULL);
1334: }
1335:
1336: sprintf((*s_etat_processus).instruction_courante,
1337: "'%s'", (unsigned char *)
1338: (*s_sous_objet_2).objet);
1339:
1340: recherche_type(s_etat_processus);
1341:
1342: if ((*s_etat_processus).erreur_execution != d_ex)
1343: {
1344: // Aucune erreur d'exécution ne peut être
1345: // retournée, car l'argument est cohérent.
1346:
1347: return(NULL);
1348: }
1349:
1350: if (depilement(s_etat_processus, &((*s_etat_processus)
1351: .l_base_pile), &s_sous_objet_3) == d_erreur)
1352: {
1353: return(NULL);
1354: }
1355:
1356: free((*s_etat_processus).instruction_courante);
1357:
1358: (*s_etat_processus).instruction_courante =
1359: chaine_sauvegarde;
1360:
1361: if ((*s_sous_objet_3).type == ALG)
1362: {
1363: l_atome = (struct_liste_chainee *)
1364: (*s_sous_objet_3).objet;
1365: chaine_fonction = "";
1366:
1367: while(l_atome != NULL)
1368: {
1369: if ((*(*l_atome).donnee).type == FCT)
1370: {
1371: if (strcmp((*((struct_fonction *)
1372: (*(*l_atome).donnee).objet))
1373: .nom_fonction, ">>") != 0)
1374: {
1375: chaine_fonction = (*((struct_fonction *)
1376: (*(*l_atome).donnee).objet))
1377: .nom_fonction;
1378: }
1379: }
1380:
1381: l_atome = (*l_atome).suivant;
1382: }
1383:
1384: if (((strcmp(chaine_fonction, "OR") == 0) ||
1385: (strcmp(chaine_fonction, "XOR") == 0)) &&
1386: (strcmp((*((struct_fonction *)
1387: (*(*l_element_courant).donnee).objet))
1388: .nom_fonction, "AND") == 0))
1389: {
1390: parentheses_groupe_droit = 2;
1391: }
1392: }
1393:
1394: liberation(s_etat_processus, s_sous_objet_3);
1395:
1396: if (((*s_sous_objet).objet = (void *) malloc((strlen(
1397: (unsigned char *) (*s_sous_objet_1).objet) +
1398: strlen((*((struct_fonction *)
1399: (*(*l_element_courant).donnee).objet))
1400: .nom_fonction) + strlen((unsigned char *)
1401: (*s_sous_objet_2).objet) + 2 + 1 +
1402: parentheses_groupe_gauche +
1403: parentheses_groupe_droit) *
1404: sizeof(unsigned char))) == NULL)
1405: {
1406: (*s_etat_processus).erreur_systeme =
1407: d_es_allocation_memoire;
1408: return(NULL);
1409: }
1410:
1411: sprintf((unsigned char *) (*s_sous_objet).objet,
1412: (parentheses_groupe_gauche == 0)
1413: ? ((parentheses_groupe_droit == 0)
1414: ? "%s %s %s"
1415: : "%s %s (%s)")
1416: : ((parentheses_groupe_droit == 0)
1417: ? "(%s) %s %s"
1418: : "(%s) %s (%s)"),
1419: (unsigned char *) (*s_sous_objet_1)
1420: .objet, (*((struct_fonction *)
1421: (*(*l_element_courant).donnee).objet))
1422: .nom_fonction, (unsigned char *)
1423: (*s_sous_objet_2).objet);
1424:
1425: liberation(s_etat_processus, s_sous_objet_1);
1426: liberation(s_etat_processus, s_sous_objet_2);
1427:
1428: if (empilement(s_etat_processus, &((*s_etat_processus)
1429: .l_base_pile), s_sous_objet) == d_erreur)
1430: {
1431: (*s_etat_processus).erreur_systeme =
1432: d_es_allocation_memoire;
1433: return(NULL);
1434: }
1435: }
1436: else
1437: {
1438: nombre_arguments = (*((struct_fonction *)
1439: (*(*l_element_courant).donnee).objet))
1440: .nombre_arguments;
1441:
1442: if ((chaine = (unsigned char *)
1443: malloc(sizeof(unsigned char))) == NULL)
1444: {
1445: (*s_etat_processus).erreur_systeme =
1446: d_es_allocation_memoire;
1447: return(NULL);
1448: }
1449:
1450: chaine[0] = d_code_fin_chaine;
1451:
1452: for(i = 0; i < nombre_arguments; i++)
1453: {
1454: if ((nombre_arguments - i) > 1)
1455: {
1456: l_liste1 = (*s_etat_processus).l_base_pile;
1457:
1458: for(j = 2; j < (nombre_arguments - i); j++)
1459: {
1460: l_liste1 = (*l_liste1).suivant;
1461: }
1462:
1463: l_liste2 = (*l_liste1).suivant;
1464: (*l_liste1).suivant = (*l_liste2).suivant;
1465: (*l_liste2).suivant = (*s_etat_processus)
1466: .l_base_pile;
1467: (*s_etat_processus).l_base_pile = l_liste2;
1468: }
1469:
1470: if (depilement(s_etat_processus,
1471: &((*s_etat_processus).l_base_pile),
1472: &s_sous_objet) == d_erreur)
1473: {
1474: return(NULL);
1475: }
1476:
1477: chaine_sauvegarde = chaine;
1478:
1479: if (strlen(chaine_sauvegarde) == 0)
1480: {
1481: if ((chaine = (unsigned char *) malloc((strlen(
1482: (unsigned char *) (*s_sous_objet).objet)
1483: + 1) * sizeof(unsigned char))) == NULL)
1484: {
1485: (*s_etat_processus).erreur_systeme =
1486: d_es_allocation_memoire;
1487: return(NULL);
1488: }
1489:
1490: sprintf(chaine, "%s", (unsigned char *)
1491: (*s_sous_objet).objet);
1492: }
1493: else
1494: {
1495: if ((chaine = (unsigned char *) malloc((strlen(
1496: chaine_sauvegarde) + 1 + strlen(
1497: (unsigned char *) (*s_sous_objet).objet)
1498: + 1) * sizeof(unsigned char))) == NULL)
1499: {
1500: (*s_etat_processus).erreur_systeme =
1501: d_es_allocation_memoire;
1502: return(NULL);
1503: }
1504:
1505: sprintf(chaine, "%s,%s", chaine_sauvegarde,
1506: (unsigned char *) (*s_sous_objet)
1507: .objet);
1508: }
1509:
1510: free(chaine_sauvegarde);
1511: liberation(s_etat_processus, s_sous_objet);
1512: }
1513:
1514: chaine_sauvegarde = chaine;
1515:
1516: if ((chaine = (unsigned char *) malloc((strlen(
1517: (*((struct_fonction *) (*(*l_element_courant)
1518: .donnee).objet)).nom_fonction) + 2 +
1519: strlen(chaine_sauvegarde) + 1) *
1520: sizeof(unsigned char))) == NULL)
1521: {
1522: (*s_etat_processus).erreur_systeme =
1523: d_es_allocation_memoire;
1524: return(NULL);
1525: }
1526:
1527: sprintf(chaine, "%s(%s)", (*((struct_fonction *)
1528: (*(*l_element_courant).donnee).objet))
1529: .nom_fonction, chaine_sauvegarde);
1530: free(chaine_sauvegarde);
1531:
1532: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1533: == NULL)
1534: {
1535: (*s_etat_processus).erreur_systeme =
1536: d_es_allocation_memoire;
1537: return(NULL);
1538: }
1539:
1540: (*s_sous_objet).objet = (void *) chaine;
1541:
1542: if (empilement(s_etat_processus, &((*s_etat_processus)
1543: .l_base_pile), s_sous_objet) == d_erreur)
1544: {
1545: return(NULL);
1546: }
1547: }
1548: }
1549: }
1550: else
1551: {
1552: if ((s_sous_objet = allocation(s_etat_processus, CHN))
1553: == NULL)
1554: {
1555: (*s_etat_processus).erreur_systeme =
1556: d_es_allocation_memoire;
1557: return(NULL);
1558: }
1559:
1560: if (((*s_sous_objet).objet = (void *) formateur(
1561: s_etat_processus, 0, (*l_element_courant).donnee))
1562: == NULL)
1563: {
1564: (*s_etat_processus).erreur_systeme =
1565: d_es_allocation_memoire;
1566: return(NULL);
1567: }
1568:
1569: if (((*(*l_element_courant).donnee).type == ALG)
1570: || (((*(*l_element_courant).donnee).type == NOM)
1571: && ((*((struct_nom *) (*(*l_element_courant)
1572: .donnee).objet)).symbole == d_vrai)))
1573: {
1574: chaine_sauvegarde = (unsigned char *) (*s_sous_objet).objet;
1575:
1576: if (((*s_sous_objet).objet = malloc((strlen(
1577: chaine_sauvegarde) - 1) *
1578: sizeof(unsigned char))) == NULL)
1579: {
1580: (*s_etat_processus).erreur_systeme =
1581: d_es_allocation_memoire;
1582: return(NULL);
1583: }
1584:
1585: ptrl = chaine_sauvegarde;
1586: ptre = (unsigned char *) (*s_sous_objet).objet;
1587:
1588: for(ptrl++, i = strlen(chaine_sauvegarde) - 2; i > 0;
1589: i--, *ptre++ = *ptrl++);
1590:
1591: (*ptre) = d_code_fin_chaine;
1592:
1593: free(chaine_sauvegarde);
1594: }
1595: else if ((*(*l_element_courant).donnee).type == CHN)
1596: {
1597: chaine_sauvegarde = (unsigned char *) (*s_sous_objet).objet;
1598:
1599: if (((*s_sous_objet).objet = malloc((strlen(
1600: chaine_sauvegarde) + 3) *
1601: sizeof(unsigned char))) == NULL)
1602: {
1603: (*s_etat_processus).erreur_systeme =
1604: d_es_allocation_memoire;
1605: return(NULL);
1606: }
1607:
1608: sprintf((unsigned char *) (*s_sous_objet).objet,
1609: "\"%s\"", chaine_sauvegarde);
1610:
1611: free(chaine_sauvegarde);
1612: }
1613:
1614: if (empilement(s_etat_processus, &((*s_etat_processus)
1615: .l_base_pile), s_sous_objet) == d_erreur)
1616: {
1617: return(NULL);
1618: }
1619: }
1620:
1621: l_element_courant = (*l_element_courant).suivant;
1622: }
1623:
1624: if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
1625: &s_sous_objet) == d_erreur)
1626: {
1627: return(NULL);
1628: }
1629:
1630: if ((chaine = (unsigned char *) malloc((strlen((unsigned char *)
1631: (*s_sous_objet).objet) + 2 + 1) * sizeof(unsigned char)))
1632: == NULL)
1633: {
1634: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1635: return(NULL);
1636: }
1637:
1638: sprintf(chaine, "'%s'", (unsigned char *) (*s_sous_objet).objet);
1639: liberation(s_etat_processus, s_sous_objet);
1640: }
1641: else if ((*s_objet).type == BIN)
1642: {
1643:
1644: /*
1645: --------------------------------------------------------------------------------
1646: Entier binaire en base 2, 8, 10 ou 16
1647: --------------------------------------------------------------------------------
1648: */
1649:
1650: longueur_binaire = longueur_entiers_binaires(s_etat_processus);
1651: masque_binaire = masque_entiers_binaires(s_etat_processus);
1652:
1653: if ((test_cfsf(s_etat_processus, 43) == d_faux) &&
1654: (test_cfsf(s_etat_processus, 44) == d_faux))
1655: {
1656:
1657: /*
1658: -- Base décimale ---------------------------------------------------------------
1659: */
1660:
1661: sprintf(tampon, "%llu", (*((logical8 *)
1662: ((*s_objet).objet))) & masque_binaire);
1663: strcpy(base, "d");
1664: }
1665: else if ((test_cfsf(s_etat_processus, 43) == d_vrai) &&
1666: (test_cfsf(s_etat_processus, 44) == d_faux))
1667: {
1668:
1669: /*
1670: -- Base octale -----------------------------------------------------------------
1671: */
1672:
1673: sprintf(tampon, "%llo", (*((logical8 *)
1674: ((*s_objet).objet))) & masque_binaire);
1675: strcpy(base, "o");
1676: }
1677: else if (test_cfsf(s_etat_processus, 44) == d_vrai)
1678: {
1679:
1680: /*
1681: -- Bases hexadécimale et binaire -----------------------------------------------
1682: */
1683:
1684: sprintf(tampon, "%llX", (*((logical8 *)
1685: ((*s_objet).objet))) & masque_binaire);
1686:
1687: if (test_cfsf(s_etat_processus, 43) == d_vrai)
1688: {
1689: strcpy(base, "h");
1690: }
1691: else
1692: {
1693: chaine = (unsigned char *) malloc((strlen(tampon) + 1)
1694: * sizeof(unsigned char));
1695:
1696: if (chaine == NULL)
1697: {
1698: (*s_etat_processus).erreur_systeme =
1699: d_es_allocation_memoire;
1700: return(NULL);
1701: }
1702:
1703: strcpy(chaine, tampon);
1704: tampon[0] = 0;
1705:
1706: for(i = 0; i < strlen(chaine); i++)
1707: {
1708: switch(chaine[i])
1709: {
1710: case '0' :
1711: {
1712: strcat(tampon, (i != 0) ? "0000" : "0");
1713: break;
1714: }
1715: case '1' :
1716: {
1717: strcat(tampon, (i != 0) ? "0001" : "1");
1718: break;
1719: }
1720: case '2' :
1721: {
1722: strcat(tampon, (i != 0) ? "0010" : "10");
1723: break;
1724: }
1725: case '3' :
1726: {
1727: strcat(tampon, (i != 0) ? "0011" : "11");
1728: break;
1729: }
1730: case '4' :
1731: {
1732: strcat(tampon, (i != 0) ? "0100" : "100");
1733: break;
1734: }
1735: case '5' :
1736: {
1737: strcat(tampon, (i != 0) ? "0101" : "101");
1738: break;
1739: }
1740: case '6' :
1741: {
1742: strcat(tampon, (i != 0) ? "0110" : "110");
1743: break;
1744: }
1745: case '7' :
1746: {
1747: strcat(tampon, (i != 0) ? "0111" : "111");
1748: break;
1749: }
1750: case '8' :
1751: {
1752: strcat(tampon, "1000");
1753: break;
1754: }
1755: case '9' :
1756: {
1757: strcat(tampon, "1001");
1758: break;
1759: }
1760: case 'A' :
1761: {
1762: strcat(tampon, "1010");
1763: break;
1764: }
1765: case 'B' :
1766: {
1767: strcat(tampon, "1011");
1768: break;
1769: }
1770: case 'C' :
1771: {
1772: strcat(tampon, "1100");
1773: break;
1774: }
1775: case 'D' :
1776: {
1777: strcat(tampon, "1101");
1778: break;
1779: }
1780: case 'E' :
1781: {
1782: strcat(tampon, "1110");
1783: break;
1784: }
1785: case 'F' :
1786: {
1787: strcat(tampon, "1111");
1788: break;
1789: }
1790: }
1791: }
1792:
1793: free(chaine);
1794: strcpy(base, "b");
1795: }
1796: }
1797:
1798: chaine = (unsigned char *) malloc((strlen(tampon) + 4)
1799: * sizeof(unsigned char));
1800:
1801: if (chaine == NULL)
1802: {
1803: (*s_etat_processus).erreur_systeme =
1804: d_es_allocation_memoire;
1805: return(NULL);
1806: }
1807:
1808: strcpy(chaine, "# ");
1809:
1810: strcat(chaine, tampon);
1811: strcat(chaine, base);
1812: }
1813: else if ((*s_objet).type == CHN)
1814: {
1815:
1816: /*
1817: --------------------------------------------------------------------------------
1818: Chaîne de caractères
1819: --------------------------------------------------------------------------------
1820: */
1821:
1822: chaine = (unsigned char *) malloc((strlen((unsigned char *)
1823: ((*s_objet).objet)) + 1) * sizeof(unsigned char));
1824:
1825: if (chaine == NULL)
1826: {
1827: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1828: return(NULL);
1829: }
1830:
1831: strcpy(chaine, (unsigned char *) ((*s_objet).objet));
1832: }
1833: else if ((*s_objet).type == CPL)
1834: {
1835:
1836: /*
1837: --------------------------------------------------------------------------------
1838: Complexe
1839: --------------------------------------------------------------------------------
1840: */
1841:
1842: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
1843: ((struct_complexe16 *) ((*s_objet).objet)), 'C');
1844:
1845: if (chaine_formatee == NULL)
1846: {
1847: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1848: return(NULL);
1849: }
1850:
1851: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
1852: + 1) * sizeof(unsigned char));
1853:
1854: if (chaine == NULL)
1855: {
1856: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1857: return(NULL);
1858: }
1859:
1860: strcpy(chaine, chaine_formatee);
1861: free(chaine_formatee);
1862: }
1863: else if ((*s_objet).type == RPN)
1864: {
1865:
1866: /*
1867: --------------------------------------------------------------------------------
1868: Définition
1869: --------------------------------------------------------------------------------
1870: */
1871:
1872: l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
1873: chaine_sauvegarde = chaine;
1874:
1875: while(l_element_courant != NULL)
1876: {
1877: if ((chaine_formatee = formateur(s_etat_processus, 0,
1878: (*l_element_courant).donnee)) == NULL)
1879: {
1880: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1881: return(NULL);
1882: }
1883:
1884: if ((*(*l_element_courant).donnee).type == CHN)
1885: {
1886: chaine_tampon = chaine_formatee;
1887:
1888: if ((chaine_formatee = (unsigned char *) malloc((strlen(
1889: chaine_tampon) + 3) * sizeof(unsigned char))) == NULL)
1890: {
1891: (*s_etat_processus).erreur_systeme =
1892: d_es_allocation_memoire;
1893: return(NULL);
1894: }
1895:
1896: sprintf(chaine_formatee, "\"%s\"", chaine_tampon);
1897: free(chaine_tampon);
1898: }
1899:
1900: l_element_courant = (*l_element_courant).suivant;
1901:
1902: if (chaine != NULL)
1903: {
1904: chaine_sauvegarde = chaine;
1905:
1906: if ((chaine = (unsigned char *) malloc((strlen(
1907: chaine_sauvegarde) + strlen(chaine_formatee) + 2) *
1908: sizeof(unsigned char))) == NULL)
1909: {
1910: (*s_etat_processus).erreur_systeme =
1911: d_es_allocation_memoire;
1912: return(NULL);
1913: }
1914:
1915: strcpy(chaine, chaine_sauvegarde);
1916: free(chaine_sauvegarde);
1917: strcat(chaine, " ");
1918: strcat(chaine, chaine_formatee);
1919: free(chaine_formatee);
1920: }
1921: else
1922: {
1923: chaine = chaine_formatee;
1924: }
1925: }
1926:
1927: chaine_sauvegarde = chaine;
1928: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 1) *
1929: sizeof(unsigned char));
1930:
1931: if (chaine == NULL)
1932: {
1933: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1934: return(NULL);
1935: }
1936:
1937: chaine_sauvegarde[strlen(chaine_sauvegarde)] = d_code_fin_chaine;
1938: strcpy(chaine, chaine_sauvegarde);
1939: free(chaine_sauvegarde);
1940: }
1941: else if ((*s_objet).type == INT)
1942: {
1943:
1944: /*
1945: --------------------------------------------------------------------------------
1946: Entier
1947: --------------------------------------------------------------------------------
1948: */
1949:
1950: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
1951: ((integer8 *) ((*s_objet).objet)), 'I');
1952:
1953: if (chaine_formatee == NULL)
1954: {
1955: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1956: return(NULL);
1957: }
1958:
1959: chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
1960: * sizeof(unsigned char));
1961:
1962: if (chaine == NULL)
1963: {
1964: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1965: return(NULL);
1966: }
1967:
1968: strcpy(chaine, chaine_formatee);
1969: free(chaine_formatee);
1970: }
1971: else if ((*s_objet).type == FCT)
1972: {
1973:
1974: /*
1975: --------------------------------------------------------------------------------
1976: Fonction
1977: --------------------------------------------------------------------------------
1978: */
1979:
1980: chaine = (unsigned char *) malloc((strlen((*((struct_fonction *)
1981: ((*s_objet).objet))).nom_fonction) + 1) *
1982: sizeof(unsigned char));
1983:
1984: if (chaine == NULL)
1985: {
1986: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
1987: return(NULL);
1988: }
1989:
1990: strcpy(chaine, (unsigned char *) (*((struct_fonction *)
1991: ((*s_objet).objet))).nom_fonction);
1992: }
1993: else if ((*s_objet).type == TBL)
1994: {
1995:
1996: /*
1997: --------------------------------------------------------------------------------
1998: Tableau
1999: --------------------------------------------------------------------------------
2000: */
2001:
2002: chaine = (unsigned char *) malloc(4 * sizeof(unsigned char));
2003:
2004: if (chaine == NULL)
2005: {
2006: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2007: return(NULL);
2008: }
2009:
2010: strcpy(chaine, "<[ ");
2011: offset = strlen(chaine) + offset_initial;
2012:
2013: for(i = 0; i < (*((struct_tableau *) (*s_objet).objet))
2014: .nombre_elements; i++)
2015: {
2016: chaine_sauvegarde = chaine;
2017: chaine_formatee = formateur(s_etat_processus, offset,
2018: (*((struct_tableau *) (*s_objet).objet)).elements[i]);
2019:
2020: if (chaine_formatee == NULL)
2021: {
2022: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2023: return(NULL);
2024: }
2025:
2026: if ((*(*((struct_tableau *) (*s_objet).objet)).elements[i])
2027: .type == CHN)
2028: {
2029: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2030: + strlen(chaine_sauvegarde) + 3)
2031: * sizeof(unsigned char));
2032:
2033: if (chaine == NULL)
2034: {
2035: (*s_etat_processus).erreur_systeme =
2036: d_es_allocation_memoire;
2037: return(NULL);
2038: }
2039:
2040: strcpy(chaine, chaine_sauvegarde);
2041: free(chaine_sauvegarde);
2042: strcat(chaine, "\"");
2043: strcat(chaine, chaine_formatee);
2044: free(chaine_formatee);
2045: strcat(chaine, "\"");
2046: }
2047: else if ((*(*((struct_tableau *) (*s_objet).objet))
2048: .elements[i]).type == CHN)
2049: {
2050: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2051: + strlen(chaine_sauvegarde) + 1)
2052: * sizeof(unsigned char));
2053:
2054: if (chaine == NULL)
2055: {
2056: (*s_etat_processus).erreur_systeme =
2057: d_es_allocation_memoire;
2058: return(NULL);
2059: }
2060:
2061: sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
2062: free(chaine_sauvegarde);
2063: free(chaine_formatee);
2064: }
2065: else
2066: {
2067: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2068: + strlen(chaine_sauvegarde) + 1)
2069: * sizeof(unsigned char));
2070:
2071: if (chaine == NULL)
2072: {
2073: (*s_etat_processus).erreur_systeme =
2074: d_es_allocation_memoire;
2075: return(NULL);
2076: }
2077:
2078: sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
2079: free(chaine_sauvegarde);
2080: free(chaine_formatee);
2081: }
2082:
2083: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2084: {
2085: chaine_sauvegarde = chaine;
2086:
2087: chaine = (unsigned char *) malloc(
2088: (strlen(chaine_sauvegarde) + 2)
2089: * sizeof(unsigned char));
2090:
2091: if (chaine == NULL)
2092: {
2093: (*s_etat_processus).erreur_systeme =
2094: d_es_allocation_memoire;
2095: return(NULL);
2096: }
2097:
2098: strcpy(chaine, chaine_sauvegarde);
2099: free(chaine_sauvegarde);
2100: strcat(chaine, "\n");
2101:
2102: if ((*((struct_tableau *) (*s_objet).objet))
2103: .nombre_elements != (i + 1))
2104: {
2105: chaine_sauvegarde = chaine;
2106:
2107: chaine = (unsigned char *) malloc(
2108: (strlen(chaine_sauvegarde) + 1 + offset)
2109: * sizeof(unsigned char));
2110:
2111: if (chaine == NULL)
2112: {
2113: (*s_etat_processus).erreur_systeme =
2114: d_es_allocation_memoire;
2115: return(NULL);
2116: }
2117:
2118: strcpy(chaine, chaine_sauvegarde);
2119: free(chaine_sauvegarde);
2120: ptre = &(chaine[strlen(chaine)]);
2121:
2122: for(k = 0; k < offset; k++, *(ptre++) = ' ');
2123:
2124: (*ptre) = d_code_fin_chaine;
2125: }
2126: }
2127: else
2128: {
2129: if ((*((struct_tableau *) (*s_objet).objet))
2130: .nombre_elements != (i + 1))
2131: {
2132: chaine_sauvegarde = chaine;
2133:
2134: chaine = (unsigned char *) malloc(
2135: (strlen(chaine_sauvegarde) + 2)
2136: * sizeof(unsigned char));
2137:
2138: if (chaine == NULL)
2139: {
2140: (*s_etat_processus).erreur_systeme =
2141: d_es_allocation_memoire;
2142: return(NULL);
2143: }
2144:
2145: strcpy(chaine, chaine_sauvegarde);
2146: free(chaine_sauvegarde);
2147: strcat(chaine, " ");
2148: }
2149: }
2150: }
2151:
2152: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2153: {
2154: if (chaine[strlen(chaine) - 1] == '\n')
2155: {
2156: chaine[strlen(chaine) - 1] = d_code_fin_chaine;
2157: }
2158: }
2159:
2160: if ((*((struct_tableau *) (*s_objet).objet)).nombre_elements != 0)
2161: {
2162: chaine_sauvegarde = chaine;
2163: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
2164: * sizeof(unsigned char));
2165:
2166: if (chaine == NULL)
2167: {
2168: (*s_etat_processus).erreur_systeme =
2169: d_es_allocation_memoire;
2170: return(NULL);
2171: }
2172:
2173: strcpy(chaine, chaine_sauvegarde);
2174: free(chaine_sauvegarde);
2175: strcat(chaine, " ]>");
2176: }
2177: else
2178: {
2179: chaine_sauvegarde = chaine;
2180: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
2181: * sizeof(unsigned char));
2182:
2183: if (chaine == NULL)
2184: {
2185: (*s_etat_processus).erreur_systeme =
2186: d_es_allocation_memoire;
2187: return(NULL);
2188: }
2189:
2190: strcpy(chaine, chaine_sauvegarde);
2191: free(chaine_sauvegarde);
2192: strcat(chaine, "]>");
2193: }
2194: }
2195: else if ((*s_objet).type == LST)
2196: {
2197:
2198: /*
2199: --------------------------------------------------------------------------------
2200: Liste
2201: --------------------------------------------------------------------------------
2202: */
2203:
2204: chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
2205:
2206: if (chaine == NULL)
2207: {
2208: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2209: return(NULL);
2210: }
2211:
2212: strcpy(chaine, "{ ");
2213:
2214: l_element_courant = (struct_liste_chainee *) ((*s_objet).objet);
2215: nombre_elements = 0;
2216: offset = strlen(chaine) + offset_initial;
2217:
2218: while(l_element_courant != NULL)
2219: {
2220: chaine_sauvegarde = chaine;
2221: chaine_formatee = formateur(s_etat_processus, offset,
2222: (*l_element_courant).donnee);
2223:
2224: if (chaine_formatee == NULL)
2225: {
2226: (*s_etat_processus).erreur_systeme =
2227: d_es_allocation_memoire;
2228: return(NULL);
2229: }
2230:
2231: if ((*(*l_element_courant).donnee).type == CHN)
2232: {
2233: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2234: + strlen(chaine_sauvegarde) + 3)
2235: * sizeof(unsigned char));
2236:
2237: if (chaine == NULL)
2238: {
2239: (*s_etat_processus).erreur_systeme =
2240: d_es_allocation_memoire;
2241: return(NULL);
2242: }
2243:
2244: strcpy(chaine, chaine_sauvegarde);
2245: free(chaine_sauvegarde);
2246: strcat(chaine, "\"");
2247: strcat(chaine, chaine_formatee);
2248: free(chaine_formatee);
2249: strcat(chaine, "\"");
2250: }
2251: else if ((*(*l_element_courant).donnee).type == NOM)
2252: {
2253: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2254: + strlen(chaine_sauvegarde) + 1)
2255: * sizeof(unsigned char));
2256:
2257: if (chaine == NULL)
2258: {
2259: (*s_etat_processus).erreur_systeme =
2260: d_es_allocation_memoire;
2261: return(NULL);
2262: }
2263:
2264: sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
2265: free(chaine_sauvegarde);
2266: free(chaine_formatee);
2267: }
2268: else
2269: {
2270: chaine = (unsigned char *) malloc((strlen(chaine_formatee)
2271: + strlen(chaine_sauvegarde) + 1)
2272: * sizeof(unsigned char));
2273:
2274: if (chaine == NULL)
2275: {
2276: (*s_etat_processus).erreur_systeme =
2277: d_es_allocation_memoire;
2278: return(NULL);
2279: }
2280:
2281: sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
2282: free(chaine_sauvegarde);
2283: free(chaine_formatee);
2284: }
2285:
2286: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2287: {
2288: chaine_sauvegarde = chaine;
2289:
2290: chaine = (unsigned char *) malloc(
2291: (strlen(chaine_sauvegarde) + 2)
2292: * sizeof(unsigned char));
2293:
2294: if (chaine == NULL)
2295: {
2296: (*s_etat_processus).erreur_systeme =
2297: d_es_allocation_memoire;
2298: return(NULL);
2299: }
2300:
2301: strcpy(chaine, chaine_sauvegarde);
2302: free(chaine_sauvegarde);
2303: strcat(chaine, "\n");
2304:
2305: if ((*l_element_courant).suivant != NULL)
2306: {
2307: chaine_sauvegarde = chaine;
2308:
2309: chaine = (unsigned char *) malloc(
2310: (strlen(chaine_sauvegarde) + 1 + offset)
2311: * sizeof(unsigned char));
2312:
2313: if (chaine == NULL)
2314: {
2315: (*s_etat_processus).erreur_systeme =
2316: d_es_allocation_memoire;
2317: return(NULL);
2318: }
2319:
2320: strcpy(chaine, chaine_sauvegarde);
2321: free(chaine_sauvegarde);
2322: ptre = &(chaine[strlen(chaine)]);
2323:
2324: for(k = 0; k < offset; k++, *(ptre++) = ' ');
2325:
2326: (*ptre) = d_code_fin_chaine;
2327: }
2328: }
2329: else
2330: {
2331: if ((*l_element_courant).suivant != NULL)
2332: {
2333: chaine_sauvegarde = chaine;
2334:
2335: chaine = (unsigned char *) malloc(
2336: (strlen(chaine_sauvegarde) + 2)
2337: * sizeof(unsigned char));
2338:
2339: if (chaine == NULL)
2340: {
2341: (*s_etat_processus).erreur_systeme =
2342: d_es_allocation_memoire;
2343: return(NULL);
2344: }
2345:
2346: strcpy(chaine, chaine_sauvegarde);
2347: free(chaine_sauvegarde);
2348: strcat(chaine, " ");
2349: }
2350: }
2351:
2352: nombre_elements++;
2353: l_element_courant = (*l_element_courant).suivant;
2354: }
2355:
2356: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2357: {
2358: if (chaine[strlen(chaine) - 1] == '\n')
2359: {
2360: chaine[strlen(chaine) - 1] = d_code_fin_chaine;
2361: }
2362: }
2363:
2364: if (nombre_elements != 0)
2365: {
2366: chaine_sauvegarde = chaine;
2367: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 3)
2368: * sizeof(unsigned char));
2369:
2370: if (chaine == NULL)
2371: {
2372: (*s_etat_processus).erreur_systeme =
2373: d_es_allocation_memoire;
2374: return(NULL);
2375: }
2376:
2377: strcpy(chaine, chaine_sauvegarde);
2378: free(chaine_sauvegarde);
2379: strcat(chaine, " }");
2380: }
2381: else
2382: {
2383: chaine_sauvegarde = chaine;
2384: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 2)
2385: * sizeof(unsigned char));
2386:
2387: if (chaine == NULL)
2388: {
2389: (*s_etat_processus).erreur_systeme =
2390: d_es_allocation_memoire;
2391: return(NULL);
2392: }
2393:
2394: strcpy(chaine, chaine_sauvegarde);
2395: free(chaine_sauvegarde);
2396: strcat(chaine, "}");
2397: }
2398: }
2399: else if ((*s_objet).type == MCX)
2400: {
2401:
2402: /*
2403: --------------------------------------------------------------------------------
2404: Matrice complexe
2405: --------------------------------------------------------------------------------
2406: */
2407:
2408: nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
2409: .nombre_lignes;
2410: nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
2411: .nombre_colonnes;
2412:
2413: chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
2414:
2415: if (chaine != NULL)
2416: {
2417: strcpy(chaine, "[[");
2418: offset = strlen(chaine) + offset_initial - 1;
2419:
2420: if ((longueurs_maximales = malloc(sizeof(unsigned long) * 2 *
2421: nombre_colonnes)) == NULL)
2422: {
2423: (*s_etat_processus).erreur_systeme =
2424: d_es_allocation_memoire;
2425: return(NULL);
2426: }
2427:
2428: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2429: {
2430: for(j = 0; j < (2 * nombre_colonnes); j++)
2431: {
2432: longueurs_maximales[j] = 0;
2433: }
2434:
2435: for(i = 0; i < nombre_lignes; i++)
2436: {
2437: for(j = 0; j < nombre_colonnes; j++)
2438: {
2439: chaine_formatee = formateur_nombre(s_etat_processus,
2440: (void *) &(((struct_complexe16 **)
2441: ((*((struct_matrice *)
2442: ((*s_objet).objet))).tableau))[i][j]), 'C');
2443:
2444: if (chaine_formatee == NULL)
2445: {
2446: (*s_etat_processus).erreur_systeme =
2447: d_es_allocation_memoire;
2448: return(NULL);
2449: }
2450:
2451: longueur_courante = strlen(chaine_formatee);
2452: longueur_decimale_courante = 0;
2453:
2454: if ((ptrl = index(chaine_formatee,
2455: (test_cfsf(s_etat_processus, 48) == d_vrai)
2456: ? '.' : ',')) != NULL)
2457: {
2458: longueur_decimale_courante = longueur_courante
2459: - (ptrl - chaine_formatee);
2460: longueur_courante = ptrl - chaine_formatee;
2461: }
2462:
2463: free(chaine_formatee);
2464:
2465: if (longueurs_maximales[2 * j] < longueur_courante)
2466: {
2467: longueurs_maximales[2 * j] = longueur_courante;
2468: }
2469:
2470: if (longueurs_maximales[(2 * j) + 1] <
2471: longueur_decimale_courante)
2472: {
2473: longueurs_maximales[(2 * j) + 1] =
2474: longueur_decimale_courante;
2475: }
2476: }
2477: }
2478: }
2479:
2480: for(i = 0; i < nombre_lignes; i++)
2481: {
2482: for(j = 0; j < nombre_colonnes; j++)
2483: {
2484: chaine_formatee = formateur_nombre(s_etat_processus,
2485: (void *) &(((struct_complexe16 **)
2486: ((*((struct_matrice *)
2487: ((*s_objet).objet))).tableau))[i][j]), 'C');
2488:
2489: if (chaine_formatee == NULL)
2490: {
2491: (*s_etat_processus).erreur_systeme =
2492: d_es_allocation_memoire;
2493: return(NULL);
2494: }
2495:
2496: longueur_courante = strlen(chaine_formatee);
2497: longueur_decimale_courante = 0;
2498:
2499: if ((ptrl = index(chaine_formatee,
2500: (test_cfsf(s_etat_processus, 48) == d_vrai)
2501: ? '.' : ',')) != NULL)
2502: {
2503: longueur_decimale_courante = longueur_courante
2504: - (ptrl - chaine_formatee);
2505: longueur_courante = ptrl - chaine_formatee;
2506: }
2507:
2508: chaine_sauvegarde = chaine;
2509:
2510: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2511: {
2512:
2513: chaine = (unsigned char *) malloc(
2514: (strlen(chaine_sauvegarde) +
2515: longueur_courante + longueur_decimale_courante +
2516: longueurs_maximales[2 * j] +
2517: longueurs_maximales[(2 * j) + 1] + 2)
2518: * sizeof(unsigned char));
2519:
2520: if (chaine == NULL)
2521: {
2522: (*s_etat_processus).erreur_systeme =
2523: d_es_allocation_memoire;
2524: return(NULL);
2525: }
2526:
2527: strcpy(chaine, chaine_sauvegarde);
2528: free(chaine_sauvegarde);
2529: strcat(chaine, " ");
2530:
2531: ptre = &(chaine[strlen(chaine)]);
2532:
2533: for (k = 0; k < (longueurs_maximales[2 * j]
2534: - longueur_courante); k++, *(ptre++) = ' ');
2535:
2536: (*ptre) = d_code_fin_chaine;
2537: strcat(chaine, chaine_formatee);
2538: ptre = &(chaine[strlen(chaine)]);
2539:
2540: for(k = 0; k < (longueurs_maximales[(2 * j) + 1]
2541: - longueur_decimale_courante);
2542: k++, *(ptre++) = ' ');
2543:
2544: (*ptre) = d_code_fin_chaine;
2545: }
2546: else
2547: {
2548: chaine = (unsigned char *) malloc(
2549: (strlen(chaine_sauvegarde) +
2550: longueur_courante + longueur_decimale_courante
2551: + 2) * sizeof(unsigned char));
2552:
2553: if (chaine == NULL)
2554: {
2555: (*s_etat_processus).erreur_systeme =
2556: d_es_allocation_memoire;
2557: return(NULL);
2558: }
2559:
2560: strcpy(chaine, chaine_sauvegarde);
2561: free(chaine_sauvegarde);
2562: strcat(chaine, " ");
2563: strcat(chaine, chaine_formatee);
2564: }
2565:
2566: free(chaine_formatee);
2567: }
2568:
2569: chaine_sauvegarde = chaine;
2570:
2571: if (i != (nombre_lignes - 1))
2572: {
2573: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2574: {
2575: chaine = (unsigned char *) malloc(
2576: (strlen(chaine_sauvegarde) + 5 + offset)
2577: * sizeof(unsigned char));
2578:
2579: if (chaine == NULL)
2580: {
2581: (*s_etat_processus).erreur_systeme =
2582: d_es_allocation_memoire;
2583: return(NULL);
2584: }
2585:
2586: strcpy(chaine, chaine_sauvegarde);
2587: free(chaine_sauvegarde);
2588: strcat(chaine, " ]\n");
2589: ptre = &(chaine[strlen(chaine)]);
2590:
2591: for(k = 0; k < offset; k++, *(ptre++) = ' ');
2592:
2593: (*ptre) = d_code_fin_chaine;
2594: strcat(chaine, "[");
2595: }
2596: else
2597: {
2598: chaine = (unsigned char *) malloc(
2599: (strlen(chaine_sauvegarde) + 4)
2600: * sizeof(unsigned char));
2601:
2602: if (chaine == NULL)
2603: {
2604: (*s_etat_processus).erreur_systeme =
2605: d_es_allocation_memoire;
2606: return(NULL);
2607: }
2608:
2609: strcpy(chaine, chaine_sauvegarde);
2610: free(chaine_sauvegarde);
2611: strcat(chaine, " ][");
2612: }
2613: }
2614: }
2615:
2616: free(longueurs_maximales);
2617:
2618: chaine_sauvegarde = chaine;
2619: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
2620: + 4) * sizeof(unsigned char));
2621:
2622: if (chaine == NULL)
2623: {
2624: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2625: return(NULL);
2626: }
2627:
2628: strcpy(chaine, chaine_sauvegarde);
2629: free(chaine_sauvegarde);
2630: strcat(chaine, " ]]");
2631: }
2632: }
2633: else if ((*s_objet).type == MIN)
2634: {
2635:
2636: /*
2637: --------------------------------------------------------------------------------
2638: Matrice entière
2639: --------------------------------------------------------------------------------
2640: */
2641:
2642: nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
2643: .nombre_lignes;
2644: nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
2645: .nombre_colonnes;
2646:
2647: chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
2648:
2649: if (chaine != NULL)
2650: {
2651: strcpy(chaine, "[[");
2652: offset = strlen(chaine) + offset_initial - 1;
2653:
2654: if ((longueurs_maximales = malloc(sizeof(unsigned long) *
2655: nombre_colonnes)) == NULL)
2656: {
2657: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2658: return(NULL);
2659: }
2660:
2661: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2662: {
2663: for(j = 0; j < nombre_colonnes; j++)
2664: {
2665: longueurs_maximales[j] = 0;
2666: }
2667:
2668: for(i = 0; i < nombre_lignes; i++)
2669: {
2670: for(j = 0; j < nombre_colonnes; j++)
2671: {
2672: chaine_formatee = formateur_nombre(s_etat_processus,
2673: (void *) &(((integer8 **) ((*((struct_matrice *)
2674: ((*s_objet).objet))).tableau))[i][j]), 'I');
2675:
2676: if (chaine_formatee == NULL)
2677: {
2678: (*s_etat_processus).erreur_systeme =
2679: d_es_allocation_memoire;
2680: return(NULL);
2681: }
2682:
2683: longueur_courante = strlen(chaine_formatee);
2684: free(chaine_formatee);
2685:
2686: if (longueurs_maximales[j] < longueur_courante)
2687: {
2688: longueurs_maximales[j] = longueur_courante;
2689: }
2690: }
2691: }
2692: }
2693:
2694: for(i = 0; i < nombre_lignes; i++)
2695: {
2696: for(j = 0; j < nombre_colonnes; j++)
2697: {
2698: chaine_formatee = formateur_nombre(s_etat_processus,
2699: (void *) &(((integer8 **) ((*((struct_matrice *)
2700: ((*s_objet).objet))).tableau))[i][j]), 'I');
2701:
2702: if (chaine_formatee == NULL)
2703: {
2704: (*s_etat_processus).erreur_systeme =
2705: d_es_allocation_memoire;
2706: return(NULL);
2707: }
2708:
2709: longueur_courante = strlen(chaine_formatee);
2710: chaine_sauvegarde = chaine;
2711:
2712: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2713: {
2714: chaine = (unsigned char *) malloc(
2715: (strlen(chaine_sauvegarde) + longueur_courante
2716: + longueurs_maximales[j] + 2)
2717: * sizeof(unsigned char));
2718:
2719: if (chaine == NULL)
2720: {
2721: (*s_etat_processus).erreur_systeme =
2722: d_es_allocation_memoire;
2723: return(NULL);
2724: }
2725:
2726: strcpy(chaine, chaine_sauvegarde);
2727: free(chaine_sauvegarde);
2728: strcat(chaine, " ");
2729:
2730: ptre = &(chaine[strlen(chaine)]);
2731:
2732: for(k = 0; k < (longueurs_maximales[j]
2733: - longueur_courante); k++, *(ptre++) = ' ');
2734:
2735: (*ptre) = d_code_fin_chaine;
2736: }
2737: else
2738: {
2739: chaine = (unsigned char *) malloc(
2740: (strlen(chaine_sauvegarde) + longueur_courante
2741: + 2) * sizeof(unsigned char));
2742:
2743: if (chaine == NULL)
2744: {
2745: (*s_etat_processus).erreur_systeme =
2746: d_es_allocation_memoire;
2747: return(NULL);
2748: }
2749:
2750: strcpy(chaine, chaine_sauvegarde);
2751: free(chaine_sauvegarde);
2752: strcat(chaine, " ");
2753: }
2754:
2755: strcat(chaine, chaine_formatee);
2756: free(chaine_formatee);
2757: }
2758:
2759: chaine_sauvegarde = chaine;
2760:
2761: if (i != (nombre_lignes - 1))
2762: {
2763: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2764: {
2765: chaine = (unsigned char *) malloc(
2766: (strlen(chaine_sauvegarde) + 5 + offset)
2767: * sizeof(unsigned char));
2768:
2769: if (chaine == NULL)
2770: {
2771: (*s_etat_processus).erreur_systeme =
2772: d_es_allocation_memoire;
2773: return(NULL);
2774: }
2775:
2776: strcpy(chaine, chaine_sauvegarde);
2777: free(chaine_sauvegarde);
2778: strcat(chaine, " ]\n");
2779: ptre = &(chaine[strlen(chaine)]);
2780:
2781: for(k = 0; k < offset; k++, *(ptre++) = ' ');
2782:
2783: (*ptre) = d_code_fin_chaine;
2784: strcat(chaine, "[");
2785: }
2786: else
2787: {
2788: chaine = (unsigned char *) malloc(
2789: (strlen(chaine_sauvegarde) + 4)
2790: * sizeof(unsigned char));
2791:
2792: if (chaine == NULL)
2793: {
2794: (*s_etat_processus).erreur_systeme =
2795: d_es_allocation_memoire;
2796: return(NULL);
2797: }
2798:
2799: strcpy(chaine, chaine_sauvegarde);
2800: free(chaine_sauvegarde);
2801: strcat(chaine, " ][");
2802: }
2803: }
2804: }
2805:
2806: free(longueurs_maximales);
2807:
2808: chaine_sauvegarde = chaine;
2809: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
2810: + 4) * sizeof(unsigned char));
2811:
2812: if (chaine == NULL)
2813: {
2814: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2815: return(NULL);
2816: }
2817:
2818: strcpy(chaine, chaine_sauvegarde);
2819: free(chaine_sauvegarde);
2820: strcat(chaine, " ]]");
2821: }
2822: }
2823: else if ((*s_objet).type == MRL)
2824: {
2825:
2826: /*
2827: --------------------------------------------------------------------------------
2828: Matrice réelle
2829: --------------------------------------------------------------------------------
2830: */
2831:
2832: nombre_lignes = (*((struct_matrice *) ((*s_objet).objet)))
2833: .nombre_lignes;
2834: nombre_colonnes = (*((struct_matrice *) ((*s_objet).objet)))
2835: .nombre_colonnes;
2836:
2837: chaine = (unsigned char *) malloc(3 * sizeof(unsigned char));
2838:
2839: if (chaine != NULL)
2840: {
2841: strcpy(chaine, "[[");
2842: offset = strlen(chaine) + offset_initial - 1;
2843:
2844: if ((longueurs_maximales = malloc(sizeof(unsigned long) * 2 *
2845: nombre_colonnes)) == NULL)
2846: {
2847: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
2848: return(NULL);
2849: }
2850:
2851: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2852: {
2853: for(j = 0; j < (2 * nombre_colonnes); j++)
2854: {
2855: longueurs_maximales[j] = 0;
2856: }
2857:
2858: for(i = 0; i < nombre_lignes; i++)
2859: {
2860: for(j = 0; j < nombre_colonnes; j++)
2861: {
2862: chaine_formatee = formateur_nombre(s_etat_processus,
2863: (void *) &(((real8 **) ((*((struct_matrice *)
2864: ((*s_objet).objet))).tableau))[i][j]), 'R');
2865:
2866: if (chaine_formatee == NULL)
2867: {
2868: (*s_etat_processus).erreur_systeme =
2869: d_es_allocation_memoire;
2870: return(NULL);
2871: }
2872:
2873: longueur_courante = strlen(chaine_formatee);
2874: longueur_decimale_courante = 0;
2875:
2876: if ((ptrl = index(chaine_formatee,
2877: (test_cfsf(s_etat_processus, 48) == d_vrai)
2878: ? ',' : '.')) != NULL)
2879: {
2880: longueur_decimale_courante = longueur_courante
2881: - (ptrl - chaine_formatee);
2882: longueur_courante = ptrl - chaine_formatee;
2883: }
2884:
2885: free(chaine_formatee);
2886:
2887: if (longueurs_maximales[2 * j] < longueur_courante)
2888: {
2889: longueurs_maximales[2 * j] = longueur_courante;
2890: }
2891:
2892: if (longueurs_maximales[(2 * j) + 1] <
2893: longueur_decimale_courante)
2894: {
2895: longueurs_maximales[(2 * j) + 1] =
2896: longueur_decimale_courante;
2897: }
2898: }
2899: }
2900: }
2901:
2902: for(i = 0; i < nombre_lignes; i++)
2903: {
2904: for(j = 0; j < nombre_colonnes; j++)
2905: {
2906: chaine_formatee = formateur_nombre(s_etat_processus,
2907: (void *) &(((real8 **) ((*((struct_matrice *)
2908: ((*s_objet).objet))).tableau))[i][j]), 'R');
2909:
2910: if (chaine_formatee == NULL)
2911: {
2912: (*s_etat_processus).erreur_systeme =
2913: d_es_allocation_memoire;
2914: return(NULL);
2915: }
2916:
2917: longueur_courante = strlen(chaine_formatee);
2918: longueur_decimale_courante = 0;
2919:
2920: if ((ptrl = index(chaine_formatee,
2921: (test_cfsf(s_etat_processus, 48) == d_vrai)
2922: ? ',' : '.')) != NULL)
2923: {
2924: longueur_decimale_courante = longueur_courante
2925: - (ptrl - chaine_formatee);
2926: longueur_courante = ptrl - chaine_formatee;
2927: }
2928:
2929: chaine_sauvegarde = chaine;
2930:
2931: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2932: {
2933: chaine = (unsigned char *) malloc(
2934: (strlen(chaine_sauvegarde) +
2935: longueur_courante + longueur_decimale_courante +
2936: longueurs_maximales[2 * j] +
2937: longueurs_maximales[(2 * j) + 1] + 2)
2938: * sizeof(unsigned char));
2939:
2940: if (chaine == NULL)
2941: {
2942: (*s_etat_processus).erreur_systeme =
2943: d_es_allocation_memoire;
2944: return(NULL);
2945: }
2946:
2947: strcpy(chaine, chaine_sauvegarde);
2948: free(chaine_sauvegarde);
2949: strcat(chaine, " ");
2950:
2951: ptre = &(chaine[strlen(chaine)]);
2952:
2953: for(k = 0; k < (longueurs_maximales[2 * j]
2954: - longueur_courante); k++, *(ptre++) = ' ');
2955:
2956: (*ptre) = d_code_fin_chaine;
2957: strcat(chaine, chaine_formatee);
2958: ptre = &(chaine[strlen(chaine)]);
2959:
2960: for(k = 0; k < (longueurs_maximales[(2 * j) + 1]
2961: - longueur_decimale_courante);
2962: k++, *(ptre++) = ' ');
2963:
2964: (*ptre) = d_code_fin_chaine;
2965: }
2966: else
2967: {
2968: chaine = (unsigned char *) malloc(
2969: (strlen(chaine_sauvegarde) +
2970: longueur_courante + longueur_decimale_courante
2971: + 2) * sizeof(unsigned char));
2972:
2973: if (chaine == NULL)
2974: {
2975: (*s_etat_processus).erreur_systeme =
2976: d_es_allocation_memoire;
2977: return(NULL);
2978: }
2979:
2980: strcpy(chaine, chaine_sauvegarde);
2981: free(chaine_sauvegarde);
2982: strcat(chaine, " ");
2983: strcat(chaine, chaine_formatee);
2984: }
2985:
2986: free(chaine_formatee);
2987: }
2988:
2989: chaine_sauvegarde = chaine;
2990:
2991: if (i != (nombre_lignes - 1))
2992: {
2993: if (test_cfsf(s_etat_processus, 45) == d_vrai)
2994: {
2995: chaine = (unsigned char *) malloc(
2996: (strlen(chaine_sauvegarde) + 5 + offset)
2997: * sizeof(unsigned char));
2998:
2999: if (chaine == NULL)
3000: {
3001: (*s_etat_processus).erreur_systeme =
3002: d_es_allocation_memoire;
3003: return(NULL);
3004: }
3005:
3006: strcpy(chaine, chaine_sauvegarde);
3007: free(chaine_sauvegarde);
3008: strcat(chaine, " ]\n");
3009: ptre = &(chaine[strlen(chaine)]);
3010:
3011: for(k = 0; k < offset; k++, *(ptre++) = ' ');
3012:
3013: (*ptre) = d_code_fin_chaine;
3014: strcat(chaine, "[");
3015: }
3016: else
3017: {
3018: chaine = (unsigned char *) malloc(
3019: (strlen(chaine_sauvegarde) + 4)
3020: * sizeof(unsigned char));
3021:
3022: if (chaine == NULL)
3023: {
3024: (*s_etat_processus).erreur_systeme =
3025: d_es_allocation_memoire;
3026: return(NULL);
3027: }
3028:
3029: strcpy(chaine, chaine_sauvegarde);
3030: free(chaine_sauvegarde);
3031: strcat(chaine, " ][");
3032: }
3033: }
3034: }
3035:
3036: free(longueurs_maximales);
3037:
3038: chaine_sauvegarde = chaine;
3039: chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde)
3040: + 4) * sizeof(unsigned char));
3041:
3042: if (chaine == NULL)
3043: {
3044: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3045: return(NULL);
3046: }
3047:
3048: strcpy(chaine, chaine_sauvegarde);
3049: free(chaine_sauvegarde);
3050: strcat(chaine, " ]]");
3051: }
3052: }
3053: else if ((*s_objet).type == MTX)
3054: {
3055: sprintf(tampon, " %016lX", (unsigned long)
3056: &((*((struct_mutex *) (*s_objet).objet)).mutex));
3057:
3058: chaine = (unsigned char *) malloc((strlen(tampon) + 8)
3059: * sizeof(unsigned char));
3060:
3061: if (chaine == NULL)
3062: {
3063: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3064: return(NULL);
3065: }
3066:
3067: strcpy(chaine, "Mutex $");
3068: strcat(chaine, tampon);
3069: }
3070: else if ((*s_objet).type == NOM)
3071: {
3072:
3073: /*
3074: --------------------------------------------------------------------------------
3075: Nom
3076: --------------------------------------------------------------------------------
3077: */
3078:
3079: if ((*((struct_nom *) (*s_objet).objet)).symbole == d_vrai)
3080: {
3081: chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
3082: (*s_objet).objet)).nom) + 3) * sizeof(unsigned char));
3083:
3084: if (chaine == NULL)
3085: {
3086: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3087: return(NULL);
3088: }
3089:
3090: sprintf(chaine, "'%s'", (*((struct_nom *) (*s_objet).objet)).nom);
3091: }
3092: else
3093: {
3094: chaine = (unsigned char *) malloc((strlen((*((struct_nom *)
3095: (*s_objet).objet)).nom) + 1) * sizeof(unsigned char));
3096:
3097: if (chaine == NULL)
3098: {
3099: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3100: return(NULL);
3101: }
3102:
3103: sprintf(chaine, "%s", (*((struct_nom *) (*s_objet).objet)).nom);
3104: }
3105: }
3106: else if ((*s_objet).type == REL)
3107: {
3108:
3109: /*
3110: --------------------------------------------------------------------------------
3111: Réel
3112: --------------------------------------------------------------------------------
3113: */
3114:
3115: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
3116: ((real8 *) ((*s_objet).objet)), 'R');
3117:
3118: if (chaine_formatee == NULL)
3119: {
3120: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3121: return(NULL);
3122: }
3123:
3124: chaine = (unsigned char *) malloc((strlen(chaine_formatee) + 1)
3125: * sizeof(unsigned char));
3126:
3127: if (chaine == NULL)
3128: {
3129: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
3130: return(NULL);
3131: }
3132:
3133: strcpy(chaine, chaine_formatee);
3134: free(chaine_formatee);
3135: }
3136: else if ((*s_objet).type == VCX)
3137: {
3138:
3139: /*
3140: --------------------------------------------------------------------------------
3141: Vecteur complexe
3142: --------------------------------------------------------------------------------
3143: */
3144:
3145: nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
3146: .taille;
3147:
3148: chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
3149:
3150: if (chaine != NULL)
3151: {
3152: strcpy(chaine, "[");
3153:
3154: for(i = 0; i < nombre_colonnes; i++)
3155: {
3156: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
3157: &(((struct_complexe16 *) ((*((struct_vecteur *)
3158: ((*s_objet).objet))).tableau))[i]), 'C');
3159:
3160: if (chaine_formatee == NULL)
3161: {
3162: (*s_etat_processus).erreur_systeme =
3163: d_es_allocation_memoire;
3164: return(NULL);
3165: }
3166:
3167: chaine_sauvegarde = chaine;
3168: chaine = (unsigned char *) malloc(
3169: (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
3170: + 2) * sizeof(unsigned char));
3171:
3172: if (chaine == NULL)
3173: {
3174: (*s_etat_processus).erreur_systeme =
3175: d_es_allocation_memoire;
3176: return(NULL);
3177: }
3178:
3179: strcpy(chaine, chaine_sauvegarde);
3180: free(chaine_sauvegarde);
3181: strcat(chaine, " ");
3182: strcat(chaine, chaine_formatee);
3183: free(chaine_formatee);
3184: }
3185:
3186: chaine_sauvegarde = chaine;
3187: chaine = (unsigned char *) malloc(
3188: (strlen(chaine_sauvegarde) + 3)
3189: * sizeof(unsigned char));
3190:
3191: if (chaine == NULL)
3192: {
3193: (*s_etat_processus).erreur_systeme =
3194: d_es_allocation_memoire;
3195: return(NULL);
3196: }
3197:
3198: strcpy(chaine, chaine_sauvegarde);
3199: free(chaine_sauvegarde);
3200: strcat(chaine, " ]");
3201: }
3202: }
3203: else if ((*s_objet).type == VIN)
3204: {
3205:
3206: /*
3207: --------------------------------------------------------------------------------
3208: Vecteur entier
3209: --------------------------------------------------------------------------------
3210: */
3211:
3212: nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
3213: .taille;
3214:
3215: chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
3216:
3217: if (chaine != NULL)
3218: {
3219: strcpy(chaine, "[");
3220:
3221: for(i = 0; i < nombre_colonnes; i++)
3222: {
3223: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
3224: &(((integer8 *) ((*((struct_vecteur *)
3225: ((*s_objet).objet))).tableau))[i]), 'I');
3226:
3227: if (chaine_formatee == NULL)
3228: {
3229: (*s_etat_processus).erreur_systeme =
3230: d_es_allocation_memoire;
3231: return(NULL);
3232: }
3233:
3234: chaine_sauvegarde = chaine;
3235: chaine = (unsigned char *) malloc(
3236: (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
3237: + 2) * sizeof(unsigned char));
3238:
3239: if (chaine == NULL)
3240: {
3241: (*s_etat_processus).erreur_systeme =
3242: d_es_allocation_memoire;
3243: return(NULL);
3244: }
3245:
3246: strcpy(chaine, chaine_sauvegarde);
3247: free(chaine_sauvegarde);
3248: strcat(chaine, " ");
3249: strcat(chaine, chaine_formatee);
3250: free(chaine_formatee);
3251: }
3252:
3253: chaine_sauvegarde = chaine;
3254: chaine = (unsigned char *) malloc(
3255: (strlen(chaine_sauvegarde) + 3)
3256: * sizeof(unsigned char));
3257:
3258: if (chaine == NULL)
3259: {
3260: (*s_etat_processus).erreur_systeme =
3261: d_es_allocation_memoire;
3262: return(NULL);
3263: }
3264:
3265: strcpy(chaine, chaine_sauvegarde);
3266: free(chaine_sauvegarde);
3267: strcat(chaine, " ]");
3268: }
3269: }
3270: else if ((*s_objet).type == VRL)
3271: {
3272:
3273: /*
3274: --------------------------------------------------------------------------------
3275: Vecteur réel
3276: --------------------------------------------------------------------------------
3277: */
3278:
3279: nombre_colonnes = (*((struct_vecteur *) ((*s_objet).objet)))
3280: .taille;
3281:
3282: chaine = (unsigned char *) malloc(2 * sizeof(unsigned char));
3283:
3284: if (chaine != NULL)
3285: {
3286: strcpy(chaine, "[");
3287:
3288: for(i = 0; i < nombre_colonnes; i++)
3289: {
3290: chaine_formatee = formateur_nombre(s_etat_processus, (void *)
3291: &(((real8 *) ((*((struct_vecteur *)
3292: ((*s_objet).objet))).tableau))[i]), 'R');
3293:
3294: if (chaine_formatee == NULL)
3295: {
3296: (*s_etat_processus).erreur_systeme =
3297: d_es_allocation_memoire;
3298: return(NULL);
3299: }
3300:
3301: chaine_sauvegarde = chaine;
3302: chaine = (unsigned char *) malloc(
3303: (strlen(chaine_sauvegarde) + strlen(chaine_formatee)
3304: + 2) * sizeof(unsigned char));
3305:
3306: if (chaine == NULL)
3307: {
3308: (*s_etat_processus).erreur_systeme =
3309: d_es_allocation_memoire;
3310: return(NULL);
3311: }
3312:
3313: strcpy(chaine, chaine_sauvegarde);
3314: free(chaine_sauvegarde);
3315: strcat(chaine, " ");
3316: strcat(chaine, chaine_formatee);
3317: free(chaine_formatee);
3318: }
3319:
3320: chaine_sauvegarde = chaine;
3321: chaine = (unsigned char *) malloc(
3322: (strlen(chaine_sauvegarde) + 3)
3323: * sizeof(unsigned char));
3324:
3325: if (chaine == NULL)
3326: {
3327: (*s_etat_processus).erreur_systeme =
3328: d_es_allocation_memoire;
3329: return(NULL);
3330: }
3331:
3332: strcpy(chaine, chaine_sauvegarde);
3333: free(chaine_sauvegarde);
3334: strcat(chaine, " ]");
3335: }
3336: }
3337:
3338: return(chaine);
3339: }
3340:
3341:
3342: /*
3343: ================================================================================
3344: Routines qui transforment un nombre entier, réel ou complexe en chaîne de
3345: caractères suivant le format courant
3346: ================================================================================
3347: Entrées : pointeur générique sur la donnée numérique à convertir,
3348: type de l'entité (I, R ou C).
3349: --------------------------------------------------------------------------------
3350: Sorties : chaîne de caractères allouée dans la routine
3351: --------------------------------------------------------------------------------
3352: Effets de bord : néant
3353: ================================================================================
3354: */
3355:
3356: /*
3357: --------------------------------------------------------------------------------
3358: Formatage des complexes, réels et entiers
3359: --------------------------------------------------------------------------------
3360: */
3361:
3362: unsigned char *
3363: formateur_nombre(struct_processus *s_etat_processus,
3364: void *valeur_numerique, unsigned char type)
3365: {
3366: unsigned char *chaine;
3367: unsigned char *construction_chaine;
3368: unsigned char *sauvegarde;
3369: unsigned char *tampon;
3370:
3371: chaine = NULL;
3372:
3373: switch(type)
3374: {
3375: case 'C' :
3376: {
3377: construction_chaine = (unsigned char *) malloc(
3378: 2 * sizeof(unsigned char));
3379:
3380: if (construction_chaine == NULL)
3381: {
3382: (*s_etat_processus).erreur_systeme =
3383: d_es_allocation_memoire;
3384: return(NULL);
3385: }
3386:
3387: strcpy(construction_chaine, "(");
3388:
3389: tampon = formateur_reel(s_etat_processus,
3390: (void *) &((*((struct_complexe16 *)
3391: valeur_numerique)).partie_reelle), 'R');
3392:
3393: if (tampon == NULL)
3394: {
3395: (*s_etat_processus).erreur_systeme =
3396: d_es_allocation_memoire;
3397: return(NULL);
3398: }
3399:
3400: sauvegarde = construction_chaine;
3401:
3402: construction_chaine = (unsigned char *) malloc(
3403: (strlen(sauvegarde) + strlen(tampon) + 2)
3404: * sizeof(unsigned char));
3405:
3406: if (construction_chaine == NULL)
3407: {
3408: (*s_etat_processus).erreur_systeme =
3409: d_es_allocation_memoire;
3410: return(NULL);
3411: }
3412:
3413: strcpy(construction_chaine, sauvegarde);
3414: free(sauvegarde);
3415: strcat(construction_chaine, tampon);
3416: free(tampon);
3417:
3418: if (test_cfsf(s_etat_processus, 48) == d_faux)
3419: {
3420: strcat(construction_chaine, ",");
3421: }
3422: else
3423: {
3424: strcat(construction_chaine, ".");
3425: }
3426:
3427: tampon = formateur_reel(s_etat_processus,
3428: (void *) &((*((struct_complexe16 *)
3429: valeur_numerique)).partie_imaginaire), 'R');
3430:
3431: if (tampon == NULL)
3432: {
3433: (*s_etat_processus).erreur_systeme =
3434: d_es_allocation_memoire;
3435: return(NULL);
3436: }
3437:
3438: sauvegarde = construction_chaine;
3439:
3440: construction_chaine = (unsigned char *) malloc(
3441: (strlen(sauvegarde) + strlen(tampon) + 2)
3442: * sizeof(unsigned char));
3443:
3444: if (construction_chaine == NULL)
3445: {
3446: (*s_etat_processus).erreur_systeme =
3447: d_es_allocation_memoire;
3448: return(NULL);
3449: }
3450:
3451: strcpy(construction_chaine, sauvegarde);
3452: free(sauvegarde);
3453: strcat(construction_chaine, tampon);
3454: free(tampon);
3455: strcat(construction_chaine, ")");
3456:
3457: chaine = construction_chaine;
3458:
3459: break;
3460: }
3461:
3462: case 'R' :
3463: {
3464: chaine = formateur_reel(s_etat_processus, valeur_numerique, 'R');
3465:
3466: if (chaine == NULL)
3467: {
3468: (*s_etat_processus).erreur_systeme =
3469: d_es_allocation_memoire;
3470: return(NULL);
3471: }
3472:
3473: break;
3474: }
3475:
3476: default :
3477: case 'I' :
3478: {
3479: chaine = formateur_reel(s_etat_processus, valeur_numerique, 'I');
3480:
3481: if (chaine == NULL)
3482: {
3483: (*s_etat_processus).erreur_systeme =
3484: d_es_allocation_memoire;
3485: return(NULL);
3486: }
3487:
3488: break;
3489: }
3490: }
3491:
3492: return(chaine);
3493: }
3494:
3495:
3496: /*
3497: --------------------------------------------------------------------------------
3498: Formateur des réels et entiers
3499: --------------------------------------------------------------------------------
3500: */
3501:
3502: unsigned char *
3503: formateur_reel(struct_processus *s_etat_processus,
3504: void *valeur_numerique, unsigned char type)
3505: {
3506: real8 mantisse;
3507: real8 tampon_reel;
3508:
3509: integer8 tampon_entier;
3510:
3511: logical1 i49;
3512: logical1 i50;
3513:
3514: long correction;
3515: long exposant;
3516: long longueur_utile;
3517: long longueur_utile_limite;
3518:
3519: unsigned char *chaine;
3520: unsigned char format[16 + 1];
3521: unsigned char mode[3 + 1];
3522: unsigned char *ptr;
3523: unsigned char tampon[16 + 1];
3524:
3525: unsigned long i;
3526: unsigned long j;
3527:
3528: chaine = (unsigned char *) malloc((32 + 1) * sizeof(unsigned char));
3529:
3530: if (chaine == NULL)
3531: {
3532: (*s_etat_processus).erreur_systeme =
3533: d_es_allocation_memoire;
3534: return(NULL);
3535: }
3536:
3537: if (type == 'R')
3538: {
3539: tampon_reel = *((real8 *) valeur_numerique);
3540:
3541: if (tampon_reel > ((real8) 0))
3542: {
3543: exposant = (long) floor(log10(tampon_reel));
3544: }
3545: else if (tampon_reel < ((real8) 0))
3546: {
3547: exposant = (long) floor(log10(-tampon_reel));
3548: }
3549: else
3550: {
3551: exposant = 0;
3552: }
3553:
3554: mantisse = (*((real8 *) valeur_numerique)) / pow(10, exposant);
3555: }
3556: else
3557: {
3558: tampon_entier = *((integer8 *) valeur_numerique);
3559:
3560: if (tampon_entier > ((integer8) 0))
3561: {
3562: exposant = (long) floor(log10(tampon_entier));
3563: }
3564: else if (tampon_entier < ((integer8) 0))
3565: {
3566: exposant = (long) floor(log10(-tampon_entier));
3567: }
3568: else
3569: {
3570: exposant = 0;
3571: }
3572:
3573: mantisse = (*((integer8 *) valeur_numerique)) / pow(10, exposant);
3574: }
3575:
3576: longueur_utile = 0;
3577: j = 1;
3578:
3579: for(i = 53; i <= 56; i++)
3580: {
3581: longueur_utile += (test_cfsf(s_etat_processus, (unsigned char) i)
3582: == d_vrai) ? j : 0;
3583: j *= 2;
3584: }
3585:
3586: longueur_utile_limite = 15;
3587:
3588: if (longueur_utile > longueur_utile_limite)
3589: {
3590: longueur_utile = longueur_utile_limite;
3591: }
3592:
3593: i49 = test_cfsf(s_etat_processus, 49);
3594: i50 = test_cfsf(s_etat_processus, 50);
3595:
3596: if (i49 == d_faux)
3597: {
3598: if (i50 == d_faux)
3599: {
3600:
3601: /*
3602: --------------------------------------------------------------------------------
3603: Mode standard
3604: --------------------------------------------------------------------------------
3605: */
3606:
3607: strcpy(mode, "STD");
3608: }
3609: else
3610: {
3611:
3612: /*
3613: --------------------------------------------------------------------------------
3614: Mode scientifique
3615: --------------------------------------------------------------------------------
3616: */
3617:
3618: strcpy(mode, "SCI");
3619: }
3620: }
3621: else
3622: {
3623: if (i50 == d_faux)
3624: {
3625:
3626: /*
3627: --------------------------------------------------------------------------------
3628: Mode fixe
3629: --------------------------------------------------------------------------------
3630: */
3631:
3632: strcpy(mode, "FIX");
3633: }
3634: else
3635: {
3636:
3637: /*
3638: --------------------------------------------------------------------------------
3639: Mode ingénieur
3640: --------------------------------------------------------------------------------
3641: */
3642:
3643: strcpy(mode, "ENG");
3644: }
3645: }
3646:
3647: if ((strcmp(mode, "SCI") == 0) ||
3648: ((strcmp(mode, "STD") == 0) && ((exposant >
3649: longueur_utile_limite) ||
3650: (exposant < -longueur_utile_limite))) ||
3651: ((strcmp(mode, "FIX") == 0) &&
3652: ((exposant >= longueur_utile_limite) ||
3653: (exposant < -longueur_utile))))
3654: {
3655: chaine[0] = d_code_fin_chaine;
3656: format[0] = d_code_fin_chaine;
3657:
3658: if (strcmp(mode, "STD") == 0)
3659: {
3660: longueur_utile = longueur_utile_limite - 1;
3661: }
3662:
3663: sprintf(format, "%%.%luf", longueur_utile);
3664: sprintf(tampon, format, mantisse);
3665: strcpy(chaine, tampon);
3666:
3667: if (strcmp(mode, "STD") == 0)
3668: {
3669: ptr = &(chaine[strlen(chaine) - 1]);
3670: while(((*ptr) == '0') || ((*ptr) == '.'))
3671: {
3672: (*ptr) = d_code_fin_chaine;
3673: ptr--;
3674: }
3675: }
3676:
3677: strcat(chaine, "E");
3678: sprintf(tampon, "%ld", exposant);
3679: strcat(chaine, tampon);
3680: }
3681: else if (strcmp(mode, "FIX") == 0)
3682: {
3683: chaine[0] = d_code_fin_chaine;
3684: format[0] = d_code_fin_chaine;
3685:
3686: if (longueur_utile + exposant >= longueur_utile_limite)
3687: {
3688: longueur_utile = longueur_utile_limite - (exposant + 1);
3689: }
3690:
3691: sprintf(format, "%%.%luf", longueur_utile);
3692:
3693: sprintf(tampon, format, (mantisse * pow(10, exposant)));
3694: strcpy(chaine, tampon);
3695: }
3696: else if (strcmp(mode, "ENG") == 0)
3697: {
3698: chaine[0] = d_code_fin_chaine;
3699: format[0] = d_code_fin_chaine;
3700:
3701: correction = labs(exposant) % 3;
3702:
3703: if (exposant < 0)
3704: {
3705: if (correction == 0)
3706: {
3707: correction = 3;
3708: }
3709:
3710: correction = 3 - correction;
3711: }
3712:
3713: longueur_utile -= correction;
3714: sprintf(format, "%%.%luf", longueur_utile);
3715:
3716: sprintf(tampon, format, (mantisse * pow(10, correction)));
3717: strcpy(chaine, tampon);
3718: strcat(chaine, "E");
3719: sprintf(tampon, "%ld", (exposant - correction));
3720: strcat(chaine, tampon);
3721: }
3722: else
3723: {
3724: if (type == 'I')
3725: {
3726: chaine[0] = d_code_fin_chaine;
3727: sprintf(tampon, "%lld", *((integer8 *) valeur_numerique));
3728: }
3729: else
3730: {
3731: chaine[0] = d_code_fin_chaine;
3732: format[0] = d_code_fin_chaine;
3733:
3734: if (exposant >= 0)
3735: {
3736: sprintf(format, "%%.%luf", (longueur_utile_limite - exposant
3737: - 1));
3738: }
3739: else
3740: {
3741: sprintf(format, "%%.%luf", longueur_utile_limite);
3742: }
3743:
3744: sprintf(tampon, format, *((real8 *) valeur_numerique));
3745:
3746: i = strlen(tampon) - 1;
3747: while(tampon[i] == '0')
3748: {
3749: tampon[i] = d_code_fin_chaine;
3750: i--;
3751: }
3752:
3753: if (ds_imposition_separateur_decimal == d_faux)
3754: {
3755: i = strlen(tampon) - 1;
3756: if (tampon[i] == '.')
3757: {
3758: tampon[i] = d_code_fin_chaine;
3759: }
3760: }
3761: }
3762: strcpy(chaine, tampon);
3763: }
3764:
3765: if (test_cfsf(s_etat_processus, 48) == d_vrai)
3766: {
3767: for(i = 0; i < strlen(chaine); i++)
3768: {
3769: if (chaine[i] == '.')
3770: {
3771: chaine[i] = ',';
3772: }
3773: }
3774: }
3775:
3776: return(chaine);
3777: }
3778:
3779: // vim: ts=4