version 1.7, 2010/02/10 08:09:29
|
version 1.36, 2010/05/19 09:22:34
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.10 |
RPL/2 (R) version 4.0.15 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 22
|
Line 22
|
|
|
#ifndef INCLUSION_RPL |
#ifndef INCLUSION_RPL |
#define INCLUSION_RPL |
#define INCLUSION_RPL |
|
|
#define _GNU_SOURCE |
#define _GNU_SOURCE |
|
#define _POSIX_C_SOURCE 200112L |
|
#define _REENTRANT |
|
|
|
#ifdef Darwin |
|
# define SIGPOLL SIGINFO |
|
# define _DARWIN_C_SOURCE |
|
#endif |
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Line 37
|
Line 45
|
#include <strings.h> |
#include <strings.h> |
#include <syslog.h> |
#include <syslog.h> |
#include <errno.h> |
#include <errno.h> |
|
#include <stdarg.h> |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
|
# include <sys/mman.h> |
# include <sys/resource.h> |
# include <sys/resource.h> |
# include <sys/select.h> |
# include <sys/select.h> |
# include <sys/socket.h> |
# include <sys/socket.h> |
Line 70
|
Line 80
|
# include "termcap.h" |
# include "termcap.h" |
# include "iconv.h" |
# include "iconv.h" |
|
|
|
# include "openssl/evp.h" |
|
# include "sqlite3.h" |
|
|
# define HAVE_INLINE |
# define HAVE_INLINE |
# define GSL_RANGE_CHECK_OFF |
# define GSL_RANGE_CHECK_OFF |
# include "gsl/gsl_cdf.h" |
# include "gsl/gsl_cdf.h" |
Line 86
|
Line 99
|
# include <ieeefp.h> |
# include <ieeefp.h> |
#endif |
#endif |
|
|
|
// Définition spécifique à Hurd |
|
#ifndef PIPE_BUF |
|
# define fpathconf (".", _PC_PIPE_BUF) |
|
#endif |
|
|
#ifdef MYSQL_SUPPORT |
#ifdef MYSQL_SUPPORT |
# include <mysql.h> |
# include <mysql.h> |
# define mysqlclose(arg) mysql_close(arg.mysql) |
# define mysqlclose(arg) mysql_close(arg.mysql) |
Line 100
|
Line 118
|
# define postgresqlclose(arg) |
# define postgresqlclose(arg) |
#endif |
#endif |
|
|
#ifdef LIBRPL |
#include "librplprototypes.h" |
# include "librplprototypes.h" |
|
#endif |
|
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Line 111
|
Line 127
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
|
// Arrêt par STOP |
# define SIGFSTOP SIGUSR1 |
# define SIGFSTOP SIGUSR1 |
|
// Démarrage d'un processus fils |
# define SIGSTART SIGUSR2 |
# define SIGSTART SIGUSR2 |
|
// Injection de données |
# define SIGINJECT SIGQUIT |
# define SIGINJECT SIGQUIT |
|
// Arrêt général |
# define SIGABORT SIGPROF |
# define SIGABORT SIGPROF |
|
// Arrêt d'un processus fils depuis autre chose que STOP |
|
# define SIGFABORT SIGPOLL |
# define d_NOMBRE_INTERRUPTIONS 64 |
# define d_NOMBRE_INTERRUPTIONS 64 |
#endif |
#endif |
|
|
Line 175 typedef unsigned char t_8_bits;
|
Line 197 typedef unsigned char t_8_bits;
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
|
# ifdef SEMAPHORES_NOMMES |
|
# define LONGUEUR_NOM_SEMAPHORE 64 |
|
# endif |
# ifndef MAIN_RPL |
# ifndef MAIN_RPL |
extern jmp_buf contexte; |
extern jmp_buf contexte; |
extern jmp_buf contexte_initial; |
extern jmp_buf contexte_initial; |
|
|
extern pthread_key_t semaphore_fork_processus_courant; |
# ifdef SEMAPHORES_NOMMES |
|
extern pthread_mutex_t mutex_sem; |
|
# endif |
|
|
|
extern pthread_key_t semaphore_fork_processus_courant; |
|
|
|
extern sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_liste_threads; |
|
|
|
extern sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_gestionnaires_signaux; |
|
|
|
extern sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_gestionnaires_signaux_atomique; |
|
|
extern sem_t semaphore_liste_threads; |
# ifdef SEMAPHORES_NOMMES |
extern sem_t semaphore_gestionnaires_signaux; |
// 0 -> liste_threads |
extern sem_t semaphore_gestionnaires_signaux_atomique; |
// 1 -> gestionnaire_signaux |
|
// 2 -> gestionnaire_signaux_atomique |
|
// 3 -> &((*s_etat_processus).semaphore_fork) |
|
extern unsigned char noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE]; |
|
extern sem_t *semaphores_nommes[4]; |
|
# endif |
# else |
# else |
jmp_buf contexte; |
jmp_buf contexte; |
jmp_buf contexte_initial; |
jmp_buf contexte_initial; |
|
|
|
# ifdef SEMAPHORES_NOMMES |
|
pthread_mutex_t mutex_sem = PTHREAD_MUTEX_INITIALIZER; |
|
# endif |
|
|
|
pthread_key_t semaphore_fork_processus_courant; |
|
|
pthread_key_t semaphore_fork_processus_courant; |
sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_liste_threads; |
|
|
|
sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_gestionnaires_signaux; |
|
|
sem_t semaphore_liste_threads; |
sem_t |
sem_t semaphore_gestionnaires_signaux; |
# ifdef SEMAPHORES_NOMMES |
sem_t semaphore_gestionnaires_signaux_atomique; |
* |
|
# endif |
|
semaphore_gestionnaires_signaux_atomique; |
|
|
|
# ifdef SEMAPHORES_NOMMES |
|
unsigned char noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE]; |
|
sem_t *semaphores_nommes[4]; |
|
# endif |
# endif |
# endif |
#endif |
#endif |
|
|
|
#ifdef SEMAPHORES_NOMMES |
|
enum t_semaphore { sem_liste_threads = 0, |
|
sem_gestionnaires_signaux = 1, |
|
sem_gestionnaires_signaux_atomique = 2, |
|
sem_fork = 3 }; |
|
|
|
sem_t *sem_init2(unsigned int valeur, enum t_semaphore semaphore); |
|
int sem_destroy2(sem_t *semaphore_p, enum t_semaphore semaphore); |
|
int sem_getvalue2(sem_t *semaphore, int *valeur); |
|
|
|
#define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value) |
|
#define sem_post(semaphore) \ |
|
({ int r; pthread_mutex_lock(&mutex_sem); \ |
|
r = sem_post(semaphore), pthread_mutex_unlock(&mutex_sem); r; }) |
|
#define sem_wait(semaphore) \ |
|
({ int r; pthread_mutex_lock(&mutex_sem); \ |
|
r = sem_wait(semaphore), pthread_mutex_unlock(&mutex_sem); r; }) |
|
#define sem_trywait(semaphore) \ |
|
({ int r; pthread_mutex_lock(&mutex_sem); \ |
|
r = sem_trywait(semaphore), pthread_mutex_unlock(&mutex_sem); r; }) |
|
#endif |
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Macros |
Macros |
Line 270 typedef unsigned char t_8_bits;
|
Line 367 typedef unsigned char t_8_bits;
|
# define abs(i) (((i) >= 0) ? (i) : (-i)) |
# define abs(i) (((i) >= 0) ? (i) : (-i)) |
#endif |
#endif |
|
|
#define BUG(b, ...) \ |
#define NOTICE(m) \ |
do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ |
do \ |
(int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ |
{ \ |
__VA_ARGS__; fflush(stdout); \ |
ufprintf(stderr, "[%d-%llu] %s() from %s at line %d: %s\n", \ |
pthread_kill(pthread_self(), SIGBUS); }} while(0) |
getpid(), (unsigned long long) pthread_self(), \ |
|
__FUNCTION__, __FILE__, __LINE__, m); \ |
|
fflush(stderr); \ |
|
} while(0) |
|
|
|
#ifdef __GLIBC__ |
|
#include <execinfo.h> |
|
#define __BACKTRACE |
#define BACKTRACE(n) \ |
#define BACKTRACE(n) \ |
do \ |
do \ |
{ \ |
{ \ |
Line 291 typedef unsigned char t_8_bits;
|
Line 394 typedef unsigned char t_8_bits;
|
if (appels != NULL) \ |
if (appels != NULL) \ |
{ \ |
{ \ |
for(i = 0; i < nb; i++) \ |
for(i = 0; i < nb; i++) \ |
uprintf("%s\n", appels[i]); \ |
uprintf(" %s\n", appels[i]); \ |
free(appels); \ |
free(appels); \ |
} \ |
} \ |
else \ |
else \ |
Line 300 typedef unsigned char t_8_bits;
|
Line 403 typedef unsigned char t_8_bits;
|
fflush(stdout); \ |
fflush(stdout); \ |
pthread_mutex_unlock(&mutex); \ |
pthread_mutex_unlock(&mutex); \ |
} while(0) |
} while(0) |
|
#else |
|
#define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc") |
|
#endif |
|
|
#define NOTICE(m) \ |
#ifdef __BACKTRACE |
do \ |
# define BUG(b, ...) \ |
{ \ |
do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ |
ufprintf(stderr, "[%d-%llu] %s() from %s at line %d: %s\n", \ |
(int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ |
getpid(), pthread_self(), __FUNCTION__, __FILE__, __LINE__, \ |
__VA_ARGS__; fflush(stdout); \ |
m); \ |
BACKTRACE(64); \ |
fflush(stderr); \ |
pthread_kill(pthread_self(), SIGBUS); }} while(0) |
} while(0) |
#else |
|
# define BUG(b, ...) \ |
|
do { if (b) { uprintf("[%d] BUG! <%s()> at line #%d of %s\n", \ |
|
(int) getpid(), __FUNCTION__, __LINE__, __FILE__); \ |
|
__VA_ARGS__; fflush(stdout); \ |
|
pthread_kill(pthread_self(), SIGBUS); }} while(0) |
|
#endif |
|
|
|
|
/* |
/* |
Line 317 typedef unsigned char t_8_bits;
|
Line 429 typedef unsigned char t_8_bits;
|
================================================================================ |
================================================================================ |
*/ |
*/ |
|
|
|
#ifdef DEBUG_MEMOIRE |
|
void analyse_post_mortem(); |
|
void *debug_memoire_ajout(size_t taille, const unsigned char *fonction, |
|
unsigned long ligne, const unsigned char *argument); |
|
void *debug_memoire_modification(void *pointeur, size_t taille, |
|
const unsigned char *fonction, unsigned long ligne, |
|
const unsigned char *argument); |
|
void debug_memoire_reinitialisation(); |
|
void debug_memoire_retrait(void *ptr); |
|
void debug_memoire_verification(); |
|
|
|
#define malloc(s) debug_memoire_ajout(s, __FUNCTION__, __LINE__, #s) |
|
#define free(s) debug_memoire_retrait(s) |
|
#define realloc(s, t) debug_memoire_modification(s, t, \ |
|
__FUNCTION__, __LINE__, #t) |
|
#endif |
|
|
#ifdef DEBUG_RETURN |
#ifdef DEBUG_RETURN |
#define return uprintf("[%d] Return from <%s()> at line #%d " \ |
#define return uprintf("[%d] Return from <%s()> at line #%d " \ |
"(%s [%d])\n", (int) getpid(), __FUNCTION__, \ |
"(%s [%d])\n", (int) getpid(), __FUNCTION__, \ |
__LINE__, strerror(errno), errno); fflush(stdout); errno=0; return |
__LINE__, strerror(errno), errno); fflush(stdout); errno = 0; return |
#endif |
#endif |
|
|
#ifdef DEBUG_MUTEX |
#ifdef DEBUG_MUTEX |
Line 388 typedef unsigned char t_8_bits;
|
Line 517 typedef unsigned char t_8_bits;
|
#define d_absence_erreur ((logical1) d_faux) |
#define d_absence_erreur ((logical1) d_faux) |
#define d_erreur ((logical1) d_vrai) |
#define d_erreur ((logical1) d_vrai) |
|
|
#define d_code_fin_chaine '\0' |
#define d_code_fin_chaine '\0' |
#define d_code_espace ' ' |
#define d_code_espace ' ' |
#define d_code_retour_chariot '\n' |
#define d_code_retour_chariot '\n' |
#define d_code_tabulation '\t' |
#define d_code_tabulation '\t' |
|
#define d_longueur_maximale_instruction 16 |
|
|
#define d_INT "integer" |
#define d_INT "integer" |
#define d_REL "real" |
#define d_REL "real" |
Line 442 typedef unsigned char t_8_bits;
|
Line 572 typedef unsigned char t_8_bits;
|
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
|
#define __erreur { uprintf("%s() / %d\n", __FUNCTION__, __LINE__); } while(0) |
#ifdef DEBUG_ERREURS |
|
# ifdef MESSAGES |
|
# define __erreur(i) i |
|
# else |
|
# define __erreur(i) ({ if (strstr(__FUNCTION__, "recherche_variable") \ |
|
== NULL) fprintf(stderr, "ERROR %d AT %s() LINE %d\n", \ |
|
i, __FUNCTION__, __LINE__); i; }) |
|
# endif |
|
#else |
|
# define __erreur(i) i |
|
#endif |
|
|
|
|
// -1 : erreur provoquée par une bibliothèque externe |
// -1 : erreur provoquée par une bibliothèque externe |
#ifndef RPLARGS |
#ifndef RPLARGS |
# define d_es 2000 |
# define d_es 2000 |
# define d_es_allocation_memoire 2001 |
# define d_es_allocation_memoire __erreur(2001) |
# define d_es_variable_introuvable 2002 |
# define d_es_variable_introuvable __erreur(2002) |
# define d_es_pile_vide 2003 |
# define d_es_pile_vide __erreur(2003) |
# define d_es_end_incoherent 2004 |
# define d_es_end_incoherent __erreur(2004) |
# define d_es_peripherique_stdin 2005 |
# define d_es_peripherique_stdin __erreur(2005) |
# define d_es_erreur_fichier 2006 |
# define d_es_erreur_fichier __erreur(2006) |
# define d_es_execution_bibliotheque 2007 |
# define d_es_execution_bibliotheque __erreur(2007) |
# define d_es_signal 2008 |
# define d_es_signal __erreur(2008) |
# define d_es_processus 2009 |
# define d_es_processus __erreur(2009) |
# define d_es_pile_operationnelle_vide 2010 |
# define d_es_pile_operationnelle_vide __erreur(2010) |
# define d_es_nombre_max_descripteurs 2011 |
# define d_es_nombre_max_descripteurs __erreur(2011) |
# define d_es_interruption_invalide 2012 |
# define d_es_interruption_invalide __erreur(2012) |
# define d_es_contexte 2013 |
# define d_es_contexte __erreur(2013) |
|
# define d_es_somme_controle __erreur(2014) |
#endif |
#endif |
|
|
/* |
/* |
Line 470 typedef unsigned char t_8_bits;
|
Line 612 typedef unsigned char t_8_bits;
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
# define d_ep 1000 |
# define d_ep 1000 |
# define d_ep_division_par_zero 1001 |
# define d_ep_division_par_zero __erreur(1001) |
# define d_ep_matrice_non_inversible 1002 |
# define d_ep_matrice_non_inversible __erreur(1002) |
# define d_ep_resultat_indefini 1003 |
# define d_ep_resultat_indefini __erreur(1003) |
# define d_ep_underflow 1004 |
# define d_ep_underflow __erreur(1004) |
# define d_ep_overflow 1005 |
# define d_ep_overflow __erreur(1005) |
# define d_ep_domaine_definition 1006 |
# define d_ep_domaine_definition __erreur(1006) |
# define d_ep_perte_precision 1007 |
# define d_ep_perte_precision __erreur(1007) |
# define d_ep_decomposition_QR 1008 |
# define d_ep_decomposition_QR __erreur(1008) |
# define d_ep_matrice_non_definie_positive 1009 |
# define d_ep_matrice_non_definie_positive __erreur(1009) |
# define d_ep_decomposition_QZ 1010 |
# define d_ep_decomposition_QZ __erreur(1010) |
# define d_ep_decomposition_SVD 1011 |
# define d_ep_decomposition_SVD __erreur(1011) |
#endif |
#endif |
|
|
/* |
/* |
Line 491 typedef unsigned char t_8_bits;
|
Line 633 typedef unsigned char t_8_bits;
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
# define d_ec 3000 |
# define d_ec 3000 |
# define d_ec_niveau_definition_negatif 3001 |
# define d_ec_niveau_definition_negatif __erreur(3001) |
# define d_ec_nom_definition_invalide 3002 |
# define d_ec_nom_definition_invalide __erreur(3002) |
# define d_ec_erreur_boucle_definie 3003 |
# define d_ec_erreur_boucle_definie __erreur(3003) |
# define d_ec_erreur_instruction_end 3004 |
# define d_ec_erreur_instruction_end __erreur(3004) |
# define d_ec_erreur_instruction_until 3005 |
# define d_ec_erreur_instruction_until __erreur(3005) |
# define d_ec_source_incoherent 3006 |
# define d_ec_source_incoherent __erreur(3006) |
# define d_ec_erreur_instruction_while 3007 |
# define d_ec_erreur_instruction_while __erreur(3007) |
# define d_ec_erreur_instruction_then 3008 |
# define d_ec_erreur_instruction_then __erreur(3008) |
# define d_ec_erreur_instruction_else 3009 |
# define d_ec_erreur_instruction_else __erreur(3009) |
# define d_ec_erreur_instruction_elseif 3010 |
# define d_ec_erreur_instruction_elseif __erreur(3010) |
# define d_ec_erreur_instruction_select 3011 |
# define d_ec_erreur_instruction_select __erreur(3011) |
# define d_ec_erreur_instruction_case 3012 |
# define d_ec_erreur_instruction_case __erreur(3012) |
#endif |
#endif |
|
|
/* |
/* |
Line 514 typedef unsigned char t_8_bits;
|
Line 656 typedef unsigned char t_8_bits;
|
// -1 : erreur provoquée par une bibliothèque externe |
// -1 : erreur provoquée par une bibliothèque externe |
#ifndef RPLARGS |
#ifndef RPLARGS |
# define d_ex 0 |
# define d_ex 0 |
# define d_ex_pile_vide 1 |
# define d_ex_pile_vide __erreur(1) |
# define d_ex_manque_argument 2 |
# define d_ex_manque_argument __erreur(2) |
# define d_ex_argument_invalide 3 |
# define d_ex_argument_invalide __erreur(3) |
# define d_ex_erreur_type_argument 4 |
# define d_ex_erreur_type_argument __erreur(4) |
# define d_ex_nom_reserve 5 |
# define d_ex_nom_reserve __erreur(5) |
# define d_ex_nombre_arguments 6 |
# define d_ex_nombre_arguments __erreur(6) |
# define d_ex_dimensions_invalides 7 |
# define d_ex_dimensions_invalides __erreur(7) |
# define d_ex_expression_invalide 8 |
# define d_ex_expression_invalide __erreur(8) |
# define d_ex_absence_graphique_courant 9 |
# define d_ex_absence_graphique_courant __erreur(9) |
# define d_ex_erreur_traitement_condition 10 |
# define d_ex_erreur_traitement_condition __erreur(10) |
# define d_ex_erreur_traitement_boucle 11 |
# define d_ex_erreur_traitement_boucle __erreur(11) |
# define d_ex_variable_non_definie 12 |
# define d_ex_variable_non_definie __erreur(12) |
# define d_ex_drapeau_inexistant 13 |
# define d_ex_drapeau_inexistant __erreur(13) |
# define d_ex_nom_invalide 14 |
# define d_ex_nom_invalide __erreur(14) |
# define d_ex_element_inexistant 15 |
# define d_ex_element_inexistant __erreur(15) |
# define d_ex_absence_variable 16 |
# define d_ex_absence_variable __erreur(16) |
# define d_ex_erreur_evaluation 17 |
# define d_ex_erreur_evaluation __erreur(17) |
# define d_ex_semaphore 18 |
# define d_ex_semaphore __erreur(18) |
# define d_ex_longueur_fft 19 |
# define d_ex_longueur_fft __erreur(19) |
# define d_ex_queue_impression 20 |
# define d_ex_queue_impression __erreur(20) |
# define d_ex_type_trace_invalide 21 |
# define d_ex_type_trace_invalide __erreur(21) |
# define d_ex_erreur_fichier 22 |
# define d_ex_erreur_fichier __erreur(22) |
# define d_ex_absence_equation 23 |
# define d_ex_absence_equation __erreur(23) |
# define d_ex_erreur_bibliotheque 24 |
# define d_ex_erreur_bibliotheque __erreur(24) |
# define d_ex_execution_bibliotheque 25 |
# define d_ex_execution_bibliotheque __erreur(25) |
# define d_ex_stop 26 |
# define d_ex_stop __erreur(26) |
# define d_ex_matrice_statistique_invalide 27 |
# define d_ex_matrice_statistique_invalide __erreur(27) |
# define d_ex_dimensions_matrice_statistique 28 |
# define d_ex_dimensions_matrice_statistique __erreur(28) |
# define d_ex_absence_observations 29 |
# define d_ex_absence_observations __erreur(29) |
# define d_ex_statistiques_echantillon 30 |
# define d_ex_statistiques_echantillon __erreur(30) |
# define d_ex_observations_inexistantes 31 |
# define d_ex_observations_inexistantes __erreur(31) |
# define d_ex_syntaxe 32 |
# define d_ex_syntaxe __erreur(32) |
# define d_ex_cycle_hors_boucle 33 |
# define d_ex_cycle_hors_boucle __erreur(33) |
# define d_ex_conversion_unite 34 |
# define d_ex_conversion_unite __erreur(34) |
# define d_ex_erreur_parametre_fichier 35 |
# define d_ex_erreur_parametre_fichier __erreur(35) |
# define d_ex_erreur_acces_fichier 36 |
# define d_ex_erreur_acces_fichier __erreur(36) |
# define d_ex_erreur_requete_fichier 37 |
# define d_ex_erreur_requete_fichier __erreur(37) |
# define d_ex_erreur_format_fichier 38 |
# define d_ex_erreur_format_fichier __erreur(38) |
# define d_ex_fichier_verrouille 39 |
# define d_ex_fichier_verrouille __erreur(39) |
# define d_ex_verrou_indefini 40 |
# define d_ex_verrou_indefini __erreur(40) |
# define d_ex_fin_de_fichier_atteinte 41 |
# define d_ex_fin_de_fichier_atteinte __erreur(41) |
# define d_ex_debut_de_fichier_atteint 42 |
# define d_ex_debut_de_fichier_atteint __erreur(42) |
# define d_ex_erreur_type_fichier 43 |
# define d_ex_erreur_type_fichier __erreur(43) |
# define d_ex_fichier_vide 44 |
# define d_ex_fichier_vide __erreur(44) |
# define d_ex_dimensions_differentes 45 |
# define d_ex_dimensions_differentes __erreur(45) |
# define d_ex_routines_mathematiques 46 |
# define d_ex_routines_mathematiques __erreur(46) |
# define d_ex_exit_hors_boucle 47 |
# define d_ex_exit_hors_boucle __erreur(47) |
# define d_ex_longueur_dft 48 |
# define d_ex_longueur_dft __erreur(48) |
# define d_ex_contexte 49 |
# define d_ex_contexte __erreur(49) |
# define d_ex_processus 50 |
# define d_ex_processus __erreur(50) |
# define d_ex_image_processus 51 |
# define d_ex_image_processus __erreur(51) |
# define d_ex_erreur_sql 52 |
# define d_ex_erreur_sql __erreur(52) |
# define d_ex_variable_verrouillee 53 |
# define d_ex_variable_verrouillee __erreur(53) |
# define d_ex_variable_volatile 54 |
# define d_ex_variable_volatile __erreur(54) |
# define d_ex_erreur_processus 55 |
# define d_ex_erreur_processus __erreur(55) |
# define d_ex_erreur_impression 56 |
# define d_ex_erreur_impression __erreur(56) |
# define d_ex_nombre_arguments_fonction 57 |
# define d_ex_nombre_arguments_fonction __erreur(57) |
# define d_ex_fonction_indisponible 58 |
# define d_ex_fonction_indisponible __erreur(58) |
# define d_ex_bibliotheque_chargee 59 |
# define d_ex_bibliotheque_chargee __erreur(59) |
# define d_ex_aucun_symbole 60 |
# define d_ex_aucun_symbole __erreur(60) |
# define d_ex_definition_ambigue 61 |
# define d_ex_definition_ambigue __erreur(61) |
# define d_ex_fichier_hors_contexte 62 |
# define d_ex_fichier_hors_contexte __erreur(62) |
# define d_ex_socket_en_ecoute 63 |
# define d_ex_socket_en_ecoute __erreur(63) |
# define d_ex_interruption_invalide 64 |
# define d_ex_interruption_invalide __erreur(64) |
# define d_ex_erreur_transcodage 65 |
# define d_ex_erreur_transcodage __erreur(65) |
# define d_ex_absence_processus_pere 66 |
# define d_ex_absence_processus_pere __erreur(66) |
# define d_ex_creation_variable 67 |
# define d_ex_creation_variable __erreur(67) |
# define d_ex_fusible 68 |
# define d_ex_fusible __erreur(68) |
# define d_ex_iswi_hors_interruption 69 |
# define d_ex_iswi_hors_interruption __erreur(69) |
# define d_ex_daemon 70 |
# define d_ex_daemon __erreur(70) |
# define d_ex_mutex 71 |
# define d_ex_mutex __erreur(71) |
# define d_ex_variable_statique_partagee 72 |
# define d_ex_variable_statique_partagee __erreur(72) |
# define d_ex_variable_partagee 73 |
# define d_ex_variable_partagee __erreur(73) |
# define d_ex_graphique_memorise 74 |
# define d_ex_graphique_memorise __erreur(74) |
# define d_ex_matrice_non_diagonale 75 |
# define d_ex_matrice_non_diagonale __erreur(75) |
# define d_ex_locales 76 |
# define d_ex_locales __erreur(76) |
# define d_ex_representation 77 |
# define d_ex_representation __erreur(77) |
# define d_ex_erreur_profilage 78 |
# define d_ex_erreur_profilage __erreur(78) |
#endif |
# define d_ex_enregistrement_inexistant __erreur(79) |
|
# define d_ex_clef_inexistante __erreur(80) |
/* |
# define d_ex_nom_implicite __erreur(81) |
-------------------------------------------------------------------------------- |
|
Erreurs de la ligne de commande |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#ifndef RPLARGS |
|
# define d_os 4000 |
|
# define d_os_ligne_de_commande 4001 |
|
# define d_os_fichier_introuvable 4002 |
|
#endif |
#endif |
|
|
|
|
/* |
/* |
================================================================================ |
================================================================================ |
STRUCTURES |
STRUCTURES |
Line 820 typedef struct descripteur_fichier
|
Line 954 typedef struct descripteur_fichier
|
unsigned long identifiant; |
unsigned long identifiant; |
|
|
unsigned char effacement; |
unsigned char effacement; |
|
unsigned char type; // C (file *) ou S (sqlite *) |
unsigned char *nom; |
unsigned char *nom; |
|
|
pid_t pid; |
pid_t pid; |
pthread_t tid; |
pthread_t tid; |
|
|
file *descripteur; |
file *descripteur_c; |
|
sqlite3 *descripteur_sqlite; |
} struct_descripteur_fichier; |
} struct_descripteur_fichier; |
#endif |
#endif |
|
|
Line 996 typedef struct descripteur_thread
|
Line 1132 typedef struct descripteur_thread
|
|
|
struct_objet *argument; |
struct_objet *argument; |
|
|
pid_t pid; |
pid_t pid; |
volatile pthread_t tid; |
volatile pthread_t tid; |
|
|
pthread_t thread_pere; |
pthread_t thread_pere; |
|
|
Line 1334 typedef struct processus
|
Line 1470 typedef struct processus
|
unsigned char autorisation_conversion_chaine; /*Y/N*/ |
unsigned char autorisation_conversion_chaine; /*Y/N*/ |
unsigned char autorisation_empilement_programme; /*Y/N*/ |
unsigned char autorisation_empilement_programme; /*Y/N*/ |
unsigned char autorisation_evaluation_nom; /*Y/N*/ |
unsigned char autorisation_evaluation_nom; /*Y/N*/ |
|
unsigned char autorisation_nom_implicite; /*Y/N*/ |
unsigned char evaluation_forcee; /*Y/N*/ |
unsigned char evaluation_forcee; /*Y/N*/ |
unsigned char instruction_valide; /*Y/N*/ |
unsigned char instruction_valide; /*Y/N*/ |
unsigned char instruction_intrinseque; /*Y/I/N*/ |
unsigned char instruction_intrinseque; /*Y/I/N*/ |
Line 1396 typedef struct processus
|
Line 1533 typedef struct processus
|
pthread_t thread_fusible; |
pthread_t thread_fusible; |
pthread_t thread_surveille_par_fusible; |
pthread_t thread_surveille_par_fusible; |
|
|
|
# ifndef Cygwin |
stack_t pile_signal; |
stack_t pile_signal; |
|
# else |
|
# define SA_ONSTACK 0 |
|
# define RTLD_LOCAL 0 |
|
# endif |
|
|
/* Contextes */ |
/* Contextes */ |
|
|
Line 1655 typedef struct processus
|
Line 1797 typedef struct processus
|
unsigned char traitement_interruption; /* Y/N */ |
unsigned char traitement_interruption; /* Y/N */ |
unsigned char traitement_interruptible; /* Y/N */ |
unsigned char traitement_interruptible; /* Y/N */ |
|
|
|
struct_objet *at_exit; |
|
|
/* Variables volatiles */ |
/* Variables volatiles */ |
|
|
volatile sig_atomic_t var_volatile_alarme; |
volatile sig_atomic_t var_volatile_alarme; |
Line 1668 typedef struct processus
|
Line 1812 typedef struct processus
|
volatile sig_atomic_t var_volatile_processus_pere; |
volatile sig_atomic_t var_volatile_processus_pere; |
volatile sig_atomic_t var_volatile_recursivite; |
volatile sig_atomic_t var_volatile_recursivite; |
|
|
|
volatile sig_atomic_t arret_depuis_abort; |
|
|
volatile int var_volatile_exception_gsl; |
volatile int var_volatile_exception_gsl; |
|
|
/* Autres */ |
/* Autres */ |
|
|
|
char *rpl_home; |
|
|
gsl_rng *generateur_aleatoire; |
gsl_rng *generateur_aleatoire; |
const gsl_rng_type *type_generateur_aleatoire; |
const gsl_rng_type *type_generateur_aleatoire; |
|
|
Line 1712 typedef struct processus
|
Line 1860 typedef struct processus
|
pthread_mutex_t mutex; |
pthread_mutex_t mutex; |
|
|
// Sémaphore autorisant les fork() |
// Sémaphore autorisant les fork() |
sem_t semaphore_fork; |
sem_t |
|
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# endif |
|
semaphore_fork; |
|
|
/* Mutexes */ |
/* Mutexes */ |
|
|
Line 1732 typedef struct processus
|
Line 1884 typedef struct processus
|
unsigned long taille_pile_objets; |
unsigned long taille_pile_objets; |
struct_objet *pile_objets; |
struct_objet *pile_objets; |
|
|
# define TAILLE_CACHE 1024 |
# ifndef DEBUG_MALLOC |
|
# define TAILLE_CACHE 16384 |
|
# else |
|
# define TAILLE_CACHE 4 |
|
# endif |
|
|
unsigned long *objets_adr[TAILLE_CACHE]; |
unsigned long *objets_adr[TAILLE_CACHE]; |
int pointeur_adr; |
int pointeur_adr; |
Line 1771 typedef struct processus
|
Line 1927 typedef struct processus
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
Structures instruction intrinseque |
Structures instruction intrinsèque |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
|
Line 1836 void instruction_asl(struct_processus *s
|
Line 1992 void instruction_asl(struct_processus *s
|
void instruction_asr(struct_processus *s_etat_processus); |
void instruction_asr(struct_processus *s_etat_processus); |
void instruction_atan(struct_processus *s_etat_processus); |
void instruction_atan(struct_processus *s_etat_processus); |
void instruction_atanh(struct_processus *s_etat_processus); |
void instruction_atanh(struct_processus *s_etat_processus); |
|
void instruction_atexit(struct_processus *s_etat_processus); |
void instruction_autoscale(struct_processus *s_etat_processus); |
void instruction_autoscale(struct_processus *s_etat_processus); |
void instruction_axes(struct_processus *s_etat_processus); |
void instruction_axes(struct_processus *s_etat_processus); |
|
|
Line 1855 void instruction_clear(struct_processus
|
Line 2012 void instruction_clear(struct_processus
|
void instruction_cllcd(struct_processus *s_etat_processus); |
void instruction_cllcd(struct_processus *s_etat_processus); |
void instruction_clmf(struct_processus *s_etat_processus); |
void instruction_clmf(struct_processus *s_etat_processus); |
void instruction_close(struct_processus *s_etat_processus); |
void instruction_close(struct_processus *s_etat_processus); |
|
void instruction_clratexit(struct_processus *s_etat_processus); |
void instruction_clrcntxt(struct_processus *s_etat_processus); |
void instruction_clrcntxt(struct_processus *s_etat_processus); |
void instruction_clrerr(struct_processus *s_etat_processus); |
void instruction_clrerr(struct_processus *s_etat_processus); |
void instruction_clrfuse(struct_processus *s_etat_processus); |
void instruction_clrfuse(struct_processus *s_etat_processus); |
Line 2005 void instruction_ifft(struct_processus *
|
Line 2163 void instruction_ifft(struct_processus *
|
void instruction_ift(struct_processus *s_etat_processus); |
void instruction_ift(struct_processus *s_etat_processus); |
void instruction_ifte(struct_processus *s_etat_processus); |
void instruction_ifte(struct_processus *s_etat_processus); |
void instruction_im(struct_processus *s_etat_processus); |
void instruction_im(struct_processus *s_etat_processus); |
|
void instruction_implicit(struct_processus *s_etat_processus); |
void instruction_in(struct_processus *s_etat_processus); |
void instruction_in(struct_processus *s_etat_processus); |
void instruction_incr(struct_processus *s_etat_processus); |
void instruction_incr(struct_processus *s_etat_processus); |
void instruction_indep(struct_processus *s_etat_processus); |
void instruction_indep(struct_processus *s_etat_processus); |
Line 2053 void instruction_maxs(struct_processus *
|
Line 2212 void instruction_maxs(struct_processus *
|
void instruction_mclrin(struct_processus *s_etat_processus); |
void instruction_mclrin(struct_processus *s_etat_processus); |
void instruction_mean(struct_processus *s_etat_processus); |
void instruction_mean(struct_processus *s_etat_processus); |
void instruction_mem(struct_processus *s_etat_processus); |
void instruction_mem(struct_processus *s_etat_processus); |
|
void instruction_memlock(struct_processus *s_etat_processus); |
|
void instruction_memunlock(struct_processus *s_etat_processus); |
void instruction_min(struct_processus *s_etat_processus); |
void instruction_min(struct_processus *s_etat_processus); |
void instruction_mins(struct_processus *s_etat_processus); |
void instruction_mins(struct_processus *s_etat_processus); |
void instruction_mod(struct_processus *s_etat_processus); |
void instruction_mod(struct_processus *s_etat_processus); |
Line 2107 void instruction_print(struct_processus
|
Line 2268 void instruction_print(struct_processus
|
void instruction_private(struct_processus *s_etat_processus); |
void instruction_private(struct_processus *s_etat_processus); |
void instruction_prlcd(struct_processus *s_etat_processus); |
void instruction_prlcd(struct_processus *s_etat_processus); |
void instruction_prmd(struct_processus *s_etat_processus); |
void instruction_prmd(struct_processus *s_etat_processus); |
|
void instruction_procid(struct_processus *s_etat_processus); |
void instruction_prompt(struct_processus *s_etat_processus); |
void instruction_prompt(struct_processus *s_etat_processus); |
void instruction_protect(struct_processus *s_etat_processus); |
void instruction_protect(struct_processus *s_etat_processus); |
void instruction_prst(struct_processus *s_etat_processus); |
void instruction_prst(struct_processus *s_etat_processus); |
Line 2340 void *allocation_maillon(struct_processu
|
Line 2502 void *allocation_maillon(struct_processu
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
void analyse(struct_processus *s_etat_processus, void (*fonction)()); |
void analyse(struct_processus *s_etat_processus, void (*fonction)()); |
inline void *analyse_instruction(struct_processus *s_etat_processus, |
void *analyse_instruction(struct_processus *s_etat_processus, |
unsigned char *candidat); |
unsigned char *candidat); |
void appel_gnuplot(struct_processus *s_etat_processus, |
void appel_gnuplot(struct_processus *s_etat_processus, |
unsigned char persistance); |
unsigned char persistance); |
Line 2353 void conversion_element_tex(unsigned cha
|
Line 2515 void conversion_element_tex(unsigned cha
|
void conversion_format(struct_processus *s_etat_processus, |
void conversion_format(struct_processus *s_etat_processus, |
unsigned char *chaine); |
unsigned char *chaine); |
void conversion_hms_vers_decimal(real8 *angle); |
void conversion_hms_vers_decimal(real8 *angle); |
|
void conversion_majuscule_limitee(unsigned char *chaine_entree, |
|
unsigned char *chaine_sortie, unsigned long longueur); |
void conversion_radians_vers_degres(real8 *angle); |
void conversion_radians_vers_degres(real8 *angle); |
void correction_formateur_tex(struct_processus *s_etat_processus, |
void correction_formateur_tex(struct_processus *s_etat_processus, |
unsigned char **ligne); |
unsigned char **ligne); |
Line 2365 void deverrouillage_threads_concurrents(
|
Line 2529 void deverrouillage_threads_concurrents(
|
void ecriture_pile(struct_processus *s_etat_processus, file *flux, |
void ecriture_pile(struct_processus *s_etat_processus, file *flux, |
struct_liste_chainee *l_element_courant, unsigned long niveau_courant); |
struct_liste_chainee *l_element_courant, unsigned long niveau_courant); |
void ecriture_profil(struct_processus *s_etat_processus); |
void ecriture_profil(struct_processus *s_etat_processus); |
|
void effacement_pile_systeme(struct_processus *s_etat_processus); |
void empilement_pile_systeme(struct_processus *s_etat_processus); |
void empilement_pile_systeme(struct_processus *s_etat_processus); |
void encart(struct_processus *s_etat_processus, unsigned long duree); |
void encart(struct_processus *s_etat_processus, unsigned long duree); |
void evaluation_romberg(struct_processus *s_etat_processus, |
void evaluation_romberg(struct_processus *s_etat_processus, |
Line 2418 void interruption7(int signal, siginfo_t
|
Line 2583 void interruption7(int signal, siginfo_t
|
void interruption8(int signal, siginfo_t *siginfo, void *context); |
void interruption8(int signal, siginfo_t *siginfo, void *context); |
void interruption9(int signal, siginfo_t *siginfo, void *context); |
void interruption9(int signal, siginfo_t *siginfo, void *context); |
void interruption10(int signal, siginfo_t *siginfo, void *context); |
void interruption10(int signal, siginfo_t *siginfo, void *context); |
|
void interruption11(int signal, siginfo_t *siginfo, void *context); |
void inversion_matrice(struct_processus *s_etat_processus, |
void inversion_matrice(struct_processus *s_etat_processus, |
struct_matrice *s_matrice); |
struct_matrice *s_matrice); |
void lancement_daemon(struct_processus *s_etat_processus); |
void lancement_daemon(struct_processus *s_etat_processus); |
Line 2448 void retrait_thread(struct_processus *s_
|
Line 2614 void retrait_thread(struct_processus *s_
|
void retrait_thread_surveillance(struct_processus *s_etat_processus, |
void retrait_thread_surveillance(struct_processus *s_etat_processus, |
struct_descripteur_thread *s_argument_thread); |
struct_descripteur_thread *s_argument_thread); |
void rplcore(struct_processus *s_etat_processus); |
void rplcore(struct_processus *s_etat_processus); |
inline void scrutation_injection(struct_processus *s_etat_processus); |
void scrutation_injection(struct_processus *s_etat_processus); |
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); |
Line 2493 complex16 sommation_vecteur_complexe(com
|
Line 2659 complex16 sommation_vecteur_complexe(com
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
int rplinit(int argc, char *argv[], unsigned char ***resultats); |
int rplinit(int argc, char *argv[], unsigned char ***resultats, char *rpl_home); |
#endif |
#endif |
|
|
/* |
/* |
Line 2596 logical1 analyse_syntaxique(struct_proce
|
Line 2762 logical1 analyse_syntaxique(struct_proce
|
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); |
|
logical1 controle(struct_processus *s_etat_processus, unsigned char *fichier, |
|
unsigned char *type, unsigned char *somme_candidate); |
logical1 creation_variable(struct_processus *s_etat_processus, |
logical1 creation_variable(struct_processus *s_etat_processus, |
struct_variable *s_variable, |
struct_variable *s_variable, |
unsigned char autorisation_creation_variable_statique, |
unsigned char autorisation_creation_variable_statique, |
Line 2615 logical1 empilement_pile_last(struct_pro
|
Line 2783 logical1 empilement_pile_last(struct_pro
|
unsigned long nombre_arguments); |
unsigned long nombre_arguments); |
logical1 evaluation(struct_processus *s_etat_processus, struct_objet *s_objet, |
logical1 evaluation(struct_processus *s_etat_processus, struct_objet *s_objet, |
unsigned char type_evaluation); |
unsigned char type_evaluation); |
|
logical1 initialisation_fichier_acces_direct(struct_processus *s_etat_processus, |
|
sqlite3 *sqlite, logical1 binaire); |
|
logical1 initialisation_fichier_acces_indexe(struct_processus *s_etat_processus, |
|
sqlite3 *sqlite, integer8 position_clef, logical1 binaire); |
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); |
Line 2662 logical1 test_fonction(unsigned char *ch
|
Line 2834 logical1 test_fonction(unsigned char *ch
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
inline ssize_t read_atomic(struct_processus *s_etat_processus, |
ssize_t read_atomic(struct_processus *s_etat_processus, |
int fd, void *buf, size_t count); |
int fd, void *buf, size_t count); |
inline ssize_t write_atomic(struct_processus *s_etat_processus, |
ssize_t write_atomic(struct_processus *s_etat_processus, |
int fd, void *buf, size_t count); |
int fd, void *buf, size_t count); |
#endif |
#endif |
|
|
Line 2675 inline ssize_t write_atomic(struct_proce
|
Line 2847 inline ssize_t write_atomic(struct_proce
|
*/ |
*/ |
|
|
int alsprintf(unsigned char **strp, const char *fmt, ...); |
int alsprintf(unsigned char **strp, const char *fmt, ...); |
|
int tex_fprintf(struct_processus *s_etat_processus, |
|
file *flux, const char *format, ...); |
int transliterated_fprintf(struct_processus *s_etat_processus, file *flux, |
int transliterated_fprintf(struct_processus *s_etat_processus, file *flux, |
const char *format, ...); |
const char *format, ...); |
int valsprintf(unsigned char **strp, const char *fmt, va_list ap); |
int valsprintf(unsigned char **strp, const char *fmt, va_list ap); |
Line 2735 struct_processus *copie_etat_processus(s
|
Line 2909 struct_processus *copie_etat_processus(s
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
Fonctions renvoyant un pointeur sur un fichier (file *) |
Fonctions renvoyant un pointeur sur un fichier (file *) ou un descripteur |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
file *creation_fichier_tex(struct_processus *s_etat_processus); |
file *creation_fichier_tex(struct_processus *s_etat_processus); |
file *descripteur_fichier(struct_processus *s_etat_processus, |
struct_descripteur_fichier *descripteur_fichier(struct_processus |
struct_fichier *s_fichier); |
*s_etat_processus, struct_fichier *s_fichier); |
#endif |
#endif |
|
|
/* |
/* |
Line 3052 void zgelsy_(integer4 *m, integer4 *n, i
|
Line 3226 void zgelsy_(integer4 *m, integer4 *n, i
|
* drapeau depuis une bibliothèque). |
* drapeau depuis une bibliothèque). |
*/ |
*/ |
|
|
inline int test_arret(struct_processus *s_etat_processus); |
int test_arret(struct_processus *s_etat_processus); |
|
|
#endif |
#endif |
|
|