version 1.46, 2010/06/28 14:30:33
|
version 1.53, 2010/08/09 13:51:48
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.17 |
RPL/2 (R) version 4.0.18 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 31
|
Line 31
|
# define _DARWIN_C_SOURCE |
# define _DARWIN_C_SOURCE |
#endif |
#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 |
|
# undef IPV6 |
|
|
|
# include "getaddrinfo-conv.h" |
|
|
|
# define sched_yield(arg) |
|
#else |
|
# define IPV6 |
|
#endif |
|
|
|
|
/* |
/* |
================================================================================ |
================================================================================ |
Line 66
|
Line 84
|
# 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> |
|
|
# ifndef SEMAPHORES_SYSV |
|
# include <semaphore.h> |
|
# else |
|
# include <sys/sem.h> |
|
# 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 <setjmp.h> |
# include <setjmp.h> |
# include <signal.h> |
# include <signal.h> |
# include <termios.h> |
# include <termios.h> |
Line 120
|
Line 169
|
|
|
#include "librplprototypes.h" |
#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 |
SIGNAUX |
Line 127
|
Line 196
|
*/ |
*/ |
|
|
#ifndef RPLARGS |
#ifndef RPLARGS |
# ifdef Darwin |
# if defined(Darwin) |
# define SIGPOLL SIGINFO |
# define SIGPOLL SIGINFO |
# endif |
# endif |
|
|
Line 190 typedef FILE file;
|
Line 259 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 362 int sem_getvalue2(sem_t *semaphore, int
|
Line 431 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 1213 typedef struct liste_pile_systeme
|
Line 1282 typedef struct liste_pile_systeme
|
|
|
/* |
/* |
type clôture : |
type clôture : |
C CASE : END termine un test SELECT/CASE/THEN/END/DEFAULT/END. |
C SELECT : END termine un test SELECT/DEFAULT/END. |
D DO : END termine une boucle DO/UNTIL/END. |
D DO : END termine une boucle DO/UNTIL/END. |
I IF : END termine un test IF/THEN (ELSE)/END. |
I IF : END termine un test IF/THEN (ELSE)/END. |
J IFERR : END termine un test IFERR/THEN (ELSE)/END. |
J IFERR : END termine un test IFERR/THEN (ELSE)/END. |
W WHILE : END termine une boucle WHILE/REPEAT/END. |
K CASE : END termine un test CASE/THEN/END |
|
W WHILE : END termine une boucle WHILE/REPEAT/END. |
F FOR : NEXT ou STEP termine une boucle avec compteur. |
|
S START : NEXT ou STEP termine une boucle sans compteur. |
F FOR : NEXT ou STEP termine une boucle avec compteur. |
L LOOP : boucle utilisé dans le traitement de l'instruction RETURN. |
S START : NEXT ou STEP termine une boucle sans compteur. |
|
L LOOP : boucle utilisé dans le traitement de l'instruction RETURN. |
Elle correspond à une boucle FOR ou START mais sans son |
Elle correspond à une boucle FOR ou START mais sans son |
initialisation. |
initialisation. |
*/ |
*/ |
|
|
unsigned long adresse_retour; |
unsigned long adresse_retour; |
unsigned long niveau_courant; |
unsigned long niveau_courant; |
|
struct_objet *pointeur_adresse_retour; |
} struct_liste_pile_systeme; |
} struct_liste_pile_systeme; |
#endif |
#endif |
|
|
Line 1528 typedef struct processus
|
Line 1599 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) |
stack_t pile_signal; |
stack_t pile_signal; |
# else |
# else |
# define SA_ONSTACK 0 |
# define SA_ONSTACK 0 |
Line 1791 typedef struct processus
|
Line 1862 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 1989 void instruction_asr(struct_processus *s
|
Line 2062 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); |
|
|
void instruction_b_vers_r(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_backspace(struct_processus *s_etat_processus); |
|
void instruction_backtrace(struct_processus *s_etat_processus); |
void instruction_beep(struct_processus *s_etat_processus); |
void instruction_beep(struct_processus *s_etat_processus); |
void instruction_bessel(struct_processus *s_etat_processus); |
void instruction_bessel(struct_processus *s_etat_processus); |
void instruction_bin(struct_processus *s_etat_processus); |
void instruction_bin(struct_processus *s_etat_processus); |
Line 2009 void instruction_cllcd(struct_processus
|
Line 2084 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); |