--- rpl/src/instructions_s9.c 2010/04/21 13:45:49 1.9 +++ rpl/src/instructions_s9.c 2010/09/02 07:51:48 1.21 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.15 + RPL/2 (R) version 4.0.19 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -57,6 +57,7 @@ instruction_sort(struct_processus *s_eta struct_objet *s_objet_copie; struct_objet *s_objet_critere; struct_objet *s_objet_liste; + struct_objet *s_objet_registre; struct_objet *s_objet_test; signed long indice_i; @@ -463,7 +464,6 @@ instruction_sort(struct_processus *s_eta indice_j = 0; indice_k = (*((struct_tableau *) (*s_objet_liste).objet)) .nombre_elements - ecartement; - terminaison_boucle_2 = d_faux; do @@ -557,12 +557,17 @@ instruction_sort(struct_processus *s_eta if (condition == d_faux) { - swap((void *) (*((struct_tableau *) - (*s_objet_liste).objet)).elements - [indice_i - 1], (void *) - (*((struct_tableau *) (*s_objet_liste) - .objet)).elements[indice_l - 1], - sizeof(struct_objet)); + s_objet_registre = + (*((struct_tableau *) + (*s_objet_liste).objet)).elements + [indice_i - 1]; + (*((struct_tableau *) (*s_objet_liste).objet)) + .elements[indice_i - 1] = + (*((struct_tableau *) (*s_objet_liste) + .objet)).elements[indice_l - 1]; + (*((struct_tableau *) (*s_objet_liste) + .objet)).elements[indice_l - 1] = + s_objet_registre; indice_i -= ecartement; @@ -793,10 +798,18 @@ instruction_save(struct_processus *s_eta i--; } - (*s_etat_processus).position_variable_courante = i; + if (presence_variable == d_vrai) + { + (*s_etat_processus).position_variable_courante = i; + } + else + { + (*s_etat_processus).position_variable_courante = 0; + } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].niveau == 1) + if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) + .position_variable_courante].niveau == 1) && + (presence_variable == d_vrai)) { // On a trouvé une variable globale correspondant au nom et // que l'on modifie. @@ -968,6 +981,12 @@ instruction_suspend(struct_processus *s_ { (*s_etat_processus).erreur_systeme = d_es_processus; return; + } + + if (sigdelset(&masque, SIGFABORT) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } if (sigdelset(&masque, SIGURG) != 0)