Diff for /rpl/src/instructions_c4.c between versions 1.6 and 1.32

version 1.6, 2010/03/05 11:20:08 version 1.32, 2011/08/09 11:31:31
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.12    RPL/2 (R) version 4.1.3
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
 #include "convert.conv.h"  #include "convert-conv.h"
   
   
 /*  /*
Line 42  instruction_cov(struct_processus *s_etat Line 42  instruction_cov(struct_processus *s_etat
     integer8                            nombre_colonnes;      integer8                            nombre_colonnes;
   
     logical1                            erreur;      logical1                            erreur;
     logical1                            presence_variable;  
   
     long                                i;  
   
     struct_objet                        *s_objet_statistique;      struct_objet                        *s_objet_statistique;
     struct_objet                        *s_objet_resultat;      struct_objet                        *s_objet_resultat;
Line 86  instruction_cov(struct_processus *s_etat Line 83  instruction_cov(struct_processus *s_etat
      * Recherche d'une variable globale référencée par SIGMA       * Recherche d'une variable globale référencée par SIGMA
      */       */
   
     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)      if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux)
     {      {
         /*          /*
          * Aucune variable SIGMA           * Aucune variable SIGMA
Line 98  instruction_cov(struct_processus *s_etat Line 95  instruction_cov(struct_processus *s_etat
     }      }
     else      else
     {      {
         /*          if (((*(*(*s_etat_processus).pointeur_variable_courante).objet)
          * Il existe une variable locale SIGMA. Reste à vérifier l'existence                  .type != MIN) && ((*(*(*s_etat_processus)
          * d'une variable SIGMA globale...                  .pointeur_variable_courante).objet).type != MRL))
          */  
   
         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--;  
         }  
   
         if (presence_variable == d_faux)  
         {          {
             (*s_etat_processus).erreur_execution = d_ex_absence_observations;              (*s_etat_processus).erreur_execution =
                       d_ex_matrice_statistique_invalide;
             return;              return;
         }          }
         else  
         {  
             (*s_etat_processus).position_variable_courante = i;  
   
             if ((*s_etat_processus).s_liste_variables  
                     [(*s_etat_processus).position_variable_courante].objet  
                     == NULL)  
             {  
                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
                 return;  
             }  
   
             if (((*((*s_etat_processus).s_liste_variables  
                     [(*s_etat_processus).position_variable_courante].objet))  
                     .type != MIN) && ((*((*s_etat_processus)  
                     .s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet)).type != MRL))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_matrice_statistique_invalide;  
                 return;  
             }  
   
             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)          nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus)
                     .s_liste_variables[(*s_etat_processus)                  .pointeur_variable_courante).objet).objet)).nombre_colonnes;
                     .position_variable_courante].objet)).objet))  
                     .nombre_colonnes;  
         }  
     }      }
   
     s_objet_statistique = ((*s_etat_processus).s_liste_variables      s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante)
             [(*s_etat_processus).position_variable_courante]).objet;              .objet;
   
     if (((*s_objet_statistique).type == MIN) ||      if (((*s_objet_statistique).type == MIN) ||
             ((*s_objet_statistique).type == MRL))              ((*s_objet_statistique).type == MRL))
Line 221  void Line 175  void
 instruction_corr(struct_processus *s_etat_processus)  instruction_corr(struct_processus *s_etat_processus)
 {  {
     logical1                            erreur;      logical1                            erreur;
     logical1                            presence_variable;  
   
     long                                i;  
   
     struct_objet                        *s_objet_statistique;      struct_objet                        *s_objet_statistique;
     struct_objet                        *s_objet_resultat;      struct_objet                        *s_objet_resultat;
Line 267  instruction_corr(struct_processus *s_eta Line 218  instruction_corr(struct_processus *s_eta
      * Recherche d'une variable globale référencée par SIGMA       * Recherche d'une variable globale référencée par SIGMA
      */       */
   
     if (recherche_variable(s_etat_processus, ds_sdat) == d_faux)      if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux)
     {      {
         /*          /*
          * Aucune variable SIGMA           * Aucune variable SIGMA
Line 279  instruction_corr(struct_processus *s_eta Line 230  instruction_corr(struct_processus *s_eta
     }      }
     else      else
     {      {
         /*          if (((*(*(*s_etat_processus).pointeur_variable_courante).objet)
          * Il existe une variable locale SIGMA. Reste à vérifier l'existence                  .type != MIN) && ((*(*(*s_etat_processus)
          * d'une variable SIGMA globale...                  .pointeur_variable_courante).objet).type != MRL))
          */  
   
         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--;  
         }  
   
         if (presence_variable == d_faux)  
         {          {
             (*s_etat_processus).erreur_execution = d_ex_absence_observations;              (*s_etat_processus).erreur_execution =
                       d_ex_matrice_statistique_invalide;
             return;              return;
         }          }
         else  
         {  
             (*s_etat_processus).position_variable_courante = i;  
   
             if ((*s_etat_processus).s_liste_variables          nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus)
                     [(*s_etat_processus).position_variable_courante].objet                  .pointeur_variable_courante).objet).objet))
                     == NULL)                  .nombre_colonnes;
             {  
                 (*s_etat_processus).erreur_execution = d_ex_variable_partagee;  
                 return;  
             }  
   
             if (((*((*s_etat_processus).s_liste_variables  
                     [(*s_etat_processus).position_variable_courante].objet))  
                     .type != MIN) && ((*((*s_etat_processus)  
                     .s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet)).type != MRL))  
             {  
                 (*s_etat_processus).erreur_execution =  
                         d_ex_matrice_statistique_invalide;  
                 return;  
             }  
   
             nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus)  
                     .s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].objet)).objet))  
                     .nombre_colonnes;  
         }  
     }      }
   
     s_objet_statistique = ((*s_etat_processus).s_liste_variables      s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante)
             [(*s_etat_processus).position_variable_courante]).objet;              .objet;
   
     if (((*s_objet_statistique).type == MIN) ||      if (((*s_objet_statistique).type == MIN) ||
             ((*s_objet_statistique).type == MRL))              ((*s_objet_statistique).type == MRL))
