--- rpl/src/sequenceur.c 2011/04/21 16:01:01 1.31 +++ rpl/src/sequenceur.c 2012/01/25 16:38:30 1.49 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0.prerelease.0 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.6 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -63,11 +63,12 @@ sequenceur(struct_processus *s_etat_proc unsigned char tampon_retour; unsigned char *t_ligne; - unsigned long i; - unsigned long j; unsigned long niveau; unsigned long position_courante; + Keymap ancien_keymap; + Keymap nouveau_keymap; + (*s_etat_processus).retour_routine_evaluation = 'N'; if ((*s_etat_processus).debug == d_vrai) @@ -109,9 +110,6 @@ sequenceur(struct_processus *s_etat_proc -------------------------------------------------------------------------------- */ - i = 0; - j = 0; - do { drapeau_appel_definition = d_faux; @@ -182,8 +180,19 @@ sequenceur(struct_processus *s_etat_proc flockfile(stdin); flockfile(stdout); + ancien_keymap = rl_get_keymap(); + nouveau_keymap = rl_copy_keymap(ancien_keymap); + rl_set_keymap(nouveau_keymap); + + rl_bind_key('\n', readline_analyse_syntaxique); + rl_bind_key('\r', readline_analyse_syntaxique); + rl_done = 0; + ligne = readline("RPL/2> "); + rl_set_keymap(ancien_keymap); + rl_free(nouveau_keymap); + funlockfile(stdin); funlockfile(stdout); @@ -555,9 +564,8 @@ sequenceur(struct_processus *s_etat_proc d_vrai) && ((*s_etat_processus) .autorisation_evaluation_nom == 'Y')) { - if (((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante) + .objet == NULL) { /* @@ -574,12 +582,10 @@ sequenceur(struct_processus *s_etat_proc { printf("[%d] Empilement de la variable " "partagée %s de type %d\n", - (int) getpid(), - (*s_etat_processus) + (int) getpid(), (*s_etat_processus) .instruction_courante, - (*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet) + (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .type); } else @@ -588,9 +594,8 @@ sequenceur(struct_processus *s_etat_proc "variable \n", (int) getpid(), (*s_etat_processus) .instruction_courante, - (*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet) + (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .type); } @@ -606,13 +611,11 @@ sequenceur(struct_processus *s_etat_proc } if (recherche_variable_partagee(s_etat_processus, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).nom, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]) - .variable_partagee, 'P') == d_vrai) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante).variable_partagee, + 'P') == d_vrai) { // La variable existe. @@ -672,8 +675,7 @@ sequenceur(struct_processus *s_etat_proc -------------------------------------------------------------------------------- */ - else if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) + else if ((*(*(*s_etat_processus).pointeur_variable_courante) .objet).type == ADR) { @@ -742,10 +744,9 @@ sequenceur(struct_processus *s_etat_proc (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).objet))); + ((*(*(*s_etat_processus) + .pointeur_variable_courante) + .objet).objet))); drapeau_appel_definition = d_vrai; } @@ -763,9 +764,8 @@ sequenceur(struct_processus *s_etat_proc (int) getpid(), (*s_etat_processus) .instruction_courante, - (*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet) + (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .type); } else @@ -774,9 +774,8 @@ sequenceur(struct_processus *s_etat_proc "\n", (int) getpid(), (*s_etat_processus) .instruction_courante, - (*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet) + (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .type); } @@ -784,9 +783,8 @@ sequenceur(struct_processus *s_etat_proc } if ((s_objet = copie_objet(s_etat_processus, - ((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet, 'P')) + (*(*s_etat_processus) + .pointeur_variable_courante).objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = @@ -820,8 +818,12 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).l_base_pile == NULL) { - (*s_etat_processus).erreur_execution = - d_ex_manque_argument; + if ((*s_etat_processus).erreur_execution != + d_ex_nom_implicite) + { + (*s_etat_processus).erreur_execution = + d_ex_manque_argument; + } } else if ((*(*(*s_etat_processus).l_base_pile).donnee) .type == NOM) @@ -1167,16 +1169,13 @@ sequenceur(struct_processus *s_etat_proc if (recherche_variable(s_etat_processus, (*s_etat_processus).instruction_courante) == d_vrai) { - if (((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante) + .objet == NULL) { // Variable partagée } - else if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet).type == - ADR) + else if ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type == ADR) { empilement_pile_systeme(s_etat_processus); @@ -1199,10 +1198,9 @@ sequenceur(struct_processus *s_etat_proc (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).objet))); + ((*(*(*s_etat_processus) + .pointeur_variable_courante) + .objet).objet))); (*s_etat_processus) .autorisation_empilement_programme = 'N'; @@ -1409,7 +1407,8 @@ sequenceur(struct_processus *s_etat_proc if ((*s_etat_processus).var_volatile_processus_pere == 0) { - kill((*s_etat_processus).pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus).pid_processus_pere, + rpl_sigalrm); } else {