Diff for /rpl/src/gestion_variables.c between versions 1.46 and 1.47

version 1.46, 2011/08/09 11:31:30 version 1.47, 2011/09/16 08:14:10
Line 1845  liste_variables(struct_processus *s_etat Line 1845  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 1877  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 1892  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 1904  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 ((s_variable.objet = copie_objet(s_nouvel_etat_processus,
                               (*((struct_variable *) (*l_element_courant).donnee))
                               .objet, 'P')) == NULL)
                       {
                           (*s_nouvel_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return;
                       }
   
                       if (ajout_variable(s_nouvel_etat_processus, &s_variable)
                               == d_erreur)
                       {
                           return;
                       }
   
                 if (ajout_variable(s_nouvel_etat_processus, &s_variable)                      l_element_courant = (*l_element_courant).suivant;
                         == d_erreur)  
                 {  
                     return;  
                 }                  }
   
                 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.46  
changed lines
  Added in v.1.47


CVSweb interface <joel.bertrand@systella.fr>