--- rpl/src/instructions_e1.c 2010/03/09 10:18:46 1.5 +++ rpl/src/instructions_e1.c 2011/07/25 07:44:56 1.27 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.13 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.2 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -185,10 +185,12 @@ instruction_eval(struct_processus *s_eta void instruction_end(struct_processus *s_etat_processus) { - struct_objet *s_objet; - logical1 condition; + struct_liste_pile_systeme *l_element_courant; + + struct_objet *s_objet; + (*s_etat_processus).erreur_execution = d_ex; if ((*s_etat_processus).affichage_arguments == 'Y') @@ -366,18 +368,52 @@ instruction_end(struct_processus *s_etat } else if ((*(*s_etat_processus).l_base_pile_systeme).type_cloture == 'C') { - if ((*(*s_etat_processus).l_base_pile_systeme).clause != 'Q') + depilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) { - depilement_pile_systeme(s_etat_processus); + return; + } + } + else if ((*(*s_etat_processus).l_base_pile_systeme).type_cloture == 'K') + { + l_element_courant = (*(*s_etat_processus).l_base_pile_systeme).suivant; - if ((*s_etat_processus).erreur_systeme != d_es) + while(l_element_courant != NULL) + { + switch((*l_element_courant).clause) { - return; + case 'K' : + case 'Q' : + case 'C' : + { + if ((*l_element_courant).clause == 'Q') + { + (*l_element_courant).clause = 'C'; + } + else + { + (*l_element_courant).clause = (*(*s_etat_processus) + .l_base_pile_systeme).clause; + } + + l_element_courant = NULL; + break; + } + + default : + { + l_element_courant = (*l_element_courant).suivant; + break; + } } } - else + + depilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) { - (*(*s_etat_processus).l_base_pile_systeme).clause = 'C'; + return; } } else