--- rpl/src/rpl.h 2017/06/29 14:54:42 1.306 +++ rpl/src/rpl.h 2019/01/17 09:12:05 1.325 @@ -1,8 +1,7 @@ -#define DEBUG_ERREURS /* ================================================================================ - RPL/2 (R) version 4.1.27 - Copyright (C) 1989-2017 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.30 + Copyright (C) 1989-2019 Dr. BERTRAND Joël This file is part of RPL/2. @@ -93,10 +92,10 @@ #include #include #include +#include #ifndef RPLARGS # include -# include # include # include # include @@ -105,6 +104,7 @@ # include # include # include +# include # include # include @@ -629,9 +629,9 @@ union semun } while(0) #ifdef __GLIBC__ -#include -#define __BACKTRACE -#define BACKTRACE(n) \ +# include +# define __BACKTRACE +# define BACKTRACE(n) \ do \ { \ void *buffer[n]; \ @@ -656,7 +656,7 @@ union semun pthread_mutex_unlock(&mutex); \ } while(0) #else -#define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc") +# define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc") #endif #ifdef __BACKTRACE @@ -702,23 +702,29 @@ pid_t debug_fork(); #endif #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__, \ __LINE__, strerror(errno), errno); fflush(stdout); errno = 0; return #endif #ifdef DEBUG_MUTEX -#define pthread_mutex_lock(mutex) uprintf("[%d-%llu] Mutex %s (%p) " \ +# define pthread_mutex_lock(mutex) uprintf("[%d-%llu] Mutex %s (%p) " \ "locking at %s() " \ "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \ #mutex, mutex, __FUNCTION__, __LINE__), fflush(stdout), \ pthread_mutex_lock(mutex) -#define pthread_mutex_unlock(mutex) uprintf("[%d-%llu] Mutex %s (%p) " \ +# define pthread_mutex_unlock(mutex) uprintf("[%d-%llu] Mutex %s (%p) " \ "unlocking at " \ "%s() line #%d\n", (int) getpid(), (unsigned long long) \ pthread_self(), #mutex, mutex, __FUNCTION__, __LINE__), \ fflush(stdout), \ pthread_mutex_unlock(mutex) +# define pthread_mutex_trylock(mutex) uprintf("[%d-%llu] Mutex %s (%p) " \ + "trylocking at " \ + "%s() line #%d\n", (int) getpid(), (unsigned long long) \ + pthread_self(), #mutex, mutex, __FUNCTION__, __LINE__), \ + fflush(stdout), \ + pthread_mutex_trylock(mutex) #endif @@ -769,7 +775,7 @@ pid_t debug_fork(); #define d_SPH "Semaphore $n 'name'" #define d_TAB "<[ table ]>" #define d_MTX "Mutex $n" -#define d_REC "Record /'name_1', ..., 'name_n'/" +#define d_REC "|[ record ]|" /* -------------------------------------------------------------------------------- @@ -1015,6 +1021,8 @@ pid_t debug_fork(); # define d_ex_chiffrement_indisponible __erreur(90) # define d_ex_longueur_clef_chiffrement __erreur(91) # define d_ex_taille_message __erreur(92) +# define d_ex_type_externe_dup __erreur(93) +# define d_ex_type_externe_drop __erreur(94) #endif @@ -1129,6 +1137,8 @@ enum t_type { ADR = 0, ALG, BIN, CHN, C PRC : processus (struct_processus_fils *) Sans objet. + REC : enregistrement (struct_record *) + REL : reel sur 64 bits (real*8, real8 *) Sans objet. @@ -1574,6 +1584,7 @@ typedef struct liste_pile_systeme logical1 creation_variables_statiques; logical1 creation_variables_partagees; logical1 evaluation_expression; + logical1 debug_programme; unsigned char clause; @@ -1754,6 +1765,19 @@ typedef struct tableau /* -------------------------------------------------------------------------------- + Structure enregistrement +-------------------------------------------------------------------------------- +*/ + +typedef struct record +{ + struct_objet *noms; + struct_objet *donnees; +} struct_record; + + +/* +-------------------------------------------------------------------------------- Structure arbre -------------------------------------------------------------------------------- */ @@ -1778,6 +1802,7 @@ typedef struct instruction_externe unsigned char *nom; unsigned char *nom_bibliotheque; void *descripteur_bibliotheque; + integer8 position_fleche; } struct_instruction_externe; @@ -1819,7 +1844,10 @@ typedef struct rpl_arguments unsigned char test_instruction; integer8 nombre_arguments; - // Nombre d'arguments de la fonction, positif ou nul. + // Nombre d'arguments de la fonction + // 0 : instruction infixe + // positif : nombre d'arguments (notation algébrique possible) + // -1 : notation algrébrique non autorisée void *s_etat_processus; } struct_rpl_arguments; @@ -2469,6 +2497,7 @@ typedef struct processus CACHE(integer8, int) CACHE(struct_matrice, mat) CACHE(struct_nom, nom) + CACHE(struct_record, rec) CACHE(real8, rel) CACHE(struct_tableau, tab) CACHE(struct_vecteur, vec) @@ -2483,8 +2512,8 @@ typedef struct processus variables_tableau_noeuds_partages) CACHE2(struct_buffer, enveloppes_buffers) - unsigned char ***cache_buffer; - int *pointeur_cache_buffer; + unsigned char ***cache_buffer; + int *pointeur_cache_buffer; } struct_processus; #endif @@ -2794,6 +2823,7 @@ void instruction_mtxtrylock(struct_proce void instruction_mtxunlock(struct_processus *s_etat_processus); void instruction_multiplication(struct_processus *s_etat_processus); +void instruction_nbrcpus(struct_processus *s_etat_prorcessus); void instruction_ne(struct_processus *s_etat_processus); void instruction_neg(struct_processus *s_etat_processus); void instruction_next(struct_processus *s_etat_processus); @@ -2883,6 +2913,7 @@ void instruction_rdz(struct_processus *s void instruction_re(struct_processus *s_etat_processus); void instruction_read(struct_processus *s_etat_processus); void instruction_recode(struct_processus *s_etat_processus); +void instruction_record(struct_processus *s_etat_processus); void instruction_recv(struct_processus *s_etat_processus); void instruction_redraw(struct_processus *s_etat_processus); void instruction_regex(struct_processus *s_etat_processus); @@ -3337,8 +3368,10 @@ struct_liste_chainee *sauvegarde_argumen #ifndef RPLARGS unsigned char *analyse_algebrique(struct_processus *s_etat_processus, unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste); +#endif unsigned char *analyse_flux(struct_processus *s_etat_processus, unsigned char *flux, integer8 longueur); +#ifndef RPLARGS unsigned char *chiffrement(struct_processus *s_etat_processus, const EVP_CIPHER *type_chiffrement, logical1 encodage, unsigned char *message, integer8 longueur_message, @@ -3361,8 +3394,10 @@ unsigned char *formateur_fichier(struct_ integer8 longueur, integer8 longueur_champ, unsigned char format, unsigned char type, integer8 *longueur_effective, integer8 *recursivite, logical1 export_fichier); +#endif unsigned char *formateur_flux(struct_processus *s_etat_processus, unsigned char *donnees, integer8 *longueur); +#ifndef RPLARGS unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus, void *valeur_numerique, unsigned char type, integer8 longueur, integer8 longueur_champ, unsigned char format); @@ -3446,7 +3481,8 @@ logical1 retrait_variable_statique(struc logical1 retrait_variables_statiques_locales( struct_processus *s_etat_processus); logical1 sequenceur(struct_processus *s_etat_processus); -logical1 sequenceur_optimise(struct_processus *s_etat_processus); +logical1 sequenceur_optimise(struct_processus *s_etat_processus, + struct_liste_chainee *l_bibliotheques); #endif /*