Line 402  instruction_corr(struct_processus *s_eta Line 311  instruction_corr(struct_processus *s_eta
 void  void
 instruction_copyright(struct_processus *s_etat_processus)  instruction_copyright(struct_processus *s_etat_processus)
 {  {
 #   include                     "copyright.conv.h"  #   include                     "copyright-conv.h"
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
Line 753  instruction_convert(struct_processus *s_ Line 662  instruction_convert(struct_processus *s_
 void  void
 instruction_close(struct_processus *s_etat_processus)  instruction_close(struct_processus *s_etat_processus)
 {  {
     file                        *descripteur;      const char                  *queue;
   
     int                         socket;      int                         socket;
   
     logical1                    socket_connectee;      logical1                    socket_connectee;
   
       sqlite3_stmt                *ppStmt;
   
       struct_descripteur_fichier  *descripteur;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_precedent;      struct_liste_chainee        *l_element_precedent;
   
Line 836  instruction_close(struct_processus *s_et Line 749  instruction_close(struct_processus *s_et
                         (*((struct_descripteur_fichier *) (*l_element_courant)                          (*((struct_descripteur_fichier *) (*l_element_courant)
                         .donnee)).tid) != 0))                          .donnee)).tid) != 0))
                 {                  {
                     descripteur = (*((struct_descripteur_fichier *)                      descripteur = (struct_descripteur_fichier *)
                             (*l_element_courant).donnee)).descripteur;                              (*l_element_courant).donnee;
   
                     if (l_element_precedent == NULL)                      if (l_element_precedent == NULL)
                     {                      {
Line 856  instruction_close(struct_processus *s_et Line 769  instruction_close(struct_processus *s_et
   
                     free((*((struct_descripteur_fichier *)                      free((*((struct_descripteur_fichier *)
                             (*l_element_courant).donnee)).nom);                              (*l_element_courant).donnee)).nom);
                     free((*l_element_courant).donnee);  
                     free(l_element_courant);                      free(l_element_courant);
   
                     break;                      break;
Line 879  instruction_close(struct_processus *s_et Line 791  instruction_close(struct_processus *s_et
          * Fermeture du fichier           * Fermeture du fichier
          */           */
   
         if (fclose(descripteur) != 0)          if (fclose((*descripteur).descripteur_c) != 0)
         {          {
               free(descripteur);
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
   
             (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;              (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
             return;              return;
         }          }
   
           if ((*descripteur).type != 'C')
           {
               if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite,
                       "vacuum", 7, &ppStmt, &queue) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_step(ppStmt) != SQLITE_DONE)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_finalize(ppStmt) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               if (sqlite3_close((*descripteur).descripteur_sqlite) != SQLITE_OK)
               {
                   free(descripteur);
                   liberation(s_etat_processus, s_objet_argument);
   
                   (*s_etat_processus).erreur_systeme = d_es_erreur_fichier;
                   return;
               }
   
               free(descripteur);
           }
   
         if ((*((struct_fichier *) (*s_objet_argument).objet)).ouverture == 'S')          if ((*((struct_fichier *) (*s_objet_argument).objet)).ouverture == 'S')
         {          {
             if (destruction_fichier((*((struct_fichier *)              if (destruction_fichier((*((struct_fichier *)
Line 1023  instruction_create(struct_processus *s_e Line 978  instruction_create(struct_processus *s_e
   
     struct_objet                *s_objet_argument;      struct_objet                *s_objet_argument;
   
       unsigned char               *nom;
   
     unsigned long               unite;      unsigned long               unite;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
Line 1067  instruction_create(struct_processus *s_e Line 1024  instruction_create(struct_processus *s_e
   
     if ((*s_objet_argument).type == CHN)      if ((*s_objet_argument).type == CHN)
     {      {
         erreur = caracteristiques_fichier(s_etat_processus, (unsigned char *)          if ((nom = transliteration(s_etat_processus, (unsigned char *)
                 (*s_objet_argument).objet, &existence, &ouverture, &unite);                  (*s_objet_argument).objet, d_locale, "UTF-8")) == NULL)
           {
               liberation(s_etat_processus, s_objet_argument);
               return;
           }
   
           erreur = caracteristiques_fichier(s_etat_processus, nom,
                   &existence, &ouverture, &unite);
   
         if ((erreur != d_absence_erreur) || (existence == d_vrai))          if ((erreur != d_absence_erreur) || (existence == d_vrai))
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
               free(nom);
   
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
                     d_ex_erreur_acces_fichier;                      d_ex_erreur_acces_fichier;
             return;              return;
         }          }
   
         if ((fichier = fopen((unsigned char *) (*s_objet_argument).objet, "w"))          if ((fichier = fopen(nom, "w")) == NULL)
                 == NULL)  
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);
               free(nom);
   
             (*s_etat_processus).erreur_execution =              (*s_etat_processus).erreur_execution =
                     d_ex_erreur_acces_fichier;                      d_ex_erreur_acces_fichier;
             return;              return;
         }          }
   
           free(nom);
   
         if (fclose(fichier) != 0)          if (fclose(fichier) != 0)
         {          {
             liberation(s_etat_processus, s_objet_argument);              liberation(s_etat_processus, s_objet_argument);

Removed from v.1.6  
changed lines
  Added in v.1.32


CVSweb interface <joel.bertrand@systella.fr>