Diff for /rpl/src/gestion_variables.c between versions 1.41 and 1.56

version 1.41, 2011/06/22 13:26:58 version 1.56, 2012/08/22 10:47:14
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.0.prerelease.3    RPL/2 (R) version 4.1.10
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1802  nombre_variables(struct_processus *s_eta Line 1802  nombre_variables(struct_processus *s_eta
     return(n);      return(n);
 }  }
   
   
 int  int
 liste_variables(struct_processus *s_etat_processus,  liste_variables(struct_processus *s_etat_processus,
         struct_tableau_variables *tableau, int position,          struct_tableau_variables *tableau, int position,
Line 1845  liste_variables(struct_processus *s_etat Line 1846  liste_variables(struct_processus *s_etat
     return(position);      return(position);
 }  }
   
   
 /*  /*
 ================================================================================  ================================================================================
   Procédure de copie de l'arbre des variables    Procédure de copie de l'arbre des variables
Line 1876  copie_arbre_variables(struct_processus * Line 1878  copie_arbre_variables(struct_processus *
   
     int                             i;      int                             i;
   
       logical1                        niveau_0_traite;
       logical1                        niveau_1_traite;
   
     struct_liste_chainee            *l_element_courant;      struct_liste_chainee            *l_element_courant;
   
     struct_liste_variables          *l_niveau_courant;      struct_liste_variables          *l_niveau_courant;
Line 1888  copie_arbre_variables(struct_processus * Line 1893  copie_arbre_variables(struct_processus *
     l_niveau_courant = (*s_etat_processus).l_liste_variables_par_niveau;      l_niveau_courant = (*s_etat_processus).l_liste_variables_par_niveau;
           
     // Si la variable en tête n'est pas une variable de niveau 0, le niveau      // Si la variable en tête n'est pas une variable de niveau 0, le niveau
     // 0, s'il existe est le nivau précédent la valeur courante dans la      // 0, s'il existe est le niveau précédent la valeur courante dans la
     // boucle.      // boucle.
   
     if ((*((struct_variable *) (*(*l_niveau_courant).liste).donnee)).niveau      if ((*((struct_variable *) (*(*l_niveau_courant).liste).donnee)).niveau
Line 1900  copie_arbre_variables(struct_processus * Line 1905  copie_arbre_variables(struct_processus *
     // Les variables de niveaux 0 et 1 sont accessibles en au plus trois      // Les variables de niveaux 0 et 1 sont accessibles en au plus trois
     // itérations (par construction).      // itérations (par construction).
   
       niveau_0_traite = d_faux;
       niveau_1_traite = d_faux;
   
     for(i = 0; i <= 2; i++)      for(i = 0; i <= 2; i++)
     {      {
         if ((*((struct_variable *) (*(*l_niveau_courant).liste)          if ((*((struct_variable *) (*(*l_niveau_courant).liste)
                 .donnee)).niveau == 0)                  .donnee)).niveau == 0)
         {          {
             l_element_courant = (*l_niveau_courant).liste;              if (niveau_0_traite == d_faux)
   
             while(l_element_courant != NULL)  
             {              {
                 if (ajout_variable(s_nouvel_etat_processus,                  l_element_courant = (*l_niveau_courant).liste;
                         (struct_variable *) (*l_element_courant).donnee)  
                         == d_erreur)                  while(l_element_courant != NULL)
                 {                  {
                     return;                      if (ajout_variable(s_nouvel_etat_processus,
                               (struct_variable *) (*l_element_courant).donnee)
                               == d_erreur)
                       {
                           return;
                       }
   
                       l_element_courant = (*l_element_courant).suivant;
                 }                  }
   
                 l_element_courant = (*l_element_courant).suivant;                  niveau_0_traite = d_vrai;
             }              }
         }          }
         else if ((*((struct_variable *) (*(*l_niveau_courant).liste)          else if ((*((struct_variable *) (*(*l_niveau_courant).liste)
                 .donnee)).niveau == 1)                  .donnee)).niveau == 1)
         {          {
             l_element_courant = (*l_niveau_courant).liste;              if (niveau_1_traite == d_faux)
   
             while(l_element_courant != NULL)  
             {              {
                 s_variable = (*((struct_variable *)                  l_element_courant = (*l_niveau_courant).liste;
                         (*l_element_courant).donnee));  
   
                 if ((s_variable.nom = strdup((*((struct_variable *)                  while(l_element_courant != NULL)
                         (*l_element_courant).donnee)).nom)) == NULL)  
                 {                  {
                     (*s_nouvel_etat_processus).erreur_systeme =                      s_variable = (*((struct_variable *)
                             d_es_allocation_memoire;                              (*l_element_courant).donnee));
                     return;  
                 }  
   
                 if ((s_variable.objet = copie_objet(s_nouvel_etat_processus,                      if ((s_variable.nom = strdup((*((struct_variable *)
                         (*((struct_variable *) (*l_element_courant).donnee))                              (*l_element_courant).donnee)).nom)) == NULL)
                         .objet, 'P')) == NULL)                      {
                 {                          (*s_nouvel_etat_processus).erreur_systeme =
                     (*s_nouvel_etat_processus).erreur_systeme =                                  d_es_allocation_memoire;
                             d_es_allocation_memoire;                          return;
                     return;                      }
                 }  
   
                 if (ajout_variable(s_nouvel_etat_processus, &s_variable)                      if ((s_variable.objet = copie_objet(s_nouvel_etat_processus,
                         == d_erreur)                              (*((struct_variable *) (*l_element_courant).donnee))
                 {                              .objet, 'P')) == NULL)
                     return;                      {
                           (*s_nouvel_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return;
                       }
   
                       if (ajout_variable(s_nouvel_etat_processus, &s_variable)
                               == d_erreur)
                       {
                           return;
                       }
   
                       l_element_courant = (*l_element_courant).suivant;
                 }                  }
   
                 l_element_courant = (*l_element_courant).suivant;                  niveau_1_traite = d_vrai;
             }              }
   
             // Les variables de niveau 0 ayant déjà été copiées, on              // Les variables de niveau 0 ayant déjà été copiées, on

Removed from v.1.41  
changed lines
  Added in v.1.56


CVSweb interface <joel.bertrand@systella.fr>