Diff for /rpl/src/instructions_s4.c between versions 1.19 and 1.20

version 1.19, 2011/04/21 16:00:59 version 1.20, 2011/06/10 11:35:13
Line 38 Line 38
 void  void
 instruction_steq(struct_processus *s_etat_processus)  instruction_steq(struct_processus *s_etat_processus)
 {  {
     logical1                            presence_variable;  
   
     long                                i;  
   
     struct_objet                        *s_objet;      struct_objet                        *s_objet;
   
     struct_variable                     s_variable;      struct_variable                     s_variable;
Line 93  instruction_steq(struct_processus *s_eta Line 89  instruction_steq(struct_processus *s_eta
         return;          return;
     }      }
   
     if (recherche_variable(s_etat_processus, "EQ") == d_vrai)      if (recherche_variable_globale(s_etat_processus, "EQ") == d_vrai)
     {      {
         /*          if ((*(*s_etat_processus).pointeur_variable_courante)
          * La variable préexiste. Il faut tester si celle-ci est globale                  .variable_verrouillee == d_vrai)
          * (de niveau 1).  
          */  
   
         i = (*s_etat_processus).position_variable_courante;  
         presence_variable = d_faux;  
   
         while(i >= 0)  
         {  
             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, "EQ")  
                     == 0) && ((*s_etat_processus).s_liste_variables[i]  
                     .niveau == 1))  
             {  
                 presence_variable = d_vrai;  
                 break;  
             }  
              i--;  
         }  
   
         (*s_etat_processus).position_variable_courante = i;  
   
         if (presence_variable == d_vrai)  
         {          {
             if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)              liberation(s_etat_processus, s_objet);
                     .position_variable_courante].variable_verrouillee ==  
                     d_vrai)  
             {  
                 liberation(s_etat_processus, s_objet);  
   
                 (*s_etat_processus).erreur_execution =  
                         d_ex_variable_verrouillee;  
                 return;  
             }  
   
             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
             {  
                 liberation(s_etat_processus, s_objet);  
   
                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;              (*s_etat_processus).erreur_execution =
                 return;                      d_ex_variable_verrouillee;
             }              return;
   
             liberation(s_etat_processus,  
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet);  
   
             (*s_etat_processus).s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet = s_objet;  
         }          }
         else  
         {  
             if ((s_variable.nom = malloc(3 * sizeof(unsigned char))) == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;  
             }  
   
             strcpy(s_variable.nom, "EQ");  
             s_variable.niveau = 1;  
   
             /*  
              * Le niveau 0 correspond aux définitions. Les variables  
              * commencent à 1 car elles sont toujours incluses dans  
              * une définition.  
              */  
   
             s_variable.objet = s_objet;          liberation(s_etat_processus,
                   (*(*s_etat_processus).pointeur_variable_courante).objet);
             if (creation_variable(s_etat_processus, &s_variable, 'V', 'P')           (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet;
                     == d_erreur)  
             {  
                 return;  
             }  
         }  
     }      }
     else      else
     {      {
Line 177  instruction_steq(struct_processus *s_eta Line 111  instruction_steq(struct_processus *s_eta
          * La variable n'existe pas et on crée une variable globale.           * La variable n'existe pas et on crée une variable globale.
          */           */
   
           (*s_etat_processus).erreur_systeme = d_es;
           (*s_etat_processus).erreur_execution = d_ex;
   
         if ((s_variable.nom = malloc(3 * sizeof(unsigned char))) == NULL)          if ((s_variable.nom = malloc(3 * sizeof(unsigned char))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 199  instruction_steq(struct_processus *s_eta Line 136  instruction_steq(struct_processus *s_eta
         {          {
             return;              return;
         }          }
   
         (*s_etat_processus).erreur_systeme = d_es;  
     }      }
   
     return;      return;
Line 1584  instruction_star_s(struct_processus *s_e Line 1519  instruction_star_s(struct_processus *s_e
 void  void
 instruction_stos(struct_processus *s_etat_processus)  instruction_stos(struct_processus *s_etat_processus)
 {  {
     logical1                            presence_variable;  
   
     long                                i;  
   
     struct_objet                        *s_objet;      struct_objet                        *s_objet;
   
     struct_variable                     s_variable;      struct_variable                     s_variable;
Line 1637  instruction_stos(struct_processus *s_eta Line 1568  instruction_stos(struct_processus *s_eta
         return;          return;
     }      }
   
     if (recherche_variable(s_etat_processus, ds_sdat) == d_vrai)      if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_vrai)
     {      {
         /*          if ((*(*s_etat_processus).pointeur_variable_courante)
          * La variable préexiste. Il faut tester si celle-ci est globale                  .variable_verrouillee == d_vrai)
          * (de niveau 1).  
          */  
   
         i = (*s_etat_processus).position_variable_courante;  
         presence_variable = d_faux;  
   
         while(i >= 0)  
         {  
             if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, ds_sdat)  
                     == 0) && ((*s_etat_processus).s_liste_variables[i]  
                     .niveau == 1))  
             {  
                 presence_variable = d_vrai;  
                 break;  
             }  
              i--;  
         }  
   
         (*s_etat_processus).position_variable_courante = i;  
   
         if (presence_variable == d_vrai)  
         {          {
             if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)              liberation(s_etat_processus, s_objet);
                     .position_variable_courante].variable_verrouillee ==  
                     d_vrai)  
             {  
                 liberation(s_etat_processus, s_objet);  
   
                 (*s_etat_processus).erreur_execution =  
                         d_ex_variable_verrouillee;  
                 return;  
             }  
   
             if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
             {  
                 liberation(s_etat_processus, s_objet);  
   
                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;              (*s_etat_processus).erreur_execution =
                 return;                      d_ex_variable_verrouillee;
             }              return;
   
             liberation(s_etat_processus,  
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet);  
   
             (*s_etat_processus).s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet = s_objet;  
         }          }
         else  
         {  
             if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;  
             }  
   
             strcpy(s_variable.nom, ds_sdat);  
             s_variable.niveau = 1;  
   
             /*  
              * Le niveau 0 correspond aux définitions. Les variables  
              * commencent à 1 car elles sont toujours incluses dans  
              * une définition.  
              */  
   
             s_variable.objet = s_objet;          liberation(s_etat_processus,
                   (*(*s_etat_processus).pointeur_variable_courante).objet);
             if (creation_variable(s_etat_processus, &s_variable, 'V', 'P')          (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet;
                     == d_erreur)  
             {  
                 return;  
             }  
         }  
     }      }
     else      else
     {      {
Line 1721  instruction_stos(struct_processus *s_eta Line 1590  instruction_stos(struct_processus *s_eta
          * La variable n'existe pas et on crée une variable globale.           * La variable n'existe pas et on crée une variable globale.
          */           */
   
           (*s_etat_processus).erreur_systeme = d_es;
           (*s_etat_processus).erreur_execution = d_ex;
   
         if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)          if ((s_variable.nom = malloc(6 * sizeof(unsigned char))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 1743  instruction_stos(struct_processus *s_eta Line 1615  instruction_stos(struct_processus *s_eta
         {          {
             return;              return;
         }          }
   
         (*s_etat_processus).erreur_systeme = d_es;  
     }      }
   
     return;      return;

Removed from v.1.19  
changed lines
  Added in v.1.20


CVSweb interface <joel.bertrand@systella.fr>