--- rpl/src/rpl.h 2013/02/27 17:11:45 1.200 +++ rpl/src/rpl.h 2014/10/05 19:53:16 1.251 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.19 + Copyright (C) 1989-2014 Dr. BERTRAND Joël This file is part of RPL/2. @@ -56,6 +56,10 @@ # define sched_yield(arg) #endif +#ifdef CYGWIN +# define SA_ONSTACK 0 +#endif + /* ================================================================================ @@ -65,6 +69,7 @@ #include #include +#include #include #include #include @@ -72,6 +77,7 @@ #include #include #include +#include #ifndef RPLARGS # include @@ -153,7 +159,6 @@ # endif # include -# include # include # include # include @@ -163,6 +168,7 @@ # include "readline.h" # include "termcap.h" # include "iconv.h" +# include "zlib.h" # include "openssl/evp.h" # ifndef OPENSSL_NO_MD2 @@ -312,34 +318,32 @@ enum signaux_rpl #ifndef RPLARGS typedef struct queue_signaux { -# ifndef IPCS_SYSV -# ifndef SEMAPHORES_NOMMES - sem_t semaphore; - sem_t signalisation; -# endif -# else - sem_t semaphore; - sem_t signalisation; -# endif - volatile int pointeur_lecture; volatile int pointeur_ecriture; - pthread_t thread_signaux; volatile logical1 requete_arret; + pthread_t thread_signaux; + volatile struct { pid_t pid; enum signaux_rpl signal; } queue[LONGUEUR_QUEUE_SIGNAUX]; + +# ifdef OS2 + sem_t semaphore; + sem_t signalisation; + sem_t arret_signalisation; +# endif } struct_queue_signaux; -__EXTERN__ struct_queue_signaux *s_queue_signaux; -__EXTERN__ int f_queue_signaux; +__EXTERN__ struct_queue_signaux *s_queue_signaux; +__EXTERN__ int f_queue_signaux; -# ifdef SEMAPHORES_NOMMES - __EXTERN__ sem_t *semaphore_queue_signaux; - __EXTERN__ sem_t *semaphore_signalisation; +# ifndef OS2 + __EXTERN__ sem_t *semaphore_queue_signaux; + __EXTERN__ sem_t *semaphore_signalisation; + __EXTERN__ sem_t *semaphore_arret_signalisation; # endif #endif @@ -373,16 +377,59 @@ union semun */ #ifdef IPCS_SYSV +# ifdef DEBUG_SEMAPHORES +# define sem_wait(a) ({ int value; sem_getvalue(a, &value); \ + uprintf("[%d-%llu] Semaphore %s (%p) "\ + "waiting at %s() " \ + "line #%d\n", (int) getpid(), (unsigned long long) i\ + pthread_self(), \ + #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ + if (value > 1) BUG(1, uprintf("Value %d\n", value)); \ + sem_wait_SysV(a); }) +# define sem_post(a) ({ int value; sem_getvalue(a, &value); \ + uprintf("[%d-%llu] Semaphore %s (%p) "\ + "posting at %s() " \ + "line #%d\n", (int) getpid(), (unsigned long long) \ + pthread_self(), \ + #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ + if (value > 0) BUG(1, uprintf("Value %d\n", value)); \ + sem_post_SysV(a); }) +# define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \ + if (value == 0) BUG(1, uprintf("Value %d\n", value)); \ + sem_destroy_SysV(a); }) +# else +# define sem_destroy(a) sem_destroy_SysV(a) +# define sem_wait(a) sem_wait_SysV(a) +# define sem_post(a) sem_post_SysV(a) +# endif + # define sem_init(a, b, c) sem_init_SysV(a, b, c) -# define sem_destroy(a) sem_destroy_SysV(a) -# define sem_wait(a) sem_wait_SysV(a) # define sem_trywait(a) sem_trywait_SysV(a) # define sem_timedwait(a, b) sem_timedwait_SysV(a, b) -# define sem_post(a) sem_post_SysV(a) # define sem_getvalue(a, b) sem_getvalue_SysV(a, b) # define sem_open(...) sem_open_SysV(__VA_ARGS__) # define sem_close(a) sem_close_SysV(a) # define sem_unlink(a) sem_unlink_SysV(a) +#else +# ifdef DEBUG_SEMAPHORES +# define sem_wait(a) ({ int value; sem_getvalue(a, &value); \ + uprintf("[%d-%llu] Semaphore %s (%p) "\ + "waiting at %s() " \ + "line #%d\n", (int) getpid(), (unsigned long long) \ + pthread_self(), \ + #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ + if (value > 1) BUG(1, uprintf("Value %d\n", value)); sem_wait(a); }) +# define sem_post(a) ({ int value; sem_getvalue(a, &value); \ + uprintf("[%d-%llu] Semaphore %s (%p) "\ + "posting at %s() " \ + "line #%d\n", (int) getpid(), (unsigned long long) \ + pthread_self(), \ + #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ + if (value > 0) BUG(1, uprintf("Value %d\n", value)); sem_post(a); }) +# define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \ + if (value == 0) BUG(1, uprintf("Value %d\n", value)); \ + sem_destroy(a); }) +# endif #endif @@ -453,9 +500,6 @@ union semun #ifndef RPLARGS # ifdef SEMAPHORES_NOMMES # define LONGUEUR_NOM_SEMAPHORE 64 -# endif - -# ifdef SEMAPHORES_NOMMES # define __PTR__ * # else # define __PTR__ @@ -471,40 +515,34 @@ union semun __EXTERN__ pid_t pid_processus_pere; -# ifdef SEMAPHORES_NOMMES - __EXTERN__ pthread_mutex_t mutex_sem __STATIC_MUTEX_INITIALIZATION__; -# endif - __EXTERN__ pthread_mutex_t mutex_liste_threads __STATIC_MUTEX_INITIALIZATION__; - __EXTERN__ pthread_mutex_t mutex_gestionnaires_signaux_atomique - __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_liste_variables_partagees; - - __EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; + __EXTERN__ pthread_mutex_t mutex_sem __STATIC_MUTEX_INITIALIZATION__; __EXTERN__ volatile int routine_recursive; -#endif -#ifdef SEMAPHORES_NOMMES -#define SEM_FORK 0 -#define SEM_QUEUE 1 -#define SEM_SIGNAUX 2 -#define SEM_SIGNALISATION 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); -int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); -int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); -int sem_getvalue2(sem_t *semaphore, int *valeur); -sem_t *sem_open2(pid_t pid, int ordre); +# define SEM_FORK 0 +# define SEM_QUEUE 1 +# define SEM_SIGNALISATION 2 +# define SEM_ARRET_SIGNALISATION 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); + int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); + int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); + int sem_getvalue2(sem_t *semaphore, int *valeur); + sem_t *sem_open2(pid_t pid, int ordre); +#endif // 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. +#ifdef Darwin #define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value) #define sem_post(semaphore) \ ({ int r; pthread_mutex_lock(&mutex_sem); \ @@ -689,23 +727,6 @@ pid_t debug_fork(); pthread_mutex_unlock(mutex) #endif -#ifdef DEBUG_SEMAPHORES -#define sem_wait(a) ({ int value; sem_getvalue(a, &value); \ - uprintf("[%d-%llu] Semaphore %s (%p) "\ - "waiting at %s() " \ - "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \ - #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ - if (value > 1) BUG(1, uprintf("Value %d\n", value)); sem_wait(a); }) -#define sem_post(a) ({ int value; sem_getvalue(a, &value); \ - uprintf("[%d-%llu] Semaphore %s (%p) "\ - "posting at %s() " \ - "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \ - #a, a, __FUNCTION__, __LINE__), fflush(stdout); \ - if (value > 0) BUG(1, uprintf("Value %d\n", value)); sem_post(a); }) -#define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \ - if (value == 0) BUG(1, uprintf("Value %d\n", value)); sem_destroy(a); }) -#endif - /* ================================================================================ @@ -966,6 +987,7 @@ pid_t debug_fork(); # define d_ex_chiffrement __erreur(89) # define d_ex_chiffrement_indisponible __erreur(90) # define d_ex_longueur_clef_chiffrement __erreur(91) +# define d_ex_taille_message __erreur(92) #endif @@ -1023,7 +1045,7 @@ enum t_type { ADR = 0, ALG, BIN, CHN, C SLB, SPH, SQL, TBL, VCX, VIN, VRL }; /* - ADR : adresse sur 32 bits (au moins) non signés (unsigned long) + ADR : adresse sur 64 bits signés. Adresse d'une définition à interpréter. ALG : expression algébrique (struct_liste_chainee *) @@ -1125,7 +1147,7 @@ typedef struct objet #ifndef RPLARGS typedef struct fichier { - unsigned long descripteur; + int descripteur; unsigned char acces; /* S/D/I */ unsigned char binaire; /* Y/N/F */ @@ -1218,7 +1240,7 @@ typedef struct bibliotheque #ifndef RPLARGS typedef struct descripteur_fichier { - unsigned long identifiant; + int identifiant; unsigned char effacement; unsigned char type; // C (file *) ou S (sqlite *) @@ -1457,8 +1479,10 @@ typedef struct descripteur_thread int pipe_injections[2]; int pipe_nombre_injections[2]; int pipe_interruptions[2]; - int pipe_nombre_objets_attente[2]; - int pipe_nombre_interruptions_attente[2]; + // pipe_nombre_elements_attente == 0 => initialisation ou terminaison + // pipe_nombre_elements_attente == 1 => objet en attente + // pipe_nombre_elements_attente == 2 => interruption en attente + int pipe_nombre_elements_attente[2]; int pipe_acquittement[2]; volatile integer8 nombre_objets_dans_pipe; @@ -1488,8 +1512,6 @@ typedef struct liste_pile_systeme { struct liste_pile_systeme *suivant; - struct_liste_chainee *pointeur_objet_retour; - struct_objet *indice_boucle; struct_objet *limite_indice_boucle; struct_objet *objet_de_test; @@ -1543,9 +1565,9 @@ typedef struct liste_pile_systeme A FORALL : NEXT termine une boucle sur un objet. */ - unsigned long adresse_retour; - unsigned long niveau_courant; - struct_objet *pointeur_adresse_retour; + integer8 adresse_retour; + integer8 niveau_courant; + struct_liste_chainee *pointeur_objet_retour; } struct_liste_pile_systeme; #endif @@ -1559,7 +1581,7 @@ typedef struct liste_pile_systeme #ifndef RPLARGS typedef union position_variable { - unsigned long adresse; + integer8 adresse; struct_objet *pointeur; } union_position_variable; @@ -1568,7 +1590,7 @@ typedef struct variable unsigned char *nom; unsigned char origine; // P(rogramme) ou E(valuation) - unsigned long niveau; + integer8 niveau; union_position_variable variable_statique; union_position_variable variable_partagee; @@ -1593,7 +1615,7 @@ typedef struct variable_partage unsigned char *nom; unsigned char origine; - unsigned long niveau; + integer8 niveau; union_position_variable variable_partagee; @@ -1620,7 +1642,7 @@ typedef struct variable_statique // Position de création de la variable statique dans le programme ou dans // l'expression. 'origine' vaut 'P' pour programme ou 'E' pour expression. - unsigned long niveau; + integer8 niveau; union_position_variable variable_statique; @@ -1637,7 +1659,7 @@ typedef struct variable_statique typedef struct vecteur { - unsigned long taille; + integer8 taille; unsigned char type; /* C (complex*16), R (real*8), I (integer*8) */ @@ -1653,8 +1675,8 @@ typedef struct vecteur typedef struct matrice { - unsigned long nombre_lignes; - unsigned long nombre_colonnes; + integer8 nombre_lignes; + integer8 nombre_colonnes; unsigned char type; /* C (complex*16), R (real*8), I (integer*8) */ @@ -1670,7 +1692,7 @@ typedef struct matrice typedef struct tableau { - unsigned long nombre_elements; + integer8 nombre_elements; struct_objet **elements; } struct_tableau; @@ -1806,7 +1828,7 @@ typedef struct arbre_variables_partagees do { \ pthread_mutexattr_t attributs_mutex; \ pthread_mutexattr_init(&attributs_mutex); \ - pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); \ + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); \ pthread_mutex_init(&(mutex), &attributs_mutex); \ pthread_mutexattr_destroy(&attributs_mutex); \ } while(0) @@ -1816,13 +1838,14 @@ typedef struct tableau_variables unsigned char origine; unsigned char *nom; // pointeur sur la struct_variable // réelle et non copie de la chaîne - unsigned long niveau; + integer8 niveau; struct_objet *objet; // pointeur sur l'objet et non copie // de l'objet. logical1 variable_verrouillee; logical1 variable_masquee; + pthread_mutex_t *mutex; union_position_variable variable_statique; union_position_variable variable_partagee; } struct_tableau_variables; @@ -1905,8 +1928,8 @@ typedef struct processus unsigned char traitement_cycle_exit; /*N/E/C*/ unsigned char recherche_type; /*Y/N*/ - unsigned long position_courante; - unsigned long longueur_definitions_chainees; + integer8 position_courante; + integer8 longueur_definitions_chainees; /* Pointeurs sur les instructions */ @@ -1923,13 +1946,13 @@ typedef struct processus struct_liste_chainee *l_base_pile; struct_liste_chainee *l_base_pile_last; - unsigned long hauteur_pile_operationnelle; + integer8 hauteur_pile_operationnelle; /* Piles systemes */ struct_liste_pile_systeme *l_base_pile_systeme; - unsigned long hauteur_pile_systeme; + integer8 hauteur_pile_systeme; /* Gestion des processus */ @@ -1943,8 +1966,7 @@ typedef struct processus int pipe_injections; int pipe_nombre_injections; int pipe_interruptions; - int pipe_nombre_objets_attente; - int pipe_nombre_interruptions_attente; + int pipe_nombre_elements_attente; int nombre_objets_envoyes_non_lus; int nombre_objets_injectes; @@ -2000,8 +2022,8 @@ typedef struct processus int *pointeurs_caracteres_variables; int nombre_caracteres_variables; - unsigned long niveau_courant; - unsigned long niveau_initial; + integer8 niveau_courant; + integer8 niveau_initial; logical1 creation_variables_statiques; logical1 creation_variables_partagees; @@ -2023,7 +2045,7 @@ typedef struct processus struct_liste_chainee *s_bibliotheques; struct_instruction_externe *s_instructions_externes; - unsigned long nombre_instructions_externes; + integer8 nombre_instructions_externes; /* Fichier d'impression */ @@ -2173,23 +2195,23 @@ typedef struct processus /* Traitement des exceptions */ logical1 arret_si_exception; - unsigned int exception; - unsigned int derniere_exception; - unsigned int exception_processus_fils; + int exception; + int derniere_exception; + int exception_processus_fils; /* Traitement des erreurs */ - unsigned int erreur_compilation; - unsigned int erreur_execution; - unsigned int erreur_systeme; + int erreur_compilation; + volatile int erreur_execution; + volatile int erreur_systeme; struct_objet *s_objet_errone; struct_objet *s_objet_erreur; logical1 erreur_scrutation; - volatile unsigned int erreur_systeme_processus_fils; - unsigned int erreur_execution_processus_fils; + volatile int erreur_systeme_processus_fils; + int erreur_execution_processus_fils; pid_t pid_erreur_processus_fils; @@ -2197,13 +2219,13 @@ typedef struct processus integer8 derniere_erreur_fonction_externe; - unsigned int derniere_erreur_systeme; - unsigned int derniere_erreur_execution; - unsigned int derniere_erreur_evaluation; + int derniere_erreur_systeme; + int derniere_erreur_execution; + int derniere_erreur_evaluation; unsigned char *instruction_derniere_erreur; - unsigned long niveau_derniere_erreur; + integer8 niveau_derniere_erreur; logical1 core; logical1 invalidation_message_erreur; @@ -2211,7 +2233,7 @@ typedef struct processus /* Debug */ logical1 debug; - integer8 type_debug; + logical8 type_debug; logical1 debug_programme; logical1 execution_pas_suivant; logical1 traitement_instruction_halt; @@ -2286,7 +2308,7 @@ typedef struct processus unsigned char retour_routine_evaluation; unsigned char *localisation; - unsigned long niveau_recursivite; + integer8 niveau_recursivite; pid_t pid_processus_pere; pthread_t tid_processus_pere; @@ -2294,6 +2316,8 @@ typedef struct processus logical1 processus_detache; + enum t_type type_en_cours; + /* Profilage */ logical1 profilage; @@ -2302,9 +2326,10 @@ typedef struct processus struct_liste_profilage2 *pile_profilage_fonctions; struct timeval horodatage_profilage; - // Mutex spécifique au processus et donnant accès à la pile des processus - pthread_mutex_t mutex; pthread_mutex_t mutex_allocation; + pthread_mutex_t mutex_interruptions; + pthread_mutex_t mutex_pile_processus; + pthread_mutex_t mutex_signaux; // Mutex autorisant les fork() sem_t __PTR__ semaphore_fork; @@ -2315,26 +2340,30 @@ typedef struct processus pthread_mutex_t protection_liste_mutexes; unsigned int sections_critiques; -/* Drapeau nécessaire à RESTART */ +/* Variable d'initialisation pour SCHED */ + + logical1 initialisation_scheduler; + +/* Drapeau nécessaire à RESTART */ volatile logical1 requete_redemarrage; /* Gestion optimisée de la mémoire */ double estimation_taille_pile_tampon; - unsigned long taille_pile_tampon; + integer8 taille_pile_tampon; struct_liste_chainee *pile_tampon; double estimation_taille_pile_systeme_tampon; - unsigned long taille_pile_systeme_tampon; + integer8 taille_pile_systeme_tampon; struct_liste_pile_systeme *pile_systeme_tampon; - unsigned long taille_pile_objets; + integer8 taille_pile_objets; struct_objet *pile_objets; -# define TAILLE_CACHE 16384 +# define TAILLE_CACHE 1024 - unsigned long *objets_adr[TAILLE_CACHE]; + integer8 *objets_adr[TAILLE_CACHE]; int pointeur_adr; logical8 *objets_bin[TAILLE_CACHE]; @@ -2400,7 +2429,7 @@ typedef struct processus typedef struct fonction { unsigned char *nom_fonction; - unsigned long nombre_arguments; + integer8 nombre_arguments; void (*fonction)(struct_processus *); @@ -2482,6 +2511,7 @@ void instruction_col_fleche(struct_proce void instruction_col_moins(struct_processus *s_etat_processus); void instruction_col_plus(struct_processus *s_etat_processus); void instruction_comb(struct_processus *s_etat_processus); +void instruction_compress(struct_processus *s_etat_processus); void instruction_con(struct_processus *s_etat_processus); void instruction_cond(struct_processus *s_etat_processus); void instruction_cont(struct_processus *s_etat_processus); @@ -2549,6 +2579,7 @@ void instruction_elseif(struct_processus void instruction_end(struct_processus *s_etat_processus); void instruction_eng(struct_processus *s_etat_processus); void instruction_epsilon(struct_processus *s_etat_processus); +void instruction_eqv(struct_processus *s_etat_processus); void instruction_erase(struct_processus *s_etat_processus); void instruction_errm(struct_processus *s_etat_processus); void instruction_errn(struct_processus *s_etat_processus); @@ -2789,6 +2820,8 @@ void instruction_return(struct_processus void instruction_revlist(struct_processus *s_etat_processus); void instruction_rewind(struct_processus *s_etat_processus); void instruction_rfuse(struct_processus *s_etat_processus); +void instruction_rgdl(struct_processus *s_etat_processus); +void instruction_rgdr(struct_processus *s_etat_processus); void instruction_rl(struct_processus *s_etat_processus); void instruction_rlb(struct_processus *s_etat_processus); void instruction_rnd(struct_processus *s_etat_processus); @@ -2908,6 +2941,7 @@ void instruction_t_vers_l(struct_process void instruction_ucase(struct_processus *s_etat_processus); void instruction_uchol(struct_processus *s_etat_processus); +void instruction_uncompress(struct_processus *s_etat_processus); void instruction_unlock(struct_processus *s_etat_processus); void instruction_unprotect(struct_processus *s_etat_processus); void instruction_until(struct_processus *s_etat_processus); @@ -2958,8 +2992,7 @@ void instruction_yield(struct_processus #ifndef RPLARGS void affectation_interruptions_logicielles(struct_processus *s_etat_processus); void affichage_pile(struct_processus *s_etat_processus, - struct_liste_chainee *l_element_courant, unsigned long - niveau_courant); + struct_liste_chainee *l_element_courant, integer8 niveau_courant); #endif void *allocation_maillon(struct_processus *s_etat_processus); @@ -2982,7 +3015,7 @@ void conversion_format(struct_processus unsigned char *chaine); void conversion_hms_vers_decimal(real8 *angle); void conversion_majuscule_limitee(unsigned char *chaine_entree, - unsigned char *chaine_sortie, unsigned long longueur); + unsigned char *chaine_sortie, integer8 longueur); void conversion_radians_vers_degres(real8 *angle); void copie_arbre_variables(struct_processus *s_etat_processus, struct_processus *s_nouvel_etat_processus); @@ -2995,11 +3028,11 @@ void determinant(struct_processus *s_eta void *valeur); void deverrouillage_threads_concurrents(struct_processus *s_etat_processus); 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, integer8 niveau_courant); 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 encart(struct_processus *s_etat_processus, unsigned long duree); +void encart(struct_processus *s_etat_processus, integer8 duree); void evaluation_romberg(struct_processus *s_etat_processus, struct_objet *s_expression, unsigned char *variable, real8 *point, real8 *valeur, logical1 *validite); @@ -3020,7 +3053,7 @@ void formateur_elementaire_tex(struct_pr file *fichier, struct_objet *s_objet, unsigned char environnement); void impression_pile(struct_processus *s_etat_processus, struct_liste_chainee *l_element_courant, - unsigned char methode, unsigned long niveau_courant); + unsigned char methode, integer8 niveau_courant); void impression_tex(struct_processus *s_etat_processus); void informations(struct_processus *s_etat_processus); void initialisation_allocateur(struct_processus *s_etat_processus); @@ -3028,7 +3061,7 @@ void initialisation_completion(void); void initialisation_contexte_cas(struct_processus *s_etat_processus); void initialisation_drapeaux(struct_processus *s_etat_processus); void initialisation_generateur_aleatoire(struct_processus *s_etat_processus, - logical1 initialisation_automatique, unsigned long int racine); + logical1 initialisation_automatique, integer8 racine); void initialisation_instructions(struct_processus *s_etat_processus); void initialisation_variables(struct_processus *s_etat_processus); #endif @@ -3097,7 +3130,7 @@ void scrutation_injection(struct_process void scrutation_interruptions(struct_processus *s_etat_processus); void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau); 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, integer8 taille_octets); void *thread_signaux(void *argument); void trace(struct_processus *s_etat_processus, FILE *flux); void traitement_asynchrone_exceptions_gsl(struct_processus *s_etat_processus); @@ -3105,7 +3138,7 @@ void traitement_exceptions_gsl(const cha int line, int gsl_errno); void traitement_interruptions_logicielles(struct_processus *s_etat_processus); void tri_base_symboles_externes(struct_processus *s_etat_processus); -void tri_vecteur(real8 *vecteur, unsigned long taille); +void tri_vecteur(real8 *vecteur, integer8 taille); void valeurs_propres(struct_processus *s_etat_processus, struct_matrice *s_matrice, struct_vecteur *s_valeurs_propres, @@ -3145,9 +3178,9 @@ int envoi_signal_thread(pthread_t tid, e -------------------------------------------------------------------------------- */ -real8 sommation_vecteur_reel(real8 *vecteur, unsigned long *taille, +real8 sommation_vecteur_reel(real8 *vecteur, integer8 *taille, logical1 *erreur_memoire); -complex16 sommation_vecteur_complexe(complex16 *vecteur, unsigned long *taille, +complex16 sommation_vecteur_complexe(complex16 *vecteur, integer8 *taille, logical1 *erreur_memoire); /* @@ -3169,17 +3202,17 @@ int rplinit(int argc, char *argv[], char #ifndef RPLARGS real8 correlation_statistique(struct_matrice *s_matrice, - unsigned long colonne_1, unsigned long colonne_2, logical1 *erreur); + integer8 colonne_1, integer8 colonne_2, logical1 *erreur); real8 covariance_statistique(struct_matrice *s_matrice, - unsigned long colonne_1, unsigned long colonne_2, + integer8 colonne_1, integer8 colonne_2, unsigned char type, logical1 *erreur); struct_vecteur *ecart_type_statistique(struct_matrice *s_matrice, unsigned char type); struct_vecteur *moyenne_statistique(struct_matrice *s_matrice); struct_vecteur *sommation_colonne_statistique(struct_matrice *s_matrice, - unsigned long colonne); + integer8 colonne); struct_vecteur *sommation_produits_colonnes_statistiques(struct_matrice - *s_matrice, unsigned long colonne_1, unsigned long colonne_2); + *s_matrice, integer8 colonne_1, integer8 colonne_2); struct_vecteur *sommation_statistique(struct_matrice *s_matrice); struct_vecteur *variance_statistique(struct_matrice *s_matrice, unsigned char type); @@ -3205,7 +3238,7 @@ struct_liste_chainee *depilement_pile_op struct_liste_chainee *empilement_pile_operationnelle(struct_rpl_arguments *s_rpl_arguments, struct_objet *s_objet); struct_liste_chainee *sauvegarde_arguments(struct_rpl_arguments - *s_rpl_arguments, unsigned long nombre_arguments); + *s_rpl_arguments, integer8 nombre_arguments); /* -------------------------------------------------------------------------------- @@ -3217,36 +3250,36 @@ struct_liste_chainee *sauvegarde_argumen unsigned char *analyse_algebrique(struct_processus *s_etat_processus, unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste); unsigned char *analyse_flux(struct_processus *s_etat_processus, - unsigned char *flux, long longueur); + unsigned char *flux, integer8 longueur); unsigned char *chiffrement(const EVP_CIPHER *type_chiffrement, - logical1 encodage, unsigned char *message, unsigned int - longueur_message, unsigned char *clef, unsigned int longueur_clef, + logical1 encodage, unsigned char *message, integer8 longueur_message, + unsigned char *clef, integer8 longueur_clef, unsigned char *vecteur_initialisation, - unsigned int *longueur_message_chiffre); + integer8 *longueur_message_chiffre); unsigned char *compactage(unsigned char *chaine); unsigned char *conversion_majuscule(unsigned char *chaine); unsigned char *creation_nom_fichier(struct_processus *s_etat_processus, unsigned char *chemin); unsigned char *date_compilation(); -unsigned char *extraction_chaine(unsigned char *chaine, unsigned long i, - unsigned long j); +unsigned char *extraction_chaine(unsigned char *chaine, integer8 i, integer8 j); unsigned char *formateur(struct_processus *s_etat_processus, long offset, struct_objet *s_objet); unsigned char *formateur_fichier(struct_processus *s_etat_processus, struct_objet *s_objet, struct_objet *s_format, - long longueur, long longueur_champ, unsigned char format, - unsigned char type, long *longueur_effective, long *recursivite); + integer8 longueur, integer8 longueur_champ, unsigned char format, + unsigned char type, integer8 *longueur_effective, integer8 *recursivite, + logical1 export_fichier); unsigned char *formateur_flux(struct_processus *s_etat_processus, - unsigned char *donnees, long *longueur); + unsigned char *donnees, integer8 *longueur); unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus, void *valeur_numerique, unsigned char type, - long longueur, long longueur_champ, unsigned char format); + integer8 longueur, integer8 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); + *s_etat_processus, void *valeur_numerique, unsigned char type_entree, + unsigned char type, integer8 longueur, integer8 *longueur_conversion); unsigned char *formateur_fichier_reel(struct_processus *s_etat_processus, void *valeur_numerique, unsigned char type, - long longueur, long longueur_champ, unsigned char format); + integer8 longueur, integer8 longueur_champ, unsigned char format); unsigned char *formateur_nombre(struct_processus *s_etat_processus, void *valeur_numerique, unsigned char type); unsigned char *formateur_reel(struct_processus *s_etat_processus, @@ -3297,7 +3330,7 @@ logical1 destruction_fichier(unsigned ch logical1 empilement(struct_processus *s_etat_processus, struct_liste_chainee **l_base_liste, struct_objet *s_objet); logical1 empilement_pile_last(struct_processus *s_etat_processus, - unsigned long nombre_arguments); + integer8 nombre_arguments); logical1 evaluation(struct_processus *s_etat_processus, struct_objet *s_objet, unsigned char type_evaluation); logical1 initialisation_fichier_acces_direct(struct_processus *s_etat_processus, @@ -3306,6 +3339,8 @@ logical1 initialisation_fichier_acces_in 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_recursive( + struct_processus *s_etat_processus, integer8 recursivite); logical1 retrait_variable(struct_processus *s_etat_processus, unsigned char *nom_variable, unsigned char type); logical1 retrait_variables_par_niveau(struct_processus *s_etat_processus); @@ -3330,6 +3365,7 @@ logical1 sequenceur_optimise(struct_proc logical1 depassement_addition(integer8 *a, integer8 *b, integer8 *resultat); logical1 depassement_multiplication(integer8 *a, integer8 *b, integer8 *resultat); +logical1 depassement_soustraction(integer8 *a, integer8 *b, integer8 *resultat); logical1 depassement_puissance(integer8 *a, integer8 *b, integer8 *resultat); #ifndef RPLARGS @@ -3368,9 +3404,9 @@ ssize_t write_atomic(struct_processus *s 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, +integer8 liste_variables(struct_processus *s_etat_processus, struct_tableau_variables *tableau); -int nombre_variables(struct_processus *s_etat_processus); +integer8 nombre_variables(struct_processus *s_etat_processus); int readline_analyse_syntaxique(int count, int key); int readline_effacement(int count, int key); #endif @@ -3462,6 +3498,8 @@ struct_objet *allocation(struct_processu #ifndef RPLARGS struct_objet *formateur_date(struct_processus *s_etat_processus, struct timeval *temps); +struct_objet *lecture_fichier_non_formate(struct_processus *s_etat_processus, + void *argument, integer8 longueur_buffer, logical1 recursivite); struct_objet *lecture_pipe(struct_processus *s_etat_processus, int pipe); struct_objet *parametres_sql(struct_processus *s_etat_processus, struct_objet *s_parametres); @@ -3495,8 +3533,7 @@ struct_liste_variables_partagees *recher #ifndef RPLARGS struct_arbre *creation_arbre(struct_processus *s_etat_processus, - struct_objet **t_objets, unsigned long indice, - unsigned long indice_maximal); + struct_objet **t_objets, integer8 indice, integer8 indice_maximal); void liberation_arbre(struct_processus *s_etat_processus, struct_arbre *s_noeud); void parcours_arbre(struct_processus *s_etat_processus, struct_arbre *s_noeud);