Annotation of rpl/src/formateur.c, revision 1.1
1.1 ! bertrand 1: /*
! 2: ================================================================================
! 3: RPL/2 (R) version 4.0.9
! 4: Copyright (C) 1989-2010 Dr. BERTRAND Joël
! 5:
! 6: This file is part of RPL/2.
! 7:
! 8: RPL/2 is free software; you can redistribute it and/or modify it
! 9: under the terms of the CeCILL V2 License as published by the french
! 10: CEA, CNRS and INRIA.
! 11:
! 12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
! 13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
! 14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
! 15: for more details.
! 16:
! 17: You should have received a copy of the CeCILL License
! 18: along with RPL/2. If not, write to info@cecill.info.
! 19: ================================================================================
! 20: */
! 21:
! 22:
! 23: #include "rpl.conv.h"
! 24:
! 25:
! 26: /*
! 27: ================================================================================
! 28: Routine de formation des données pour l'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
CVSweb interface <joel.bertrand@systella.fr>