--- rpl/src/interface_cas.cpp 2017/08/03 17:17:49 1.55 +++ rpl/src/interface_cas.cpp 2022/09/07 13:40:40 1.68 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.28 - Copyright (C) 1989-2017 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.34 + Copyright (C) 1989-2021 Dr. BERTRAND Joël This file is part of RPL/2. @@ -21,6 +21,7 @@ #ifdef RPLCAS +# define RPLCXX // Giac inclut et définit sem_t. Or l'émulation // des IPCS POSIX requiert une redéfinition de sem_t. @@ -37,7 +38,7 @@ # pragma GCC diagnostic ignored "-Wunused-parameter" # pragma GCC diagnostic ignored "-Wempty-body" # pragma GCC diagnostic ignored "-Wunknown-pragmas" -# include "giac.h" +# include "giacPCH.h" # pragma GCC diagnostic pop # undef PACKAGE @@ -132,8 +133,8 @@ conversion_rpl_vers_cas(struct_processus liberation(s_etat_processus, *s_objet); - if (depilement(s_etat_processus, &(s_etat_processus - ->l_base_pile), s_objet) == d_erreur) + if (depilement(s_etat_processus, &(s_etat_processus->l_base_pile), + s_objet) == d_erreur) { return(NULL); } @@ -235,7 +236,7 @@ conversion_rpl_vers_cas(struct_processus strstr(reinterpret_cast(index), (const char *) "relax"))) != NULL) { - strncpy(reinterpret_cast(index), " +", 5); + memcpy(reinterpret_cast(index), " +", 5); } // Si le résultat vaut infinity, on rajoute le signe +. @@ -448,7 +449,7 @@ interface_cas(struct_processus *s_etat_p { s_etat_processus->contexte_cas = new giac::context; } - catch(bad_alloc exception) + catch(bad_alloc &exception) { s_etat_processus->erreur_systeme = d_es_allocation_memoire; return; @@ -463,6 +464,9 @@ interface_cas(struct_processus *s_etat_p contexte = reinterpret_cast( s_etat_processus->contexte_cas); + giac::angle_radian((test_cfsf(s_etat_processus, 60) == d_vrai) ? 1 : 0, + contexte); + if ((s_etat_processus->erreur_execution != d_ex) || (s_etat_processus->erreur_systeme != d_es)) { @@ -522,7 +526,7 @@ interface_cas(struct_processus *s_etat_p reinterpret_cast(const_cast( chaine.c_str()))); } - catch(bad_alloc exception) + catch(bad_alloc &exception) { s_etat_processus->erreur_systeme = d_es_allocation_memoire; } @@ -683,7 +687,7 @@ interface_cas(struct_processus *s_etat_p reinterpret_cast(const_cast( chaine.c_str()))); } - catch(bad_alloc exception) + catch(bad_alloc &exception) { s_etat_processus->erreur_systeme = d_es_allocation_memoire; } @@ -703,6 +707,51 @@ interface_cas(struct_processus *s_etat_p break; } + + case RPLCAS_SIMPLIFICATION: + { + if (depilement(s_etat_processus, &(s_etat_processus->l_base_pile), + &s_objet_argument_1) == d_erreur) + { + s_etat_processus->erreur_execution = d_ex_manque_argument; + return; + } + + if ((argument_1 = conversion_rpl_vers_cas(s_etat_processus, + &s_objet_argument_1)) == NULL) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + return; + } + + liberation(s_etat_processus, s_objet_argument_1); + + try + { + gen expression( + string(reinterpret_cast(argument_1)), + contexte); + + gen resultat = simplify(expression, contexte); + string chaine = "'" + resultat.print() + "'"; + + conversion_cas_vers_rpl(s_etat_processus, + reinterpret_cast(const_cast( + chaine.c_str()))); + } + catch(bad_alloc &exception) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + } + catch(...) + { + s_etat_processus->erreur_execution = d_ex_erreur_interne_rplcas; + } + + free(argument_1); + + break; + } } return;