--- rpl/src/sequenceur.c 2013/02/27 17:11:45 1.66 +++ rpl/src/sequenceur.c 2013/04/18 21:38:04 1.74 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 + RPL/2 (R) version 4.1.14 Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -44,6 +44,9 @@ sequenceur(struct_processus *s_etat_proc struct_objet *s_objet_evaluation; struct_objet *s_sous_objet; + integer8 niveau; + integer8 position_courante; + logical1 drapeau_appel_definition; logical1 drapeau_fin; logical1 drapeau_then; @@ -61,12 +64,8 @@ sequenceur(struct_processus *s_etat_proc unsigned char *message; unsigned char *registre; unsigned char *tampon; - unsigned char tampon_retour; unsigned char *t_ligne; - unsigned long niveau; - unsigned long position_courante; - Keymap ancien_keymap; Keymap nouveau_keymap; @@ -80,12 +79,12 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).langue == 'F') { - printf("[%d] Exécution récursive de niveau %lu\n", + printf("[%d] Exécution récursive de niveau %lld\n", (int) getpid(), (*s_etat_processus).niveau_recursivite); } else { - printf("[%d] %lu level recursive execution\n", + printf("[%d] %lld level recursive execution\n", (int) getpid(), (*s_etat_processus).niveau_recursivite); } } @@ -93,7 +92,7 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).langue == 'F') { - printf("[%d] Exécution\n", (int) getpid()); + printf("[%d] Exécution\n", (int) getpid()); } else { @@ -334,8 +333,13 @@ sequenceur(struct_processus *s_etat_proc } else { - tampon_retour = (*(*s_etat_processus) - .l_base_pile_systeme).retour_definition; + 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'; @@ -349,24 +353,25 @@ sequenceur(struct_processus *s_etat_proc if ((*s_etat_processus).langue == 'F') { - printf("+++Erreur : Défaut d'argument\n"); + printf("+++Erreur : Défaut d'argument\n"); } else { 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) @@ -451,9 +456,6 @@ sequenceur(struct_processus *s_etat_proc { liberation(s_etat_processus, s_objet); } - - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = tampon_retour; } } else if ((*s_etat_processus).invalidation_message_erreur @@ -593,7 +595,7 @@ sequenceur(struct_processus *s_etat_proc else { printf("[%d] Pushing %s as %d type shared " - "variable \n", (int) getpid(), + "variable\n", (int) getpid(), (*s_etat_processus) .instruction_courante, (*(*(*s_etat_processus) @@ -721,7 +723,7 @@ sequenceur(struct_processus *s_etat_proc .niveau_courant; (*s_etat_processus).position_courante = - (*((unsigned long *) + (*((integer8 *) ((*(*(*s_etat_processus) .pointeur_variable_courante) .objet).objet))); @@ -951,8 +953,8 @@ sequenceur(struct_processus *s_etat_proc free(instruction_majuscule); } - erreur |= (((*s_etat_processus).erreur_execution != d_ex) - ? d_erreur : d_absence_erreur); + erreur = (logical1) (erreur | (((*s_etat_processus) + .erreur_execution != d_ex) ? d_erreur : d_absence_erreur)); } else { @@ -993,7 +995,7 @@ sequenceur(struct_processus *s_etat_proc { if (strncmp(getenv("LANG"), "fr", 2) == 0) { - printf("[%d] Arrêt\n", (int) getpid()); + printf("[%d] Arrêt\n", (int) getpid()); } else { @@ -1065,7 +1067,7 @@ sequenceur(struct_processus *s_etat_proc (*s_etat_processus).exception = d_ep; erreur = d_absence_erreur; - (*s_etat_processus).position_courante -= + (*s_etat_processus).position_courante -= (integer8) strlen((*s_etat_processus).instruction_courante); } @@ -1175,7 +1177,7 @@ sequenceur(struct_processus *s_etat_proc .niveau_courant; (*s_etat_processus).position_courante = - (*((unsigned long *) + (*((integer8 *) ((*(*(*s_etat_processus) .pointeur_variable_courante) .objet).objet)));