Diff for /rpl/src/instructions_i2.c between versions 1.29 and 1.44

version 1.29, 2011/07/25 07:44:57 version 1.44, 2012/12/17 21:22:43
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.2    RPL/2 (R) version 4.1.11
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 119  instruction_idn(struct_processus *s_etat Line 119  instruction_idn(struct_processus *s_etat
   
         if (s_objet_argument == NULL)          if (s_objet_argument == NULL)
         {          {
             if (pthread_mutex_lock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             if (recherche_variable_partagee(s_etat_processus,              if (recherche_variable_partagee(s_etat_processus,
                     (*(*s_etat_processus).pointeur_variable_courante).nom,                      (*(*s_etat_processus).pointeur_variable_courante).nom,
                     (*(*s_etat_processus).pointeur_variable_courante)                      (*(*s_etat_processus).pointeur_variable_courante)
                     .variable_partagee, (*(*s_etat_processus)                      .variable_partagee, (*(*s_etat_processus)
                     .pointeur_variable_courante).origine) == d_faux)                      .pointeur_variable_courante).origine) == NULL)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                         .s_liste_variables_partagees).mutex)) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }  
   
                 (*s_etat_processus).erreur_systeme = d_es;                  (*s_etat_processus).erreur_systeme = d_es;
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
                         d_ex_variable_non_definie;                          d_ex_variable_non_definie;
Line 147  instruction_idn(struct_processus *s_etat Line 133  instruction_idn(struct_processus *s_etat
             }              }
   
             s_objet_argument = (*(*s_etat_processus)              s_objet_argument = (*(*s_etat_processus)
                     .s_liste_variables_partagees).table[(*(*s_etat_processus)                      .pointeur_variable_partagee_courante).objet;
                     .s_liste_variables_partagees).position_variable].objet;  
             variable_partagee = d_vrai;              variable_partagee = d_vrai;
         }          }
         else          else
