--- rpl/src/instructions_e2.c 2010/01/27 22:22:13 1.2 +++ rpl/src/instructions_e2.c 2011/06/22 13:27:00 1.25 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.3 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -721,11 +721,10 @@ void instruction_edit(struct_processus *s_etat_processus) { # ifdef VIM_SUPPORT -# include "vim.conv.h" +# include "vim-conv.h" file *fichier; - logical1 drapeau; logical1 drapeau49; logical1 drapeau50; @@ -738,6 +737,7 @@ instruction_edit(struct_processus *s_eta unsigned char *chaine; unsigned char *commande; unsigned char *nom_fichier; + unsigned char registre; (*s_etat_processus).erreur_execution = d_ex; @@ -848,12 +848,19 @@ instruction_edit(struct_processus *s_eta return; } + registre = (*s_etat_processus).autorisation_conversion_chaine; + (*s_etat_processus).autorisation_conversion_chaine = 'N'; + if ((chaine = formateur(s_etat_processus, 0, s_objet)) == NULL) { + (*s_etat_processus).autorisation_conversion_chaine = registre; + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } + (*s_etat_processus).autorisation_conversion_chaine = registre; + if ((*s_objet).type == CHN) { if (fprintf(fichier, "\"%s\"\n", chaine) != (int) (strlen(chaine) + 3)) @@ -879,101 +886,93 @@ instruction_edit(struct_processus *s_eta return; } - do + if ((commande = malloc((strlen(ds_vim_commande) + strlen(nom_fichier) + - 1) * sizeof(unsigned char))) == NULL) { - if ((commande = malloc((strlen(ds_vim_commande) + strlen(nom_fichier) - - 1) * sizeof(unsigned char))) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - sprintf(commande, ds_vim_commande, nom_fichier); + sprintf(commande, ds_vim_commande, nom_fichier); - if (system(commande) != 0) - { - free(commande); + if (system(commande) != 0) + { + free(commande); - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } - free(commande); + free(commande); - if ((s_objet_nom = allocation(s_etat_processus, CHN)) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + if ((s_objet_nom = allocation(s_etat_processus, CHN)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - if (((*s_objet_nom).objet = malloc((strlen(nom_fichier) + 1) - * sizeof(unsigned char))) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + if (((*s_objet_nom).objet = malloc((strlen(nom_fichier) + 1) + * sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - strcpy((unsigned char *) (*s_objet_nom).objet, nom_fichier); + strcpy((unsigned char *) (*s_objet_nom).objet, nom_fichier); - if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), - s_objet_nom) == d_erreur) - { - return; - } + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), + s_objet_nom) == d_erreur) + { + return; + } - registre_pile_last = (*s_etat_processus).l_base_pile_last; - (*s_etat_processus).l_base_pile_last = NULL; + registre_pile_last = (*s_etat_processus).l_base_pile_last; + (*s_etat_processus).l_base_pile_last = NULL; - instruction_recall(s_etat_processus); + instruction_recall(s_etat_processus); - // Destruction du fichier temporaire + if (empilement_pile_last(s_etat_processus, 0) == d_erreur) + { + return; + } - if (destruction_fichier(nom_fichier) == d_erreur) - { - (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; - return; - } + (*s_etat_processus).l_base_pile_last = registre_pile_last; - free(nom_fichier); + // Destruction du fichier temporaire - if (((*s_etat_processus).erreur_systeme != d_es) || - ((*s_etat_processus).erreur_execution != d_ex) || - ((*s_etat_processus).exception != d_ep)) - { - if (empilement_pile_last(s_etat_processus, 0) == d_erreur) - { - return; - } + if (destruction_fichier(nom_fichier) == d_erreur) + { + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } - (*s_etat_processus).l_base_pile_last = registre_pile_last; - liberation(s_etat_processus, s_objet); + free(nom_fichier); - return; - } + if (((*s_etat_processus).erreur_systeme != d_es) || + ((*s_etat_processus).erreur_execution != d_ex) || + ((*s_etat_processus).exception != d_ep)) + { + liberation(s_etat_processus, s_objet); - if ((*s_etat_processus).erreur_systeme != d_es) - { - return; - } + return; + } - if ((*s_etat_processus).erreur_execution == d_ex_fichier_vide) - { - if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), - s_objet) == d_erreur) - { - return; - } + if ((*s_etat_processus).erreur_systeme != d_es) + { + return; + } - (*s_etat_processus).erreur_execution = d_ex; - drapeau = d_faux; - } - else + if ((*s_etat_processus).erreur_execution == d_ex_fichier_vide) + { + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), + s_objet) == d_erreur) { - drapeau = d_vrai; + return; } - } while((*s_etat_processus).erreur_execution != d_ex); - if (drapeau == d_vrai) + (*s_etat_processus).erreur_execution = d_ex; + } + else { liberation(s_etat_processus, s_objet); } @@ -1303,8 +1302,7 @@ instruction_exit(struct_processus *s_eta { instruction_majuscule = conversion_majuscule(""); - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] + if ((*(*s_etat_processus).pointeur_variable_courante) .objet == NULL) { if (pthread_mutex_lock(&((*(*s_etat_processus) @@ -1316,18 +1314,15 @@ instruction_exit(struct_processus *s_eta } 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, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .origine) == d_vrai) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante).variable_partagee, + (*(*s_etat_processus) + .pointeur_variable_courante).origine) == d_vrai) { - if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet).type + if ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type == ADR) { empilement_pile_systeme(s_etat_processus); @@ -1359,9 +1354,8 @@ instruction_exit(struct_processus *s_eta (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)) + ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet))); (*s_etat_processus) @@ -1384,10 +1378,8 @@ instruction_exit(struct_processus *s_eta } else { - if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet).type - == ADR) + if ((*(*(*s_etat_processus).pointeur_variable_courante) + .objet).type == ADR) { empilement_pile_systeme(s_etat_processus); @@ -1407,9 +1399,9 @@ instruction_exit(struct_processus *s_eta (*s_etat_processus).niveau_courant; (*s_etat_processus).position_courante = - (*((unsigned long *) ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)) + (*((unsigned long *) + ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet))); (*s_etat_processus) @@ -1531,8 +1523,7 @@ instruction_exit(struct_processus *s_eta { instruction_majuscule = conversion_majuscule(""); - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] + if ((*(*s_etat_processus).pointeur_variable_courante) .objet == NULL) { if (pthread_mutex_lock(&((*(*s_etat_processus) @@ -1544,18 +1535,15 @@ instruction_exit(struct_processus *s_eta } 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, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .origine) == d_vrai) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante).variable_partagee, + (*(*s_etat_processus) + .pointeur_variable_courante).origine) == d_vrai) { - if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet).type + if ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type == ADR) { empilement_pile_systeme(s_etat_processus); @@ -1587,9 +1575,8 @@ instruction_exit(struct_processus *s_eta (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)) + ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet))); (*s_etat_processus) @@ -1612,10 +1599,8 @@ instruction_exit(struct_processus *s_eta } else { - if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet).type - == ADR) + if ((*(*(*s_etat_processus).pointeur_variable_courante) + .objet).type == ADR) { empilement_pile_systeme(s_etat_processus); @@ -1635,9 +1620,9 @@ instruction_exit(struct_processus *s_eta (*s_etat_processus).niveau_courant; (*s_etat_processus).position_courante = - (*((unsigned long *) ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)) + (*((unsigned long *) + ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet))); (*s_etat_processus)