Diff for /rpl/src/rplcore.c between versions 1.2 and 1.74

version 1.2, 2010/01/27 22:22:17 version 1.74, 2020/01/10 11:15:51
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 43  rplcore(struct_processus *s_etat_process Line 43  rplcore(struct_processus *s_etat_process
     logical1                    erreur;      logical1                    erreur;
     logical1                    fin_boucle;      logical1                    fin_boucle;
   
     long                        i;      int                         longueur_lignes = 65;
     long                        j;  
     long                        longueur_lignes = 65;      integer8                    i;
       integer8                    j;
   
     struct_liste_chainee        *l_base_pile;      struct_liste_chainee        *l_base_pile;
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
Line 58  rplcore(struct_processus *s_etat_process Line 59  rplcore(struct_processus *s_etat_process
     unsigned char               *pile;      unsigned char               *pile;
     unsigned char               *ptr;      unsigned char               *ptr;
     unsigned char               *ptr_bis;      unsigned char               *ptr_bis;
       unsigned char               registre;
     unsigned char               registre_langue;      unsigned char               registre_langue;
   
     (*s_etat_processus).core = d_faux;      (*s_etat_processus).core = d_faux;
   
       cf(s_etat_processus, 34);
   
     sf(s_etat_processus, 37);      sf(s_etat_processus, 37);
     sf(s_etat_processus, 38);      sf(s_etat_processus, 38);
     sf(s_etat_processus, 39);      sf(s_etat_processus, 39);
Line 101  rplcore(struct_processus *s_etat_process Line 105  rplcore(struct_processus *s_etat_process
     }      }
   
     snprintf(nom, strlen(ds_rplcore) + 64 + 1,      snprintf(nom, strlen(ds_rplcore) + 64 + 1,
             "%s-%lu-%lu", ds_rplcore, (unsigned long) getpid(),              "%s-%llu-%llu", ds_rplcore, (unsigned long long) getpid(),
             (unsigned long) pthread_self());              (unsigned long long) pthread_self());
   
     if ((fichier = fopen(nom, "w+")) == NULL)      if ((fichier = fopen(nom, "w+")) == NULL)
     {      {
Line 141  rplcore(struct_processus *s_etat_process Line 145  rplcore(struct_processus *s_etat_process
         return;          return;
     }      }
   
     if (fprintf(fichier, "// Error :\n%s [%s at level %lu]\n\n",      if ((*s_etat_processus).instruction_derniere_erreur == NULL)
       {
           if (fprintf(fichier, "// Error :\n%s [level %lld]\n\n",
                   message_erreur, (*s_etat_processus).niveau_derniere_erreur) < 0)
           {
               free(message_erreur);
   
               (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
               return;
           }
       }
       else if ((*s_etat_processus).instruction_derniere_erreur[0] ==
               d_code_fin_chaine)
       {
           if (fprintf(fichier, "// Error :\n%s [level %lld]\n\n",
                   message_erreur, (*s_etat_processus).niveau_derniere_erreur) < 0)
           {
               free(message_erreur);
   
               (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
               return;
           }
       }
       else if (fprintf(fichier, "// Error :\n%s [%s at level %lld]\n\n",
             message_erreur, (*s_etat_processus).instruction_derniere_erreur,              message_erreur, (*s_etat_processus).instruction_derniere_erreur,
             (*s_etat_processus).niveau_derniere_erreur) < 0)              (*s_etat_processus).niveau_derniere_erreur) < 0)
     {      {
Line 153  rplcore(struct_processus *s_etat_process Line 180  rplcore(struct_processus *s_etat_process
   
     free(message_erreur);      free(message_erreur);
   
       if (fprintf(fichier, "// System stack\n\n") < 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
           return;
       }
   
       trace(s_etat_processus, fichier);
   
     if (fprintf(fichier, "// Process stack\n\n") < 0)      if (fprintf(fichier, "// Process stack\n\n") < 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;          (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 163  rplcore(struct_processus *s_etat_process Line 198  rplcore(struct_processus *s_etat_process
             (*s_etat_processus).l_base_pile_processus;              (*s_etat_processus).l_base_pile_processus;
     i = 0;      i = 0;
   
     if (pthread_mutex_trylock(&((*s_etat_processus).mutex)) == 0)      if (pthread_mutex_trylock(&((*s_etat_processus).mutex_pile_processus)) == 0)
     {      {
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {
Line 171  rplcore(struct_processus *s_etat_process Line 206  rplcore(struct_processus *s_etat_process
                     (*(*l_element_courant).donnee).objet)).thread)                      (*(*l_element_courant).donnee).objet)).thread)
                     .processus_detache == d_vrai)                      .processus_detache == d_vrai)
             {              {
                 if (fprintf(fichier, "%ld: Process [%d]\n",                  if (fprintf(fichier, "%d: Process [%d]\n",
                         i++, (int) (*(*((struct_processus_fils *)                          (int) i++, (int) (*(*((struct_processus_fils *)
                         (*(*l_element_courant).donnee).objet)).thread).pid) < 0)                          (*(*l_element_courant).donnee).objet)).thread).pid) < 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;                      (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
Line 181  rplcore(struct_processus *s_etat_process Line 216  rplcore(struct_processus *s_etat_process
             }              }
             else              else
             {              {
                 if (fprintf(fichier, "%ld: Thread [%llu] from [%llu]\n",                  if (fprintf(fichier, "%ld: Thread [%llu] from [%d]\n", (int)
                         i++, (unsigned long long) (*(*((struct_processus_fils *)                          i++, (unsigned long long) (*(*((struct_processus_fils *)
                         (*(*l_element_courant).donnee).objet)).thread)                          (*(*l_element_courant).donnee).objet)).thread)
                         .tid, (unsigned long long)                          .tid, (int)
                         (*(*((struct_processus_fils *) (*(*l_element_courant)                          (*(*((struct_processus_fils *) (*(*l_element_courant)
                         .donnee).objet)).thread).pid) < 0)                          .donnee).objet)).thread).pid) < 0)
                 {                  {
Line 196  rplcore(struct_processus *s_etat_process Line 231  rplcore(struct_processus *s_etat_process
             l_element_courant = (*l_element_courant).suivant;              l_element_courant = (*l_element_courant).suivant;
         }          }
   
         if (fprintf(fichier, "%ld: Process [%d]\n\n", i,          if (fprintf(fichier, "%ld: Process [%d]\n\n", (int) i,
                 (int) getpid()) < 0)                  (int) getpid()) < 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return;              return;
         }          }
   
         pthread_mutex_unlock(&((*s_etat_processus).mutex));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
     }      }
   
     if (test_cfsf(s_etat_processus, 31) == d_vrai)      if (test_cfsf(s_etat_processus, 31) == d_vrai)
Line 235  rplcore(struct_processus *s_etat_process Line 270  rplcore(struct_processus *s_etat_process
   
         if ((*s_etat_processus).l_base_pile != NULL)          if ((*s_etat_processus).l_base_pile != NULL)
         {          {
               registre = (*s_etat_processus).autorisation_conversion_chaine;
               (*s_etat_processus).autorisation_conversion_chaine = 'N';
   
             ecriture_pile(s_etat_processus, fichier, l_base_pile, 1);              ecriture_pile(s_etat_processus, fichier, l_base_pile, 1);
   
               (*s_etat_processus).autorisation_conversion_chaine = registre;
         }          }
         else          else
         {          {
Line 280  rplcore(struct_processus *s_etat_process Line 320  rplcore(struct_processus *s_etat_process
   
     if ((*s_etat_processus).l_base_pile != NULL)      if ((*s_etat_processus).l_base_pile != NULL)
     {      {
           registre = (*s_etat_processus).autorisation_conversion_chaine;
           (*s_etat_processus).autorisation_conversion_chaine = 'N';
   
         ecriture_pile(s_etat_processus, fichier,          ecriture_pile(s_etat_processus, fichier,
                 (*s_etat_processus).l_base_pile, 1);                  (*s_etat_processus).l_base_pile, 1);
   
           (*s_etat_processus).autorisation_conversion_chaine = registre;
     }      }
     else      else
     {      {
Line 439  rplcore(struct_processus *s_etat_process Line 484  rplcore(struct_processus *s_etat_process
                     while(((*ptr_bis) != d_code_fin_chaine) &&                      while(((*ptr_bis) != d_code_fin_chaine) &&
                             (fin_boucle == d_faux))                              (fin_boucle == d_faux))
                     {                      {
                         if (j == (long) (*s_etat_processus).position_courante)                          if (j == (*s_etat_processus).position_courante)
                         {                          {
                             if (fprintf(fichier, ">|<") < 0)                              if (fprintf(fichier, ">|<") < 0)
                             {                              {
Line 484  rplcore(struct_processus *s_etat_process Line 529  rplcore(struct_processus *s_etat_process
                         }                          }
                     }                      }
   
                     if ((i <= (long) (*s_etat_processus).position_courante) &&                      if ((i <= (*s_etat_processus).position_courante) &&
                             ((i + longueur_lignes) > (long) (*s_etat_processus)                              ((i + longueur_lignes) > (*s_etat_processus)
                             .position_courante))                              .position_courante))
                     {                      {
                         if (fprintf(fichier, "\nError  : ") < 0)                          if (fprintf(fichier, "\nError  : ") < 0)

Removed from v.1.2  
changed lines
  Added in v.1.74


CVSweb interface <joel.bertrand@systella.fr>