Diff for /rpl/src/gestion_pile_systeme.c between versions 1.12 and 1.17

version 1.12, 2010/06/24 09:21:43 version 1.17, 2010/07/13 14:17:45
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.16    RPL/2 (R) version 4.0.17
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 131  empilement_pile_systeme(struct_processus Line 131  empilement_pile_systeme(struct_processus
     (*(*s_etat_processus).l_base_pile_systeme).clause = ' ';      (*(*s_etat_processus).l_base_pile_systeme).clause = ' ';
     (*(*s_etat_processus).l_base_pile_systeme).adresse_retour = 0;      (*(*s_etat_processus).l_base_pile_systeme).adresse_retour = 0;
     (*(*s_etat_processus).l_base_pile_systeme).niveau_courant = 0;      (*(*s_etat_processus).l_base_pile_systeme).niveau_courant = 0;
       (*(*s_etat_processus).l_base_pile_systeme).pointeur_adresse_retour = NULL;
     (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';      (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';
     (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;      (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;
     (*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle = NULL;      (*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle = NULL;
Line 301  effacement_pile_systeme(struct_processus Line 302  effacement_pile_systeme(struct_processus
 void  void
 trace(struct_processus *s_etat_processus, FILE *flux)  trace(struct_processus *s_etat_processus, FILE *flux)
 {  {
       integer8                        i;
       integer8                        candidat;
   
       long                            delta;
   
     struct_liste_pile_systeme       *l_element_courant;      struct_liste_pile_systeme       *l_element_courant;
   
     integer8                        i;      unsigned char                   *tampon;
   
       unsigned long                   p;
       unsigned long                   v;
   
     l_element_courant = (*s_etat_processus).l_base_pile_systeme;      l_element_courant = (*s_etat_processus).l_base_pile_systeme;
     i = 0;      i = 0;
Line 324  trace(struct_processus *s_etat_processus Line 333  trace(struct_processus *s_etat_processus
   
     while(l_element_courant != NULL)      while(l_element_courant != NULL)
     {      {
         fprintf(flux, "%d : D=", i--);          fprintf(flux, "%d : (%016X) D=", i--, l_element_courant);
   
         fprintf(flux, ((*l_element_courant).creation_variables_statiques          fprintf(flux, ((*l_element_courant).creation_variables_statiques
                 == d_vrai) ? "1" : "0");                  == d_vrai) ? "1" : "0");
Line 349  trace(struct_processus *s_etat_processus Line 358  trace(struct_processus *s_etat_processus
             if ((*l_element_courant).origine_routine_evaluation == 'Y')              if ((*l_element_courant).origine_routine_evaluation == 'Y')
             {              {
                 fprintf(flux, "EVL ");                  fprintf(flux, "EVL ");
   
                 if ((*l_element_courant).adresse_retour != 0)  
                 {  
                     fprintf(flux, "P=%lu", (*l_element_courant)  
                             .adresse_retour);  
                 }  
             }              }
             else              else
             {              {
                 fprintf(flux, "SEQ ");                  fprintf(flux, "SEQ ");
   
                 if ((*l_element_courant).pointeur_objet_retour != NULL)                  if ((*l_element_courant).adresse_retour != 0)
                 {                  {
                     fprintf(flux, "A=%X", (*l_element_courant)                      fprintf(flux, "P=%016X", (*l_element_courant)
                             .pointeur_objet_retour);                              .adresse_retour);
   
                       // Calcul de la routine de départ
   
                       candidat = (*s_etat_processus)
                               .longueur_definitions_chainees;
                       p = 0;
   
                       for(v = 0; v < (*s_etat_processus).nombre_variables; v++)
                       {
                           if ((*s_etat_processus).s_liste_variables[v].niveau
                                   == 0)
                           {
                               delta = (*l_element_courant).adresse_retour
                                       - (*((unsigned long *)
                                       ((*(*s_etat_processus)
                                       .s_liste_variables[v].objet).objet)));
   
                               if ((delta > 0) && (delta < candidat))
                               {
                                   candidat = delta;
                                   p = v + 1;
                               }
                           }
                       }
   
                       if (p > 0)
                       {
                           fprintf(flux, "\n  Call from %s", (*s_etat_processus)
                                   .s_liste_variables[p - 1].nom);
                       }
                       else
                       {
                           fprintf(flux, "\n  Call from RPL/2 initialization");
                       }
                   }
                   else
                   {
                       fprintf(flux, "RPL/2 initialization");
                 }                  }
             }              }
         }          }
Line 374  trace(struct_processus *s_etat_processus Line 415  trace(struct_processus *s_etat_processus
             if ((*l_element_courant).origine_routine_evaluation == 'Y')              if ((*l_element_courant).origine_routine_evaluation == 'Y')
             {              {
                 fprintf(flux, "EVL ");                  fprintf(flux, "EVL ");
   
                 if ((*l_element_courant).adresse_retour != 0)  
                 {  
                     fprintf(flux, "P=%lu", (*l_element_courant)  
                             .adresse_retour);  
                 }  
             }              }
             else              else
             {              {
                 fprintf(flux, "SEQ ");                  fprintf(flux, "SEQ ");
   
                 if ((*l_element_courant).pointeur_objet_retour != NULL)                  if ((*l_element_courant).pointeur_adresse_retour != NULL)
                 {                  {
                     fprintf(flux, "A=%X", (*l_element_courant)                      fprintf(flux, "A=%016X ", (*l_element_courant)
                             .pointeur_objet_retour);                              .pointeur_adresse_retour);
   
                       // Calcul de la routine de départ
   
                       p = 0;
   
                       for(v = 0; v < (*s_etat_processus).nombre_variables; v++)
                       {
                           if ((*s_etat_processus).s_liste_variables[v].niveau
                                   == 0)
                           {
                               if ((*s_etat_processus).s_liste_variables[v].objet
                                       == (*l_element_courant)
                                       .pointeur_adresse_retour)
                               {
                                   p = v + 1;
                                   break;
                               }
                           }
                       }
   
                       if (p > 0)
                       {
                           fprintf(flux, "\n  Branch to %s", (*s_etat_processus)
                                   .s_liste_variables[p - 1].nom);
                       }
                       else
                       {
                           fprintf(flux, "\n  Branch to evaluation subroutine");
                       }
                 }                  }
             }              }
         }          }
   
         fprintf(flux, "\n");          fprintf(flux, "\n");
   
           if ((*l_element_courant).indice_boucle != NULL)
           {
               tampon = formateur(s_etat_processus, 0,
                       (*l_element_courant).indice_boucle);
               fprintf(flux, "  Index         = %s\n", tampon);
               free(tampon);
           }
   
           if ((*l_element_courant).limite_indice_boucle != NULL)
           {
               tampon = formateur(s_etat_processus, 0,
                       (*l_element_courant).limite_indice_boucle);
               fprintf(flux, "  Limit         = %s\n", tampon);
               free(tampon);
           }
   
           if ((*l_element_courant).objet_de_test != NULL)
           {
               tampon = formateur(s_etat_processus, 0,
                       (*l_element_courant).objet_de_test);
               fprintf(flux, "  Test object   = %s\n", tampon);
               free(tampon);
           }
   
           if ((*l_element_courant).nom_variable != NULL)
           {
               fprintf(flux, "  Variable name = %s\n",
                       (*l_element_courant).nom_variable);
           }
   
         l_element_courant = (*l_element_courant).suivant;          l_element_courant = (*l_element_courant).suivant;
     }      }
   

Removed from v.1.12  
changed lines
  Added in v.1.17


CVSweb interface <joel.bertrand@systella.fr>