--- rpl/src/instructions_t1.c 2010/06/24 10:10:45 1.9 +++ rpl/src/instructions_t1.c 2010/07/12 15:55:01 1.10 @@ -214,6 +214,8 @@ instruction_then(struct_processus *s_eta struct_liste_chainee *s_registre; + struct_liste_pile_systeme *l_element_courant; + struct_objet *s_objet; unsigned char *instruction_majuscule; @@ -365,15 +367,32 @@ instruction_then(struct_processus *s_eta * THEN et ELSE ou END. */ - if (((*(*s_etat_processus).l_base_pile_systeme).clause != - 'K') && ((*(*s_etat_processus).l_base_pile_systeme) - .clause != 'C')) + if ((*(*s_etat_processus).l_base_pile_systeme).clause != + 'K') { (*(*s_etat_processus).l_base_pile_systeme).clause = 'T'; } else { - (*(*s_etat_processus).l_base_pile_systeme).clause = 'Q'; + if ((*s_etat_processus).l_base_pile_systeme == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_pile_vide; + return; + } + + l_element_courant = (*(*s_etat_processus).l_base_pile_systeme) + .suivant; + + while(l_element_courant != NULL) + { + if ((*l_element_courant).clause == 'K') + { + (*l_element_courant).clause = 'Q'; + break; + } + + l_element_courant = (*l_element_courant).suivant; + } } } else @@ -480,6 +499,7 @@ instruction_then(struct_processus *s_eta } else if (strcmp(instruction_majuscule, "END") == 0) { + instruction_end(s_etat_processus); drapeau_fin = d_vrai; } else @@ -592,9 +612,8 @@ instruction_then(struct_processus *s_eta if (((*(*s_etat_processus).l_base_pile_systeme) .clause != 'K') && ((*(*s_etat_processus) - .l_base_pile_systeme) .clause != 'C')) + .l_base_pile_systeme).clause != 'C')) { - /* * Traitement de IF/THEN/ELSEIF/THEN/ * ELSE/END @@ -640,6 +659,8 @@ instruction_then(struct_processus *s_eta } else if (fonction == instruction_end) { + fonction(s_etat_processus); + execution = d_vrai; drapeau_fin = d_vrai; } else @@ -699,7 +720,6 @@ instruction_then(struct_processus *s_eta } liberation(s_etat_processus, s_objet); - return; }