Diff for /rpl/src/gestion_variables_statiques.c between versions 1.38 and 1.42

version 1.38, 2012/10/07 08:18:35 version 1.42, 2012/12/13 16:59:41
Line 103  creation_variable_statique(struct_proces Line 103  creation_variable_statique(struct_proces
   
     // Ajout de la variable en tête de la liste des variables statiques      // Ajout de la variable en tête de la liste des variables statiques
   
 printf("<0>\n");  
     if ((l_nouvel_element = malloc(sizeof(struct_liste_variables_statiques)))      if ((l_nouvel_element = malloc(sizeof(struct_liste_variables_statiques)))
             == NULL)              == NULL)
     {      {
Line 119  printf("<0>\n"); Line 118  printf("<0>\n");
     }      }
   
     (*(*l_nouvel_element).variable) = (*s_variable);      (*(*l_nouvel_element).variable) = (*s_variable);
   
     (*l_nouvel_element).suivant = (*s_etat_processus)      (*l_nouvel_element).suivant = (*s_etat_processus)
             .l_liste_variables_statiques;              .l_liste_variables_statiques;
     (*l_nouvel_element).precedent = NULL;      (*l_nouvel_element).precedent = NULL;
Line 144  printf("<0>\n"); Line 144  printf("<0>\n");
   
         (*(*s_etat_processus).s_arbre_variables).feuille = NULL;          (*(*s_etat_processus).s_arbre_variables).feuille = NULL;
         (*(*s_etat_processus).s_arbre_variables).feuille_statique = NULL;          (*(*s_etat_processus).s_arbre_variables).feuille_statique = NULL;
           (*(*s_etat_processus).s_arbre_variables).feuille_partagee = NULL;
         (*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0;          (*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0;
         (*(*s_etat_processus).s_arbre_variables).indice_tableau_pere = -1;          (*(*s_etat_processus).s_arbre_variables).indice_tableau_pere = -1;
         (*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL;          (*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL;
           INITIALISATION_MUTEX((*(*s_etat_processus).s_arbre_variables)
                   .mutex_feuille_partagee);
   
         if (((*(*s_etat_processus).s_arbre_variables).noeuds =          if (((*(*s_etat_processus).s_arbre_variables).noeuds =
                 allocation_tableau_noeuds(s_etat_processus)) == NULL)                  allocation_tableau_noeuds(s_etat_processus)) == NULL)
Line 196  printf("<0>\n"); Line 199  printf("<0>\n");
                     .pointeurs_caracteres_variables[*ptr]]).feuille_statique                      .pointeurs_caracteres_variables[*ptr]]).feuille_statique
                     = NULL;                      = NULL;
             (*(*l_variable_courante).noeuds[(*s_etat_processus)              (*(*l_variable_courante).noeuds[(*s_etat_processus)
                       .pointeurs_caracteres_variables[*ptr]]).feuille_partagee
                       = NULL;
               (*(*l_variable_courante).noeuds[(*s_etat_processus)
                     .pointeurs_caracteres_variables[*ptr]]).noeuds_utilises = 0;                      .pointeurs_caracteres_variables[*ptr]]).noeuds_utilises = 0;
               INITIALISATION_MUTEX((*(*l_variable_courante).noeuds
                       [(*s_etat_processus).pointeurs_caracteres_variables[*ptr]])
                       .mutex_feuille_partagee);
   
             // Le champ noeud_pere de la structure créée pointe sur              // Le champ noeud_pere de la structure créée pointe sur
             // la structure parente et l'indice tableau_pere correspond à la              // la structure parente et l'indice tableau_pere correspond à la
Line 289  retrait_variable_statique(struct_process Line 298  retrait_variable_statique(struct_process
   
     logical1                                erreur;      logical1                                erreur;
   
 printf("<1>\n");  
     if ((l_element_a_supprimer = recherche_variable_statique(s_etat_processus,      if ((l_element_a_supprimer = recherche_variable_statique(s_etat_processus,
             nom_variable, position, ((*s_etat_processus)              nom_variable, position, ((*s_etat_processus)
             .mode_execution_programme == 'Y') ? 'P' : 'E')) != NULL)              .mode_execution_programme == 'Y') ? 'P' : 'E')) != NULL)
     {      {
 printf("<2>\n");  
         // (*s_etat_processus).pointeur_variable_statique_courante          // (*s_etat_processus).pointeur_variable_statique_courante
         // pointe sur la variable à éliminer. Cette variable est celle qui          // pointe sur la variable à éliminer. Cette variable est celle qui
         // est présente dans l'une des feuilles statiques de l'arbre des          // est présente dans l'une des feuilles statiques de l'arbre des
Line 306  printf("<2>\n"); Line 313  printf("<2>\n");
   
         if ((*l_element_liste_a_supprimer).precedent != NULL)          if ((*l_element_liste_a_supprimer).precedent != NULL)
         {          {
               // L'élément à supprimer n'est pas le premier de la liste.
   
             (*(*l_element_liste_a_supprimer).precedent).suivant =              (*(*l_element_liste_a_supprimer).precedent).suivant =
                     (*l_element_liste_a_supprimer).suivant;                      (*l_element_liste_a_supprimer).suivant;
   
               if ((*l_element_liste_a_supprimer).suivant != NULL)
               {
                   // Il y a un élément suivant. On le chaîne.
                   (*(*l_element_liste_a_supprimer).suivant).precedent = NULL;
               }
         }          }
         else          else
         {          {
               // L'élement est le premier de la liste. S'il y a un élément
               // suivant, on le chaîne.
   
             if ((*l_element_liste_a_supprimer).suivant != NULL)              if ((*l_element_liste_a_supprimer).suivant != NULL)
             {              {
                 (*(*l_element_liste_a_supprimer).suivant).precedent = NULL;                  (*(*l_element_liste_a_supprimer).suivant).precedent = NULL;
Line 320  printf("<2>\n"); Line 338  printf("<2>\n");
                     (*l_element_liste_a_supprimer).suivant;                      (*l_element_liste_a_supprimer).suivant;
         }          }
   
         if ((*l_element_liste_a_supprimer).suivant != NULL)  
         {  
             (*(*l_element_liste_a_supprimer).suivant).precedent =  
                     (*l_element_liste_a_supprimer).precedent;  
         }  
         else  
         {  
             (*(*l_element_liste_a_supprimer).precedent).suivant = NULL;  
         }  
   
         free(l_element_liste_a_supprimer);          free(l_element_liste_a_supprimer);
   
         // Suppression depuis la feuille statique. Le champ 'precedent' ne sert          // Suppression depuis la feuille statique. Le champ 'precedent' ne sert
Line 337  printf("<2>\n"); Line 345  printf("<2>\n");
   
         if ((*l_element_a_supprimer).precedent != NULL)          if ((*l_element_a_supprimer).precedent != NULL)
         {          {
               // L'élément n'est pas le premier de la liste.
   
             (*(*l_element_a_supprimer).precedent).suivant =              (*(*l_element_a_supprimer).precedent).suivant =
                     (*l_element_a_supprimer).suivant;                      (*l_element_a_supprimer).suivant;
   
               if ((*l_element_a_supprimer).suivant != NULL)
               {
                   (*(*l_element_a_supprimer).suivant).precedent =
                           (*l_element_a_supprimer).precedent;
               }
               else
               {
                   (*(*l_element_a_supprimer).precedent).suivant = NULL;
               }
         }          }
         else          else
         {          {
             (*(*l_element_a_supprimer).suivant).precedent = NULL;              // L'élément est le premier de la liste.
   
               if ((*l_element_a_supprimer).suivant != NULL)
               {
                   (*(*l_element_a_supprimer).suivant).precedent = NULL;
               }
   
             (*(*l_element_a_supprimer).feuille).feuille_statique              (*(*l_element_a_supprimer).feuille).feuille_statique
                     = (*l_element_a_supprimer).suivant;                      = (*l_element_a_supprimer).suivant;
         }          }
   
         if ((*l_element_a_supprimer).suivant != NULL)  
         {  
             (*(*l_element_a_supprimer).suivant).precedent =  
                     (*l_element_a_supprimer).precedent;  
         }  
         else  
         {  
             (*(*l_element_a_supprimer).precedent).suivant = NULL;  
         }  
   
         liberation(s_etat_processus, (*(*l_element_a_supprimer).variable)          liberation(s_etat_processus, (*(*l_element_a_supprimer).variable)
                 .objet);                  .objet);
         free((*(*l_element_a_supprimer).variable).nom);          free((*(*l_element_a_supprimer).variable).nom);

Removed from v.1.38  
changed lines
  Added in v.1.42


CVSweb interface <joel.bertrand@systella.fr>