version 1.1.1.1, 2010/01/26 15:22:44
|
version 1.51, 2013/06/21 14:15:57
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.9 |
RPL/2 (R) version 4.1.15 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2013 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 43 rplcore(struct_processus *s_etat_process
|
Line 43 rplcore(struct_processus *s_etat_process
|
logical1 erreur; |
logical1 erreur; |
logical1 fin_boucle; |
logical1 fin_boucle; |
|
|
long i; |
int longueur_lignes = 65; |
long j; |
|
long longueur_lignes = 65; |
integer8 i; |
|
integer8 j; |
|
|
struct_liste_chainee *l_base_pile; |
struct_liste_chainee *l_base_pile; |
struct_liste_chainee *l_element_courant; |
struct_liste_chainee *l_element_courant; |
Line 58 rplcore(struct_processus *s_etat_process
|
Line 59 rplcore(struct_processus *s_etat_process
|
unsigned char *pile; |
unsigned char *pile; |
unsigned char *ptr; |
unsigned char *ptr; |
unsigned char *ptr_bis; |
unsigned char *ptr_bis; |
|
unsigned char registre; |
unsigned char registre_langue; |
unsigned char registre_langue; |
|
|
(*s_etat_processus).core = d_faux; |
(*s_etat_processus).core = d_faux; |
|
|
|
cf(s_etat_processus, 34); |
|
|
sf(s_etat_processus, 37); |
sf(s_etat_processus, 37); |
sf(s_etat_processus, 38); |
sf(s_etat_processus, 38); |
sf(s_etat_processus, 39); |
sf(s_etat_processus, 39); |
Line 101 rplcore(struct_processus *s_etat_process
|
Line 105 rplcore(struct_processus *s_etat_process
|
} |
} |
|
|
snprintf(nom, strlen(ds_rplcore) + 64 + 1, |
snprintf(nom, strlen(ds_rplcore) + 64 + 1, |
"%s-%lu-%lu", ds_rplcore, (unsigned long) getpid(), |
"%s-%llu-%llu", ds_rplcore, (unsigned long long) getpid(), |
(unsigned long) pthread_self()); |
(unsigned long long) pthread_self()); |
|
|
if ((fichier = fopen(nom, "w+")) == NULL) |
if ((fichier = fopen(nom, "w+")) == NULL) |
{ |
{ |
Line 141 rplcore(struct_processus *s_etat_process
|
Line 145 rplcore(struct_processus *s_etat_process
|
return; |
return; |
} |
} |
|
|
if (fprintf(fichier, "// Error :\n%s [%s at level %lu]\n\n", |
if ((*s_etat_processus).instruction_derniere_erreur != NULL) |
|
{ |
|
if (fprintf(fichier, "// Error :\n%s [level %lld]\n\n", |
|
message_erreur, (*s_etat_processus).niveau_derniere_erreur) < 0) |
|
{ |
|
free(message_erreur); |
|
|
|
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
|
return; |
|
} |
|
} |
|
else if ((*s_etat_processus).instruction_derniere_erreur[0] == |
|
d_code_fin_chaine) |
|
{ |
|
if (fprintf(fichier, "// Error :\n%s [level %lld]\n\n", |
|
message_erreur, (*s_etat_processus).niveau_derniere_erreur) < 0) |
|
{ |
|
free(message_erreur); |
|
|
|
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
|
return; |
|
} |
|
} |
|
else if (fprintf(fichier, "// Error :\n%s [%s at level %lld]\n\n", |
message_erreur, (*s_etat_processus).instruction_derniere_erreur, |
message_erreur, (*s_etat_processus).instruction_derniere_erreur, |
(*s_etat_processus).niveau_derniere_erreur) < 0) |
(*s_etat_processus).niveau_derniere_erreur) < 0) |
{ |
{ |
Line 153 rplcore(struct_processus *s_etat_process
|
Line 180 rplcore(struct_processus *s_etat_process
|
|
|
free(message_erreur); |
free(message_erreur); |
|
|
|
if (fprintf(fichier, "// System stack\n\n") < 0) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
trace(s_etat_processus, fichier); |
|
|
if (fprintf(fichier, "// Process stack\n\n") < 0) |
if (fprintf(fichier, "// Process stack\n\n") < 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
Line 163 rplcore(struct_processus *s_etat_process
|
Line 198 rplcore(struct_processus *s_etat_process
|
(*s_etat_processus).l_base_pile_processus; |
(*s_etat_processus).l_base_pile_processus; |
i = 0; |
i = 0; |
|
|
if (pthread_mutex_trylock(&((*s_etat_processus).mutex)) == 0) |
if (pthread_mutex_trylock(&((*s_etat_processus).mutex_pile_processus)) == 0) |
{ |
{ |
while(l_element_courant != NULL) |
while(l_element_courant != NULL) |
{ |
{ |
Line 171 rplcore(struct_processus *s_etat_process
|
Line 206 rplcore(struct_processus *s_etat_process
|
(*(*l_element_courant).donnee).objet)).thread) |
(*(*l_element_courant).donnee).objet)).thread) |
.processus_detache == d_vrai) |
.processus_detache == d_vrai) |
{ |
{ |
if (fprintf(fichier, "%ld: Process [%d]\n", |
if (fprintf(fichier, "%d: Process [%d]\n", |
i++, (int) (*(*((struct_processus_fils *) |
(int) i++, (int) (*(*((struct_processus_fils *) |
(*(*l_element_courant).donnee).objet)).thread).pid) < 0) |
(*(*l_element_courant).donnee).objet)).thread).pid) < 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
Line 181 rplcore(struct_processus *s_etat_process
|
Line 216 rplcore(struct_processus *s_etat_process
|
} |
} |
else |
else |
{ |
{ |
if (fprintf(fichier, "%ld: Thread [%llu] from [%llu]\n", |
if (fprintf(fichier, "%ld: Thread [%llu] from [%d]\n", (int) |
i++, (unsigned long long) (*(*((struct_processus_fils *) |
i++, (unsigned long long) (*(*((struct_processus_fils *) |
(*(*l_element_courant).donnee).objet)).thread) |
(*(*l_element_courant).donnee).objet)).thread) |
.tid, (unsigned long long) |
.tid, (int) |
(*(*((struct_processus_fils *) (*(*l_element_courant) |
(*(*((struct_processus_fils *) (*(*l_element_courant) |
.donnee).objet)).thread).pid) < 0) |
.donnee).objet)).thread).pid) < 0) |
{ |
{ |
Line 196 rplcore(struct_processus *s_etat_process
|
Line 231 rplcore(struct_processus *s_etat_process
|
l_element_courant = (*l_element_courant).suivant; |
l_element_courant = (*l_element_courant).suivant; |
} |
} |
|
|
if (fprintf(fichier, "%ld: Process [%d]\n\n", i, |
if (fprintf(fichier, "%ld: Process [%d]\n\n", (int) i, |
(int) getpid()) < 0) |
(int) getpid()) < 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
return; |
return; |
} |
} |
|
|
pthread_mutex_unlock(&((*s_etat_processus).mutex)); |
pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); |
} |
} |
|
|
if (test_cfsf(s_etat_processus, 31) == d_vrai) |
if (test_cfsf(s_etat_processus, 31) == d_vrai) |
Line 235 rplcore(struct_processus *s_etat_process
|
Line 270 rplcore(struct_processus *s_etat_process
|
|
|
if ((*s_etat_processus).l_base_pile != NULL) |
if ((*s_etat_processus).l_base_pile != NULL) |
{ |
{ |
|
registre = (*s_etat_processus).autorisation_conversion_chaine; |
|
(*s_etat_processus).autorisation_conversion_chaine = 'N'; |
|
|
ecriture_pile(s_etat_processus, fichier, l_base_pile, 1); |
ecriture_pile(s_etat_processus, fichier, l_base_pile, 1); |
|
|
|
(*s_etat_processus).autorisation_conversion_chaine = registre; |
} |
} |
else |
else |
{ |
{ |
Line 280 rplcore(struct_processus *s_etat_process
|
Line 320 rplcore(struct_processus *s_etat_process
|
|
|
if ((*s_etat_processus).l_base_pile != NULL) |
if ((*s_etat_processus).l_base_pile != NULL) |
{ |
{ |
|
registre = (*s_etat_processus).autorisation_conversion_chaine; |
|
(*s_etat_processus).autorisation_conversion_chaine = 'N'; |
|
|
ecriture_pile(s_etat_processus, fichier, |
ecriture_pile(s_etat_processus, fichier, |
(*s_etat_processus).l_base_pile, 1); |
(*s_etat_processus).l_base_pile, 1); |
|
|
|
(*s_etat_processus).autorisation_conversion_chaine = registre; |
} |
} |
else |
else |
{ |
{ |
Line 439 rplcore(struct_processus *s_etat_process
|
Line 484 rplcore(struct_processus *s_etat_process
|
while(((*ptr_bis) != d_code_fin_chaine) && |
while(((*ptr_bis) != d_code_fin_chaine) && |
(fin_boucle == d_faux)) |
(fin_boucle == d_faux)) |
{ |
{ |
if (j == (long) (*s_etat_processus).position_courante) |
if (j == (*s_etat_processus).position_courante) |
{ |
{ |
if (fprintf(fichier, ">|<") < 0) |
if (fprintf(fichier, ">|<") < 0) |
{ |
{ |
Line 484 rplcore(struct_processus *s_etat_process
|
Line 529 rplcore(struct_processus *s_etat_process
|
} |
} |
} |
} |
|
|
if ((i <= (long) (*s_etat_processus).position_courante) && |
if ((i <= (*s_etat_processus).position_courante) && |
((i + longueur_lignes) > (long) (*s_etat_processus) |
((i + longueur_lignes) > (*s_etat_processus) |
.position_courante)) |
.position_courante)) |
{ |
{ |
if (fprintf(fichier, "\nError : ") < 0) |
if (fprintf(fichier, "\nError : ") < 0) |