Diff for /rpl/src/rpl.h between versions 1.298 and 1.326

version 1.298, 2016/07/22 14:45:30 version 1.326, 2019/02/03 14:41:28
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.25    RPL/2 (R) version 4.1.31
   Copyright (C) 1989-2016 Dr. BERTRAND Joël    Copyright (C) 1989-2019 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 64 Line 64
 #   define SA_ONSTACK   0  #   define SA_ONSTACK   0
 #endif  #endif
   
   #ifdef BROKEN_SIGSEGV
   #   undef HAVE_STACK_OVERFLOW_RECOVERY
   #   undef HAVE_SIGSEGV_RECOVERY
   #endif
   
 #define DEBUG_TRACE     uprintf("[%d/%X] %s(%d)\n", \  #define DEBUG_TRACE     uprintf("[%d/%X] %s(%d)\n", \
         getpid(), pthread_self(), __FILE__, __LINE__);          getpid(), pthread_self(), __FILE__, __LINE__);
 #define TEST_ABSENCE_FICHIER(nom) \  #define TEST_ABSENCE_FICHIER(nom) \
Line 87 Line 92
 #include <stdarg.h>  #include <stdarg.h>
 #include <poll.h>  #include <poll.h>
 #include <signal.h>  #include <signal.h>
   #include <sys/time.h>
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #   include <sys/mman.h>  #   include <sys/mman.h>
 #   include <sys/time.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 99 Line 104
 #   include <sys/types.h>  #   include <sys/types.h>
 #   include <sys/un.h>  #   include <sys/un.h>
 #   include <sys/wait.h>  #   include <sys/wait.h>
   #   include <omp.h>
   
 #   include <arpa/inet.h>  #   include <arpa/inet.h>
 #   include <netinet/in.h>  #   include <netinet/in.h>
Line 215 Line 221
 #   endif  #   endif
   
 #   include "sqlite3.h"  #   include "sqlite3.h"
 #   include "sigsegv.h"  
   #   ifndef BROKEN_SIGSEGV
   #       include "sigsegv.h"
   #   endif
   
 #   ifdef OS2  #   ifdef OS2
         // Bug de libsigsegv          // Bug de libsigsegv
 #       undef HAVE_STACK_OVERFLOW_RECOVERY  #       undef HAVE_STACK_OVERFLOW_RECOVERY
