version 1.6, 2010/04/07 13:45:07
|
version 1.75, 2023/08/07 17:42:56
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.14 |
RPL/2 (R) version 4.1.35 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2023 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 20
|
Line 20
|
*/ |
*/ |
|
|
|
|
#include "rpl.conv.h" |
#include "rpl-conv.h" |
|
|
|
|
/* |
/* |
Line 48 instruction_neg(struct_processus *s_etat
|
Line 48 instruction_neg(struct_processus *s_etat
|
struct_objet *s_objet_argument; |
struct_objet *s_objet_argument; |
struct_objet *s_objet_resultat; |
struct_objet *s_objet_resultat; |
|
|
unsigned long i; |
integer8 i; |
unsigned long j; |
integer8 j; |
|
|
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
|
|
Line 112 instruction_neg(struct_processus *s_etat
|
Line 112 instruction_neg(struct_processus *s_etat
|
|
|
if ((*s_objet_argument).type == INT) |
if ((*s_objet_argument).type == INT) |
{ |
{ |
if ((s_objet_resultat = copie_objet(s_etat_processus, |
if ((*((integer8 *) (*s_objet_argument).objet)) != INT64_MIN) |
s_objet_argument, 'Q')) == NULL) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
if ((s_objet_resultat = copie_objet(s_etat_processus, |
return; |
s_objet_argument, 'Q')) == NULL) |
} |
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
/* |
/* |
* Permet d'éviter les résultats du type -0. Valable pour tous |
* Permet d'éviter les résultats du type -0. Valable pour tous |
* les types... |
* les types... |
*/ |
*/ |
|
|
if ((*((integer8 *) (*s_objet_argument).objet)) != 0) |
if ((*((integer8 *) (*s_objet_argument).objet)) != 0) |
|
{ |
|
(*((integer8 *) (*s_objet_resultat).objet)) = |
|
-(*((integer8 *) (*s_objet_argument).objet)); |
|
} |
|
} |
|
else |
{ |
{ |
(*((integer8 *) (*s_objet_resultat).objet)) = |
if ((s_objet_resultat = allocation(s_etat_processus, REL)) == NULL) |
-(*((integer8 *) (*s_objet_argument).objet)); |
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
(*((real8 *) (*s_objet_resultat).objet)) = |
|
-((real8) (*((integer8 *) (*s_objet_argument).objet))); |
|
|
} |
} |
} |
} |
|
|
Line 194 instruction_neg(struct_processus *s_etat
|
Line 209 instruction_neg(struct_processus *s_etat
|
|
|
else if ((*s_objet_argument).type == VIN) |
else if ((*s_objet_argument).type == VIN) |
{ |
{ |
if ((s_objet_resultat = copie_objet(s_etat_processus, |
drapeau = d_faux; |
s_objet_argument, 'Q')) == NULL) |
|
|
for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)) |
|
.taille; i++) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
if (((integer8 *) (*((struct_vecteur *) |
return; |
(*s_objet_argument).objet)).tableau)[i] == INT64_MIN) |
|
{ |
|
drapeau = d_vrai; |
|
break; |
|
} |
} |
} |
|
|
for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet))) |
if (drapeau == d_vrai) |
.taille; i++) |
|
{ |
{ |
if (((integer8 *) (*(((struct_vecteur *) |
if ((s_objet_resultat = allocation(s_etat_processus, VRL)) == NULL) |
(*s_objet_argument).objet))).tableau)[i] != 0) |
|
{ |
{ |
((integer8 *) (*(((struct_vecteur *) (*s_objet_resultat) |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
.objet))).tableau)[i] = -((integer8 *) |
return; |
(*(((struct_vecteur *) |
} |
(*s_objet_argument).objet))).tableau)[i]; |
|
|
if (((*((struct_vecteur *) (*s_objet_resultat).objet)).tableau = |
|
malloc(((size_t) (*((struct_vecteur *) (*s_objet_argument) |
|
.objet)).taille) * sizeof(real8))) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(i = 0; i < (*((struct_vecteur *) (*s_objet_argument).objet)) |
|
.taille; i++) |
|
{ |
|
if (((real8 *) (*(((struct_vecteur *) |
|
(*s_objet_argument).objet))).tableau)[i] != 0) |
|
{ |
|
((real8 *) (*((struct_vecteur *) (*s_objet_resultat) |
|
.objet)).tableau)[i] = -((real8) ((integer8 *) |
|
(*((struct_vecteur *) |
|
(*s_objet_argument).objet)).tableau)[i]); |
|
} |
|
else |
|
{ |
|
((real8 *) (*((struct_vecteur *) (*s_objet_resultat) |
|
.objet)).tableau)[i] = 0; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if ((s_objet_resultat = copie_objet(s_etat_processus, |
|
s_objet_argument, 'Q')) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(i = 0; i < (*(((struct_vecteur *) (*s_objet_argument).objet))) |
|
.taille; i++) |
|
{ |
|
if (((integer8 *) (*(((struct_vecteur *) |
|
(*s_objet_argument).objet))).tableau)[i] != 0) |
|
{ |
|
((integer8 *) (*(((struct_vecteur *) (*s_objet_resultat) |
|
.objet))).tableau)[i] = -((integer8 *) |
|
(*(((struct_vecteur *) |
|
(*s_objet_argument).objet))).tableau)[i]; |
|
} |
} |
} |
} |
} |
} |
} |
Line 293 instruction_neg(struct_processus *s_etat
|
Line 358 instruction_neg(struct_processus *s_etat
|
|
|
else if ((*s_objet_argument).type == MIN) |
else if ((*s_objet_argument).type == MIN) |
{ |
{ |
if ((s_objet_resultat = copie_objet(s_etat_processus, |
drapeau = d_faux; |
s_objet_argument, 'Q')) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(i = 0; i < (*(((struct_matrice *) (*s_objet_argument).objet))) |
for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet)) |
.nombre_lignes; i++) |
.nombre_lignes; i++) |
{ |
{ |
for(j = 0; j < (*(((struct_matrice *) (*s_objet_argument).objet))) |
for(j = 0; j < (*((struct_matrice *) (*s_objet_argument).objet)) |
.nombre_colonnes; j++) |
.nombre_colonnes; j++) |
{ |
{ |
if (((integer8 **) (*(((struct_matrice *) (*s_objet_argument) |
if (((integer8 **) (*((struct_matrice *) |
.objet))).tableau)[i][j] != 0) |
(*s_objet_argument).objet)).tableau)[i][j] == INT64_MIN) |
{ |
{ |
((integer8 **) (*(((struct_matrice *) (*s_objet_resultat) |
drapeau = d_vrai; |
.objet))).tableau)[i][j] = -((integer8 **) |
break; |
(*(((struct_matrice *) |
} |
(*s_objet_argument).objet))).tableau)[i][j]; |
} |
|
|
|
if (drapeau == d_vrai) |
|
{ |
|
break; |
|
} |
|
} |
|
|
|
if (drapeau == d_vrai) |
|
{ |
|
if ((s_objet_resultat = allocation(s_etat_processus, MRL)) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = |
|
malloc(((size_t) (*((struct_matrice *) (*s_objet_argument) |
|
.objet)).nombre_lignes) * sizeof(real8 *))) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet)) |
|
.nombre_lignes; i++) |
|
{ |
|
if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat) |
|
.objet)).tableau)[i] = malloc(((size_t) |
|
((*((struct_matrice *) (*s_objet_argument).objet)) |
|
.nombre_colonnes)) * sizeof(real8))) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(j = 0; j < (*((struct_matrice *) (*s_objet_argument) |
|
.objet)).nombre_colonnes; j++) |
|
{ |
|
if (((integer8 **) (*((struct_matrice *) |
|
(*s_objet_argument).objet)).tableau)[i][j] != 0) |
|
{ |
|
((real8 **) (*((struct_matrice *) (*s_objet_resultat) |
|
.objet)).tableau)[i][j] = -((real8) |
|
((integer8 **) (*(((struct_matrice *) |
|
(*s_objet_argument).objet))).tableau)[i][j]); |
|
} |
|
else |
|
{ |
|
((real8 **) (*((struct_matrice *) (*s_objet_resultat) |
|
.objet)).tableau)[i][j] = 0; |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if ((s_objet_resultat = copie_objet(s_etat_processus, |
|
s_objet_argument, 'Q')) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
for(i = 0; i < (*((struct_matrice *) (*s_objet_argument).objet)) |
|
.nombre_lignes; i++) |
|
{ |
|
for(j = 0; j < (*((struct_matrice *) (*s_objet_argument) |
|
.objet)).nombre_colonnes; j++) |
|
{ |
|
if (((integer8 **) (*((struct_matrice *) |
|
(*s_objet_argument).objet)).tableau)[i][j] != 0) |
|
{ |
|
((integer8 **) (*((struct_matrice *) |
|
(*s_objet_resultat).objet)).tableau)[i][j] = |
|
-((integer8 **) (*((struct_matrice *) |
|
(*s_objet_argument).objet)).tableau)[i][j]; |
|
} |
} |
} |
} |
} |
} |
} |
Line 667 instruction_not(struct_processus *s_etat
|
Line 805 instruction_not(struct_processus *s_etat
|
|
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf("(complément)\n\n"); |
printf("(complément)\n\n"); |
} |
} |
else |
else |
{ |
{ |
Line 756 instruction_not(struct_processus *s_etat
|
Line 894 instruction_not(struct_processus *s_etat
|
|
|
else if ((*s_objet_argument).type == BIN) |
else if ((*s_objet_argument).type == BIN) |
{ |
{ |
(*((logical8 *) (*s_objet_argument).objet)) = |
if ((s_objet_resultat = allocation(s_etat_processus, BIN)) == NULL) |
~(*((logical8 *) (*s_objet_argument).objet)); |
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
s_objet_resultat = s_objet_argument; |
(*((logical8 *) (*s_objet_resultat).objet)) = |
s_objet_argument = NULL; |
~(*((logical8 *) (*s_objet_argument).objet)); |
} |
} |
|
|
/* |
/* |
Line 1000 instruction_ne(struct_processus *s_etat_
|
Line 1141 instruction_ne(struct_processus *s_etat_
|
|
|
logical1 difference; |
logical1 difference; |
|
|
unsigned long i; |
integer8 i; |
unsigned long j; |
integer8 j; |
unsigned long nombre_elements; |
integer8 nombre_elements; |
|
|
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
|
|
Line 1012 instruction_ne(struct_processus *s_etat_
|
Line 1153 instruction_ne(struct_processus *s_etat_
|
|
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf("(opérateur différence)\n\n"); |
printf("(opérateur différence)\n\n"); |
} |
} |
else |
else |
{ |
{ |
Line 2055 instruction_next(struct_processus *s_eta
|
Line 2196 instruction_next(struct_processus *s_eta
|
struct_objet *s_objet; |
struct_objet *s_objet; |
struct_objet *s_copie_objet; |
struct_objet *s_copie_objet; |
|
|
|
logical1 fin_boucle; |
logical1 presence_compteur; |
logical1 presence_compteur; |
|
|
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
Line 2065 instruction_next(struct_processus *s_eta
|
Line 2207 instruction_next(struct_processus *s_eta
|
|
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf("(fin d'une boucle définie)\n\n"); |
printf("(fin d'une boucle définie)\n\n"); |
} |
} |
else |
else |
{ |
{ |
Line 2103 instruction_next(struct_processus *s_eta
|
Line 2245 instruction_next(struct_processus *s_eta
|
return; |
return; |
} |
} |
|
|
presence_compteur = ((*(*s_etat_processus).l_base_pile_systeme) |
if ((*(*s_etat_processus).l_base_pile_systeme).type_cloture != 'A') |
.type_cloture == 'F') ? d_vrai : d_faux; |
{ // FOR ou START |
|
presence_compteur = ((*(*s_etat_processus).l_base_pile_systeme) |
|
.type_cloture == 'F') ? d_vrai : d_faux; |
|
|
if (((*(*s_etat_processus).l_base_pile_systeme).type_cloture != 'S') |
if (((*(*s_etat_processus).l_base_pile_systeme).type_cloture != 'S') |
&& (presence_compteur == d_faux)) |
&& (presence_compteur == d_faux)) |
{ |
{ |
(*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle; |
(*s_etat_processus).erreur_execution = |
return; |
d_ex_erreur_traitement_boucle; |
} |
return; |
|
} |
|
|
/* |
/* |
* Pour une boucle avec indice, on fait pointer |
* Pour une boucle avec indice, on fait pointer |
* (*(*s_etat_processus).l_base_pile_systeme).indice_boucle sur |
* (*(*s_etat_processus).l_base_pile_systeme).indice_boucle sur |
* la variable correspondante. Remarque, le contenu de la variable |
* la variable correspondante. Remarque, le contenu de la variable |
* est détruit au courant de l'opération. |
* est détruit au courant de l'opération. |
*/ |
*/ |
|
|
if (presence_compteur == d_vrai) |
if (presence_compteur == d_vrai) |
{ |
|
if (recherche_variable(s_etat_processus, (*(*s_etat_processus) |
|
.l_base_pile_systeme).nom_variable) == d_faux) |
|
{ |
{ |
(*s_etat_processus).erreur_execution = d_ex_variable_non_definie; |
if (recherche_variable(s_etat_processus, (*(*s_etat_processus) |
return; |
.l_base_pile_systeme).nom_variable) == d_faux) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_non_definie; |
|
return; |
|
} |
|
|
|
if ((*(*s_etat_processus).pointeur_variable_courante) |
|
.variable_verrouillee == d_vrai) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_verrouillee; |
|
return; |
|
} |
|
|
|
if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) |
|
{ |
|
(*s_etat_processus).erreur_execution = d_ex_variable_partagee; |
|
return; |
|
} |
|
|
|
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = |
|
(*(*s_etat_processus).pointeur_variable_courante).objet; |
} |
} |
|
|
if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) |
/* |
.position_variable_courante]).variable_verrouillee == d_vrai) |
* Empilement pour calculer le nouvel indice. Au passage, la |
|
* variable (*(*s_etat_processus).l_base_pile_systeme).indice_boucle |
|
* est libérée. |
|
*/ |
|
|
|
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
|
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle) |
|
== d_erreur) |
{ |
{ |
(*s_etat_processus).erreur_execution = d_ex_variable_verrouillee; |
|
return; |
return; |
} |
} |
|
|
if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) |
if ((s_objet = allocation(s_etat_processus, INT)) == NULL) |
.position_variable_courante]).objet == NULL) |
|
{ |
{ |
(*s_etat_processus).erreur_execution = d_ex_variable_partagee; |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
return; |
return; |
} |
} |
|
|
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = |
(*((integer8 *) (*s_objet).objet)) = 1; |
((*s_etat_processus).s_liste_variables[(*s_etat_processus) |
|
.position_variable_courante]).objet; |
|
} |
|
|
|
/* |
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
* Empilement pour calculer le nouvel indice. Au passage, la |
s_objet) == d_erreur) |
* variable (*(*s_etat_processus).l_base_pile_systeme).indice_boucle |
{ |
* est libérée. |
return; |
*/ |
} |
|
|
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
|
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle) |
|
== d_erreur) |
|
{ |
|
return; |
|
} |
|
|
|
if ((s_objet = allocation(s_etat_processus, INT)) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
(*((integer8 *) (*s_objet).objet)) = 1; |
|
|
|
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
|
s_objet) == d_erreur) |
|
{ |
|
return; |
|
} |
|
|
|
instruction_plus(s_etat_processus); |
instruction_plus(s_etat_processus); |
|
|
if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
&s_objet) == d_erreur) |
&s_objet) == d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet); |
liberation(s_etat_processus, s_objet); |
|
|
(*s_etat_processus).erreur_execution = d_ex_manque_argument; |
(*s_etat_processus).erreur_execution = d_ex_manque_argument; |
return; |
return; |
} |
} |
|
|
if (((*s_objet).type != INT) && |
if (((*s_objet).type != INT) && ((*s_objet).type != REL)) |
((*s_objet).type != REL)) |
{ |
{ |
liberation(s_etat_processus, s_objet); |
liberation(s_etat_processus, s_objet); |
|
|
|
(*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle; |
(*s_etat_processus).erreur_execution = |
return; |
d_ex_erreur_traitement_boucle; |
} |
return; |
|
} |
|
|
if (presence_compteur == d_vrai) |
if (presence_compteur == d_vrai) |
{ |
{ |
/* |
/* |
* L'addition crée si besoin une copie de l'objet |
* L'addition crée si besoin une copie de l'objet |
*/ |
*/ |
|
|
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL; |
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL; |
((*s_etat_processus).s_liste_variables[(*s_etat_processus) |
(*(*s_etat_processus).pointeur_variable_courante).objet = s_objet; |
.position_variable_courante]).objet = s_objet; |
} |
} |
else |
else |
{ |
{ |
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = s_objet; |
(*(*s_etat_processus).l_base_pile_systeme).indice_boucle = s_objet; |
} |
} |
|
|
|
if ((s_copie_objet = copie_objet(s_etat_processus, s_objet, 'P')) == NULL) |
if ((s_copie_objet = copie_objet(s_etat_processus, s_objet, 'P')) |
{ |
== NULL) |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
{ |
return; |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
} |
return; |
|
} |
|
|
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
s_copie_objet) == d_erreur) |
s_copie_objet) == d_erreur) |
{ |
{ |
return; |
return; |
} |
} |
|
|
if ((s_copie_objet = copie_objet(s_etat_processus, |
if ((s_copie_objet = copie_objet(s_etat_processus, |
(*(*s_etat_processus).l_base_pile_systeme) |
(*(*s_etat_processus).l_base_pile_systeme) |
.limite_indice_boucle, 'P')) == NULL) |
.limite_indice_boucle, 'P')) == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
return; |
return; |
} |
} |
|
|
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
s_copie_objet) == d_erreur) |
s_copie_objet) == d_erreur) |
{ |
{ |
return; |
return; |
} |
} |
|
|
instruction_le(s_etat_processus); |
instruction_le(s_etat_processus); |
|
|
if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), |
&s_objet) == d_erreur) |
&s_objet) == d_erreur) |
{ |
{ |
(*s_etat_processus).erreur_execution = d_ex_manque_argument; |
(*s_etat_processus).erreur_execution = d_ex_manque_argument; |
return; |
return; |
} |
} |
|
|
if ((*s_objet).type != INT) |
if ((*s_objet).type != INT) |
{ |
{ |
liberation(s_etat_processus, s_objet); |
liberation(s_etat_processus, s_objet); |
|
|
(*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle; |
(*s_etat_processus).erreur_execution = |
return; |
d_ex_erreur_traitement_boucle; |
} |
return; |
|
} |
|
|
if ((*((integer8 *) (*s_objet).objet)) != 0) |
if ((*((integer8 *) (*s_objet).objet)) != 0) |
{ |
|
if ((*(*s_etat_processus).l_base_pile_systeme) |
|
.origine_routine_evaluation == 'N') |
|
{ |
{ |
(*s_etat_processus).position_courante = (*(*s_etat_processus) |
if ((*(*s_etat_processus).l_base_pile_systeme) |
.l_base_pile_systeme).adresse_retour; |
.origine_routine_evaluation == 'N') |
|
{ |
|
(*s_etat_processus).position_courante = (*(*s_etat_processus) |
|
.l_base_pile_systeme).adresse_retour; |
|
} |
|
else |
|
{ |
|
(*s_etat_processus).expression_courante = (*(*s_etat_processus) |
|
.l_base_pile_systeme).pointeur_objet_retour; |
|
} |
} |
} |
else |
else |
{ |
{ |
(*s_etat_processus).expression_courante = (*(*s_etat_processus) |
depilement_pile_systeme(s_etat_processus); |
.l_base_pile_systeme).pointeur_objet_retour; |
|
|
if ((*s_etat_processus).erreur_systeme != d_es) |
|
{ |
|
return; |
|
} |
|
|
|
if (presence_compteur == d_vrai) |
|
{ |
|
(*s_etat_processus).niveau_courant--; |
|
|
|
if (retrait_variables_par_niveau(s_etat_processus) == d_erreur) |
|
{ |
|
return; |
|
} |
|
} |
} |
} |
|
|
|
liberation(s_etat_processus, s_objet); |
} |
} |
else |
else |
{ |
{ // FORALL |
depilement_pile_systeme(s_etat_processus); |
if ((*(*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle) |
|
.type == NON) |
|
{ // L'objet initial était vide. |
|
(*s_etat_processus).niveau_courant--; |
|
depilement_pile_systeme(s_etat_processus); |
|
|
if ((*s_etat_processus).erreur_systeme != d_es) |
liberation(s_etat_processus, (*(*s_etat_processus) |
{ |
.l_base_pile_systeme).limite_indice_boucle); |
return; |
return; |
} |
} |
|
else if ((*(*(*s_etat_processus).l_base_pile_systeme) |
|
.limite_indice_boucle).type == LST) |
|
{ // FORALL sur une liste |
|
if ((*((struct_liste_chainee *) (*(*(*s_etat_processus) |
|
.l_base_pile_systeme).indice_boucle).objet)).suivant |
|
!= NULL) |
|
{ |
|
if (recherche_variable(s_etat_processus, (*(*s_etat_processus) |
|
.l_base_pile_systeme).nom_variable) == d_faux) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_non_definie; |
|
return; |
|
} |
|
|
if (presence_compteur == d_vrai) |
if ((*(*s_etat_processus).pointeur_variable_courante) |
|
.variable_verrouillee == d_vrai) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_verrouillee; |
|
return; |
|
} |
|
|
|
if ((*(*s_etat_processus).pointeur_variable_courante).objet |
|
== NULL) |
|
{ |
|
(*s_etat_processus).erreur_execution |
|
= d_ex_variable_partagee; |
|
return; |
|
} |
|
|
|
(*(*(*s_etat_processus).l_base_pile_systeme).indice_boucle) |
|
.objet = (*((struct_liste_chainee *) |
|
(*(*(*s_etat_processus).l_base_pile_systeme) |
|
.indice_boucle).objet)).suivant; |
|
liberation(s_etat_processus, (*(*s_etat_processus) |
|
.pointeur_variable_courante).objet); |
|
|
|
if (((*(*s_etat_processus).pointeur_variable_courante).objet |
|
= copie_objet(s_etat_processus, |
|
(*((struct_liste_chainee *) (*(*(*s_etat_processus) |
|
.l_base_pile_systeme).indice_boucle).objet)).donnee, |
|
'P')) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme |
|
= d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
fin_boucle = d_faux; |
|
} |
|
else |
|
{ |
|
fin_boucle = d_vrai; |
|
} |
|
} |
|
else |
|
{ // FORALL sur une table |
|
(*((integer8 *) (*(*(*s_etat_processus).l_base_pile_systeme) |
|
.indice_boucle).objet))++; |
|
|
|
if ((*((integer8 *) (*(*(*s_etat_processus).l_base_pile_systeme) |
|
.indice_boucle).objet)) < (integer8) (*((struct_tableau *) |
|
(*(*(*s_etat_processus).l_base_pile_systeme) |
|
.limite_indice_boucle).objet)).nombre_elements) |
|
{ |
|
if (recherche_variable(s_etat_processus, (*(*s_etat_processus) |
|
.l_base_pile_systeme).nom_variable) == d_faux) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_non_definie; |
|
return; |
|
} |
|
|
|
if ((*(*s_etat_processus).pointeur_variable_courante) |
|
.variable_verrouillee == d_vrai) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_variable_verrouillee; |
|
return; |
|
} |
|
|
|
if ((*(*s_etat_processus).pointeur_variable_courante).objet |
|
== NULL) |
|
{ |
|
(*s_etat_processus).erreur_execution |
|
= d_ex_variable_partagee; |
|
return; |
|
} |
|
|
|
liberation(s_etat_processus, (*(*s_etat_processus) |
|
.pointeur_variable_courante).objet); |
|
|
|
if (((*(*s_etat_processus).pointeur_variable_courante).objet |
|
= copie_objet(s_etat_processus, (*((struct_tableau *) |
|
(*(*(*s_etat_processus).l_base_pile_systeme) |
|
.limite_indice_boucle).objet)).elements[(*((integer8 *) |
|
(*(*(*s_etat_processus).l_base_pile_systeme) |
|
.indice_boucle).objet))], 'P')) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme |
|
= d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
fin_boucle = d_faux; |
|
} |
|
else |
|
{ |
|
fin_boucle = d_vrai; |
|
} |
|
} |
|
|
|
if (fin_boucle == d_vrai) |
{ |
{ |
|
depilement_pile_systeme(s_etat_processus); |
|
|
|
if ((*s_etat_processus).erreur_systeme != d_es) |
|
{ |
|
return; |
|
} |
|
|
(*s_etat_processus).niveau_courant--; |
(*s_etat_processus).niveau_courant--; |
|
|
if (retrait_variable_par_niveau(s_etat_processus) == d_erreur) |
if (retrait_variables_par_niveau(s_etat_processus) == d_erreur) |
{ |
{ |
return; |
return; |
} |
} |
} |
} |
|
else |
|
{ |
|
if ((*(*s_etat_processus).l_base_pile_systeme) |
|
.origine_routine_evaluation == 'N') |
|
{ |
|
(*s_etat_processus).position_courante = (*(*s_etat_processus) |
|
.l_base_pile_systeme).adresse_retour; |
|
} |
|
else |
|
{ |
|
(*s_etat_processus).expression_courante = (*(*s_etat_processus) |
|
.l_base_pile_systeme).pointeur_objet_retour; |
|
} |
|
} |
} |
} |
|
|
liberation(s_etat_processus, s_objet); |
|
|
|
return; |
return; |
} |
} |
|
|
Line 2318 instruction_nrand(struct_processus *s_et
|
Line 2621 instruction_nrand(struct_processus *s_et
|
|
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf("(valeur aléatoire gaussienne)\n\n"); |
printf("(valeur aléatoire gaussienne)\n\n"); |
} |
} |
else |
else |
{ |
{ |