version 1.42, 2011/06/24 20:31:36
|
version 1.52, 2012/03/01 10:14:04
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.0.prerelease.4 |
RPL/2 (R) version 4.1.7 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 1845 liste_variables(struct_processus *s_etat
|
Line 1845 liste_variables(struct_processus *s_etat
|
return(position); |
return(position); |
} |
} |
|
|
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Procédure de copie de l'arbre des variables |
Procédure de copie de l'arbre des variables |
Line 1876 copie_arbre_variables(struct_processus *
|
Line 1877 copie_arbre_variables(struct_processus *
|
|
|
int i; |
int i; |
|
|
|
logical1 niveau_0_traite; |
|
logical1 niveau_1_traite; |
|
|
struct_liste_chainee *l_element_courant; |
struct_liste_chainee *l_element_courant; |
|
|
struct_liste_variables *l_niveau_courant; |
struct_liste_variables *l_niveau_courant; |
Line 1888 copie_arbre_variables(struct_processus *
|
Line 1892 copie_arbre_variables(struct_processus *
|
l_niveau_courant = (*s_etat_processus).l_liste_variables_par_niveau; |
l_niveau_courant = (*s_etat_processus).l_liste_variables_par_niveau; |
|
|
// Si la variable en tête n'est pas une variable de niveau 0, le niveau |
// Si la variable en tête n'est pas une variable de niveau 0, le niveau |
// 0, s'il existe est le nivau précédent la valeur courante dans la |
// 0, s'il existe est le niveau précédent la valeur courante dans la |
// boucle. |
// boucle. |
|
|
if ((*((struct_variable *) (*(*l_niveau_courant).liste).donnee)).niveau |
if ((*((struct_variable *) (*(*l_niveau_courant).liste).donnee)).niveau |
Line 1900 copie_arbre_variables(struct_processus *
|
Line 1904 copie_arbre_variables(struct_processus *
|
// Les variables de niveaux 0 et 1 sont accessibles en au plus trois |
// Les variables de niveaux 0 et 1 sont accessibles en au plus trois |
// itérations (par construction). |
// itérations (par construction). |
|
|
|
niveau_0_traite = d_faux; |
|
niveau_1_traite = d_faux; |
|
|
for(i = 0; i <= 2; i++) |
for(i = 0; i <= 2; i++) |
{ |
{ |
if ((*((struct_variable *) (*(*l_niveau_courant).liste) |
if ((*((struct_variable *) (*(*l_niveau_courant).liste) |
.donnee)).niveau == 0) |
.donnee)).niveau == 0) |
{ |
{ |
l_element_courant = (*l_niveau_courant).liste; |
if (niveau_0_traite == d_faux) |
|
|
while(l_element_courant != NULL) |
|
{ |
{ |
if (ajout_variable(s_nouvel_etat_processus, |
l_element_courant = (*l_niveau_courant).liste; |
(struct_variable *) (*l_element_courant).donnee) |
|
== d_erreur) |
while(l_element_courant != NULL) |
{ |
{ |
return; |
if (ajout_variable(s_nouvel_etat_processus, |
|
(struct_variable *) (*l_element_courant).donnee) |
|
== d_erreur) |
|
{ |
|
return; |
|
} |
|
|
|
l_element_courant = (*l_element_courant).suivant; |
} |
} |
|
|
l_element_courant = (*l_element_courant).suivant; |
niveau_0_traite = d_vrai; |
} |
} |
} |
} |
else if ((*((struct_variable *) (*(*l_niveau_courant).liste) |
else if ((*((struct_variable *) (*(*l_niveau_courant).liste) |
.donnee)).niveau == 1) |
.donnee)).niveau == 1) |
{ |
{ |
l_element_courant = (*l_niveau_courant).liste; |
if (niveau_1_traite == d_faux) |
|
|
while(l_element_courant != NULL) |
|
{ |
{ |
s_variable = (*((struct_variable *) |
l_element_courant = (*l_niveau_courant).liste; |
(*l_element_courant).donnee)); |
|
|
|
if ((s_variable.nom = strdup((*((struct_variable *) |
while(l_element_courant != NULL) |
(*l_element_courant).donnee)).nom)) == NULL) |
|
{ |
{ |
(*s_nouvel_etat_processus).erreur_systeme = |
s_variable = (*((struct_variable *) |
d_es_allocation_memoire; |
(*l_element_courant).donnee)); |
return; |
|
} |
|
|
|
if ((s_variable.objet = copie_objet(s_nouvel_etat_processus, |
if ((s_variable.nom = strdup((*((struct_variable *) |
(*((struct_variable *) (*l_element_courant).donnee)) |
(*l_element_courant).donnee)).nom)) == NULL) |
.objet, 'P')) == NULL) |
{ |
{ |
(*s_nouvel_etat_processus).erreur_systeme = |
(*s_nouvel_etat_processus).erreur_systeme = |
d_es_allocation_memoire; |
d_es_allocation_memoire; |
return; |
return; |
} |
} |
|
|
|
if (ajout_variable(s_nouvel_etat_processus, &s_variable) |
if ((s_variable.objet = copie_objet(s_nouvel_etat_processus, |
== d_erreur) |
(*((struct_variable *) (*l_element_courant).donnee)) |
{ |
.objet, 'P')) == NULL) |
return; |
{ |
|
(*s_nouvel_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
if (ajout_variable(s_nouvel_etat_processus, &s_variable) |
|
== d_erreur) |
|
{ |
|
return; |
|
} |
|
|
|
l_element_courant = (*l_element_courant).suivant; |
} |
} |
|
|
l_element_courant = (*l_element_courant).suivant; |
niveau_1_traite = d_vrai; |
} |
} |
|
|
// Les variables de niveau 0 ayant déjà été copiées, on |
// Les variables de niveau 0 ayant déjà été copiées, on |