--- rpl/src/rpl.h 2010/07/12 15:55:01 1.47 +++ rpl/src/rpl.h 2010/08/12 14:22:37 1.54 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.17 + RPL/2 (R) version 4.0.18 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -31,6 +31,21 @@ # define _DARWIN_C_SOURCE #endif +#ifdef OS2 +# define _BSD_SOURCE +# define _XOPEN_SOURCE 600 + +# include + 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 + /* ================================================================================ @@ -66,8 +81,39 @@ # include # include # include + +# ifdef OS2 +# undef pthread_mutexattr_settype +# define pthread_mutexattr_settype(a, b) +# endif + # include -# include + +# ifndef SEMAPHORES_SYSV +# include +# else +# include +# define SEM_FAILED NULL + typedef int sem_t; + +# ifndef SEM_A +# define SEM_A 0200 +# endif +# ifndef SEM_R +# define SEM_R 0400 +# endif + + 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 # include # include @@ -120,6 +166,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 @@ -127,7 +193,7 @@ */ #ifndef RPLARGS -# ifdef Darwin +# if defined(Darwin) # define SIGPOLL SIGINFO # endif @@ -190,7 +256,7 @@ typedef FILE file; typedef unsigned char t_8_bits; #ifndef RPLARGS -# include "rpltypes.conv.h" +# include "rpltypes-conv.h" #else # include "rpltypes.h" #endif @@ -362,7 +428,7 @@ int sem_getvalue2(sem_t *semaphore, 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; }) // 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 @@ -1229,6 +1295,7 @@ typedef struct liste_pile_systeme unsigned long adresse_retour; unsigned long niveau_courant; + struct_objet *pointeur_adresse_retour; } struct_liste_pile_systeme; #endif @@ -1529,7 +1596,7 @@ typedef struct processus pthread_t thread_fusible; pthread_t thread_surveille_par_fusible; -# ifndef Cygwin +# if !defined(Cygwin) stack_t pile_signal; # else # define SA_ONSTACK 0 @@ -1792,8 +1859,10 @@ typedef struct processus unsigned char traitement_interruption; /* Y/N */ unsigned char traitement_interruptible; /* Y/N */ + unsigned char traitement_at_poke; /* Y/N */ struct_objet *at_exit; + struct_objet *at_poke; /* Variables volatiles */ @@ -1990,11 +2059,13 @@ void instruction_asr(struct_processus *s void instruction_atan(struct_processus *s_etat_processus); void instruction_atanh(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_axes(struct_processus *s_etat_processus); void instruction_b_vers_r(struct_processus *s_etat_processus); void instruction_backspace(struct_processus *s_etat_processus); +void instruction_backtrace(struct_processus *s_etat_processus); void instruction_beep(struct_processus *s_etat_processus); void instruction_bessel(struct_processus *s_etat_processus); void instruction_bin(struct_processus *s_etat_processus); @@ -2010,6 +2081,7 @@ void instruction_cllcd(struct_processus void instruction_clmf(struct_processus *s_etat_processus); void instruction_close(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_clrerr(struct_processus *s_etat_processus); void instruction_clrfuse(struct_processus *s_etat_processus);