Diff for /rpl/src/gestion_pile_systeme.c between versions 1.15 and 1.16

version 1.15, 2010/07/13 08:59:20 version 1.16, 2010/07/13 13:01:21
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 302  void Line 303  void
 trace(struct_processus *s_etat_processus, FILE *flux)  trace(struct_processus *s_etat_processus, FILE *flux)
 {  {
     integer8                        i;      integer8                        i;
       integer8                        candidat;
   
       long                            delta;
   
     struct_liste_pile_systeme       *l_element_courant;      struct_liste_pile_systeme       *l_element_courant;
   
     unsigned char                   *tampon;      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 326  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 : (%p) D=", i--, l_element_courant);          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 351  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 376  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  Call from RPL/2 initialization");
                       }
                 }                  }
             }              }
         }          }

Removed from v.1.15  
changed lines
  Added in v.1.16


CVSweb interface <joel.bertrand@systella.fr>