--- rpl/src/rpl.h 2010/08/06 15:26:51 1.51 +++ rpl/src/rpl.h 2010/08/13 21:00:37 1.55 @@ -34,18 +34,19 @@ #ifdef OS2 # define _BSD_SOURCE # define _XOPEN_SOURCE 600 +# define _BROKEN_SIGINFO # include enum { SHUT_RD = 0, SHUT_WR, SHUT_RDWR }; # define SHUT_RD SHUT_RD # define SHUT_WR SHUT_WR # define SHUT_RDWR SHUT_RDWR -# define SEM_FAILED NULL -# undef IPV6 # include "getaddrinfo-conv.h" + +# define sched_yield(arg) #else -# define IPV6 +# undef _BROKEN_SIGINFO #endif @@ -91,21 +92,39 @@ # include -# ifndef OS2 +# ifndef SEMAPHORES_SYSV # include # else -# include - typedef int sem_t; +# ifdef OS2 +# define INCL_DOSSEMAPHORES +# define INCL_DOSMEMMGR +# define INCL_DOSERRORS +# include + + typedef struct _OS2SEM + { + HMTX hmtx; + HEV hev; + ULONG shared; + ULONG *cnt; + ULONG *nopened; + ULONG allocated; + } sem_t; +# else + typedef int sem_t; +# endif + +# define SEM_FAILED NULL - sem_t *sem_open(const char *nom, int oflag, ...); - int sem_init(sem_t *sem, int shared, unsigned int value); - int sem_close(sem_t *sem); - int sem_wait(sem_t *sem); - int sem_trywait(sem_t *sem); - int sem_post(sem_t *sem); - int sem_getvalue(sem_t *sem, int *value); - int sem_unlink(const char *nom); - int sem_destroy(sem_t *sem); + 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 @@ -160,6 +179,26 @@ #include "librplprototypes.h" + +/* +================================================================================ + 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 @@ -786,6 +825,42 @@ 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, MCX, MIN, MRL, MTX, NOM, NON, PRC, REL, RPN, SCK, SLB, SPH, SQL, TBL, VCX, VIN, VRL };