--- rpl/src/gestion_variables.c 2010/06/24 10:10:41 1.10 +++ rpl/src/gestion_variables.c 2011/05/09 13:52:12 1.20.2.3 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.17 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.24 + 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" /* @@ -45,6 +45,8 @@ creation_variable(struct_processus *s_et unsigned char autorisation_creation_variable_statique, unsigned char autorisation_creation_variable_partagee) { + logical1 presence; + long i; struct_variable *s_nouvelle_base; @@ -214,7 +216,42 @@ creation_variable(struct_processus *s_et } } - (*s_etat_processus).s_liste_variables[i + 1] = (*s_variable); + if ((*s_variable).niveau > 1) + { + // Cas d'une variable locale + (*s_etat_processus).s_liste_variables[i + 1] = (*s_variable); + } + else + { + // Cas d'une variable globale + presence = d_faux; + + for(; i >= 0; i--) + { + if ((strcmp((*s_variable).nom, + (*s_etat_processus).s_liste_variables[i].nom) == 0) + && ((*s_etat_processus).s_liste_variables[i].niveau + != 0)) + { + (*s_etat_processus).s_liste_variables[i + 1] = + (*s_etat_processus).s_liste_variables[i]; + } + else + { + presence = d_vrai; + break; + } + } + + if (presence == d_faux) + { + (*s_etat_processus).s_liste_variables[0] = (*s_variable); + } + else + { + (*s_etat_processus).s_liste_variables[i + 1] = (*s_variable); + } + } } return(d_absence_erreur);