--- rpl/src/sequenceur.c 2013/03/27 21:26:11 1.71 +++ rpl/src/sequenceur.c 2015/06/08 14:11:45 1.89 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.22 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -64,7 +64,6 @@ sequenceur(struct_processus *s_etat_proc unsigned char *message; unsigned char *registre; unsigned char *tampon; - unsigned char tampon_retour; unsigned char *t_ligne; Keymap ancien_keymap; @@ -198,12 +197,6 @@ sequenceur(struct_processus *s_etat_proc funlockfile(stdin); funlockfile(stdout); - if ((*s_etat_processus).var_volatile_requete_arret != 0) - { - (*s_etat_processus).requete_arret = 'Y'; - break; - } - if (ligne != NULL) { if ((t_ligne = transliteration(s_etat_processus, ligne, @@ -217,7 +210,7 @@ sequenceur(struct_processus *s_etat_proc free(ligne); ligne = t_ligne; - if ((ligne = compactage(ligne)) == NULL) + if ((ligne = compactage(s_etat_processus, ligne)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -266,6 +259,13 @@ sequenceur(struct_processus *s_etat_proc sprintf(ligne, "dup"); } + if ((*s_etat_processus).var_volatile_requete_arret != 0) + { + free(ligne); + (*s_etat_processus).requete_arret = 'Y'; + break; + } + add_history(ligne); stifle_history(ds_longueur_historique); @@ -296,6 +296,7 @@ sequenceur(struct_processus *s_etat_proc tampon = (*s_etat_processus).instruction_courante; (*s_etat_processus).instruction_courante = ligne; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); (*s_etat_processus).instruction_courante = tampon; @@ -334,8 +335,15 @@ sequenceur(struct_processus *s_etat_proc } else { - tampon_retour = (*(*s_etat_processus) - .l_base_pile_systeme).retour_definition; + position_courante = + (*s_etat_processus).position_courante; + empilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + return(d_erreur); + } + (*(*s_etat_processus).l_base_pile_systeme) .retour_definition = 'Y'; @@ -356,17 +364,18 @@ sequenceur(struct_processus *s_etat_proc printf("+++Error : Too few arguments\n"); } - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = tampon_retour; + depilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + return(d_erreur); + } fflush(stdout); } else if (evaluation(s_etat_processus, s_objet, 'I') == d_erreur) { - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = tampon_retour; - if ((*s_etat_processus).erreur_systeme != d_es) { if (test_cfsf(s_etat_processus, 51) == d_faux) @@ -452,8 +461,8 @@ sequenceur(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet); } - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = tampon_retour; + (*s_etat_processus).position_courante = + position_courante; } } else if ((*s_etat_processus).invalidation_message_erreur @@ -790,14 +799,17 @@ sequenceur(struct_processus *s_etat_proc */ (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); if ((*s_etat_processus).autorisation_nom_implicite == 'N') { if ((*s_etat_processus).l_base_pile == NULL) { - if ((*s_etat_processus).erreur_execution != - d_ex_nom_implicite) + if (((*s_etat_processus).erreur_execution != + d_ex_nom_implicite) && + ((*s_etat_processus).erreur_execution != + d_ex_syntaxe)) { (*s_etat_processus).erreur_execution = d_ex_manque_argument; @@ -877,7 +889,8 @@ sequenceur(struct_processus *s_etat_proc */ if ((instruction_majuscule = conversion_majuscule( - (*s_etat_processus).instruction_courante)) == NULL) + s_etat_processus, (*s_etat_processus) + .instruction_courante)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -902,8 +915,8 @@ sequenceur(struct_processus *s_etat_proc { if (((*((struct_fonction *) (*s_objet).objet)) .nom_fonction = conversion_majuscule( - (*s_etat_processus).instruction_courante)) - == NULL) + s_etat_processus, (*s_etat_processus) + .instruction_courante)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1188,7 +1201,8 @@ sequenceur(struct_processus *s_etat_proc { (*s_etat_processus).erreur_systeme = d_es; instruction_majuscule = conversion_majuscule( - (*s_etat_processus).instruction_courante); + s_etat_processus, (*s_etat_processus) + .instruction_courante); if (instruction_majuscule == NULL) { @@ -1376,6 +1390,7 @@ sequenceur(struct_processus *s_etat_proc } instruction_majuscule = conversion_majuscule( + s_etat_processus, (*s_etat_processus).instruction_courante); if (instruction_majuscule == NULL)