Line 181  instruction_idn(struct_processus *s_etat Line 166  instruction_idn(struct_processus *s_etat
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 215  instruction_idn(struct_processus *s_etat Line 200  instruction_idn(struct_processus *s_etat
                 if (variable_partagee == d_vrai)                  if (variable_partagee == d_vrai)
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)                      if (pthread_mutex_unlock(&((*(*s_etat_processus)
                             .s_liste_variables_partagees).mutex)) != 0)                              .pointeur_variable_partagee_courante).mutex)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 244  instruction_idn(struct_processus *s_etat Line 229  instruction_idn(struct_processus *s_etat
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 266  instruction_idn(struct_processus *s_etat Line 251  instruction_idn(struct_processus *s_etat
                 if (variable_partagee == d_vrai)                  if (variable_partagee == d_vrai)
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)                      if (pthread_mutex_unlock(&((*(*s_etat_processus)
                             .s_liste_variables_partagees).mutex)) != 0)                              .pointeur_variable_partagee_courante).mutex)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 297  instruction_idn(struct_processus *s_etat Line 282  instruction_idn(struct_processus *s_etat
         if (variable_partagee == d_vrai)          if (variable_partagee == d_vrai)
         {          {
             if (pthread_mutex_unlock(&((*(*s_etat_processus)              if (pthread_mutex_unlock(&((*(*s_etat_processus)
                     .s_liste_variables_partagees).mutex)) != 0)                      .pointeur_variable_partagee_courante).mutex)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 325  instruction_idn(struct_processus *s_etat Line 310  instruction_idn(struct_processus *s_etat
         if (variable_partagee == d_vrai)          if (variable_partagee == d_vrai)
         {          {
             (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;              (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;
             (*(*s_etat_processus).s_liste_variables_partagees).table              (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
                     [(*(*s_etat_processus).s_liste_variables_partagees)                      s_objet_resultat;
                     .position_variable].objet = s_objet_resultat;  
   
             if (pthread_mutex_unlock(&((*(*s_etat_processus)              if (pthread_mutex_unlock(&((*(*s_etat_processus)
                     .s_liste_variables_partagees).mutex)) != 0)                      .pointeur_variable_partagee_courante).mutex)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
Line 782  instruction_input(struct_processus *s_et Line 766  instruction_input(struct_processus *s_et
 {  {
     struct_objet                *s_objet_resultat;      struct_objet                *s_objet_resultat;
   
       unsigned char               *ptr_e;
       unsigned char               *ptr_l;
     unsigned char               *tampon;      unsigned char               *tampon;
       unsigned char               *tampon2;
   
       unsigned long               i;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
Line 848  instruction_input(struct_processus *s_et Line 837  instruction_input(struct_processus *s_et
     }      }
   
     free((unsigned char *) (*s_objet_resultat).objet);      free((unsigned char *) (*s_objet_resultat).objet);
     (*s_objet_resultat).objet = tampon;  
       ptr_l = tampon;
       i = 0;
   
       while((*ptr_l) != d_code_fin_chaine)
       {
           if ((*ptr_l) == '\"')
           {
               i++;
           }
   
           ptr_l++;
       }
   
       if ((tampon2 = malloc((strlen(tampon) + 1 + i) *
               sizeof(unsigned char))) == NULL)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return;
       }
   
       ptr_l = tampon;
       ptr_e = tampon2;
   
       while((*ptr_l) != d_code_fin_chaine)
       {
           if ((*ptr_l) == '\"')
           {
               (*ptr_e) = '\\';
               ptr_e++;
           }
   
           (*ptr_e) = (*ptr_l);
           ptr_e++;
           ptr_l++;
       }
   
       free(tampon);
       (*s_objet_resultat).objet = tampon2;
   
     add_history((unsigned char *) (*s_objet_resultat).objet);      add_history((unsigned char *) (*s_objet_resultat).objet);
     stifle_history(ds_longueur_historique);      stifle_history(ds_longueur_historique);
Line 1049  instruction_int(struct_processus *s_etat Line 1076  instruction_int(struct_processus *s_etat
   
         printf("    2: %s, %s, %s, %s\n", d_INT, d_REL, d_NOM, d_ALG);          printf("    2: %s, %s, %s, %s\n", d_INT, d_REL, d_NOM, d_ALG);
         printf("    1: %s\n", d_NOM);          printf("    1: %s\n", d_NOM);
         printf("->  1: %s, %s\n", d_INT, d_ALG);          printf("->  1: %s, %s, %s, %s\n", d_INT, d_REL, d_NOM, d_ALG);
         return;          return;
     }      }
     else if ((*s_etat_processus).test_instruction == 'Y')      else if ((*s_etat_processus).test_instruction == 'Y')
Line 1070  instruction_int(struct_processus *s_etat Line 1097  instruction_int(struct_processus *s_etat
   
         if (test_cfsf(s_etat_processus, 31) == d_vrai)          if (test_cfsf(s_etat_processus, 31) == d_vrai)
         {          {
             if (empilement_pile_last(s_etat_processus, 3) == d_erreur)              if (empilement_pile_last(s_etat_processus, 2) == d_erreur)
             {              {
                 return;                  return;
             }              }
Line 1160  instruction_int(struct_processus *s_etat Line 1187  instruction_int(struct_processus *s_etat
             return;              return;
         }          }
   
         if (((*s_objet_argument_3).type == NOM) ||          if (((*s_objet_argument_3).type != NOM) &&
                 ((*s_objet_argument_3).type == ALG) ||                  ((*s_objet_argument_3).type != ALG) &&
                 ((*s_objet_argument_3).type == RPN) ||                  ((*s_objet_argument_3).type != RPN) &&
                 ((*s_objet_argument_3).type == REL) ||                  ((*s_objet_argument_3).type != REL) &&
                 ((*s_objet_argument_3).type == INT))                  ((*s_objet_argument_3).type != INT))
         {          {
             liberation(s_etat_processus, s_objet_argument_1);              liberation(s_etat_processus, s_objet_argument_1);
             liberation(s_etat_processus, s_objet_argument_2);              liberation(s_etat_processus, s_objet_argument_2);
Line 1490  instruction_incr(struct_processus *s_eta Line 1517  instruction_incr(struct_processus *s_eta
   
         if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL)          if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL)
         {          {
             if (pthread_mutex_lock(&((*(*s_etat_processus)  
                     .s_liste_variables_partagees).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return;  
             }  
   
             if (recherche_variable_partagee(s_etat_processus,              if (recherche_variable_partagee(s_etat_processus,
                     (*(*s_etat_processus).pointeur_variable_courante).nom,                      (*(*s_etat_processus).pointeur_variable_courante).nom,
                     (*(*s_etat_processus).pointeur_variable_courante)                      (*(*s_etat_processus).pointeur_variable_courante)
                     .variable_partagee, (*(*s_etat_processus)                      .variable_partagee, (*(*s_etat_processus)
                     .pointeur_variable_courante).origine) == d_faux)                      .pointeur_variable_courante).origine) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es;                  (*s_etat_processus).erreur_systeme = d_es;
                 (*s_etat_processus).erreur_execution =                  (*s_etat_processus).erreur_execution =
Line 1511  instruction_incr(struct_processus *s_eta Line 1531  instruction_incr(struct_processus *s_eta
             }              }
   
             s_objet_argument = (*(*s_etat_processus)              s_objet_argument = (*(*s_etat_processus)
                     .s_liste_variables_partagees).table                      .pointeur_variable_partagee_courante).objet;
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet;  
             variable_partagee = d_vrai;              variable_partagee = d_vrai;
         }          }
         else          else
Line 1529  instruction_incr(struct_processus *s_eta Line 1547  instruction_incr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 1545  instruction_incr(struct_processus *s_eta Line 1563  instruction_incr(struct_processus *s_eta
         if (variable_partagee == d_vrai)          if (variable_partagee == d_vrai)
         {          {
             (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;              (*(*s_etat_processus).pointeur_variable_courante).objet = NULL;
             (*(*s_etat_processus)              (*(*s_etat_processus).pointeur_variable_partagee_courante).objet =
                     .s_liste_variables_partagees).table                      s_copie_argument;
                     [(*(*s_etat_processus).s_liste_variables_partagees)  
                     .position_variable].objet = s_copie_argument;  
         }          }
         else          else
         {          {
Line 1563  instruction_incr(struct_processus *s_eta Line 1579  instruction_incr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 1575  instruction_incr(struct_processus *s_eta Line 1591  instruction_incr(struct_processus *s_eta
             if (variable_partagee == d_vrai)              if (variable_partagee == d_vrai)
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;

Removed from v.1.29  
changed lines
  Added in v.1.44


CVSweb interface <joel.bertrand@systella.fr>