--- rpl/src/analyse.c 2010/06/18 11:54:00 1.19 +++ rpl/src/analyse.c 2010/12/10 15:36:21 1.33 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.16 + RPL/2 (R) version 4.0.20 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -459,7 +459,9 @@ initialisation_instructions(struct_proce INSTRUCTION("INCR", instruction_incr); //INSTRUCTION("ISOL"); INSTRUCTION("ISWI", instruction_iswi); +# ifndef OS2 INSTRUCTION("KILL", instruction_kill); +# endif INSTRUCTION("KIND", instruction_kind); INSTRUCTION("LAST", instruction_last); INSTRUCTION("LEGV", instruction_legv); @@ -486,7 +488,9 @@ initialisation_instructions(struct_proce INSTRUCTION("PLOT", instruction_plot); INSTRUCTION("PMAX", instruction_pmax); INSTRUCTION("PMIN", instruction_pmin); +# ifndef OS2 INSTRUCTION("POKE", instruction_poke); +# endif INSTRUCTION("PPAR", instruction_ppar); INSTRUCTION("PRMD", instruction_prmd); INSTRUCTION("PRST", instruction_prst); @@ -552,7 +556,9 @@ initialisation_instructions(struct_proce INSTRUCTION("STO-", instruction_sto_moins); INSTRUCTION("STO/", instruction_sto_division); INSTRUCTION("STOF", instruction_stof); +# ifndef OS2 INSTRUCTION("STOP", instruction_stop); +# endif INSTRUCTION("STOS", instruction_stos); INSTRUCTION("STWS", instruction_stws); INSTRUCTION("SWAP", instruction_swap); @@ -685,7 +691,9 @@ initialisation_instructions(struct_proce INSTRUCTION("SLICE", instruction_slice); //INSTRUCTION("SLIST") //Instruction HP48 (somme des termes d'une liste) +# ifndef OS2 INSTRUCTION("SPAWN", instruction_spawn); +# endif INSTRUCTION("START", instruction_start); INSTRUCTION("STORE", instruction_store); INSTRUCTION("STR->", instruction_str_fleche); @@ -715,13 +723,16 @@ initialisation_instructions(struct_proce INSTRUCTION("APPEND", instruction_append); INSTRUCTION("ARRY->", instruction_array_fleche); INSTRUCTION("ATEXIT", instruction_atexit); + INSTRUCTION("ATPOKE", instruction_atpoke); INSTRUCTION("BESSEL", instruction_bessel); INSTRUCTION("CLRERR", instruction_clrerr); INSTRUCTION("CLRMTX", instruction_clrmtx); INSTRUCTION("CLRSWI", instruction_clrswi); INSTRUCTION("CREATE", instruction_create); INSTRUCTION("DELETE", instruction_delete); +# ifndef OS2 INSTRUCTION("DETACH", instruction_detach); +# endif INSTRUCTION("DIAG->", instruction_diag_fleche); //INSTRUCTION("DOLIST") //Instruction HP48 (application d'une fonction à une liste) @@ -815,7 +826,9 @@ initialisation_instructions(struct_proce INSTRUCTION("CLRCNTXT", instruction_clrcntxt); INSTRUCTION("CLRSMPHR", instruction_clrsmphr); +# ifndef OS2 INSTRUCTION("CONTINUE", instruction_continue); +# endif INSTRUCTION("DUPCNTXT", instruction_dupcntxt); INSTRUCTION("FUNCTION", instruction_function); INSTRUCTION("IMPLICIT", instruction_implicit); @@ -834,7 +847,9 @@ initialisation_instructions(struct_proce INSTRUCTION("AUTOSCALE", instruction_autoscale); INSTRUCTION("BACKSPACE", instruction_backspace); + INSTRUCTION("BACKTRACE", instruction_backtrace); INSTRUCTION("CLRATEXIT", instruction_clratexit); + INSTRUCTION("CLRATPOKE", instruction_clratpoke); INSTRUCTION("COPYRIGHT", instruction_copyright); //INSTRUCTION("CYLINDRIC"); INSTRUCTION("DAEMONIZE", instruction_daemonize); @@ -881,7 +896,7 @@ initialisation_instructions(struct_proce } -extern inline void * +void * analyse_instruction(struct_processus *s_etat_processus, unsigned char *ptr) { int pointeur; @@ -1141,6 +1156,7 @@ analyse(struct_processus *s_etat_process -------------------------------------------------------------------------------- */ +# ifndef OS2 if ((*s_etat_processus).pourcentage_maximal_cpu < 100) { getrusage(RUSAGE_SELF, &usage_final); @@ -1196,6 +1212,7 @@ analyse(struct_processus *s_etat_process usage_initial = usage_final; } } +# endif /* -------------------------------------------------------------------------------- @@ -1232,17 +1249,17 @@ analyse(struct_processus *s_etat_process ((*s_etat_processus).erreur_systeme != d_es) || ((*s_etat_processus).exception != d_ep)) { - if ((*s_etat_processus).instruction_derniere_erreur != NULL) - { - free((*s_etat_processus).instruction_derniere_erreur); - (*s_etat_processus).instruction_derniere_erreur = NULL; - } - (*s_etat_processus).niveau_derniere_erreur = (*s_etat_processus).niveau_courant; if ((*s_etat_processus).mode_execution_programme == 'Y') { + if ((*s_etat_processus).instruction_derniere_erreur != NULL) + { + free((*s_etat_processus).instruction_derniere_erreur); + (*s_etat_processus).instruction_derniere_erreur = NULL; + } + if ((*s_etat_processus).instruction_courante == NULL) { if (((*s_etat_processus).instruction_derniere_erreur = @@ -1274,11 +1291,22 @@ analyse(struct_processus *s_etat_process } else { - if (((*s_etat_processus).instruction_derniere_erreur = - formateur(s_etat_processus, 0, - (*s_etat_processus).objet_courant)) == NULL) + if ((*s_etat_processus).objet_courant != NULL) { - return; + if ((*s_etat_processus).instruction_derniere_erreur != NULL) + { + free((*s_etat_processus).instruction_derniere_erreur); + (*s_etat_processus).instruction_derniere_erreur = NULL; + } + + if (((*s_etat_processus).instruction_derniere_erreur = + formateur(s_etat_processus, 0, + (*s_etat_processus).objet_courant)) == NULL) + { + return; + } + + (*s_etat_processus).objet_courant = NULL; } } }