Diff for /rpl/src/formateur.c between versions 1.84 and 1.98

version 1.84, 2017/06/30 13:11:25 version 1.98, 2022/09/07 13:40:31
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.27    RPL/2 (R) version 4.1.34
   Copyright (C) 1989-2017 Dr. BERTRAND Joël    Copyright (C) 1989-2021 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 3307  formateur(struct_processus *s_etat_proce Line 3307  formateur(struct_processus *s_etat_proce
             strcat(chaine, " ]");              strcat(chaine, " ]");
         }          }
     }      }
       else if ((*s_objet).type == REC)
       {
           chaine = (unsigned char *) malloc(4 * sizeof(unsigned char));
   
           if (chaine == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           strcpy(chaine, "|[ ");
           offset = ((integer8) strlen(chaine)) + offset_initial;
   
           // L'objet se compose de deux tables à une dimension de
           // mêmes tailles.
   
           chaine_sauvegarde = chaine;
   
           if ((chaine_formatee = formateur(s_etat_processus, (long) offset,
                   (*((struct_record *) (*s_objet).objet)).noms)) == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           if ((chaine = (unsigned char *) malloc((strlen(chaine_formatee)
                   + strlen(chaine_sauvegarde) + 1)
                   * sizeof(unsigned char))) == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
           free(chaine_sauvegarde);
           free(chaine_formatee);
   
           if (test_cfsf(s_etat_processus, 45) == d_vrai)
           {
               chaine_sauvegarde = chaine;
   
               if ((chaine = (unsigned char *) malloc(
                       (strlen(chaine_sauvegarde) + 2) * sizeof(unsigned char)))
                       == NULL)
               {
                   (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return(NULL);
               }
   
               strcpy(chaine, chaine_sauvegarde);
               free(chaine_sauvegarde);
               strcat(chaine, "\n");
   
               chaine_sauvegarde = chaine;
   
               chaine = (unsigned char *) malloc(
                       (strlen(chaine_sauvegarde) + 1 + ((size_t) offset))
                       * sizeof(unsigned char));
   
               if (chaine == NULL)
               {
                   (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return(NULL);
               }
   
               strcpy(chaine, chaine_sauvegarde);
               free(chaine_sauvegarde);
               ptre = &(chaine[strlen(chaine)]);
   
               for(k = 0; k < offset; k++, *(ptre++) = ' ');
   
               (*ptre) = d_code_fin_chaine;
           }
           else
           {
               chaine_sauvegarde = chaine;
   
               if ((chaine = (unsigned char *) malloc(
                       (strlen(chaine_sauvegarde) + 2)
                       * sizeof(unsigned char))) == NULL)
               {
                   (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return(NULL);
               }
   
               strcpy(chaine, chaine_sauvegarde);
               free(chaine_sauvegarde);
               strcat(chaine, " ");
           }
   
           chaine_sauvegarde = chaine;
   
           if ((chaine_formatee = formateur(s_etat_processus, (long) offset,
                   (*((struct_record *) (*s_objet).objet)).donnees)) == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           if ((chaine = (unsigned char *) malloc((strlen(chaine_formatee)
                   + strlen(chaine_sauvegarde) + 1)
                   * sizeof(unsigned char))) == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           sprintf(chaine, "%s%s", chaine_sauvegarde, chaine_formatee);
           free(chaine_sauvegarde);
           free(chaine_formatee);
   
           chaine_sauvegarde = chaine;
           chaine = (unsigned char *) malloc((strlen(chaine_sauvegarde) + 4)
                   * sizeof(unsigned char));
   
           if (chaine == NULL)
           {
               (*s_etat_processus).erreur_systeme =
                       d_es_allocation_memoire;
               return(NULL);
           }
   
           strcpy(chaine, chaine_sauvegarde);
           free(chaine_sauvegarde);
           strcat(chaine, " ]|");
       }
       else if ((*s_objet).type == NON)
       {
           if ((chaine = malloc((strlen("System object") + 1)
                   * sizeof(unsigned char))) == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(NULL);
           }
   
           strcpy(chaine, "System object");
       }
     else if ((*s_objet).type == EXT)      else if ((*s_objet).type == EXT)
     {      {
         if ((__type_disp = dlsym((*s_objet).descripteur_bibliotheque,          l_element_courant = (*s_etat_processus).s_bibliotheques;
                 "__type_disp")) == NULL)  
           while(l_element_courant != NULL)
           {
               if ((*((struct_bibliotheque *) (*l_element_courant).donnee))
                       .descripteur == (*s_objet).descripteur_bibliotheque)
               {
                   if ((__type_disp = dlsym((*s_objet).descripteur_bibliotheque,
                           "__type_disp")) == NULL)
                   {
                       // Symbole externe non affichable
   
                       if ((chaine = malloc((strlen(
                               "External symbol (disp function not found)") + 1)
                               * sizeof(unsigned char))) == NULL)
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return(NULL);
                       }
   
                       strcpy(chaine, "External symbol (disp function not found)");
                   }
                   else
                   {
                       // Symbole externe affichable
                       void        **arg;
   
                       arg = (void **) &s_objet;
                       __type_disp(s_etat_processus, arg);
                       chaine = (unsigned char *) (*arg);
                   }
   
                   break;
               }
   
               l_element_courant = (*l_element_courant).suivant;
           }
   
           if (l_element_courant == NULL)
         {          {
             // Symbole externe non affichable              // Symbole externe non affichable
   
             if ((chaine = malloc((strlen("External symbol") + 1)              if ((chaine = malloc((strlen("External symbol") + 1)
                     * sizeof(unsigned char))) == NULL)                      * sizeof(unsigned char))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme =
                           d_es_allocation_memoire;
                   return(NULL);
             }              }
   
             strcpy(chaine, "External symbol");              strcpy(chaine, "External symbol");
         }          }
         else  
         {  
             // Symbole externe affichable  
             __type_disp(s_etat_processus, (void **) &chaine);  
         }  
     }      }
     else      else
     {      {

Removed from v.1.84  
changed lines
  Added in v.1.98


CVSweb interface <joel.bertrand@systella.fr>