version 1.132, 2011/09/21 09:09:22
|
version 1.158, 2012/03/01 10:14:08
|
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 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> |
# include <sys/shm.h> |
# ifdef SHARED_MEMORY |
|
# include <sys/shm.h> |
|
# endif |
|
|
# ifndef IPCS_SYSV |
# ifndef IPCS_SYSV |
# include <semaphore.h> |
# include <semaphore.h> |
Line 163
|
Line 166
|
# include "openssl/evp.h" |
# include "openssl/evp.h" |
# include "sqlite3.h" |
# include "sqlite3.h" |
# include "sigsegv.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 242 enum signaux_rpl
|
Line 249 enum signaux_rpl
|
// Elle est projetée dans un segment de mémoire partagée pour qu'elle soit |
// Elle est projetée dans un segment de mémoire partagée pour qu'elle soit |
// accessible à la fois du père et des fils. |
// accessible à la fois du père et des fils. |
|
|
|
#ifndef RPLARGS |
typedef struct queue_signaux |
typedef struct queue_signaux |
{ |
{ |
# ifndef IPCS_SYSV |
# ifndef IPCS_SYSV |
Line 262 typedef struct queue_signaux
|
Line 270 typedef struct queue_signaux
|
} queue[LONGUEUR_QUEUE_SIGNAUX]; |
} queue[LONGUEUR_QUEUE_SIGNAUX]; |
} struct_queue_signaux; |
} struct_queue_signaux; |
|
|
#ifndef RPLARGS |
|
# ifndef MAIN_RPL |
# ifndef MAIN_RPL |
extern struct_queue_signaux *s_queue_signaux; |
extern struct_queue_signaux *s_queue_signaux; |
extern int f_queue_signaux; |
extern int f_queue_signaux; |
Line 278 typedef struct queue_signaux
|
Line 285 typedef struct queue_signaux
|
# endif |
# endif |
#endif |
#endif |
|
|
#ifdef OpenBSD |
|
# ifdef PTHREAD_SCOPE_SYSTEM |
|
# undef PTHREAD_SCOPE_SYSTEM |
|
# endif |
|
# define PTHREAD_SCOPE_SYSTEM 0 |
|
#endif |
|
|
|
#ifdef OS2 |
#ifdef OS2 |
# define readline(s) readline_wrapper(s) |
# define readline(s) readline_wrapper(s) |
unsigned char *readline_wrapper(unsigned char *s); |
unsigned char *readline_wrapper(unsigned char *s); |
Line 339 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 |
|
|
# define SIGTEST SIGUSR1 |
# define SIGTEST SIGUSR1 |
Line 799 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 937 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 1124 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 2165 typedef struct processus
|
Line 2171 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 2192 typedef struct processus
|
Line 2199 typedef struct processus
|
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 2579 void instruction_pmax(struct_processus *
|
Line 2590 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 2635 void instruction_read(struct_processus *
|
Line 2647 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 2830 void appel_gnuplot(struct_processus *s_e
|
Line 2844 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 2905 void interruption2(int signal);
|
Line 2921 void interruption2(int signal);
|
void interruption3(int signal); |
void interruption3(int signal); |
void interruption4(int signal); |
void interruption4(int signal); |
void interruption5(int signal); |
void interruption5(int signal); |
|
void interruption6(int signal); |
void interruption_depassement_pile(int urgence, stackoverflow_context_t scp); |
void interruption_depassement_pile(int urgence, stackoverflow_context_t scp); |
void inversion_matrice(struct_processus *s_etat_processus, |
void inversion_matrice(struct_processus *s_etat_processus, |
struct_matrice *s_matrice); |
struct_matrice *s_matrice); |
Line 2939 void retrait_thread(struct_processus *s_
|
Line 2956 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 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); |
Line 3002 complex16 sommation_vecteur_complexe(com
|
Line 3023 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 3066 unsigned char *compactage(unsigned char
|
Line 3088 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 3079 unsigned char *formateur_flux(struct_pro
|
Line 3102 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 3087 unsigned char *formateur_nombre(struct_p
|
Line 3113 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 3109 logical1 caracteristiques_fichier(struct
|
Line 3137 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 3172 logical1 test_cfsf(struct_processus *s_e
|
Line 3202 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 3195 ssize_t write_atomic(struct_processus *s
|
Line 3226 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); |
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 3216 int wrapper_instruction_intrinseque(void
|
Line 3251 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 3237 logical8 masque_entiers_binaires(struct_
|
Line 3271 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 3281 struct_descripteur_fichier *descripteur_
|
Line 3319 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); |