version 1.177, 2012/10/01 11:05:09
|
version 1.189, 2012/12/18 13:19:39
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.11 |
RPL/2 (R) version 4.1.12 |
Copyright (C) 1989-2012 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 445 union semun
|
Line 445 union semun
|
__STATIC_MUTEX_INITIALIZATION__; |
__STATIC_MUTEX_INITIALIZATION__; |
__EXTERN__ pthread_mutex_t mutex_gestionnaires_signaux_atomique |
__EXTERN__ pthread_mutex_t mutex_gestionnaires_signaux_atomique |
__STATIC_MUTEX_INITIALIZATION__; |
__STATIC_MUTEX_INITIALIZATION__; |
|
__EXTERN__ pthread_mutex_t mutex_creation_variable_partagee |
|
__STATIC_MUTEX_INITIALIZATION__; |
__EXTERN__ pthread_mutex_t mutex_sections_critiques; |
__EXTERN__ pthread_mutex_t mutex_sections_critiques; |
|
__EXTERN__ pthread_mutex_t mutex_liste_variables_partagees; |
|
|
__EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; |
__EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; |
|
|
Line 742 pid_t debug_fork();
|
Line 745 pid_t debug_fork();
|
Erreurs système |
Erreurs système |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
#define DEBUG_ERREURS |
#ifdef DEBUG_ERREURS |
#ifdef DEBUG_ERREURS |
# ifdef MESSAGES |
# ifdef MESSAGES |
# define __erreur(i) i |
# define __erreur(i) i |
Line 1521 typedef union position_variable
|
Line 1524 typedef union position_variable
|
typedef struct variable |
typedef struct variable |
{ |
{ |
unsigned char *nom; |
unsigned char *nom; |
unsigned char origine; |
unsigned char origine; // P(rogramme) ou E(valuation) |
|
|
unsigned long niveau; |
unsigned long niveau; |
|
|
Line 1553 typedef struct variable_partage
|
Line 1556 typedef struct variable_partage
|
union_position_variable variable_partagee; |
union_position_variable variable_partagee; |
|
|
struct_objet *objet; |
struct_objet *objet; |
} struct_variable_partagee; |
|
|
|
typedef struct table_variables_partagees |
|
{ |
|
pthread_mutex_t mutex; |
|
|
|
volatile struct_variable_partagee *table; |
|
|
|
volatile unsigned long nombre_variables; |
|
volatile unsigned long nombre_variables_allouees; |
|
|
|
unsigned long position_variable; |
pthread_mutex_t mutex; |
} struct_table_variables_partagees; |
} struct_variable_partagee; |
|
|
#endif |
#endif |
|
|
Line 1729 typedef struct instruction
|
Line 1722 typedef struct instruction
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
Structure d'arbre des variables variable globales et locales |
Structure d'arbre des variables globales et locales |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
typedef struct arbre_variables |
typedef struct arbre_variables |
{ |
{ |
unsigned int noeuds_utilises; |
unsigned int noeuds_utilises; |
signed int indice_tableau_pere; |
// Nombre de noeuds utilisés dans le |
struct arbre_variables *noeud_pere; |
// tableau **noeuds |
struct arbre_variables **noeuds; |
signed int indice_tableau_pere; |
struct liste_variables *feuille; |
// Position de la structure dans le |
|
// tableau **noeuds du père |
|
|
|
struct arbre_variables *noeud_pere; |
|
struct arbre_variables **noeuds; |
|
|
|
struct liste_variables *feuille; |
|
struct liste_variables_statiques *feuille_statique; |
} struct_arbre_variables; |
} struct_arbre_variables; |
|
|
|
typedef struct arbre_variables_partagees |
|
{ |
|
unsigned int noeuds_utilises; |
|
// Nombre de noeuds utilisés dans le |
|
// tableau **noeuds |
|
signed int indice_tableau_pere; |
|
// Position de la structure dans le |
|
// tableau **noeuds du père |
|
|
|
struct arbre_variables_partagees *noeud_pere; |
|
struct arbre_variables_partagees **noeuds; |
|
|
|
struct liste_variables_partagees *feuille; |
|
|
|
pthread_mutex_t mutex_feuille; |
|
} struct_arbre_variables_partagees; |
|
|
|
#define INITIALISATION_MUTEX(mutex) \ |
|
do { \ |
|
pthread_mutexattr_t attributs_mutex; \ |
|
pthread_mutexattr_init(&attributs_mutex); \ |
|
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); \ |
|
pthread_mutex_init(&(mutex), &attributs_mutex); \ |
|
pthread_mutexattr_destroy(&attributs_mutex); \ |
|
} while(0) |
|
|
typedef struct tableau_variables |
typedef struct tableau_variables |
{ |
{ |
unsigned char origine; |
unsigned char origine; |
Line 1754 typedef struct tableau_variables
|
Line 1780 typedef struct tableau_variables
|
// de l'objet. |
// de l'objet. |
|
|
logical1 variable_verrouillee; |
logical1 variable_verrouillee; |
|
logical1 variable_masquee; |
union_position_variable variable_statique; |
union_position_variable variable_statique; |
union_position_variable variable_partagee; |
union_position_variable variable_partagee; |
} struct_tableau_variables; |
} struct_tableau_variables; |
|
|
|
// La liste des variables est une liste doublement chaînée et circulaire. |
typedef struct liste_variables |
typedef struct liste_variables |
{ |
{ |
union |
union |
Line 1774 typedef struct liste_variables
|
Line 1802 typedef struct liste_variables
|
struct liste_variables *precedent; |
struct liste_variables *precedent; |
} struct_liste_variables; |
} struct_liste_variables; |
|
|
|
// La liste des variables statiques et une liste double chaînée et non |
|
// circulaire. |
|
typedef struct liste_variables_statiques |
|
{ |
|
struct liste_variables_statiques *suivant; |
|
struct liste_variables_statiques *precedent; |
|
struct liste_variables_statiques *reference; |
|
struct_arbre_variables *feuille; |
|
struct_variable_statique *variable; |
|
} struct_liste_variables_statiques; |
|
|
|
typedef struct liste_variables_partagees |
|
{ |
|
struct liste_variables_partagees *suivant; |
|
struct liste_variables_partagees *precedent; |
|
struct liste_variables_partagees *reference; |
|
struct_arbre_variables_partagees *feuille; |
|
struct_variable_partagee *variable; |
|
pthread_t tid; |
|
pid_t pid; |
|
} struct_liste_variables_partagees; |
#endif |
#endif |
|
|
/* |
/* |
Line 1863 typedef struct processus
|
Line 1912 typedef struct processus
|
logical1 presence_fusible; |
logical1 presence_fusible; |
pthread_t thread_fusible; |
pthread_t thread_fusible; |
pthread_t thread_surveille_par_fusible; |
pthread_t thread_surveille_par_fusible; |
|
pthread_t thread_signaux; |
|
int pipe_signaux[2]; |
|
|
volatile int pointeur_signal_ecriture; |
volatile int pointeur_signal_ecriture; |
volatile int pointeur_signal_lecture; |
volatile int pointeur_signal_lecture; |
Line 1889 typedef struct processus
|
Line 1940 typedef struct processus
|
|
|
struct_arbre_variables *s_arbre_variables; |
struct_arbre_variables *s_arbre_variables; |
struct_liste_variables *l_liste_variables_par_niveau; |
struct_liste_variables *l_liste_variables_par_niveau; |
|
struct_liste_variables_statiques |
|
*l_liste_variables_statiques; |
|
|
|
struct_arbre_variables_partagees |
|
**s_arbre_variables_partagees; |
|
struct_liste_variables_partagees |
|
**l_liste_variables_partagees; |
|
|
logical1 niveau_supprime; |
logical1 niveau_supprime; |
|
|
struct_variable *pointeur_variable_courante; |
struct_variable *pointeur_variable_courante; |
struct_liste_variables *pointeur_feuille_courante; |
struct_liste_variables *pointeur_feuille_courante; |
|
struct_variable_statique *pointeur_variable_statique_courante; |
|
struct_variable_partagee *pointeur_variable_partagee_courante; |
|
|
int *pointeurs_caracteres_variables; |
int *pointeurs_caracteres_variables; |
int nombre_caracteres_variables; |
int nombre_caracteres_variables; |
|
|
struct_variable_statique *s_liste_variables_statiques; |
|
unsigned long nombre_variables_statiques; |
|
unsigned long nombre_variables_statiques_allouees; |
|
|
|
struct_table_variables_partagees |
|
*s_liste_variables_partagees; |
|
|
|
unsigned long niveau_courant; |
unsigned long niveau_courant; |
unsigned long niveau_initial; |
unsigned long niveau_initial; |
unsigned long position_variable_statique_courante; |
|
|
|
logical1 creation_variables_statiques; |
logical1 creation_variables_statiques; |
logical1 creation_variables_partagees; |
logical1 creation_variables_partagees; |
Line 2275 typedef struct processus
|
Line 2328 typedef struct processus
|
struct_arbre_variables *variables_noeud[TAILLE_CACHE]; |
struct_arbre_variables *variables_noeud[TAILLE_CACHE]; |
int pointeur_variables_noeud; |
int pointeur_variables_noeud; |
|
|
|
struct_arbre_variables_partagees |
|
*variables_partagees_noeud[TAILLE_CACHE]; |
|
int pointeur_variables_partagees_noeud; |
|
|
struct_liste_variables *variables_feuille[TAILLE_CACHE]; |
struct_liste_variables *variables_feuille[TAILLE_CACHE]; |
int pointeur_variables_feuille; |
int pointeur_variables_feuille; |
|
|
Line 2283 typedef struct processus
|
Line 2340 typedef struct processus
|
|
|
struct_arbre_variables **variables_tableau_noeuds[TAILLE_CACHE]; |
struct_arbre_variables **variables_tableau_noeuds[TAILLE_CACHE]; |
int pointeur_variables_tableau_noeuds; |
int pointeur_variables_tableau_noeuds; |
|
|
|
struct_arbre_variables_partagees |
|
**variables_tableau_noeuds_partages |
|
[TAILLE_CACHE]; |
|
int pointeur_variables_tableau_noeuds_partages; |
} struct_processus; |
} struct_processus; |
#endif |
#endif |
|
|
Line 2962 void liberation_arbre_instructions(struc
|
Line 3024 void liberation_arbre_instructions(struc
|
struct_instruction *arbre); |
struct_instruction *arbre); |
void liberation_arbre_variables(struct_processus *s_etat_processus, |
void liberation_arbre_variables(struct_processus *s_etat_processus, |
struct_arbre_variables *arbre, logical1 definitions); |
struct_arbre_variables *arbre, logical1 definitions); |
|
void liberation_arbre_variables_partagees(struct_processus *s_etat_processus, |
|
struct_arbre_variables_partagees *arbre); |
void liberation_contexte_cas(struct_processus *s_etat_processus); |
void liberation_contexte_cas(struct_processus *s_etat_processus); |
void liberation_generateur_aleatoire(struct_processus *s_etat_processus); |
void liberation_generateur_aleatoire(struct_processus *s_etat_processus); |
|
void liberation_mutexes_arbre_variables_partagees(struct_processus |
|
*s_etat_processus, struct_arbre_variables_partagees *l_element_courant); |
void liberation_threads(struct_processus *s_etat_processus); |
void liberation_threads(struct_processus *s_etat_processus); |
void liberation_profil(struct_processus *s_etat_processus); |
void liberation_profil(struct_processus *s_etat_processus); |
void localisation_courante(struct_processus *s_etat_processus); |
void localisation_courante(struct_processus *s_etat_processus); |
Line 2988 void scrutation_interruptions(struct_pro
|
Line 3054 void scrutation_interruptions(struct_pro
|
void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau); |
void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau); |
void *surveillance_processus(void *argument); |
void *surveillance_processus(void *argument); |
void swap(void *variable_1, void *variable_2, unsigned long taille_octets); |
void swap(void *variable_1, void *variable_2, unsigned long taille_octets); |
|
void *thread_signaux(void *argument); |
void trace(struct_processus *s_etat_processus, FILE *flux); |
void trace(struct_processus *s_etat_processus, FILE *flux); |
void traitement_asynchrone_exceptions_gsl(struct_processus *s_etat_processus); |
void traitement_asynchrone_exceptions_gsl(struct_processus *s_etat_processus); |
void traitement_exceptions_gsl(const char *reason, const char *file, |
void traitement_exceptions_gsl(const char *reason, const char *file, |
Line 3157 unsigned char *transliteration(struct_pr
|
Line 3224 unsigned char *transliteration(struct_pr
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
logical1 analyse_syntaxique(struct_processus *s_etat_processus); |
logical1 analyse_syntaxique(struct_processus *s_etat_processus); |
|
logical1 arret_thread_signaux(struct_processus *s_etat_processus); |
logical1 caracteristiques_fichier(struct_processus *s_etat_processus, |
logical1 caracteristiques_fichier(struct_processus *s_etat_processus, |
unsigned char *nom, logical1 *existence, logical1 *ouverture, |
unsigned char *nom, logical1 *existence, logical1 *ouverture, |
unsigned long *unite); |
unsigned long *unite); |
Line 3187 logical1 initialisation_fichier_acces_di
|
Line 3255 logical1 initialisation_fichier_acces_di
|
sqlite3 *sqlite, logical1 binaire); |
sqlite3 *sqlite, logical1 binaire); |
logical1 initialisation_fichier_acces_indexe(struct_processus *s_etat_processus, |
logical1 initialisation_fichier_acces_indexe(struct_processus *s_etat_processus, |
sqlite3 *sqlite, integer8 position_clef, logical1 binaire); |
sqlite3 *sqlite, integer8 position_clef, logical1 binaire); |
|
logical1 lancement_thread_signaux(struct_processus *s_etat_processus); |
logical1 recherche_instruction_suivante(struct_processus *s_etat_processus); |
logical1 recherche_instruction_suivante(struct_processus *s_etat_processus); |
logical1 retrait_variable(struct_processus *s_etat_processus, |
logical1 retrait_variable(struct_processus *s_etat_processus, |
unsigned char *nom_variable, unsigned char type); |
unsigned char *nom_variable, unsigned char type); |
logical1 retrait_variable_par_niveau(struct_processus *s_etat_processus); |
logical1 retrait_variables_par_niveau(struct_processus *s_etat_processus); |
logical1 retrait_variable_partagee(struct_processus *s_etat_processus, |
logical1 retrait_variable_partagee(struct_processus *s_etat_processus, |
unsigned char *nom_variable, union_position_variable position); |
unsigned char *nom_variable, union_position_variable position); |
|
logical1 retrait_variables_partagees_locales( |
|
struct_processus *s_etat_processus); |
logical1 retrait_variable_statique(struct_processus *s_etat_processus, |
logical1 retrait_variable_statique(struct_processus *s_etat_processus, |
unsigned char *nom_variable, union_position_variable position); |
unsigned char *nom_variable, union_position_variable position); |
|
logical1 retrait_variables_statiques_locales( |
|
struct_processus *s_etat_processus); |
logical1 sequenceur(struct_processus *s_etat_processus); |
logical1 sequenceur(struct_processus *s_etat_processus); |
logical1 sequenceur_optimise(struct_processus *s_etat_processus); |
logical1 sequenceur_optimise(struct_processus *s_etat_processus); |
#endif |
#endif |
Line 3217 logical1 recherche_variable(struct_proce
|
Line 3290 logical1 recherche_variable(struct_proce
|
unsigned char *nom_variable); |
unsigned char *nom_variable); |
logical1 recherche_variable_globale(struct_processus *s_etat_processus, |
logical1 recherche_variable_globale(struct_processus *s_etat_processus, |
unsigned char *nom_variable); |
unsigned char *nom_variable); |
logical1 recherche_variable_partagee(struct_processus *s_etat_processus, |
|
unsigned char *nom_variable, union_position_variable position, |
|
unsigned char origine); |
|
logical1 recherche_variable_statique(struct_processus *s_etat_processus, |
|
unsigned char *nom_variable, union_position_variable position, |
|
unsigned char origine); |
|
logical1 test_cfsf(struct_processus *s_etat_processus, |
logical1 test_cfsf(struct_processus *s_etat_processus, |
unsigned char indice_drapeau); |
unsigned char indice_drapeau); |
logical1 test_expression_rpn(unsigned char *chaine); |
logical1 test_expression_rpn(unsigned char *chaine); |
Line 3253 int alsprintf(unsigned char **strp, cons
|
Line 3320 int alsprintf(unsigned char **strp, cons
|
int interruption_violation_access(void *adresse_fautive, int gravite); |
int interruption_violation_access(void *adresse_fautive, int gravite); |
#ifndef RPLARGS |
#ifndef RPLARGS |
int liste_variables(struct_processus *s_etat_processus, |
int liste_variables(struct_processus *s_etat_processus, |
struct_tableau_variables *tableau, int position, |
struct_tableau_variables *tableau); |
struct_arbre_variables *l_element_courant); |
int nombre_variables(struct_processus *s_etat_processus); |
int nombre_variables(struct_processus *s_etat_processus, |
|
struct_arbre_variables *l_element_courant); |
|
int readline_analyse_syntaxique(int count, int key); |
int readline_analyse_syntaxique(int count, int key); |
int readline_effacement(int count, int key); |
int readline_effacement(int count, int key); |
#endif |
#endif |
Line 3353 struct_objet *parametres_sql(struct_proc
|
Line 3418 struct_objet *parametres_sql(struct_proc
|
struct_objet *s_parametres); |
struct_objet *s_parametres); |
struct_objet *simplification(struct_processus *s_etat_processus, |
struct_objet *simplification(struct_processus *s_etat_processus, |
struct_objet *s_objet); |
struct_objet *s_objet); |
|
|
|
struct_arbre_variables *allocation_noeud(struct_processus *s_etat_processus); |
|
struct_arbre_variables **allocation_tableau_noeuds( |
|
struct_processus *s_etat_processus); |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Fonctions renvoyant un pointeur sur une *struct_liste_variables_statiques |
|
ou *struct_liste_variables_partagees |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
struct_liste_variables_statiques *recherche_variable_statique(struct_processus |
|
*s_etat_processus, unsigned char *nom_variable, |
|
union_position_variable position, unsigned char origine); |
|
struct_liste_variables_partagees *recherche_variable_partagee(struct_processus |
|
*s_etat_processus, unsigned char *nom_variable, |
|
union_position_variable position, unsigned char origine); |
#endif |
#endif |
|
|
/* |
/* |
Line 3407 void f77multiplicationci_(complex16 *ca,
|
Line 3490 void f77multiplicationci_(complex16 *ca,
|
void f77multiplicationcr_(complex16 *ca, real8 *rb, complex16 *resultat); |
void f77multiplicationcr_(complex16 *ca, real8 *rb, complex16 *resultat); |
|
|
void f77puissancecc_(complex16 *ca, complex16 *cb, complex16 *resultat); |
void f77puissancecc_(complex16 *ca, complex16 *cb, complex16 *resultat); |
void f77puissanceci_(complex16 *ca, integer8 *ib, complex16 *resultat, |
void f77puissanceci_(complex16 *ca, integer8 *ib, complex16 *resultat); |
integer4 *troncature); |
|
void f77puissancecr_(complex16 *ca, real8 *rb, complex16 *resultat); |
void f77puissancecr_(complex16 *ca, real8 *rb, complex16 *resultat); |
void f77puissanceic_(integer8 *ia, complex16 *cb, complex16 *resultat); |
void f77puissanceic_(integer8 *ia, complex16 *cb, complex16 *resultat); |
void f77puissanceii_(integer8 *ia, integer8 *ib, integer8 *resultat); |
void f77puissanceii_(integer8 *ia, integer8 *ib, integer8 *resultat); |
void f77puissanceir_(integer8 *ia, real8 *rb, real8 *resultat); |
void f77puissanceir_(integer8 *ia, real8 *rb, real8 *resultat); |
void f77puissancerc_(real8 *ra, complex16 *cb, complex16 *resultat); |
void f77puissancerc_(real8 *ra, complex16 *cb, complex16 *resultat); |
void f77puissanceri_(real8 *ra, integer8 *ib, real8 *resultat, |
void f77puissanceri_(real8 *ra, integer8 *ib, real8 *resultat); |
integer4 *troncature); |
|
void f77puissancerr_(real8 *ra, real8 *rb, real8 *resultat); |
void f77puissancerr_(real8 *ra, real8 *rb, real8 *resultat); |
|
|
void f77racinecarreec_(complex16 *ca, complex16 *resultat); |
void f77racinecarreec_(complex16 *ca, complex16 *resultat); |