Diff for /rpl/src/rpl.h between versions 1.49 and 1.58

version 1.49, 2010/07/14 14:19:40 version 1.58, 2010/08/17 14:15:20
Line 31 Line 31
 #   define  _DARWIN_C_SOURCE  #   define  _DARWIN_C_SOURCE
 #endif  #endif
   
   #ifdef OpenBSD
   #   define _BSD_SOURCE
   #endif
   
   #ifdef OS2
   #   define _BSD_SOURCE
   #   define _XOPEN_SOURCE    600
   
   #   include <types.h>
       enum { SHUT_RD = 0, SHUT_WR, SHUT_RDWR };
   #   define SHUT_RD      SHUT_RD
   #   define SHUT_WR      SHUT_WR
   #   define SHUT_RDWR    SHUT_RDWR
   
   #   include "getaddrinfo-conv.h"
   
   #   define sched_yield(arg)
   #endif
   
   
 /*  /*
 ================================================================================  ================================================================================
Line 49 Line 68
   
 #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>
 #   include <sys/stat.h>  #   include <sys/stat.h>
 #   include <sys/time.h>  
 #   include <sys/timeb.h>  #   include <sys/timeb.h>
 #   include <sys/types.h>  #   include <sys/types.h>
 #   include <sys/un.h>  #   include <sys/un.h>
Line 66 Line 85
 #   include <dlfcn.h>  #   include <dlfcn.h>
 #   include <fcntl.h>  #   include <fcntl.h>
 #   include <pthread.h>  #   include <pthread.h>
   
   #   ifdef OS2
   #       undef pthread_mutexattr_settype
   #       define pthread_mutexattr_settype(a, b)
   #   endif
   
 #   include <pwd.h>  #   include <pwd.h>
 #   include <semaphore.h>  
   #   ifdef _BROKEN_SIGINFO
   #       include <sys/ipc.h>
   #       include <sys/shm.h>
   #   endif
   
   #   ifndef SEMAPHORES_SYSV
   #       include <semaphore.h>
   #   else
   #       ifdef OS2
   #           define INCL_DOSSEMAPHORES
   #           define INCL_DOSMEMMGR
   #           define INCL_DOSERRORS
   #           include <os2.h>
   
               typedef struct _OS2SEM
               {
                   HMTX    hmtx;
                   HEV     hev;
                   ULONG   shared;
                   ULONG   *cnt;
                   ULONG   *nopened;
                   ULONG   allocated;
               } sem_t;
   #       else
   #           include <sys/ipc.h>
   #           include <sys/sem.h>
               typedef int sem_t;
   #       endif
   
   #       define SEM_FAILED   NULL
   
           sem_t *sem_open_SysV(const char *nom, int oflag, ...);
           int sem_init_SysV(sem_t *sem, int shared, unsigned int value);
           int sem_close_SysV(sem_t *sem);
           int sem_wait_SysV(sem_t *sem);
           int sem_trywait_SysV(sem_t *sem);
           int sem_post_SysV(sem_t *sem);
           int sem_getvalue_SysV(sem_t *sem, int *value);
           int sem_unlink_SysV(const char *nom);
           int sem_destroy_SysV(sem_t *sem);
   #   endif
   
 #   include <setjmp.h>  #   include <setjmp.h>
 #   include <signal.h>  #   include <signal.h>
 #   include <termios.h>  #   include <termios.h>
Line 120 Line 187
   
 #include "librplprototypes.h"  #include "librplprototypes.h"
   
   #ifndef UNIX_PATH_MAX
       struct sockaddr_un sizecheck;
   #   define UNIX_PATH_MAX sizeof(sizecheck.sun_path)
   #endif
   
   #ifdef _BROKEN_SIGINFO
   #   define SIGHANDLER_ARGS  int signal
   #   ifdef SA_SIGINFO
   #       undef SA_SIGINFO
   #   endif
   #   define SA_SIGINFO   0
   
   #   define kill(pid, signal)            rpl_kill(pid, signal)
   #   define pthread_kill(tid, signal)    rpl_pthread_kill(tid, signal)
       int rpl_kill(pid_t pid, int signal);
       int rpl_pthread_kill(pthread_t tid, int signal);
   #else
   #   define SIGHANDLER_ARGS  int signal, siginfo_t *siginfo, void *context
   #endif
   
   #define ftok(path, proj) \
       ({ \
           key_t           key; \
           struct stat     s; \
           while(stat(path, &s) != 0); \
           errno = 0; \
           key = ftok(path, proj); \
           if (key != -1) \
               key |= ((((key_t) s.st_dev) & 0xFF) << 8) | \
                       ((((key_t) s.st_ino) & 0xFFFF) << 16); \
           key; \
       })
   
   /*
   ================================================================================
     SÉMAPHORES
   ================================================================================
   */
   
   #ifdef SEMAPHORES_SYSV
   #   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_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)
   #endif
   
   
 /*  /*
 ================================================================================  ================================================================================
   SIGNAUX    SIGNAUX
Line 127 Line 246
 */  */
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #   ifdef Darwin  
 #       define SIGPOLL              SIGINFO  // Signaux utilisés par défaut :
 #   endif  //  SIGINT
   //  SIGTSTP
   //  SIGCONT
   //  SIGURG
   //  SIGPIPE
   //  SIGALRM
   
 //  Arrêt par STOP  //  Arrêt par STOP
 #   define SIGFSTOP                 SIGUSR1  #   define SIGFSTOP                 SIGUSR1
