version 1.33, 2012/01/05 10:19:06
|
version 1.45, 2013/03/27 15:47:36
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.5 |
RPL/2 (R) version 4.1.13 |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
Copyright (C) 1989-2013 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 70
|
Line 70
|
#define replaceElementIntoDaisyChain(daisyChain, element) \ |
#define replaceElementIntoDaisyChain(daisyChain, element) \ |
do { typeof(daisyChain) __daisyChain = daisyChain; \ |
do { typeof(daisyChain) __daisyChain = daisyChain; \ |
if (__daisyChain == NULL) executionError("Nullified daisy chain"); \ |
if (__daisyChain == NULL) executionError("Nullified daisy chain"); \ |
|
freeObject((*__daisyChain).donnee); \ |
(*__daisyChain).donnee = element; } while(0) |
(*__daisyChain).donnee = element; } while(0) |
|
|
#define nextElementOfDaisyChain(daisyChain) \ |
#define nextElementOfDaisyChain(daisyChain) \ |
Line 104
|
Line 105
|
#define logical int |
#define logical int |
#define string char * |
#define string char * |
#define integer int |
#define integer int |
|
#define object struct_objet * |
|
|
#define declareStructure typedef struct { |
#define declareStructure typedef struct { |
#define declareUnion typedef union { |
#define declareUnion typedef union { |
#define as(name) } name; |
#define as(name) } name; |
|
|
|
#define __RPL__ struct_rpl_arguments rpl_arguments |
|
|
#define target(a) (*a) |
#define target(a) (*a) |
#define address(a) (&a) |
#define address(a) (&a) |
|
|
Line 120
|
Line 124
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
|
Signaux |
|
--------------------------------------------------------------------------------*/ |
|
|
|
#define blockSignals \ |
|
{ sigset_t set, oldset; sigfillset(&set); \ |
|
pthread_sigmask(SIG_BLOCK, &set, &oldset); |
|
#define unblockSignals \ |
|
pthread_sigmask(SIG_SETMASK, &oldset, NULL); } |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
Constructeurs |
Constructeurs |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
Line 175
|
Line 190
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
|
Destruction d'un objet |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#define freeObject(object) \ |
|
{ \ |
|
if (object == NULL) \ |
|
systemError("Nullified object"); \ |
|
liberation(object); \ |
|
object = NULL; \ |
|
} while(0) |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Copie d'un objet |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#define dupObject(object) \ |
|
{ if (copie_objet(object, 'P') != object) \ |
|
systemError("Memory allocation error"); } while(0) |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Déclaration des fonctions internes |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#define declareInternalFunction(name, ...) \ |
|
__internal_##name(struct_rpl_arguments *rpl_arguments, __VA_ARGS__) { |
|
|
|
#define endInternalFunction } |
|
|
|
#define useInternalFunction(name, ...) \ |
|
__internal_##name(struct_rpl_arguments *rpl_arguments, __VA_ARGS__) |
|
|
|
#define callInternalFunction(name, ...) \ |
|
__internal_##name(rpl_arguments, __VA_ARGS__) |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
Déclaration des fonctions externes |
Déclaration des fonctions externes |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
*/ |
*/ |
|
|
#define declareExternalFunction(name) \ |
#define declareExternalFunction(name) \ |
void __external_##name(struct_rpl_arguments *rpl_arguments) { \ |
void __external_##name(struct_rpl_arguments *rpl_arguments) { \ |
char __function_name[] = "__external_"#name; |
char __function_name[] = "__external_"#name; \ |
|
__static_rpl_arguments = (*rpl_arguments); |
|
|
#define useExternalFunction(function) \ |
#define useExternalFunction(function) \ |
void __external_##function(struct_rpl_arguments *rpl_arguments) |
void __external_##function(struct_rpl_arguments *rpl_arguments) |
Line 192
|
Line 249
|
#define __onClosing void __runOnClosing(struct_rpl_arguments *rpl_arguments) |
#define __onClosing void __runOnClosing(struct_rpl_arguments *rpl_arguments) |
#define declareSubroutine(when) __##when { \ |
#define declareSubroutine(when) __##when { \ |
char __function_name[] = #when; \ |
char __function_name[] = #when; \ |
|
__static_rpl_arguments = (*rpl_arguments); \ |
HEADER \ |
HEADER \ |
declareHelpString(""); \ |
declareHelpString(""); \ |
numberOfArguments(0); \ |
numberOfArguments(0); \ |
Line 362
|
Line 420
|
(*rpl_arguments).type_erreur = 'E'; \ |
(*rpl_arguments).type_erreur = 'E'; \ |
(*rpl_arguments).message_erreur = (unsigned char *) message; } while(0) |
(*rpl_arguments).message_erreur = (unsigned char *) message; } while(0) |
|
|
|
#define onSystemError(...) { \ |
|
if ((*rpl_arguments).erreur != 0) \ |
|
{ \ |
|
__VA_ARGS__; \ |
|
blockSignals; \ |
|
kill(getpid(), SIGTERM); \ |
|
unblockSignals; \ |
|
} } while(0) |
|
|
#define onError(...) \ |
#define onError(...) \ |
do { if (((*rpl_arguments).type_erreur == 'E') && \ |
do { if (((*rpl_arguments).type_erreur == 'E') && \ |
((*rpl_arguments).erreur != 0)) { __VA_ARGS__; \ |
((*rpl_arguments).erreur != 0)) { __VA_ARGS__; \ |
Line 1004
|
Line 1071
|
} \ |
} \ |
} } while(0) |
} } while(0) |
|
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Destruction d'un objet |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#define freeObject(object) \ |
|
{ \ |
|
if (object == NULL) \ |
|
systemError("Nullified object"); \ |
|
liberation(object); \ |
|
object = NULL; \ |
|
} while(0) |
|
|
|
/* |
|
-------------------------------------------------------------------------------- |
|
Copie d'un objet |
|
-------------------------------------------------------------------------------- |
|
*/ |
|
|
|
#define dupObject(object) \ |
|
{ if (copie_objet(object, 'P') != object) \ |
|
systemError("Memory allocation error"); } while(0) |
|
|
|
/* |
/* |
-------------------------------------------------------------------------------- |
-------------------------------------------------------------------------------- |
Allocation mémoire |
Allocation mémoire |
Line 1068
|
Line 1110
|
|
|
#endif |
#endif |
|
|
|
static struct_rpl_arguments __static_rpl_arguments; |
|
#define __RPL__ struct_rpl_arguments *rpl_arguments; \ |
|
rpl_arguments = &__static_rpl_arguments; |
|
|
// vim: ts=4 |
// vim: ts=4 |