Line 272 Line 282
 #   define __STATIC_MUTEX_INITIALIZATION__  #   define __STATIC_MUTEX_INITIALIZATION__
 #endif  #endif
   
   
 /*  /*
 ================================================================================  ================================================================================
   Bugs spécifiques    Bugs spécifiques
Line 618  union semun Line 629  union semun
     } while(0)      } while(0)
   
 #ifdef __GLIBC__  #ifdef __GLIBC__
 #include <execinfo.h>  #   include <execinfo.h>
 #define __BACKTRACE  #   define __BACKTRACE
 #define BACKTRACE(n) \  #   define BACKTRACE(n) \
     do \      do \
     { \      { \
         void            *buffer[n]; \          void            *buffer[n]; \
Line 645  union semun Line 656  union semun
         pthread_mutex_unlock(&mutex); \          pthread_mutex_unlock(&mutex); \
     } while(0)      } while(0)
 #else  #else
 #define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc")  #   define BACKTRACE(n) NOTICE("BACKTRACE only defined in glibc")
 #endif  #endif
   
 #ifdef __BACKTRACE  #ifdef __BACKTRACE
Line 691  pid_t debug_fork(); Line 702  pid_t debug_fork();
 #endif  #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
 #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() " \          "locking at %s() " \
         "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \          "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \
         #mutex, mutex, __FUNCTION__, __LINE__), fflush(stdout), \          #mutex, mutex, __FUNCTION__, __LINE__), fflush(stdout), \
         pthread_mutex_lock(mutex)          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 " \          "unlocking at " \
         "%s() line #%d\n", (int) getpid(), (unsigned long long) \          "%s() line #%d\n", (int) getpid(), (unsigned long long) \
         pthread_self(), #mutex, mutex, __FUNCTION__, __LINE__), \          pthread_self(), #mutex, mutex, __FUNCTION__, __LINE__), \
         fflush(stdout), \          fflush(stdout), \
         pthread_mutex_unlock(mutex)          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  #endif
   
   
Line 758  pid_t debug_fork(); Line 775  pid_t debug_fork();
 #define d_SPH                   "Semaphore $n 'name'"  #define d_SPH                   "Semaphore $n 'name'"
 #define d_TAB                   "<[ table ]>"  #define d_TAB                   "<[ table ]>"
 #define d_MTX                   "Mutex $n"  #define d_MTX                   "Mutex $n"
 #define d_REC                   "Record /'name_1', ..., 'name_n'/"  #define d_REC                   "|[ record ]|"
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
Line 1004  pid_t debug_fork(); Line 1021  pid_t debug_fork();
 #   define d_ex_chiffrement_indisponible        __erreur(90)  #   define d_ex_chiffrement_indisponible        __erreur(90)
 #   define d_ex_longueur_clef_chiffrement       __erreur(91)  #   define d_ex_longueur_clef_chiffrement       __erreur(91)
 #   define d_ex_taille_message                  __erreur(92)  #   define d_ex_taille_message                  __erreur(92)
   #   define d_ex_type_externe_dup                __erreur(93)
   #   define d_ex_type_externe_drop               __erreur(94)
 #endif  #endif
   
   
Line 1032  pid_t debug_fork(); Line 1051  pid_t debug_fork();
 #define BIN __RPL_BIN  #define BIN __RPL_BIN
 #define CHN __RPL_CHN  #define CHN __RPL_CHN
 #define CPL __RPL_CPL  #define CPL __RPL_CPL
   #define EXT __RPL_EXT
 #define FCH __RPL_FCH  #define FCH __RPL_FCH
 #define FCT __RPL_FCT  #define FCT __RPL_FCT
 #define INT __RPL_INT  #define INT __RPL_INT
Line 1057  pid_t debug_fork(); Line 1077  pid_t debug_fork();
   
 enum t_rplcas_commandes     { RPLCAS_INTEGRATION = 0, RPLCAS_LIMITE };  enum t_rplcas_commandes     { RPLCAS_INTEGRATION = 0, RPLCAS_LIMITE };
   
 enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, FCH, FCT, INT, LST,  enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, EXT, FCH, FCT, INT, LST,
                 MCX, MIN, MRL, MTX, NOM, NON, PRC, REC, REL, RPN, SCK,                  MCX, MIN, MRL, MTX, NOM, NON, PRC, REC, REL, RPN, SCK,
                 SLB, SPH, SQL, TBL, VCX, VIN, VRL };                  SLB, SPH, SQL, TBL, VCX, VIN, VRL };
   
Line 1081  enum t_type  { ADR = 0, ALG, BIN, CHN, C Line 1101  enum t_type  { ADR = 0, ALG, BIN, CHN, C
             Sans objet.              Sans objet.
             Type C/Fortran : complex16              Type C/Fortran : complex16
   
       EXT : type géré dans une bibliothèque externe.
   
     FCH : descripteur de fichier (struct_fichier *).      FCH : descripteur de fichier (struct_fichier *).
   
     FCT : déclaration d'une fonction et de son nombre d'arguments      FCT : déclaration d'une fonction et de son nombre d'arguments
Line 1115  enum t_type  { ADR = 0, ALG, BIN, CHN, C Line 1137  enum t_type  { ADR = 0, ALG, BIN, CHN, C
     PRC : processus (struct_processus_fils *)      PRC : processus (struct_processus_fils *)
             Sans objet.              Sans objet.
   
       REC : enregistrement (struct_record *)
   
     REL : reel sur 64 bits (real*8, real8 *)      REL : reel sur 64 bits (real*8, real8 *)
             Sans objet.              Sans objet.
   
Line 1146  enum t_type  { ADR = 0, ALG, BIN, CHN, C Line 1170  enum t_type  { ADR = 0, ALG, BIN, CHN, C
 typedef struct objet  typedef struct objet
 {  {
     enum t_type         type;      enum t_type         type;
       integer8            extension_type;
       void                *descripteur_bibliotheque;
   
     volatile long       nombre_occurrences;      volatile long       nombre_occurrences;
   
Line 1558  typedef struct liste_pile_systeme Line 1584  typedef struct liste_pile_systeme
     logical1                    creation_variables_statiques;      logical1                    creation_variables_statiques;
     logical1                    creation_variables_partagees;      logical1                    creation_variables_partagees;
     logical1                    evaluation_expression;      logical1                    evaluation_expression;
       logical1                    debug_programme;
   
     unsigned char               clause;      unsigned char               clause;
   
Line 1738  typedef struct tableau Line 1765  typedef struct tableau
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
     Structure enregistrement
   --------------------------------------------------------------------------------
   */
   
   typedef struct record
   {
       struct_objet        *noms;
       struct_objet        *donnees;
   } struct_record;
   
   
   /*
   --------------------------------------------------------------------------------
   Structure arbre    Structure arbre
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
Line 1762  typedef struct instruction_externe Line 1802  typedef struct instruction_externe
     unsigned char       *nom;      unsigned char       *nom;
     unsigned char       *nom_bibliotheque;      unsigned char       *nom_bibliotheque;
     void                *descripteur_bibliotheque;      void                *descripteur_bibliotheque;
       integer8            position_fleche;
 } struct_instruction_externe;  } struct_instruction_externe;
   
   
Line 1803  typedef struct rpl_arguments Line 1844  typedef struct rpl_arguments
     unsigned char               test_instruction;      unsigned char               test_instruction;
   
     integer8                    nombre_arguments;      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;      void                        *s_etat_processus;
 } struct_rpl_arguments;  } struct_rpl_arguments;
Line 2453  typedef struct processus Line 2497  typedef struct processus
     CACHE(integer8, int)      CACHE(integer8, int)
     CACHE(struct_matrice, mat)      CACHE(struct_matrice, mat)
     CACHE(struct_nom, nom)      CACHE(struct_nom, nom)
       CACHE(struct_record, rec)
     CACHE(real8, rel)      CACHE(real8, rel)
     CACHE(struct_tableau, tab)      CACHE(struct_tableau, tab)
     CACHE(struct_vecteur, vec)      CACHE(struct_vecteur, vec)
Line 2467  typedef struct processus Line 2512  typedef struct processus
             variables_tableau_noeuds_partages)              variables_tableau_noeuds_partages)
   
     CACHE2(struct_buffer, enveloppes_buffers)      CACHE2(struct_buffer, enveloppes_buffers)
     unsigned char       ***cache_buffer;      unsigned char               ***cache_buffer;
     int                 *pointeur_cache_buffer;      int                         *pointeur_cache_buffer;
 } struct_processus;  } struct_processus;
 #endif  #endif
   
Line 2778  void instruction_mtxtrylock(struct_proce Line 2823  void instruction_mtxtrylock(struct_proce
 void instruction_mtxunlock(struct_processus *s_etat_processus);  void instruction_mtxunlock(struct_processus *s_etat_processus);
 void instruction_multiplication(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_ne(struct_processus *s_etat_processus);
 void instruction_neg(struct_processus *s_etat_processus);  void instruction_neg(struct_processus *s_etat_processus);
 void instruction_next(struct_processus *s_etat_processus);  void instruction_next(struct_processus *s_etat_processus);
Line 2867  void instruction_rdz(struct_processus *s Line 2913  void instruction_rdz(struct_processus *s
 void instruction_re(struct_processus *s_etat_processus);  void instruction_re(struct_processus *s_etat_processus);
 void instruction_read(struct_processus *s_etat_processus);  void instruction_read(struct_processus *s_etat_processus);
 void instruction_recode(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_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_regex(struct_processus *s_etat_processus);
Line 3148  void interruption3(int signal); Line 3195  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 interruption6(int signal);
 void interruption_depassement_pile(int urgence, stackoverflow_context_t scp);  #ifdef HAVE_SIGSEGV_RECOVERY
       void interruption_depassement_pile(int urgence,
               stackoverflow_context_t scp);
   #endif
 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 3318  struct_liste_chainee *sauvegarde_argumen Line 3368  struct_liste_chainee *sauvegarde_argumen
 #ifndef RPLARGS  #ifndef RPLARGS
 unsigned char *analyse_algebrique(struct_processus *s_etat_processus,  unsigned char *analyse_algebrique(struct_processus *s_etat_processus,
         unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste);          unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste);
   #endif
 unsigned char *analyse_flux(struct_processus *s_etat_processus,  unsigned char *analyse_flux(struct_processus *s_etat_processus,
         unsigned char *flux, integer8 longueur);          unsigned char *flux, integer8 longueur);
   #ifndef RPLARGS
 unsigned char *chiffrement(struct_processus *s_etat_processus,  unsigned char *chiffrement(struct_processus *s_etat_processus,
         const EVP_CIPHER *type_chiffrement,          const EVP_CIPHER *type_chiffrement,
         logical1 encodage, unsigned char *message, integer8 longueur_message,          logical1 encodage, unsigned char *message, integer8 longueur_message,
Line 3342  unsigned char *formateur_fichier(struct_ Line 3394  unsigned char *formateur_fichier(struct_
         integer8 longueur, integer8 longueur_champ, unsigned char format,          integer8 longueur, integer8 longueur_champ, unsigned char format,
         unsigned char type, integer8 *longueur_effective, integer8 *recursivite,          unsigned char type, integer8 *longueur_effective, integer8 *recursivite,
         logical1 export_fichier);          logical1 export_fichier);
   #endif
 unsigned char *formateur_flux(struct_processus *s_etat_processus,  unsigned char *formateur_flux(struct_processus *s_etat_processus,
         unsigned char *donnees, integer8 *longueur);          unsigned char *donnees, integer8 *longueur);
   #ifndef RPLARGS
 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,
         integer8 longueur, integer8 longueur_champ, unsigned char format);          integer8 longueur, integer8 longueur_champ, unsigned char format);
Line 3427  logical1 retrait_variable_statique(struc Line 3481  logical1 retrait_variable_statique(struc
 logical1 retrait_variables_statiques_locales(  logical1 retrait_variables_statiques_locales(
         struct_processus *s_etat_processus);          struct_processus *s_etat_processus);
 logical1 sequenceur(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  #endif
   
 /*  /*

Removed from v.1.298  
changed lines
  Added in v.1.326


CVSweb interface <joel.bertrand@systella.fr>