Line 138 Line 262
 //  Injection de données  //  Injection de données
 #   define SIGINJECT                SIGQUIT  #   define SIGINJECT                SIGQUIT
 //  Arrêt général  //  Arrêt général
 #   define SIGABORT                 SIGPROF  #   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  //  Arrêt d'un processus fils depuis autre chose que STOP
 #   define SIGFABORT                SIGPOLL  #   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
 #endif  #endif
Line 190  typedef FILE     file; Line 324  typedef FILE     file;
 typedef unsigned char           t_8_bits;  typedef unsigned char           t_8_bits;
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #   include "rpltypes.conv.h"  #   include "rpltypes-conv.h"
 #else  #else
 #   include "rpltypes.h"  #   include "rpltypes.h"
 #endif  #endif
Line 205  typedef unsigned char   t_8_bits; Line 339  typedef unsigned char   t_8_bits;
 #   ifdef SEMAPHORES_NOMMES  #   ifdef SEMAPHORES_NOMMES
 #       define LONGUEUR_NOM_SEMAPHORE   64  #       define LONGUEUR_NOM_SEMAPHORE   64
 #   endif  #   endif
   
 #   ifndef MAIN_RPL  #   ifndef MAIN_RPL
   #       ifdef _BROKEN_SIGINFO
               extern int              *fifos_signaux;
   #       endif
   
         extern jmp_buf              contexte;          extern jmp_buf              contexte;
         extern jmp_buf              contexte_initial;          extern jmp_buf              contexte_initial;
   
Line 242  typedef unsigned char   t_8_bits; Line 381  typedef unsigned char   t_8_bits;
             extern sem_t            *semaphores_nommes[4];              extern sem_t            *semaphores_nommes[4];
 #       endif  #       endif
 #   else  #   else
   #       ifdef _BROKEN_SIGINFO
               int                     *fifos_signaux;
   #       endif
   
         jmp_buf                     contexte;          jmp_buf                     contexte;
         jmp_buf                     contexte_initial;          jmp_buf                     contexte_initial;
   
