version 1.115, 2011/09/03 10:31:51
|
version 1.159, 2012/03/31 12:15:22
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.3 |
RPL/2 (R) version 4.1.7 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 25
|
Line 25
|
|
|
#ifndef __RPLCAS |
#ifndef __RPLCAS |
# define _GNU_SOURCE |
# define _GNU_SOURCE |
# define _POSIX_C_SOURCE 200112L |
# define _XOPEN_SOURCE 700 |
#endif |
#endif |
|
|
#define _REENTRANT |
#define _REENTRANT |
Line 43
|
Line 43
|
#ifdef OS2 |
#ifdef OS2 |
# ifndef __RPLCAS |
# ifndef __RPLCAS |
# define _BSD_SOURCE |
# define _BSD_SOURCE |
# define _XOPEN_SOURCE 600 |
|
# endif |
# endif |
|
|
# include <types.h> |
# include <types.h> |
Line 72
|
Line 71
|
#include <syslog.h> |
#include <syslog.h> |
#include <errno.h> |
#include <errno.h> |
#include <stdarg.h> |
#include <stdarg.h> |
|
#include <poll.h> |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
# include <sys/mman.h> |
# include <sys/mman.h> |
Line 92
|
Line 92
|
# include <dlfcn.h> |
# include <dlfcn.h> |
# include <fcntl.h> |
# include <fcntl.h> |
# include <pthread.h> |
# include <pthread.h> |
|
# include <regex.h> |
|
|
# ifdef OS2 |
# ifdef OS2 |
# undef pthread_mutexattr_settype |
# undef pthread_mutexattr_settype |
Line 99
|
Line 100
|
# endif |
# endif |
|
|
# include <pwd.h> |
# include <pwd.h> |
|
# ifdef SHARED_MEMORY |
# ifdef _BROKEN_SIGINFO |
|
# include <sys/ipc.h> |
|
# include <sys/shm.h> |
# include <sys/shm.h> |
# endif |
# endif |
|
|
Line 126
|
Line 125
|
ULONG *nopened; |
ULONG *nopened; |
ULONG allocated; |
ULONG allocated; |
} sem_t; |
} sem_t; |
# else |
# else // IPCS_SYSV |
typedef struct |
typedef struct |
{ |
{ |
int sem; |
int sem; |
|
int alloue; |
unsigned char *path; |
unsigned char *path; |
pid_t pid; |
pid_t pid; |
|
pthread_t tid; |
} sem_t; |
} sem_t; |
# endif |
# endif |
|
|
# define SEM_FAILED NULL |
# ifndef SEM_FAILED |
|
# define SEM_FAILED NULL |
|
# endif |
|
|
sem_t *sem_open_SysV(const char *nom, int oflag, ...); |
sem_t *sem_open_SysV(const char *nom, int oflag, ...); |
int sem_init_SysV(sem_t *sem, int shared, unsigned int value); |
int sem_init_SysV(sem_t *sem, int shared, unsigned int value); |
Line 162
|
Line 165
|
|
|
# include "openssl/evp.h" |
# include "openssl/evp.h" |
# include "sqlite3.h" |
# include "sqlite3.h" |
|
# include "sigsegv.h" |
|
# ifdef OS2 |
|
// Bug de libsigsegv |
|
# undef HAVE_STACK_OVERFLOW_RECOVERY |
|
# endif |
|
|
# define HAVE_INLINE |
# define HAVE_INLINE |
# define GSL_RANGE_CHECK_OFF |
# define GSL_RANGE_CHECK_OFF |
Line 213
|
Line 221
|
================================================================================ |
================================================================================ |
*/ |
*/ |
|
|
#ifdef _BROKEN_SIGINFO |
enum signaux_rpl |
# define SIGHANDLER_ARGS int signal |
{ |
# ifdef SA_SIGINFO |
rpl_signull = 0, |
# undef SA_SIGINFO |
rpl_sigint, |
# endif |
rpl_sigterm, |
# define SA_SIGINFO 0 |
rpl_sigstart, // Signal envoyé par un père pour lancer son fils. |
|
rpl_sigcont, // Signal de redémarrage d'un processus arrêté par |
|
// SUSPEND |
|
rpl_sigstop, // Signal d'arrêt envoyé par l'instruction STOP ou |
|
// FUSE. (FSTOP) |
|
rpl_sigabort, // Signal envoyé par l'instruction ABORT (à regrouper |
|
// avec FABORT) |
|
rpl_sigurg, // Signal d'arrêt urgent |
|
rpl_siginject, // Signal indiquant la présence d'une donnée à lire |
|
// envoyée depuis le père |
|
rpl_sigalrm, // Signal d'alarme (erreur système) depuis un fils |
|
rpl_sighup, |
|
rpl_sigtstp, |
|
rpl_sigexcept, |
|
rpl_sigmax |
|
}; |
|
|
# ifndef __BROKEN_SIGINFO_ROUTINES__ |
#define LONGUEUR_QUEUE_SIGNAUX 1024 |
|
|
// pthread_kill() est une macro sous OS/2. |
// Une structure s_queue_signaux est créée par processus (et non par thread). |
# ifdef pthread_kill |
// Elle est projetée dans un segment de mémoire partagée pour qu'elle soit |
# undef pthread_kill |
// accessible à la fois du père et des fils. |
# endif |
|
|
|
# define kill(a, b) kill_broken_siginfo(a, b) |
#ifndef RPLARGS |
# define pthread_kill(a, b) pthread_kill_broken_siginfo(a, b) |
typedef struct queue_signaux |
|
{ |
|
# ifndef IPCS_SYSV |
|
# ifndef SEMAPHORES_NOMMES |
|
sem_t semaphore; |
|
# endif |
|
# else |
|
sem_t semaphore; |
# endif |
# endif |
|
|
int kill_broken_siginfo(pid_t pid, int signal); |
volatile int pointeur_lecture; |
int pthread_kill_broken_siginfo(pthread_t tid, int signal); |
volatile int pointeur_ecriture; |
pid_t origine_signal(int signal); |
|
int queue_in(pid_t pid, int signal); |
volatile struct |
#else |
{ |
# define SIGHANDLER_ARGS int signal, siginfo_t *siginfo, void *context |
pid_t pid; |
#endif |
enum signaux_rpl signal; |
|
} queue[LONGUEUR_QUEUE_SIGNAUX]; |
|
} struct_queue_signaux; |
|
|
#ifdef OpenBSD |
# ifndef MAIN_RPL |
# ifdef PTHREAD_SCOPE_SYSTEM |
extern struct_queue_signaux *s_queue_signaux; |
# undef PTHREAD_SCOPE_SYSTEM |
extern int f_queue_signaux; |
|
# ifdef SEMAPHORES_NOMMES |
|
extern sem_t *semaphore_queue_signaux; |
|
# endif |
|
# else |
|
struct_queue_signaux *s_queue_signaux; |
|
int f_queue_signaux; |
|
# ifdef SEMAPHORES_NOMMES |
|
sem_t *semaphore_queue_signaux; |
|
# endif |
# endif |
# endif |
# define PTHREAD_SCOPE_SYSTEM 0 |
|
#endif |
#endif |
|
|
#ifdef OS2 |
#ifdef OS2 |
Line 261 union semun
|
Line 300 union semun
|
}; |
}; |
#endif |
#endif |
|
|
|
#ifndef RTLD_LOCAL |
|
# define RTLD_LOCAL 0 |
|
#endif |
|
|
|
#ifndef SIGSTKSZ |
|
# define SIGSTKSZ 65536 |
|
#endif |
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Line 293 union semun
|
Line 339 union semun
|
// SIGINT |
// SIGINT |
// SIGTSTP |
// SIGTSTP |
// SIGCONT |
// SIGCONT |
// SIGURG |
|
// SIGPIPE |
// SIGPIPE |
|
// SIGUSR1 et SIGUSR2 sont utilisé par libsigsegv. |
|
// SIGHUP |
// SIGALRM |
// SIGALRM |
|
|
// Arrêt par STOP |
# define SIGTEST SIGUSR1 |
# define SIGFSTOP SIGUSR1 |
|
// Démarrage d'un processus fils |
|
# define SIGSTART SIGUSR2 |
|
// Injection de données |
|
# define SIGINJECT SIGQUIT |
|
// Arrêt général |
|
# ifndef OpenBSD |
|
// La libpthread d'OpenBSD utilise SIGPROF |
|
# define SIGABORT SIGPROF |
|
# else |
|
# define SIGABORT SIGTHR |
|
# endif |
|
// Arrêt d'un processus fils depuis autre chose que STOP |
|
# if defined(Darwin) || defined(OpenBSD) |
|
# define SIGFABORT SIGINFO |
|
# else |
|
# define SIGFABORT SIGPOLL |
|
# endif |
|
|
|
// Nombre d'interruptions disponibles |
// Nombre d'interruptions disponibles |
# define d_NOMBRE_INTERRUPTIONS 64 |
# define d_NOMBRE_INTERRUPTIONS 64 |
Line 383 typedef unsigned char t_8_bits;
|
Line 412 typedef unsigned char t_8_bits;
|
# endif |
# endif |
|
|
# ifndef MAIN_RPL |
# ifndef MAIN_RPL |
# ifdef _BROKEN_SIGINFO |
extern jmp_buf contexte_ecriture; |
extern int *fifos_signaux; |
extern jmp_buf contexte_impression; |
# endif |
|
|
|
extern jmp_buf contexte; |
|
extern jmp_buf contexte_initial; |
extern jmp_buf contexte_initial; |
extern jmp_buf contexte_processus; |
extern jmp_buf contexte_processus; |
extern jmp_buf contexte_thread; |
extern jmp_buf contexte_thread; |
|
|
# ifdef SEMAPHORES_NOMMES |
extern int signal_test; |
extern pthread_mutex_t mutex_sem; |
|
# endif |
|
|
|
extern pthread_key_t semaphore_fork_processus_courant; |
extern pid_t pid_processus_pere; |
|
|
extern sem_t |
|
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
* |
extern pthread_mutex_t mutex_sem; |
# endif |
# endif |
semaphore_liste_threads; |
|
|
|
extern sem_t |
extern pthread_mutex_t mutex_liste_threads; |
# ifdef SEMAPHORES_NOMMES |
extern pthread_mutex_t mutex_gestionnaires_signaux_atomique; |
* |
|
# endif |
|
semaphore_gestionnaires_signaux; |
|
|
|
extern sem_t |
extern sem_t |
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
* |
* |
# endif |
# endif |
semaphore_gestionnaires_signaux_atomique; |
semaphore_gestionnaires_signaux; |
|
|
# ifdef SEMAPHORES_NOMMES |
extern volatile int routine_recursive; |
// 0 -> liste_threads |
|
// 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 |
# ifdef _BROKEN_SIGINFO |
jmp_buf contexte_ecriture; |
int *fifos_signaux; |
jmp_buf contexte_impression; |
# endif |
|
|
|
jmp_buf contexte; |
|
jmp_buf contexte_initial; |
jmp_buf contexte_initial; |
jmp_buf contexte_processus; |
jmp_buf contexte_processus; |
jmp_buf contexte_thread; |
jmp_buf contexte_thread; |
|
|
# ifdef SEMAPHORES_NOMMES |
int signal_test; |
pthread_mutex_t mutex_sem = PTHREAD_MUTEX_INITIALIZER; |
|
# endif |
|
|
|
pthread_key_t semaphore_fork_processus_courant; |
pid_t pid_processus_pere; |
|
|
sem_t |
|
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
* |
pthread_mutex_t mutex_sem = PTHREAD_MUTEX_INITIALIZER; |
# endif |
# endif |
semaphore_liste_threads; |
|
|
|
|
pthread_mutex_t mutex_liste_threads = |
|
PTHREAD_MUTEX_INITIALIZER; |
|
pthread_mutex_t mutex_gestionnaires_signaux = |
|
PTHREAD_MUTEX_INITIALIZER; |
|
pthread_mutex_t mutex_gestionnaires_signaux_atomique = |
|
PTHREAD_MUTEX_INITIALIZER; |
sem_t |
sem_t |
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
* |
* |
# endif |
# endif |
semaphore_gestionnaires_signaux; |
semaphore_gestionnaires_signaux; |
|
|
sem_t |
volatile int routine_recursive; |
# ifdef SEMAPHORES_NOMMES |
|
* |
|
# 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 |
#ifdef SEMAPHORES_NOMMES |
enum t_semaphore { sem_liste_threads = 0, |
#define SEM_FORK 0 |
sem_gestionnaires_signaux = 1, |
#define SEM_QUEUE 1 |
sem_gestionnaires_signaux_atomique = 2, |
#define SEM_SIGNAUX 2 |
sem_fork = 3 }; |
sem_t *sem_init2(unsigned int valeur, pid_t pid, int ordre); |
|
sem_t *sem_init3(unsigned int valeur, pid_t pid, pthread_t tid, int ordre); |
sem_t *sem_init2(unsigned int valeur, enum t_semaphore semaphore); |
int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); |
int sem_destroy2(sem_t *semaphore_p, enum t_semaphore semaphore); |
int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); |
int sem_getvalue2(sem_t *semaphore, int *valeur); |
int sem_getvalue2(sem_t *semaphore, int *valeur); |
|
sem_t *sem_open2(pid_t pid, int ordre); |
|
|
|
// Le mutex est là uniquement pour pouvoir émuler le comportement |
|
// de sem_getvalue() sur un système comme MacOS X qui ne possède pas |
|
// cette fonction. |
|
|
#define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value) |
#define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value) |
#define sem_post(semaphore) \ |
#define sem_post(semaphore) \ |
Line 505 int sem_getvalue2(sem_t *semaphore, int
|
Line 512 int sem_getvalue2(sem_t *semaphore, int
|
#define ufprintf(flux, ...) transliterated_fprintf(NULL, \ |
#define ufprintf(flux, ...) transliterated_fprintf(NULL, \ |
flux, __VA_ARGS__) |
flux, __VA_ARGS__) |
|
|
// Tous les messages pour DISP, INPUT et les E/S par readline sont sur stderr. |
|
// Cela évite aux messages envoyés par les gestionnaires de signaux d'être |
|
// indéfiniment bloqués. |
|
|
|
#ifdef SunOS |
#ifdef SunOS |
# define fopen(...) ({ FILE *desc; \ |
# define fopen(...) ({ FILE *desc; \ |
while((desc = fopen(__VA_ARGS__)) == NULL) \ |
while((desc = fopen(__VA_ARGS__)) == NULL) \ |
Line 797 pid_t debug_fork();
|
Line 800 pid_t debug_fork();
|
# define d_es_contexte __erreur(2013) |
# define d_es_contexte __erreur(2013) |
# define d_es_somme_controle __erreur(2014) |
# define d_es_somme_controle __erreur(2014) |
# define d_es_semaphore __erreur(2015) |
# define d_es_semaphore __erreur(2015) |
|
# define d_es_mutex_acquis_autre_thread __erreur(2016) |
#endif |
#endif |
|
|
/* |
/* |
Line 935 pid_t debug_fork();
|
Line 939 pid_t debug_fork();
|
# define d_ex_version_bibliotheque __erreur(82) |
# define d_ex_version_bibliotheque __erreur(82) |
# define d_ex_creation_variable_globale __erreur(83) |
# define d_ex_creation_variable_globale __erreur(83) |
# define d_ex_erreur_interne_rplcas __erreur(84) |
# define d_ex_erreur_interne_rplcas __erreur(84) |
|
# define d_ex_fichier_corrompu __erreur(85) |
|
# define d_ex_mutex_acquis_autre_thread __erreur(86) |
|
# define d_ex_expression_reguliere __erreur(87) |
#endif |
#endif |
|
|
|
|
Line 1122 typedef struct fichier
|
Line 1129 typedef struct fichier
|
typedef struct rpl_mutex |
typedef struct rpl_mutex |
{ |
{ |
pthread_mutex_t mutex; |
pthread_mutex_t mutex; |
|
pthread_t tid; |
} struct_mutex; |
} struct_mutex; |
#endif |
#endif |
|
|
Line 1195 typedef struct descripteur_fichier
|
Line 1203 typedef struct descripteur_fichier
|
pid_t pid; |
pid_t pid; |
pthread_t tid; |
pthread_t tid; |
|
|
file *descripteur_c; |
union |
sqlite3 *descripteur_sqlite; |
{ |
|
file *descripteur_c; |
|
sqlite3 *descripteur_sqlite; |
|
}; |
} struct_descripteur_fichier; |
} struct_descripteur_fichier; |
#endif |
#endif |
|
|
Line 1392 typedef struct descripteur_thread
|
Line 1403 typedef struct descripteur_thread
|
logical1 processus_detache; |
logical1 processus_detache; |
logical1 destruction_objet; |
logical1 destruction_objet; |
|
|
sigset_t oldset; |
|
sigset_t set; |
|
|
|
volatile signed long nombre_references; |
volatile signed long nombre_references; |
} struct_descripteur_thread; |
} struct_descripteur_thread; |
|
|
Line 1835 typedef struct processus
|
Line 1843 typedef struct processus
|
pthread_t thread_fusible; |
pthread_t thread_fusible; |
pthread_t thread_surveille_par_fusible; |
pthread_t thread_surveille_par_fusible; |
|
|
# if !defined(Cygwin) |
volatile int pointeur_signal_ecriture; |
# if !(OpenBSD) |
volatile int pointeur_signal_lecture; |
stack_t pile_signal; |
volatile enum signaux_rpl signaux_en_queue[LONGUEUR_QUEUE_SIGNAUX]; |
# else |
volatile logical1 demarrage_fils; |
# ifdef SA_ONSTACK |
volatile logical1 redemarrage_processus; |
# undef SA_ONSTACK |
|
# endif |
|
# define SA_ONSTACK 0 |
|
# endif |
|
# else |
|
# define SA_ONSTACK 0 |
|
# define RTLD_LOCAL 0 |
|
# endif |
|
|
|
/* Contextes */ |
/* Contextes */ |
|
|
Line 2063 typedef struct processus
|
Line 2063 typedef struct processus
|
|
|
/* Traitement des erreurs */ |
/* Traitement des erreurs */ |
|
|
unsigned int compteur_violation_d_acces; |
|
unsigned int erreur_compilation; |
unsigned int erreur_compilation; |
unsigned int erreur_execution; |
unsigned int erreur_execution; |
unsigned int erreur_systeme; |
unsigned int erreur_systeme; |
Line 2175 typedef struct processus
|
Line 2174 typedef struct processus
|
|
|
pid_t pid_processus_pere; |
pid_t pid_processus_pere; |
pthread_t tid_processus_pere; |
pthread_t tid_processus_pere; |
|
pthread_t tid; |
|
|
logical1 processus_detache; |
logical1 processus_detache; |
|
|
Line 2190 typedef struct processus
|
Line 2190 typedef struct processus
|
pthread_mutex_t mutex; |
pthread_mutex_t mutex; |
pthread_mutex_t mutex_allocation; |
pthread_mutex_t mutex_allocation; |
|
|
// Sémaphore autorisant les fork() |
// Mutex autorisant les fork() |
sem_t |
sem_t |
# ifdef SEMAPHORES_NOMMES |
# ifdef SEMAPHORES_NOMMES |
* |
* |
# endif |
# endif |
semaphore_fork; |
semaphore_fork; |
|
|
/* Mutexes */ |
/* Mutexes */ |
|
|
struct_liste_chainee *liste_mutexes; |
struct_liste_chainee *liste_mutexes; |
pthread_mutex_t protection_liste_mutexes; |
pthread_mutex_t protection_liste_mutexes; |
|
|
|
/* Drapeau nécessaire à RESTART */ |
|
|
|
volatile logical1 requete_redemarrage; |
|
|
/* Gestion optimisée de la mémoire */ |
/* Gestion optimisée de la mémoire */ |
|
|
double estimation_taille_pile_tampon; |
double estimation_taille_pile_tampon; |
Line 2589 void instruction_pmax(struct_processus *
|
Line 2593 void instruction_pmax(struct_processus *
|
void instruction_pmin(struct_processus *s_etat_processus); |
void instruction_pmin(struct_processus *s_etat_processus); |
void instruction_poke(struct_processus *s_etat_processus); |
void instruction_poke(struct_processus *s_etat_processus); |
void instruction_polar(struct_processus *s_etat_processus); |
void instruction_polar(struct_processus *s_etat_processus); |
|
void instruction_poll(struct_processus *s_etat_processus); |
void instruction_pos(struct_processus *s_etat_processus); |
void instruction_pos(struct_processus *s_etat_processus); |
void instruction_pourcent(struct_processus *s_etat_processus); |
void instruction_pourcent(struct_processus *s_etat_processus); |
void instruction_pourcent_ch(struct_processus *s_etat_processus); |
void instruction_pourcent_ch(struct_processus *s_etat_processus); |
Line 2645 void instruction_read(struct_processus *
|
Line 2650 void instruction_read(struct_processus *
|
void instruction_recode(struct_processus *s_etat_processus); |
void instruction_recode(struct_processus *s_etat_processus); |
void instruction_recv(struct_processus *s_etat_processus); |
void instruction_recv(struct_processus *s_etat_processus); |
void instruction_redraw(struct_processus *s_etat_processus); |
void instruction_redraw(struct_processus *s_etat_processus); |
|
void instruction_regex(struct_processus *s_etat_processus); |
void instruction_relax(struct_processus *s_etat_processus); |
void instruction_relax(struct_processus *s_etat_processus); |
void instruction_remove(struct_processus *s_etat_processus); |
void instruction_remove(struct_processus *s_etat_processus); |
void instruction_res(struct_processus *s_etat_processus); |
void instruction_res(struct_processus *s_etat_processus); |
|
void instruction_restart(struct_processus *s_etat_processus); |
void instruction_recall(struct_processus *s_etat_processus); |
void instruction_recall(struct_processus *s_etat_processus); |
void instruction_regv(struct_processus *s_etat_processus); |
void instruction_regv(struct_processus *s_etat_processus); |
void instruction_repeat(struct_processus *s_etat_processus); |
void instruction_repeat(struct_processus *s_etat_processus); |
Line 2840 void appel_gnuplot(struct_processus *s_e
|
Line 2847 void appel_gnuplot(struct_processus *s_e
|
void cf(struct_processus *s_etat_processus, unsigned char indice_drapeau); |
void cf(struct_processus *s_etat_processus, unsigned char indice_drapeau); |
void cond(struct_processus *s_etat_processus, |
void cond(struct_processus *s_etat_processus, |
struct_matrice *s_matrice, real8 *condition); |
struct_matrice *s_matrice, real8 *condition); |
|
void conversion_chaine(struct_processus *s_etat_processus, |
|
unsigned char *chaine, unsigned char type); |
void conversion_decimal_vers_hms(real8 *angle); |
void conversion_decimal_vers_hms(real8 *angle); |
void conversion_degres_vers_radians(real8 *angle); |
void conversion_degres_vers_radians(real8 *angle); |
void conversion_element_tex(unsigned char **element, unsigned char *fonction); |
void conversion_element_tex(unsigned char **element, unsigned char *fonction); |
Line 2910 void integrale_romberg(struct_processus
|
Line 2919 void integrale_romberg(struct_processus
|
real8 a, real8 b, real8 precision); |
real8 a, real8 b, real8 precision); |
void interface_cas(struct_processus *s_etat_processus, |
void interface_cas(struct_processus *s_etat_processus, |
enum t_rplcas_commandes commande); |
enum t_rplcas_commandes commande); |
void interruption1(SIGHANDLER_ARGS); |
void interruption1(int signal); |
void interruption2(SIGHANDLER_ARGS); |
void interruption2(int signal); |
void interruption3(SIGHANDLER_ARGS); |
void interruption3(int signal); |
void interruption4(SIGHANDLER_ARGS); |
void interruption4(int signal); |
void interruption5(SIGHANDLER_ARGS); |
void interruption5(int signal); |
void interruption6(SIGHANDLER_ARGS); |
void interruption6(int signal); |
void interruption7(SIGHANDLER_ARGS); |
void interruption_depassement_pile(int urgence, stackoverflow_context_t scp); |
void interruption8(SIGHANDLER_ARGS); |
|
void interruption9(SIGHANDLER_ARGS); |
|
void interruption10(SIGHANDLER_ARGS); |
|
void interruption11(SIGHANDLER_ARGS); |
|
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 2954 void retrait_thread(struct_processus *s_
|
Line 2959 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); |
|
#endif |
|
|
void scrutation_injection(struct_processus *s_etat_processus); |
void scrutation_injection(struct_processus *s_etat_processus); |
|
|
|
#ifndef RPLARGS |
|
void scrutation_interruptions(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 2982 void valeurs_singulieres(struct_processu
|
Line 2992 void valeurs_singulieres(struct_processu
|
void verrouillage_threads_concurrents(struct_processus *s_etat_processus); |
void verrouillage_threads_concurrents(struct_processus *s_etat_processus); |
#endif |
#endif |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Fonctions de gestion des signaux |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
#ifdef _BROKEN_SIGINFO |
void creation_queue_signaux(struct_processus *s_etat_processus); |
void creation_fifos_signaux(struct_processus *s_etat_processus); |
void liberation_queue_signaux(struct_processus *s_etat_processus); |
void destruction_fifos_signaux(struct_processus *s_etat_processus); |
void destruction_queue_signaux(struct_processus *s_etat_processus); |
void liberation_fifos_signaux(struct_processus *s_etat_processus); |
int envoi_signal_contexte(struct_processus *s_etat_processus, |
#endif |
enum signaux_rpl signal); |
|
int envoi_signal_processus(pid_t pid, enum signaux_rpl signal); |
|
int envoi_signal_thread(pthread_t tid, enum signaux_rpl signal); |
#endif |
#endif |
|
|
/* |
/* |
Line 3008 complex16 sommation_vecteur_complexe(com
|
Line 3026 complex16 sommation_vecteur_complexe(com
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
int rplinit(int argc, char *argv[], unsigned char ***resultats, char *rpl_home); |
int rplinit(int argc, char *argv[], char *envp[], |
|
unsigned char ***resultats, char *rpl_home); |
#endif |
#endif |
|
|
/* |
/* |
Line 3072 unsigned char *compactage(unsigned char
|
Line 3091 unsigned char *compactage(unsigned char
|
unsigned char *conversion_majuscule(unsigned char *chaine); |
unsigned char *conversion_majuscule(unsigned char *chaine); |
unsigned char *creation_nom_fichier(struct_processus *s_etat_processus, |
unsigned char *creation_nom_fichier(struct_processus *s_etat_processus, |
unsigned char *chemin); |
unsigned char *chemin); |
|
unsigned char *date_compilation(); |
unsigned char *extraction_chaine(unsigned char *chaine, unsigned long i, |
unsigned char *extraction_chaine(unsigned char *chaine, unsigned long i, |
unsigned long j); |
unsigned long j); |
unsigned char *formateur(struct_processus *s_etat_processus, long offset, |
unsigned char *formateur(struct_processus *s_etat_processus, long offset, |
Line 3085 unsigned char *formateur_flux(struct_pro
|
Line 3105 unsigned char *formateur_flux(struct_pro
|
unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus, |
unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus, |
void *valeur_numerique, unsigned char type, |
void *valeur_numerique, unsigned char type, |
long longueur, long longueur_champ, unsigned char format); |
long longueur, long longueur_champ, unsigned char format); |
|
unsigned char *formateur_fichier_binaire_nombre(struct_processus |
|
*s_etat_processus, void *valeur_numerique, unsigned char type, |
|
long longueur, long *longueur_conversion); |
unsigned char *formateur_fichier_reel(struct_processus *s_etat_processus, |
unsigned char *formateur_fichier_reel(struct_processus *s_etat_processus, |
void *valeur_numerique, unsigned char type, |
void *valeur_numerique, unsigned char type, |
long longueur, long longueur_champ, unsigned char format); |
long longueur, long longueur_champ, unsigned char format); |
Line 3093 unsigned char *formateur_nombre(struct_p
|
Line 3116 unsigned char *formateur_nombre(struct_p
|
unsigned char *formateur_reel(struct_processus *s_etat_processus, |
unsigned char *formateur_reel(struct_processus *s_etat_processus, |
void *valeur_numerique, unsigned char type); |
void *valeur_numerique, unsigned char type); |
unsigned char *messages(struct_processus *s_etat_processus); |
unsigned char *messages(struct_processus *s_etat_processus); |
|
unsigned char *pointeur_ieme_caractere(struct_processus *s_etat_processus, |
|
unsigned char *chaine, integer8 position); |
unsigned char *purification_chaine(unsigned char *chaine); |
unsigned char *purification_chaine(unsigned char *chaine); |
unsigned char *reencodage(struct_processus *s_etat_processus, |
unsigned char *reencodage(struct_processus *s_etat_processus, |
unsigned char *chaine_entree, unsigned char *codage_entree, |
unsigned char *chaine_entree, unsigned char *codage_entree, |
Line 3115 logical1 caracteristiques_fichier(struct
|
Line 3140 logical1 caracteristiques_fichier(struct
|
unsigned long *unite); |
unsigned long *unite); |
logical1 controle(struct_processus *s_etat_processus, unsigned char *fichier, |
logical1 controle(struct_processus *s_etat_processus, unsigned char *fichier, |
unsigned char *type, unsigned char *somme_candidate); |
unsigned char *type, unsigned char *somme_candidate); |
|
logical1 controle_integrite(struct_processus *s_etat_processus, |
|
unsigned char *executable_candidat, unsigned char *executable); |
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 3178 logical1 test_cfsf(struct_processus *s_e
|
Line 3205 logical1 test_cfsf(struct_processus *s_e
|
unsigned char indice_drapeau); |
unsigned char indice_drapeau); |
logical1 test_expression_rpn(unsigned char *chaine); |
logical1 test_expression_rpn(unsigned char *chaine); |
logical1 test_fonction(unsigned char *chaine); |
logical1 test_fonction(unsigned char *chaine); |
|
logical1 validation_chaine(unsigned char *chaine); |
#endif |
#endif |
|
|
/* |
/* |
Line 3200 ssize_t write_atomic(struct_processus *s
|
Line 3228 ssize_t write_atomic(struct_processus *s
|
*/ |
*/ |
|
|
int alsprintf(unsigned char **strp, const char *fmt, ...); |
int alsprintf(unsigned char **strp, const char *fmt, ...); |
|
int interruption_violation_access(void *adresse_fautive, int gravite); |
|
#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, int position, |
struct_arbre_variables *l_element_courant); |
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); |
struct_arbre_variables *l_element_courant); |
|
int readline_analyse_syntaxique(int count, int key); |
|
int readline_effacement(int count, int key); |
|
#endif |
int tex_fprintf(struct_processus *s_etat_processus, |
int tex_fprintf(struct_processus *s_etat_processus, |
file *flux, const char *format, ...); |
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, |
Line 3221 int wrapper_instruction_intrinseque(void
|
Line 3254 int wrapper_instruction_intrinseque(void
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
unsigned char longueur_entiers_binaires(struct_processus *s_etat_processus); |
unsigned char longueur_entiers_binaires(struct_processus *s_etat_processus); |
unsigned char recherche_longueur_optimale(integer8 parametre); |
|
#endif |
#endif |
|
|
/* |
/* |
Line 3242 logical8 masque_entiers_binaires(struct_
|
Line 3274 logical8 masque_entiers_binaires(struct_
|
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
integer8 occupation_memoire(struct_objet *s_objet); |
integer8 occupation_memoire(struct_objet *s_objet); |
|
integer8 longueur_chaine(struct_processus *s_etat_processus, |
|
unsigned char *chaine); |
|
integer8 position_caractere_de_chaine(struct_processus *s_etat_processus, |
|
unsigned char *chaine, unsigned char *position); |
#endif |
#endif |
|
|
/* |
/* |
Line 3286 struct_descripteur_fichier *descripteur_
|
Line 3322 struct_descripteur_fichier *descripteur_
|
struct_objet *copie_objet(struct_processus *s_etat_processus, |
struct_objet *copie_objet(struct_processus *s_etat_processus, |
struct_objet *s_objet, unsigned char type); |
struct_objet *s_objet, unsigned char type); |
|
|
#ifndef RPLARGS |
|
struct_objet *allocation(struct_processus *s_etat_processus, enum t_type type); |
struct_objet *allocation(struct_processus *s_etat_processus, enum t_type type); |
|
#ifndef RPLARGS |
struct_objet *formateur_date(struct_processus *s_etat_processus, |
struct_objet *formateur_date(struct_processus *s_etat_processus, |
struct timeval *temps); |
struct timeval *temps); |
struct_objet *lecture_pipe(struct_processus *s_etat_processus, int pipe); |
struct_objet *lecture_pipe(struct_processus *s_etat_processus, int pipe); |