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

version 1.38, 2012/10/07 08:18:35 version 1.57, 2015/02/19 11:01:20
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.11    RPL/2 (R) version 4.1.21
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2015 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
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 289  retrait_variable_statique(struct_process Line 289  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 304  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 329  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 336  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);
Line 371  printf("<2>\n"); Line 378  printf("<2>\n");
         (*s_etat_processus).erreur_systeme = d_es_variable_introuvable;          (*s_etat_processus).erreur_systeme = d_es_variable_introuvable;
     }      }
   
     return erreur;      return(erreur);
 }  }
   
   

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


CVSweb interface <joel.bertrand@systella.fr>