Line 362  int sem_getvalue2(sem_t *semaphore, int Line 505  int sem_getvalue2(sem_t *semaphore, int
   
 // Redéfinition de abs pour un fonctionnement en entier de type long long int  // Redéfinition de abs pour un fonctionnement en entier de type long long int
   
 #if 1  #ifdef __GNUC__
 #   define abs(i) ({ typeof(i) _i; _i = (i); (_i >= 0) ? _i : -_i; })  #   define abs(i) ({ typeof(i) _i; _i = (i); (_i >= 0) ? _i : -_i; })
 // typeof() est une extension de gcc, mais est présent sur d'autres compilateurs  // typeof() est une extension de gcc, mais est présent sur d'autres compilateurs
 // comme Sun Studio. Dans le cas où typeof() n'existe pas, il est possible  // comme Sun Studio. Dans le cas où typeof() n'existe pas, il est possible
Line 570  pid_t debug_fork(); Line 713  pid_t debug_fork();
 #       define __erreur(i)  i  #       define __erreur(i)  i
 #   else  #   else
 #       define __erreur(i)  ({ if (strstr(__FUNCTION__, "recherche_variable") \  #       define __erreur(i)  ({ if (strstr(__FUNCTION__, "recherche_variable") \
                 == NULL) fprintf(stderr, "ERROR %d AT %s() LINE %d\n", \                  == NULL) ufprintf(stderr, "ERROR %d AT %s() LINE %d\n", \
                 i, __FUNCTION__, __LINE__); i; })                  i, __FUNCTION__, __LINE__); i; })
 #   endif  #   endif
 #else  #else
Line 746  pid_t debug_fork(); Line 889  pid_t debug_fork();
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
   #ifdef MIN
   #   undef MIN
   #endif
   
   #ifdef MAX
   #   undef MAX
   #endif
   
   #define ADR __RPL_ADR
   #define ALG __RPL_ALG
   #define BIN __RPL_BIN
   #define CHN __RPL_CHN
   #define CPL __RPL_CPL
   #define FCH __RPL_FCH
   #define FCT __RPL_FCT
   #define INT __RPL_INT
   #define LST __RPL_LST
   #define MCX __RPL_MCX
   #define MIN __RPL_MIN
   #define MRL __RPL_MRL
   #define MTX __RPL_MTX
   #define NOM __RPL_NOM
   #define NON __RPL_NON
   #define PRC __RPL_PRC
   #define REL __RPL_REL
   #define RPN __RPL_RPN
   #define SCK __RPL_SCK
   #define SLB __RPL_SLB
   #define SPH __RPL_SPH
   #define SQL __RPL_SQL
   #define TBL __RPL_TBL
   #define VCX __RPL_VCX
   #define VIN __RPL_VIN
   #define VRL __RPL_VRL
   
   
 enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, FCH, FCT, INT, LST,  enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, FCH, FCT, INT, LST,
                 MCX, MIN, MRL, MTX, NOM, NON, PRC, REL, RPN, SCK,                  MCX, MIN, MRL, MTX, NOM, NON, PRC, REL, RPN, SCK,
                 SLB, SPH, SQL, TBL, VCX, VIN, VRL };                  SLB, SPH, SQL, TBL, VCX, VIN, VRL };
Line 1530  typedef struct processus Line 1709  typedef struct processus
     pthread_t                   thread_fusible;      pthread_t                   thread_fusible;
     pthread_t                   thread_surveille_par_fusible;      pthread_t                   thread_surveille_par_fusible;
   
 #   ifndef Cygwin  #   if !defined(Cygwin)
   #       if !(OpenBSD)
     stack_t                     pile_signal;      stack_t                     pile_signal;
   #       else
   #           ifdef SA_ONSTACK
   #               undef SA_ONSTACK
   #           endif
   #           define SA_ONSTACK   0
   #       endif
 #   else  #   else
 #   define SA_ONSTACK           0  #   define SA_ONSTACK           0
 #   define RTLD_LOCAL           0  #   define RTLD_LOCAL           0
Line 1793  typedef struct processus Line 1979  typedef struct processus
   
     unsigned char               traitement_interruption;  /* Y/N */      unsigned char               traitement_interruption;  /* Y/N */
     unsigned char               traitement_interruptible; /* Y/N */      unsigned char               traitement_interruptible; /* Y/N */
       unsigned char               traitement_at_poke;       /* Y/N */
   
     struct_objet                *at_exit;      struct_objet                *at_exit;
       struct_objet                *at_poke;
   
 /* Variables volatiles                                  */  /* Variables volatiles                                  */
   
