Diff for /rpl/src/instructions_d3.c between versions 1.18 and 1.19

version 1.18, 2011/04/21 16:00:56 version 1.19, 2011/06/09 14:48:36
Line 45  instruction_draw(struct_processus *s_eta Line 45  instruction_draw(struct_processus *s_eta
   
     logical1                    last_valide;      logical1                    last_valide;
     logical1                    premiere_iteration;      logical1                    premiere_iteration;
     logical1                    presence_variable;  
     logical1                    retour_suite_erreur;      logical1                    retour_suite_erreur;
   
     long                        hauteur_pile;      long                        hauteur_pile;
     long                        i;  
   
     real8                       borne_maximale_x;      real8                       borne_maximale_x;
     real8                       borne_maximale_y;      real8                       borne_maximale_y;
Line 136  instruction_draw(struct_processus *s_eta Line 134  instruction_draw(struct_processus *s_eta
          * Vérification de la présence de la variable globale EQ           * Vérification de la présence de la variable globale EQ
          */           */
                   
         if (recherche_variable(s_etat_processus, "EQ") == d_faux)          if (recherche_variable_globale(s_etat_processus, "EQ") == d_faux)
         {          {
             /*              /*
              * Aucune variable "EQ" n'existe.               * Aucune variable "EQ" n'existe.
              */               */
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              if ((*s_etat_processus).erreur_execution == d_ex)
             (*s_etat_processus).erreur_systeme = d_es;  
   
             if (last_valide == d_vrai)  
             {  
                 sf(s_etat_processus, 31);  
             }  
   
             return;  
         }  
   
         /*  
          * Recherche de la variable globale "EQ"  
          */  
           
         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;                  (*s_etat_processus).erreur_execution = d_ex_absence_equation;
                 break;  
             }              }
   
             i--;              (*s_etat_processus).erreur_systeme = d_es;
         }  
   
         if (presence_variable == d_faux)  
         {  
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;  
   
             if (last_valide == d_vrai)              if (last_valide == d_vrai)
             {              {
Line 185  instruction_draw(struct_processus *s_eta Line 155  instruction_draw(struct_processus *s_eta
             return;              return;
         }          }
   
         if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
         {  
             (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
             return;  
         }  
   
         /*          /*
          * Création du fichier graphique temporaire           * Création du fichier graphique temporaire
          */           */
Line 625  instruction_draw(struct_processus *s_eta Line 589  instruction_draw(struct_processus *s_eta
                 // La variable étant créée localement, elle n'est jamais                  // La variable étant créée localement, elle n'est jamais
                 // ni verrouillée ni partagée.                  // ni verrouillée ni partagée.
   
                 BUG((*s_etat_processus).s_liste_variables                  BUG((*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante]  
                         .objet == NULL);                          .objet == NULL);
   
                 if ((*((*s_etat_processus).s_liste_variables                  if ((*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).type != REL)                          .objet).type != REL)
                 {                  {
                     liberation(s_etat_processus,                      liberation(s_etat_processus,
                             ((*s_etat_processus).s_liste_variables                              (*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet);                              .objet);
   
                     if ((((*s_etat_processus).s_liste_variables                      if (((*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet = allocation(s_etat_processus, REL))                              .objet = allocation(s_etat_processus, REL))
                             == NULL)                              == NULL)
                     {                      {
Line 649  instruction_draw(struct_processus *s_eta Line 609  instruction_draw(struct_processus *s_eta
                     }                      }
                 }                  }
   
                 (*((real8 *) (*((*s_etat_processus).s_liste_variables                  (*((real8 *) (*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).objet)) = x;                          .objet).objet)) = x;
             }              }
             else              else
Line 684  instruction_draw(struct_processus *s_eta Line 643  instruction_draw(struct_processus *s_eta
                 return;                  return;
             }              }
   
             if (recherche_variable(s_etat_processus, "EQ")              if (recherche_variable_globale(s_etat_processus, "EQ")
                     == d_faux)                      == d_faux)
             {              {
                 /*                  /*
Line 758  instruction_draw(struct_processus *s_eta Line 717  instruction_draw(struct_processus *s_eta
             }              }
   
             /*              /*
              * Recherche de la variable globale "EQ"  
              */  
               
             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;  
   
             BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);  
   
             if (presence_variable == d_faux)  
             {  
                 /*  
                  * Retrait de la variable INDEP  
                  */  
   
                 (*s_etat_processus).niveau_courant--;  
   
                 if (fclose(fichier) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (destruction_fichier(nom_fichier) == d_erreur)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (retrait_variable(s_etat_processus, nom_x, 'L')  
                         == d_erreur)  
                 {  
                     if ((*s_etat_processus).erreur_systeme != d_es)  
                     {  
                         if ((*s_etat_processus).erreur_systeme ==  
                                 d_es_variable_introuvable)  
                         {  
                             (*s_etat_processus).erreur_systeme = d_es;  
                         }  
                         else  
                         {  
   
                         /*  
                          * Erreur système  
                          */  
   
                             free(nom_fichier);  
                             return;  
                         }  
                     }  
   
                     free(nom_x);  
                     free(nom_fichier);  
   
                     if (last_valide == d_vrai)  
                     {  
                         sf(s_etat_processus, 31);  
                     }  
   
                     (*s_etat_processus).erreur_execution =  
                             d_ex_variable_non_definie;  
                     return;  
                 }  
   
                 free(nom_x);  
                 free(nom_fichier);  
   
                 if (last_valide == d_vrai)  
                 {  
                     sf(s_etat_processus, 31);  
                 }  
   
                 (*s_etat_processus).erreur_execution =  
                         d_ex_variable_non_definie;  
                 return;  
             }  
   
             /*  
              * Evaluation de la fonction               * Evaluation de la fonction
              */               */
   
Line 863  instruction_draw(struct_processus *s_eta Line 730  instruction_draw(struct_processus *s_eta
             (*s_etat_processus).erreur_execution = d_ex;              (*s_etat_processus).erreur_execution = d_ex;
             (*s_etat_processus).exception = d_ep;              (*s_etat_processus).exception = d_ep;
   
             if (evaluation(s_etat_processus, (*s_etat_processus)              if (evaluation(s_etat_processus, (*(*s_etat_processus)
                     .s_liste_variables[(*s_etat_processus)                      .pointeur_variable_courante).objet, 'N') == d_erreur)
                     .position_variable_courante].objet, 'N') == d_erreur)  
             {              {
                 (*s_etat_processus).mode_evaluation_expression =                  (*s_etat_processus).mode_evaluation_expression =
                         mode_evaluation_expression;                          mode_evaluation_expression;
Line 1152  instruction_draw(struct_processus *s_eta Line 1018  instruction_draw(struct_processus *s_eta
          * Vérification de la présence de la variable globale EQ           * Vérification de la présence de la variable globale EQ
          */           */
                   
         if (recherche_variable(s_etat_processus, "EQ") == d_faux)          if (recherche_variable_globale(s_etat_processus, "EQ") == d_faux)
         {          {
             /*              /*
              * Aucune variable "EQ" n'existe.               * Aucune variable "EQ" n'existe.
Line 1163  instruction_draw(struct_processus *s_eta Line 1029  instruction_draw(struct_processus *s_eta
                 sf(s_etat_processus, 31);                  sf(s_etat_processus, 31);
             }              }
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              if ((*s_etat_processus).erreur_execution == d_ex)
             (*s_etat_processus).erreur_systeme = d_es;  
   
             return;  
         }  
   
         /*  
          * Recherche de la variable globale "EQ"  
          */  
           
         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--;  
         }  
   
         if (presence_variable == d_faux)  
         {  
             if (last_valide == d_vrai)  
             {              {
                 sf(s_etat_processus, 31);                  (*s_etat_processus).erreur_execution = d_ex_absence_equation;
             }              }
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              (*s_etat_processus).erreur_systeme = d_es;
             return;  
         }  
   
         if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
         {  
             (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
             return;              return;
         }          }
   
Line 1606  instruction_draw(struct_processus *s_eta Line 1439  instruction_draw(struct_processus *s_eta
                 // La variable étant créée localement, elle n'est jamais                  // La variable étant créée localement, elle n'est jamais
                 // ni verrouillée ni partagée.                  // ni verrouillée ni partagée.
   
                 BUG((*s_etat_processus).s_liste_variables                  BUG((*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante]  
                         .objet == NULL);                          .objet == NULL);
   
                 if ((*((*s_etat_processus).s_liste_variables                  if ((*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).type != REL)                          .objet).type != REL)
                 {                  {
                     liberation(s_etat_processus,                      liberation(s_etat_processus,
                             ((*s_etat_processus).s_liste_variables                              (*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet);                              .objet);
   
                     if ((((*s_etat_processus).s_liste_variables                      if (((*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet = allocation(s_etat_processus, REL))                              .objet = allocation(s_etat_processus, REL))
                             == NULL)                              == NULL)
                     {                      {
Line 1630  instruction_draw(struct_processus *s_eta Line 1459  instruction_draw(struct_processus *s_eta
                     }                      }
                 }                  }
   
                 (*((real8 *) (*((*s_etat_processus).s_liste_variables                  (*((real8 *) (*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).objet)) = t;                          .objet).objet)) = t;
             }              }
             else              else
Line 1665  instruction_draw(struct_processus *s_eta Line 1493  instruction_draw(struct_processus *s_eta
                 return;                  return;
             }              }
   
             if (recherche_variable(s_etat_processus, "EQ")              if (recherche_variable_globale(s_etat_processus, "EQ")
                     == d_faux)                      == d_faux)
             {              {
                 /*                  /*
Line 1738  instruction_draw(struct_processus *s_eta Line 1566  instruction_draw(struct_processus *s_eta
             }              }
   
             /*              /*
              * Recherche de la variable globale "EQ"  
              */  
               
             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;  
   
             BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);  
   
             if (presence_variable == d_faux)  
             {  
                 /*  
                  * Retrait de la variable INDEP  
                  */  
   
                 (*s_etat_processus).niveau_courant--;  
   
                 if (fclose(fichier) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (destruction_fichier(nom_fichier) == d_erreur)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (retrait_variable(s_etat_processus, nom_x, 'L') == d_erreur)  
                 {  
                     if ((*s_etat_processus).erreur_systeme != d_es)  
                     {  
                         if ((*s_etat_processus).erreur_systeme ==  
                                 d_es_variable_introuvable)  
                         {  
                             (*s_etat_processus).erreur_systeme = d_es;  
                         }  
                         else  
                         {  
   
                         /*  
                          * Erreur système  
                          */  
   
                             free(nom_fichier);  
                             return;  
                         }  
                     }  
   
                     free(nom_x);  
                     free(nom_fichier);  
   
                     if (last_valide == d_vrai)  
                     {  
                         sf(s_etat_processus, 31);  
                     }  
   
                     (*s_etat_processus).erreur_execution =  
                             d_ex_variable_non_definie;  
                     return;  
                 }  
   
                 (*s_etat_processus).erreur_execution =  
                         d_ex_variable_non_definie;  
   
                 if (last_valide == d_vrai)  
                 {  
                     sf(s_etat_processus, 31);  
                 }  
   
                 free(nom_fichier);  
                 return;  
             }  
   
             /*  
              * Evaluation de la fonction               * Evaluation de la fonction
              */               */
   
Line 1838  instruction_draw(struct_processus *s_eta Line 1576  instruction_draw(struct_processus *s_eta
             (*s_etat_processus).erreur_execution = d_ex;              (*s_etat_processus).erreur_execution = d_ex;
             (*s_etat_processus).exception = d_ep;              (*s_etat_processus).exception = d_ep;
   
             if (evaluation(s_etat_processus, (*s_etat_processus)              if (evaluation(s_etat_processus, (*(*s_etat_processus)
                     .s_liste_variables[(*s_etat_processus)                      .pointeur_variable_courante).objet, 'N') == d_erreur)
                     .position_variable_courante].objet, 'N') == d_erreur)  
             {              {
                 if ((*s_etat_processus).erreur_systeme != d_es)                  if ((*s_etat_processus).erreur_systeme != d_es)
                 {                  {
Line 2121  instruction_draw(struct_processus *s_eta Line 1858  instruction_draw(struct_processus *s_eta
          * Vérification de la présence de la variable globale EQ           * Vérification de la présence de la variable globale EQ
          */           */
                   
         if (recherche_variable(s_etat_processus, "EQ") == d_faux)          if (recherche_variable_globale(s_etat_processus, "EQ") == d_faux)
         {          {
             /*              /*
              * Aucune variable "EQ" n'existe.               * Aucune variable "EQ" n'existe.
              */               */
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              if ((*s_etat_processus).erreur_execution == d_ex)
             (*s_etat_processus).erreur_systeme = d_es;  
   
             if (last_valide == d_vrai)  
             {              {
                 sf(s_etat_processus, 31);                  (*s_etat_processus).erreur_execution = d_ex_absence_equation;
             }              }
   
             return;              (*s_etat_processus).erreur_systeme = d_es;
         }  
   
         /*  
          * Recherche de la variable globale "EQ"  
          */  
           
         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--;  
         }  
   
         if (presence_variable == d_faux)  
         {  
             if (last_valide == d_vrai)              if (last_valide == d_vrai)
             {              {
                 sf(s_etat_processus, 31);                  sf(s_etat_processus, 31);
             }              }
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;  
             return;  
         }  
   
         if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
         {  
             (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
             return;              return;
         }          }
   
Line 2553  instruction_draw(struct_processus *s_eta Line 2257  instruction_draw(struct_processus *s_eta
             }              }
   
             /*              /*
              * L'erreur retournée ne peut être qu'une erreur système               * L'erreur retournée ne peut être qu'une erreur système.
              */               */
   
             free(nom_fichier);              free(nom_fichier);
Line 2579  instruction_draw(struct_processus *s_eta Line 2283  instruction_draw(struct_processus *s_eta
                 // La variable étant créée localement, elle n'est jamais                  // La variable étant créée localement, elle n'est jamais
                 // ni verrouillée ni partagée.                  // ni verrouillée ni partagée.
   
                 BUG(((*s_etat_processus).s_liste_variables                  BUG((*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet == NULL);                          .objet == NULL);
   
                 if ((*((*s_etat_processus).s_liste_variables                  if ((*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).type != REL)                          .objet).type != REL)
                 {                  {
                     liberation(s_etat_processus,                      liberation(s_etat_processus,
                             ((*s_etat_processus).s_liste_variables                              (*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet);                              .objet);
   
                     if ((((*s_etat_processus).s_liste_variables                      if (((*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet = allocation(s_etat_processus, REL))                              .objet = allocation(s_etat_processus, REL))
                             == NULL)                              == NULL)
                     {                      {
Line 2603  instruction_draw(struct_processus *s_eta Line 2303  instruction_draw(struct_processus *s_eta
                     }                      }
                 }                  }
   
                 (*((real8 *) (*((*s_etat_processus).s_liste_variables                  (*((real8 *) (*(*(*s_etat_processus).pointeur_variable_courante)
                         [(*s_etat_processus).position_variable_courante])  
                         .objet).objet)) = t;                          .objet).objet)) = t;
             }              }
             else              else
Line 2638  instruction_draw(struct_processus *s_eta Line 2337  instruction_draw(struct_processus *s_eta
                 return;                  return;
             }              }
   
             if (recherche_variable(s_etat_processus, "EQ")              if (recherche_variable_globale(s_etat_processus, "EQ")
                     == d_faux)                      == d_faux)
             {              {
                 /*                  /*
Line 2712  instruction_draw(struct_processus *s_eta Line 2411  instruction_draw(struct_processus *s_eta
             }              }
   
             /*              /*
              * Recherche de la variable globale "EQ"  
              */  
               
             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;  
   
             BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);  
   
             if (presence_variable == d_faux)  
             {  
                 /*  
                  * Retrait de la variable INDEP  
                  */  
   
                 (*s_etat_processus).niveau_courant--;  
   
                 if (fclose(fichier) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (destruction_fichier(nom_fichier) == d_erreur)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;  
                     return;  
                 }  
   
                 if (retrait_variable(s_etat_processus, nom_x, 'L')  
                         == d_erreur)  
                 {  
                     if ((*s_etat_processus).erreur_systeme != d_es)  
                     {  
                         if ((*s_etat_processus).erreur_systeme ==  
                                 d_es_variable_introuvable)  
                         {  
                             (*s_etat_processus).erreur_systeme = d_es;  
                         }  
                         else  
                         {  
   
                         /*  
                          * Erreur système  
                          */  
   
                             free(nom_fichier);  
                             return;  
                         }  
                     }  
   
                     free(nom_x);  
                     free(nom_fichier);  
   
                     if (last_valide == d_vrai)  
                     {  
                         sf(s_etat_processus, 31);  
                     }  
   
                     (*s_etat_processus).erreur_execution =  
                             d_ex_variable_non_definie;  
                     return;  
                 }  
   
                 free(nom_x);  
                 free(nom_fichier);  
   
                 if (last_valide == d_vrai)  
                 {  
                     sf(s_etat_processus, 31);  
                 }  
   
                 (*s_etat_processus).erreur_execution =  
                         d_ex_variable_non_definie;  
                 return;  
             }  
   
             /*  
              * Evaluation de la fonction               * Evaluation de la fonction
              */               */
   
Line 2814  instruction_draw(struct_processus *s_eta Line 2421  instruction_draw(struct_processus *s_eta
             (*s_etat_processus).erreur_execution = d_ex;              (*s_etat_processus).erreur_execution = d_ex;
             (*s_etat_processus).exception = d_ep;              (*s_etat_processus).exception = d_ep;
   
             if (evaluation(s_etat_processus, (*s_etat_processus)              if (evaluation(s_etat_processus, (*(*s_etat_processus)
                     .s_liste_variables[(*s_etat_processus)                      .pointeur_variable_courante).objet, 'N') == d_erreur)
                     .position_variable_courante].objet, 'N') == d_erreur)  
             {              {
                 if ((*s_etat_processus).erreur_systeme != d_es)                  if ((*s_etat_processus).erreur_systeme != d_es)
                 {                  {
Line 3116  instruction_draw(struct_processus *s_eta Line 2722  instruction_draw(struct_processus *s_eta
          * Vérification de la présence de la variable globale EQ           * Vérification de la présence de la variable globale EQ
          */           */
                   
         if (recherche_variable(s_etat_processus, "EQ") == d_faux)          if (recherche_variable_globale(s_etat_processus, "EQ") == d_faux)
         {          {
             /*              /*
              * Aucune variable "EQ" n'existe.               * Aucune variable "EQ" n'existe.
              */               */
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              if ((*s_etat_processus).erreur_execution == d_ex)
             (*s_etat_processus).erreur_systeme = d_es;  
   
             return;  
         }  
   
         /*  
          * Recherche de la variable globale "EQ"  
          */  
           
         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--;  
         }  
   
         if (presence_variable == d_faux)  
         {  
             if (last_valide == d_vrai)  
             {              {
                 sf(s_etat_processus, 31);                  (*s_etat_processus).erreur_execution = d_ex_absence_equation;
             }              }
   
             (*s_etat_processus).erreur_execution = d_ex_absence_equation;              (*s_etat_processus).erreur_systeme = d_es;
             return;  
         }  
   
         if ((*s_etat_processus).s_liste_variables[i].objet == NULL)  
         {  
             (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
             return;              return;
         }          }
   
Line 4046  instruction_draw(struct_processus *s_eta Line 3619  instruction_draw(struct_processus *s_eta
                     // La variable étant créée localement, elle n'est jamais                      // La variable étant créée localement, elle n'est jamais
                     // ni verrouillée ni partagee.                      // ni verrouillée ni partagee.
   
                     BUG((*s_etat_processus).s_liste_variables                      BUG((*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante]  
                             .objet == NULL);                              .objet == NULL);
   
                     if ((*((*s_etat_processus).s_liste_variables                      if ((*(*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet).type != REL)                              .objet).type != REL)
                     {                      {
                         liberation(s_etat_processus,                          liberation(s_etat_processus,
                                 ((*s_etat_processus).s_liste_variables                                  (*(*s_etat_processus)
                                 [(*s_etat_processus)                                  .pointeur_variable_courante).objet);
                                 .position_variable_courante]).objet);  
                           if (((*(*s_etat_processus).pointeur_variable_courante)
                         if ((((*s_etat_processus).s_liste_variables                                  .objet = allocation(s_etat_processus, REL))
                                 [(*s_etat_processus)                                  == NULL)
                                 .position_variable_courante]).objet =  
                                 allocation(s_etat_processus, REL)) == NULL)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_allocation_memoire;                                      d_es_allocation_memoire;
Line 4070  instruction_draw(struct_processus *s_eta Line 3639  instruction_draw(struct_processus *s_eta
                         }                          }
                     }                      }
   
                     (*((real8 *) (*((*s_etat_processus).s_liste_variables                      (*((real8 *) (*(*(*s_etat_processus)
                             [(*s_etat_processus).position_variable_courante])                              .pointeur_variable_courante).objet).objet)) = x;
                             .objet).objet)) = x;  
                 }                  }
                 else                  else
                 {                  {
Line 4112  instruction_draw(struct_processus *s_eta Line 3680  instruction_draw(struct_processus *s_eta
                     // La variable étant créée localement, elle n'est jamais                      // La variable étant créée localement, elle n'est jamais
                     // ni verrouillée ni partagée.                      // ni verrouillée ni partagée.
   
                     BUG((*s_etat_processus).s_liste_variables                      BUG((*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante]  
                             .objet == NULL);                              .objet == NULL);
   
                     if ((*((*s_etat_processus).s_liste_variables                      if ((*(*(*s_etat_processus).pointeur_variable_courante)
                             [(*s_etat_processus).position_variable_courante])  
                             .objet).type != REL)                              .objet).type != REL)
                     {                      {
                         liberation(s_etat_processus,                          liberation(s_etat_processus, (*(*s_etat_processus)
                                 ((*s_etat_processus).s_liste_variables                                  .pointeur_variable_courante).objet);
                                 [(*s_etat_processus)  
                                 .position_variable_courante]).objet);                          if (((*(*s_etat_processus).pointeur_variable_courante)
                                   .objet = allocation(s_etat_processus, REL))
                         if ((((*s_etat_processus).s_liste_variables                                  == NULL)
                                 [(*s_etat_processus)  
                                 .position_variable_courante]).objet =  
                                 allocation(s_etat_processus, REL)) == NULL)  
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_allocation_memoire;                                      d_es_allocation_memoire;
Line 4136  instruction_draw(struct_processus *s_eta Line 3699  instruction_draw(struct_processus *s_eta
                         }                          }
                     }                      }
   
                     (*((real8 *) (*((*s_etat_processus).s_liste_variables                      (*((real8 *) (*(*(*s_etat_processus)
                             [(*s_etat_processus).position_variable_courante])                              .pointeur_variable_courante).objet).objet)) = y;
                             .objet).objet)) = y;  
                 }                  }
                 else                  else
                 {                  {
Line 4173  instruction_draw(struct_processus *s_eta Line 3735  instruction_draw(struct_processus *s_eta
                     return;                      return;
                 }                  }
   
                 if (recherche_variable(s_etat_processus, "EQ")                  if (recherche_variable_globale(s_etat_processus, "EQ")
                         == d_faux)                          == d_faux)
                 {                  {
                     /*                      /*
Line 4287  instruction_draw(struct_processus *s_eta Line 3849  instruction_draw(struct_processus *s_eta
                 }                  }
   
                 /*                  /*
                  * Recherche de la variable globale "EQ"  
                  */  
                   
                 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;  
   
                 BUG((*s_etat_processus).s_liste_variables[i].objet == NULL);  
   
                 if (presence_variable == d_faux)  
                 {  
                     /*  
                      * Retrait des variables INDEP et DEPND  
                      */  
   
                     (*s_etat_processus).niveau_courant--;  
   
                     if (fclose(fichier) != 0)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_erreur_fichier;  
                         return;  
                     }  
   
                     if (destruction_fichier(nom_fichier) == d_erreur)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_erreur_fichier;  
                         return;  
                     }  
   
                     if (retrait_variable(s_etat_processus, nom_x, 'L')  
                             == d_erreur)  
                     {  
                         if ((*s_etat_processus).erreur_systeme != d_es)  
                         {  
                             if ((*s_etat_processus).erreur_systeme ==  
                                     d_es_variable_introuvable)  
                             {  
                                 (*s_etat_processus).erreur_systeme = d_es;  
                             }  
                             else  
                             {  
   
                             /*  
                              * Erreur système  
                              */  
   
                                 free(nom_fichier);  
                                 return;  
                             }  
                         }  
   
                         free(nom_x);  
                         free(nom_y);  
                         free(nom_fichier);  
   
                         if (last_valide == d_vrai)  
                         {  
                             sf(s_etat_processus, 31);  
                         }  
   
                         (*s_etat_processus).erreur_execution =  
                                 d_ex_variable_non_definie;  
                         return;  
                     }  
   
                     if (retrait_variable(s_etat_processus, nom_y, 'L')  
                             == d_erreur)  
                     {  
                         if ((*s_etat_processus).erreur_systeme != d_es)  
                         {  
                             if ((*s_etat_processus).erreur_systeme ==  
                                     d_es_variable_introuvable)  
                             {  
                                 (*s_etat_processus).erreur_systeme = d_es;  
                             }  
                             else  
                             {  
   
                             /*  
                              * Erreur système  
                              */  
   
                                 free(nom_fichier);  
                                 return;  
                             }  
                         }  
   
                         free(nom_x);  
                         free(nom_y);  
                         free(nom_fichier);  
   
                         if (last_valide == d_vrai)  
                         {  
                             sf(s_etat_processus, 31);  
                         }  
   
                         (*s_etat_processus).erreur_execution =  
                                 d_ex_variable_non_definie;  
                         return;  
                     }  
   
                     free(nom_x);  
                     free(nom_y);  
                     free(nom_fichier);  
   
                     if (last_valide == d_vrai)  
                     {  
                         sf(s_etat_processus, 31);  
                     }  
   
                     (*s_etat_processus).erreur_execution =  
                             d_ex_variable_non_definie;  
                     return;  
                 }  
   
                 /*  
                  * Evaluation de la fonction                   * Evaluation de la fonction
                  */                   */
   
Line 4429  instruction_draw(struct_processus *s_eta Line 3859  instruction_draw(struct_processus *s_eta
                 (*s_etat_processus).erreur_execution = d_ex;                  (*s_etat_processus).erreur_execution = d_ex;
                 (*s_etat_processus).exception = d_ep;                  (*s_etat_processus).exception = d_ep;
   
                 if (evaluation(s_etat_processus, (*s_etat_processus)                  if (evaluation(s_etat_processus, (*(*s_etat_processus)
                         .s_liste_variables[(*s_etat_processus)                          .pointeur_variable_courante).objet, 'N') == d_erreur)
                         .position_variable_courante].objet, 'N') == d_erreur)  
                 {                  {
                     if ((*s_etat_processus).erreur_systeme != d_es)                      if ((*s_etat_processus).erreur_systeme != d_es)
                     {                      {

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


CVSweb interface <joel.bertrand@systella.fr>