Diff for /rpl/src/interface_cas.cpp between versions 1.13 and 1.55

version 1.13, 2011/08/06 10:32:12 version 1.55, 2017/08/03 17:17:49
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.2    RPL/2 (R) version 4.1.28
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2017 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 21 Line 21
   
   
 #ifdef RPLCAS  #ifdef RPLCAS
   
   // Giac inclut <semaphore.h> et définit sem_t. Or l'émulation
   // des IPCS POSIX requiert une redéfinition de sem_t.
   
   #   ifdef IPCS_SYSV
   //      NetBSD : _SEMAPHORE_H_
   #       define _SEMAPHORE_H_
   //      Linux : _SEMAPHORE_H
   #       define _SEMAPHORE_H
   #   endif
   
   #   pragma GCC diagnostic push
   #   pragma GCC diagnostic ignored "-Wstrict-aliasing"
   #   pragma GCC diagnostic ignored "-Wunused-parameter"
   #   pragma GCC diagnostic ignored "-Wempty-body"
   #   pragma GCC diagnostic ignored "-Wunknown-pragmas"
 #   include "giac.h"  #   include "giac.h"
   #   pragma GCC diagnostic pop
   
 #   undef PACKAGE  #   undef PACKAGE
 #   undef PACKAGE_NAME  #   undef PACKAGE_NAME
Line 45  using namespace std; Line 62  using namespace std;
     using namespace giac;      using namespace giac;
 #endif  #endif
   
   void
   initialisation_contexte_cas(struct_processus *s_etat_processus)
   {
       s_etat_processus->contexte_cas = NULL;
       return;
   }
   
   void
   liberation_contexte_cas(struct_processus *s_etat_processus)
   {
       if (s_etat_processus->contexte_cas != NULL)
       {
   #       ifdef RPLCAS
           delete reinterpret_cast<giac::context *>(
                   s_etat_processus->contexte_cas);
   #       endif
           s_etat_processus->contexte_cas = NULL;
       }
   
       return;
   }
   
   #ifdef RPLCAS
 static unsigned char *  static unsigned char *
 conversion_rpl_vers_cas(struct_processus *s_etat_processus,  conversion_rpl_vers_cas(struct_processus *s_etat_processus,
         struct_objet **s_objet)          struct_objet **s_objet)
Line 53  conversion_rpl_vers_cas(struct_processus Line 92  conversion_rpl_vers_cas(struct_processus
     logical1                drapeau;      logical1                drapeau;
   
     struct_liste_chainee    *l_element_courant;      struct_liste_chainee    *l_element_courant;
     struct_liste_chainee    *l_element_precedent;  
   
     struct_objet            *s_objet_temporaire;      struct_objet            *s_objet_temporaire;
   
Line 184  conversion_rpl_vers_cas(struct_processus Line 222  conversion_rpl_vers_cas(struct_processus
                 }                  }
             }              }
   
             l_element_precedent = l_element_courant;  
             l_element_courant = l_element_courant->suivant;              l_element_courant = l_element_courant->suivant;
         }          }
     }      }
Line 238  conversion_cas_vers_rpl(struct_processus Line 275  conversion_cas_vers_rpl(struct_processus
     logical1                    drapeau;      logical1                    drapeau;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_precedent;  
   
     struct_objet                *s_objet;      struct_objet                *s_objet;
   
Line 311  conversion_cas_vers_rpl(struct_processus Line 347  conversion_cas_vers_rpl(struct_processus
   
     if ((s_objet->type == ALG) || (s_objet->type == RPN))      if ((s_objet->type == ALG) || (s_objet->type == RPN))
     {      {
         l_element_precedent = NULL;  
         l_element_courant = reinterpret_cast<struct_liste_chainee *>(          l_element_courant = reinterpret_cast<struct_liste_chainee *>(
                 s_objet->objet);                  s_objet->objet);
   
Line 357  conversion_cas_vers_rpl(struct_processus Line 392  conversion_cas_vers_rpl(struct_processus
                 }                  }
             }              }
   
             l_element_precedent = l_element_courant;  
             l_element_courant = l_element_courant->suivant;              l_element_courant = l_element_courant->suivant;
         }          }
     }      }