Line 1991  void instruction_asr(struct_processus *s Line 2179  void instruction_asr(struct_processus *s
 void instruction_atan(struct_processus *s_etat_processus);  void instruction_atan(struct_processus *s_etat_processus);
 void instruction_atanh(struct_processus *s_etat_processus);  void instruction_atanh(struct_processus *s_etat_processus);
 void instruction_atexit(struct_processus *s_etat_processus);  void instruction_atexit(struct_processus *s_etat_processus);
   void instruction_atpoke(struct_processus *s_etat_processus);
 void instruction_autoscale(struct_processus *s_etat_processus);  void instruction_autoscale(struct_processus *s_etat_processus);
 void instruction_axes(struct_processus *s_etat_processus);  void instruction_axes(struct_processus *s_etat_processus);
   
Line 2012  void instruction_cllcd(struct_processus Line 2201  void instruction_cllcd(struct_processus
 void instruction_clmf(struct_processus *s_etat_processus);  void instruction_clmf(struct_processus *s_etat_processus);
 void instruction_close(struct_processus *s_etat_processus);  void instruction_close(struct_processus *s_etat_processus);
 void instruction_clratexit(struct_processus *s_etat_processus);  void instruction_clratexit(struct_processus *s_etat_processus);
   void instruction_clratpoke(struct_processus *s_etat_processus);
 void instruction_clrcntxt(struct_processus *s_etat_processus);  void instruction_clrcntxt(struct_processus *s_etat_processus);
 void instruction_clrerr(struct_processus *s_etat_processus);  void instruction_clrerr(struct_processus *s_etat_processus);
 void instruction_clrfuse(struct_processus *s_etat_processus);  void instruction_clrfuse(struct_processus *s_etat_processus);
Line 2572  void insertion_thread_surveillance(struc Line 2762  void insertion_thread_surveillance(struc
 void integrale_romberg(struct_processus *s_etat_processus,  void integrale_romberg(struct_processus *s_etat_processus,
         struct_objet *s_expression, unsigned char *variable,          struct_objet *s_expression, unsigned char *variable,
         real8 a, real8 b, real8 precision);          real8 a, real8 b, real8 precision);
 void interruption1(int signal, siginfo_t *siginfo, void *context);  void interruption1(SIGHANDLER_ARGS);
 void interruption2(int signal, siginfo_t *siginfo, void *context);  void interruption2(SIGHANDLER_ARGS);
 void interruption3(int signal, siginfo_t *siginfo, void *context);  void interruption3(SIGHANDLER_ARGS);
 void interruption4(int signal, siginfo_t *siginfo, void *context);  void interruption4(SIGHANDLER_ARGS);
 void interruption5(int signal, siginfo_t *siginfo, void *context);  void interruption5(SIGHANDLER_ARGS);
 void interruption6(int signal, siginfo_t *siginfo, void *context);  void interruption6(SIGHANDLER_ARGS);
 void interruption7(int signal, siginfo_t *siginfo, void *context);  void interruption7(SIGHANDLER_ARGS);
 void interruption8(int signal, siginfo_t *siginfo, void *context);  void interruption8(SIGHANDLER_ARGS);
 void interruption9(int signal, siginfo_t *siginfo, void *context);  void interruption9(SIGHANDLER_ARGS);
 void interruption10(int signal, siginfo_t *siginfo, void *context);  void interruption10(SIGHANDLER_ARGS);
 void interruption11(int signal, siginfo_t *siginfo, void *context);  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 2641  void valeurs_singulieres(struct_processu Line 2831  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
   
   #ifndef RPLARGS
   #ifdef _BROKEN_SIGINFO
   void creation_fifos_signaux(struct_processus *s_etat_processus);
   void destruction_fifos_signaux(struct_processus *s_etat_processus);
   void liberation_fifos_signaux(struct_processus *s_etat_processus);
   #endif
   #endif
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Fonctions de sommation de vecteur dans perte de précision    Fonctions de sommation de vecteur dans perte de précision

Removed from v.1.49  
changed lines
  Added in v.1.58


CVSweb interface <joel.bertrand@systella.fr>