--- rpl/src/instructions_p4.c 2011/06/21 07:45:26 1.21 +++ rpl/src/instructions_p4.c 2012/01/05 10:19:03 1.33 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0.prerelease.1 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.5 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -254,8 +254,10 @@ instruction_prst(struct_processus *s_eta } } + routine_recursive = 2; impression_pile(s_etat_processus, (*s_etat_processus).l_base_pile, 'E', 1); + routine_recursive = 0; return; } @@ -333,8 +335,10 @@ instruction_prstc(struct_processus *s_et } } + routine_recursive = 2; impression_pile(s_etat_processus, (*s_etat_processus).l_base_pile, 'C', 1); + routine_recursive = 0; return; } @@ -482,8 +486,13 @@ instruction_prvar(struct_processus *s_et void instruction_prusr(struct_processus *s_etat_processus) { + int i; + int nb_variables; + struct_objet s_objet; + struct_tableau_variables *tableau; + (*s_etat_processus).erreur_execution = d_ex; if ((*s_etat_processus).affichage_arguments == 'Y') @@ -517,28 +526,40 @@ instruction_prusr(struct_processus *s_et } } + nb_variables = nombre_variables(s_etat_processus, + (*s_etat_processus).s_arbre_variables); + + if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables))) + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + liste_variables(s_etat_processus, tableau, 0, + (*s_etat_processus).s_arbre_variables); + s_objet.type = CHN; - /* - for(i = 0; i < (*s_etat_processus).nombre_variables; i++) + for(i = 0; i < nb_variables; i++) { - if ((s_objet.objet = malloc((strlen((*s_etat_processus) - .s_liste_variables[i].nom) + 64) * sizeof(unsigned char))) - == NULL) + if ((s_objet.objet = malloc((strlen(tableau[i].nom) + 64) + * sizeof(unsigned char))) == NULL) { + free(tableau); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - sprintf((unsigned char *) s_objet.objet, "\\noindent %s [%lu]\n", - (*s_etat_processus).s_liste_variables[i].nom, - (*s_etat_processus).s_liste_variables[i].niveau); + sprintf((unsigned char *) s_objet.objet, "\\\\noindent %s [%lu]\n", + tableau[i].nom, tableau[i].niveau); formateur_tex(s_etat_processus, &s_objet, 'N'); free(s_objet.objet); } - */ + free(tableau); return; }