Line 370  conversion_cas_vers_rpl(struct_processus Line 404  conversion_cas_vers_rpl(struct_processus
   
     return;      return;
 }  }
   #endif
   
   
 /*  /*
Line 385  conversion_cas_vers_rpl(struct_processus Line 420  conversion_cas_vers_rpl(struct_processus
 ================================================================================  ================================================================================
 */  */
   
   #pragma GCC diagnostic push
   #pragma GCC diagnostic ignored "-Wunused-parameter"
 void  void
 interface_cas(struct_processus *s_etat_processus,  interface_cas(struct_processus *s_etat_processus,
         enum t_rplcas_commandes commande)          enum t_rplcas_commandes commande)
 {  {
 #   ifdef RPLCAS  #ifdef RPLCAS
     struct_objet            *s_objet_argument_1;      struct_objet            *s_objet_argument_1;
     struct_objet            *s_objet_argument_2;      struct_objet            *s_objet_argument_2;
     struct_objet            *s_objet_temporaire;      struct_objet            *s_objet_temporaire;
Line 403  interface_cas(struct_processus *s_etat_p Line 440  interface_cas(struct_processus *s_etat_p
   
     unsigned int            position;      unsigned int            position;
   
       giac::context           *contexte;
   
       if (s_etat_processus->contexte_cas == NULL)
       {
           try
           {
               s_etat_processus->contexte_cas = new giac::context;
           }
           catch(bad_alloc exception)
           {
               s_etat_processus->erreur_systeme = d_es_allocation_memoire;
               return;
           }
           catch(...)
           {
               s_etat_processus->erreur_execution = d_ex_erreur_interne_rplcas;
               return;
           }
       }
   
       contexte = reinterpret_cast<giac::context *>(
               s_etat_processus->contexte_cas);
   
       if ((s_etat_processus->erreur_execution != d_ex) ||
               (s_etat_processus->erreur_systeme != d_es))
       {
           return;
       }
   
     switch(commande)      switch(commande)
     {      {
         case RPLCAS_INTEGRATION:          case RPLCAS_INTEGRATION:
Line 441  interface_cas(struct_processus *s_etat_p Line 507  interface_cas(struct_processus *s_etat_p
   
             try              try
             {              {
                 giac::context   contexte;  
   
                 gen variable(                  gen variable(
                         string(reinterpret_cast<const char *>(argument_1)),                          string(reinterpret_cast<const char *>(argument_1)),
                         &contexte);                          contexte);
                 gen expression(                  gen expression(
                         string(reinterpret_cast<const char *>(argument_2)),                          string(reinterpret_cast<const char *>(argument_2)),
                         &contexte);                          contexte);
   
                 gen resultat = integrate_gen(expression, variable, &contexte);                  gen resultat = integrate_gen(expression, variable,
                           contexte);
                 string chaine = "'" + resultat.print() + "'";                  string chaine = "'" + resultat.print() + "'";
   
                 conversion_cas_vers_rpl(s_etat_processus,                  conversion_cas_vers_rpl(s_etat_processus,
Line 514  interface_cas(struct_processus *s_etat_p Line 579  interface_cas(struct_processus *s_etat_p
             l_element_courant = reinterpret_cast<struct_liste_chainee *>              l_element_courant = reinterpret_cast<struct_liste_chainee *>
                     (s_objet_argument_1->objet);                      (s_objet_argument_1->objet);
             position = 1;              position = 1;
               argument_1 = NULL;
               argument_3 = NULL;
             argument_4 = NULL;              argument_4 = NULL;
   
             while(l_element_courant != NULL)              while(l_element_courant != NULL)
Line 588  interface_cas(struct_processus *s_etat_p Line 655  interface_cas(struct_processus *s_etat_p
   
             try              try
             {              {
                 giac::context   contexte;  
   
                 int             direction;                  int             direction;
   
                 if (argument_4 == NULL)                  if (argument_4 == NULL)
Line 604  interface_cas(struct_processus *s_etat_p Line 669  interface_cas(struct_processus *s_etat_p
   
                 gen expression(                  gen expression(
                         string(reinterpret_cast<const char *>(argument_2)),                          string(reinterpret_cast<const char *>(argument_2)),
                         &contexte);                          contexte);
                 identificateur variable(                  identificateur variable(
                         string(reinterpret_cast<const char *>(argument_1)));                          string(reinterpret_cast<const char *>(argument_1)));
                 gen valeur(string(reinterpret_cast<const char *>                  gen valeur(string(reinterpret_cast<const char *>
                         (argument_3)), &contexte);                          (argument_3)), contexte);
   
                 gen resultat = limit(expression, variable, valeur, direction,                  gen resultat = limit(expression, variable, valeur, direction,
                         &contexte);                          contexte);
                 string chaine = "'" + resultat.print() + "'";                  string chaine = "'" + resultat.print() + "'";
   
                 conversion_cas_vers_rpl(s_etat_processus,                  conversion_cas_vers_rpl(s_etat_processus,
Line 641  interface_cas(struct_processus *s_etat_p Line 706  interface_cas(struct_processus *s_etat_p
     }      }
   
     return;      return;
   
 #else  #else
   
     if (s_etat_processus->langue == 'F')      if (s_etat_processus->langue == 'F')
Line 659  interface_cas(struct_processus *s_etat_p Line 723  interface_cas(struct_processus *s_etat_p
   
 #endif  #endif
 }  }
   #pragma GCC diagnostic pop
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.13  
changed lines
  Added in v.1.55


CVSweb interface <joel.bertrand@systella.fr>