/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E L A G E S T I O N D E S F I C H I E R S " I M A G E S " : */
/* */
/* */
/* Definition : */
/* */
/* Ce fichier contient toutes les definitions */
/* de base de gestion des fichiers de type */
/* images raster, quelle que soit la definition. */
/* */
/* */
/* Author of '$xiii/files$DEF' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N H I B I T I O N E V E N T U E L L E D E L A M A N I P U L A T I O N */
/* D E S C O M P O S A N T E S D ' U N O B J E T E N C O U L E U R S : */
/* */
/*************************************************************************************************************************************/
#define MANIPULER_UNE_COMPOSANTE_OBJET_COULEURS \
VRAI
#define NE_PAS_MANIPULER_UNE_COMPOSANTE_OBJET_COULEURS \
NOTL(MANIPULER_UNE_COMPOSANTE_OBJET_COULEURS)
/* Pour savoir si une manipulation du fichier d'une composante d'un objet en couleurs */
/* ("image" ou "palette") doit etre faite ('VRAI') ou pas ('FAUX'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N V E R S I O N E V E N T U E L L E D E S N O M S E N V A L E U R S N U M E R I Q U E S : */
/* */
/*************************************************************************************************************************************/
#define TENTER_LES_CONVERSIONS_DANS_Iload_image \
VRAI
#define NE_PAS_TENTER_LES_CONVERSIONS_DANS_Iload_image \
NOTL(TENTER_LES_CONVERSIONS_DANS_Iload_image)
/* Pour savoir si les noms qui ressemblent a des valeurs numeriques dans 'Iload_image(...)' */
/* peuvent etre utilises comme valeur de tous les points de l'image... */
#define TENTER_LES_CONVERSIONS_DANS_Iacces_image \
VRAI
#define NE_PAS_TENTER_LES_CONVERSIONS_DANS_Iacces_image \
NOTL(TENTER_LES_CONVERSIONS_DANS_Iacces_image)
/* Pour savoir si les noms qui ressemblent a des valeurs numeriques dans 'Iacces_image(...)' */
/* peuvent etre utilises comme valeur de tous les points de l'image... */
#define TENTER_LES_CONVERSIONS_DANS_IloadF_image \
VRAI
#define NE_PAS_TENTER_LES_CONVERSIONS_DANS_IloadF_image \
NOTL(TENTER_LES_CONVERSIONS_DANS_IloadF_image)
/* Pour savoir si les noms qui ressemblent a des valeurs numeriques dans 'IloadF_image(...)' */
/* peuvent etre utilises comme valeur de tous les points de l'image... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D U " D E B O R D E M E N T " D E S P I P E S : */
/* */
/*************************************************************************************************************************************/
#define TESTER_LE_DEBORDEMENT_DU_PIPE_DANS_Iload_fichier \
VRAI
#define NE_PAS_TESTER_LE_DEBORDEMENT_DU_PIPE_DANS_Iload_fichier \
NOTL(TESTER_LE_DEBORDEMENT_DU_PIPE_DANS_Iload_fichier)
/* Pour tester si les pipes contiennent des octets residuels apres un 'Iload_fichier(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P O S I T I O N N E M E N T A U T O M A T I Q U E D U T Y P E D E S I M A G E S : */
/* */
/*************************************************************************************************************************************/
#define TAILLE_D_UNE_IMAGE_UNDEF \
NEGA(UNDEF)
#define LES_IMAGES_SONT_ELLES_STANDARDS(les_images_sont_standards,nom_image) \
COND(I3ET(IFNE_chaine(nom_image,NOM_PIPE) \
,IFNE_chaine(nom_image,NOM_UNDEF) \
,IFNE_chaine(nom_image,NOM_UNDEF_VIDE) \
) \
/* Test introduit le 20060314170407 car il manquait dramatiquement comme cela s'est vu a */ \
/* cette date dans 'v $xiMo/creation$Z alias.....Timbre'... */ \
,COND(IFOU(IFEQ(Isize_image(nom_image),size_i) \
,IFEQ(Isize_image(nom_image),TAILLE_D_UNE_IMAGE_UNDEF) \
) \
,VRAI \
,FAUX \
) \
,les_images_sont_standards \
)
#define gIles_images_sont_standards(les_images_sont_standards,nom_image) \
Bblock \
EGAL(les_images_sont_standards,LES_IMAGES_SONT_ELLES_STANDARDS(les_images_sont_standards,nom_image)); \
Eblock
/* Positionnement automatique de 'les_images_sont_standards' en fonction de la taille de */
/* l'image 'nom_image' (dispositif introduit le 20060308095708 et inutilise a cette date). */
/* */
/* Le nom 'CETTE_IMAGE_EST_STANDARD' fut change en 'LES_IMAGES_SONT_ELLES_STANDARDS' */
/* le 20060309192132, de meme que 'gIles_images_sont_standards(...)' fut change le */
/* 20060309192741 en gIles_images_sont_elles_standards(...)'... */
/* */
/* Le 20060908185715 a ete rajoute un test relatif a 'TAILLE_D_UNE_IMAGE_UNDEF' destine */
/* principalement au cas ou un nom d'image Argument est en fait une valeur numerique */
/* d'initialisation (en effet, cela s'etaitr vu a cette date avec 'v $xci/interpole.03$K' */
/* pour lequel "P=0" transmis a '$xci/format.01$K gIles_images_sont_standards' en tant que */
/* "A=0" via 'v $xci/ExecSdu$vv$Z .xci.format.01.X') ; au lieu de generer une image standard */
/* NOIR, une image non standard avait ete initialisee...). Ainsi, une image inexistante */
/* (ce qui est donc le cas lorsque le nom est en fait une valeur numerique...) est assimilee */
/* a une image standard... */
/* */
/* Le 20060910101626 'TAILLE_D_UNE_IMAGE_UNDEF' est devenue negative afin de ne pas pouvoir */
/* correspondre a l'une des tailles possibles... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A C C E S A U N F I C H I E R - I M A G E Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
#define gIload_image(les_images_sont_standards,imageA,FimageA,nom_image) \
COND(EST_VRAI(les_images_sont_standards) \
,Iload_image(imageA,nom_image) \
,IloadF_image(FimageA,nom_image) \
) \
/* Chargement d'une image quelconque ("standard" ou "flottante"). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A C C E S A U N F I C H I E R - I M A G E Q U E L C O N Q U E S I P R E S E N T : */
/* */
/*************************************************************************************************************************************/
#define gIload_image_si_present(les_images_sont_standards,imageA,FimageA,nom_image,nom_image_absent,valeur,Fvaleur) \
COND(EST_VRAI(les_images_sont_standards) \
,Iload_image_si_present(imageA,nom_image,nom_image_absent,valeur) \
,IloadF_image_si_present(FimageA,nom_image,nom_image_absent,Fvaleur) \
) \
/* Chargement d'une image quelconque ("standard" ou "flottante") si presente (introduit */ \
/* le 20120422080407...). */
#define CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(FimageA,nom_image,nom_image_absent,Fvaleur) \
/* Le 20210130173932, l'ordre des arguments ci-dessus a ete rendu compatible avec celui */ \
/* de 'gIload_image_si_present(...)'... */ \
Bblock \
Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image_si_present(FimageA,nom_image,nom_image_absent,Fvaleur)))) \
Bblock \
Eblock \
ATes \
Bblock \
Test__CODE_ERREUR__ERREUR07; \
Eblock \
ETes \
Eblock \
/* Chargement d'une image flottante ou son initialisation en cas d'absence (ceci fut */ \
/* introduit le 20210130105756...). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A C C E S A U N F I C H I E R - I M A G E Q U E L C O N Q U E P U I S D E S T R U C T I O N : */
/* */
/*************************************************************************************************************************************/
#define gIload_image_and_delete(les_images_sont_standards,imageA,FimageA,nom_image) \
COND(EST_VRAI(les_images_sont_standards) \
,Iload_image_and_delete(imageA,nom_image) \
,IloadF_image_and_delete(FimageA,nom_image) \
) \
/* Chargement d'une image quelconque ("standard" ou "flottante") puis destruction. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A R C H I V A G E D ' U N F I C H I E R Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
#define gIstore_image(les_images_sont_standards,nom_image,imageR,FimageR) \
COND(EST_VRAI(les_images_sont_standards) \
,Istore_image(nom_image,imageR) \
,IstoreF_image(nom_image,FimageR) \
) \
/* Archivage d'une image quelconque ("standard" ou "flottante"). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* U P D A T E D ' U N F I C H I E R Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
#define gIupdate_image(les_images_sont_standards,nom_image,imageR,FimageR) \
COND(EST_VRAI(les_images_sont_standards) \
,Iupdate_image(nom_image,imageR) \
,IupdateF_image(nom_image,FimageR) \
) \
/* "Update" d'une image quelconque ("standard" ou "flottante"). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E S E R R E U R S L E S P L U S F R E Q U E N T E S : */
/* */
/*************************************************************************************************************************************/
#define gTest__CODE_ERREUR__ERREUR07(sequence_s_il_s_agit_de_ERREUR07,sequence_s_il_ne_s_agit_pas_de_ERREUR07) \
Bblock \
Test(IFEQ(CODE_ERREUR,ERREUR07)) \
Bblock \
BLOC(sequence_s_il_s_agit_de_ERREUR07); \
/* Sequence specifique si 'CODE_ERREUR' vaut 'ERREUR07'... */ \
Eblock \
ATes \
Bblock \
BLOC(sequence_s_il_ne_s_agit_pas_de_ERREUR07); \
/* Sequence specifique si 'CODE_ERREUR' ne vaut pas 'ERREUR07'... */ \
Eblock \
ETes \
Eblock \
/* Introduit le 20050218090613 afin de generaliser 'Test__CODE_ERREUR__ERREUR07'... */
#define Test__CODE_ERREUR__ERREUR07__MESSAGE_1 \
"le fichier demande"
#define Test__CODE_ERREUR__ERREUR07__MESSAGE_2 \
" n'existe pas ou n'est pas de type 'image'"
#define Test__CODE_ERREUR__ERREUR07 \
Bblock \
gTest__CODE_ERREUR__ERREUR07 \
(BLOC(Bblock \
PRINT_ATTENTION("la fin de flot a ete rencontree lors du chargement d'une 'image'"); \
Eblock \
) \
,BLOC(Bblock \
DEFV(CHAR,INIT(POINTERc(message_d_erreur),NOM_UNDEF)); \
/* Tout ceci a ete introduit le 20180103100110 afin que le nom du fichier qui a provoque */ \
/* l'erreur (differente de 'ERREUR07') apparaisse dans le 'PRINT_ERREUR(...)' qui suit, */ \
/* alors que malheureusement la procedure 'PRINT_ERREUR(...)' n'accepte pas d'autres */ \
/* arguments que le message d'erreur lui-meme... */ \
\
Test(IFNE(VALIDATION_DES_NOMS_DE_FICHIERS_____nom_du_fichier_courant,ADRESSE_NON_ENCORE_DEFINIE)) \
Bblock \
EGAp(message_d_erreur \
,chain_Aconcaten5(Test__CODE_ERREUR__ERREUR07__MESSAGE_1 \
," '",VALIDATION_DES_NOMS_DE_FICHIERS_____nom_du_fichier_courant,"'" \
,Test__CODE_ERREUR__ERREUR07__MESSAGE_2 \
) \
); \
\
CALZ_FreCC(VALIDATION_DES_NOMS_DE_FICHIERS_____nom_du_fichier_courant); \
Eblock \
ATes \
Bblock \
PRINT_ATTENTION("le nom du fichier courant n'est pas defini"); \
\
EGAp(message_d_erreur \
,chain_Aconcaten2(Test__CODE_ERREUR__ERREUR07__MESSAGE_1 \
,Test__CODE_ERREUR__ERREUR07__MESSAGE_2 \
) \
); \
Eblock \
ETes \
\
PRINT_ERREUR(message_d_erreur); \
\
CALZ_FreCC(message_d_erreur); \
Eblock \
) \
); \
Eblock \
/* Introduit le 20050217131248 afin d'alleger les sources de la plupart des programmes... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S D E T Y P E " P I P E " : */
/* */
/*************************************************************************************************************************************/
#define NOM_PIPE \
ARGUMENT_PIPE \
/* Nom "bidon" donne aux fichiers de type "pipe". */
#if ( (! defined(SYSTEME_FX2800_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_PCC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_SCC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_CC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_CC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_2CC)) \
&& (! defined(SYSTEME_SGIND308_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND324_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND3GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND408_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND424_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND4GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND508_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND524_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND5GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND808_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND824_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND8GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA08_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA24_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDAGA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A1_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A2_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A4_IRIX_CC)) \
&& (! defined(SYSTEME_SGO25224_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VN_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCM801_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCMA01_IRIX_CC)) \
&& (! defined(SYSTEME_SUN3_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC)) \
&& (! defined(SYSTEME_VAX9000_ULTRIX_GCC)) \
)
# define NOM_PIPE_Local \
NOM_PIPE \
/* Nom statique "bidon" donne aux fichiers de type "pipe". */
#Aif ( (! defined(SYSTEME_FX2800_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_PCC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_SCC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_CC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_CC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_2CC)) \
&& (! defined(SYSTEME_SGIND308_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND324_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND3GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND408_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND424_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND4GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND508_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND524_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND5GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND808_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND824_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND8GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA08_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA24_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDAGA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A1_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A2_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A4_IRIX_CC)) \
&& (! defined(SYSTEME_SGO25224_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VN_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCM801_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCMA01_IRIX_CC)) \
&& (! defined(SYSTEME_SUN3_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC)) \
&& (! defined(SYSTEME_VAX9000_ULTRIX_GCC)) \
)
# define NOM_PIPE_Local \
NOM_UNDEF \
/* Nom statique d'un pipe. ATTENTION aux 'unsigned char' pointant sur des constantes chaines */ \
/* de caracteres sur certains SYSTEMEs... */
#Eif ( (! defined(SYSTEME_FX2800_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_PCC)) \
&& (! defined(SYSTEME_FX2800_CONCENTRIX_SCC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_CC)) \
&& (! defined(SYSTEME_FX40_CONCENTRIX_FXC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_CC)) \
&& (! defined(SYSTEME_NWS3000_NEWSOS_2CC)) \
&& (! defined(SYSTEME_SGIND308_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND324_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND3GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND408_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND424_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND4GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND508_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND524_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND5GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND808_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND824_IRIX_CC)) \
&& (! defined(SYSTEME_SGIND8GA_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA08_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDA24_IRIX_CC)) \
&& (! defined(SYSTEME_SGINDAGA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A1_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A2_IRIX_CC)) \
&& (! defined(SYSTEME_SGO200A4_IRIX_CC)) \
&& (! defined(SYSTEME_SGO25224_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VA_IRIX_CC)) \
&& (! defined(SYSTEME_SGO252VN_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCM801_IRIX_CC)) \
&& (! defined(SYSTEME_SGPCMA01_IRIX_CC)) \
&& (! defined(SYSTEME_SUN3_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC)) \
&& (! defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC)) \
&& (! defined(SYSTEME_VAX9000_ULTRIX_GCC)) \
)
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T A I L L E D E Q U E L Q U E S I M A G E S " S T A N D A R D " ( D E B U T ) : */
/* */
/*************************************************************************************************************************************/
#define TAILLE_D_UNE_IMAGE_STANDARD_Std \
TAILLE_D_UN_FICHIER_IMAGE(k___dimXY,size_p) \
/* Taille d'une image "standard" de type 'Std'. */
/* ATTENTION, la definition de 'TAILLE_D_UNE_IMAGE_STANDARD_Pal' doit imperativement etre */
/* dans '$xiidG/fonction.1$DEF' a cause de l'ordre des includes dans '$xi/INCLUDES_min$I'. */
/* Ainsi, on ne peut ecrire ici : */
/* */
/* #ifdef dimXYPali */
/* # define TAILLE_D_UNE_IMAGE_STANDARD_Pal \ */
/* TAILLE_D_UN_FICHIER_IMAGE(dimXYPali,size_p) */
/* #Aifdef dimXYPali */
/* #Eifdef dimXYPali */
/* */
/* car, en effet, dans tous les cas, 'dimXYPali' ne peut qu'etre defini apres... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S C O M P O S A N T E S C H R O M A T I Q U E S E L E M E N T A I R E S */
/* L O R S D E L ' U T I L I S A T I O N D U S Y S T E M E ( R , V , B ) : */
/* */
/*************************************************************************************************************************************/
%define c_ROUGE \
GvarDefaut("ROUGE",".R")
%define c_VERTE \
GvarDefaut("VERTE",".V")
%define c_BLEUE \
GvarDefaut("BLEUE",".B")
/* Nota : la forme 'c_XXXXX' est destine a permettre au mieux le travail de l'operateur */
/* de concatenation ("`") du pre-processeur, d'ou le '%'. */
/* */
/* A cause de 'v $xcg/remote.01$K shell' l'option 'GvalDefaut(...)' a ete introduite */
/* le 19971021162819. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S C O M P O S A N T E S C H R O M A T I Q U E S E L E M E N T A I R E S */
/* L O R S D E L ' U T I L I S A T I O N D U S Y S T E M E ( H , L , S ) : */
/* */
/*************************************************************************************************************************************/
#define c_TEINT \
GvarDefaut("TEINT",".H")
#define c_LUMIN \
GvarDefaut("LUMIN",".L")
#define c_SATUR \
GvarDefaut("SATUR",".G")
/* Nota : la forme 'c_XXXXX' est destine a permettre au mieux le travail de l'operateur */
/* de concatenation ("`") du pre-processeur... */
/* */
/* A cause de 'v $xcg/remote.01$K shell' l'option 'GvalDefaut(...)' a ete introduite */
/* le 19971021162819. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S V U E S " O E I L - D R O I T " E T " O E I L - G A U C H E " : */
/* */
/*************************************************************************************************************************************/
#define c_DROITE \
GvarDefaut("DROITE",".d")
#define c_GAUCHE \
GvarDefaut("GAUCHE",".g")
/* Nota : la forme 'c_XXXXX' est destine a permettre au mieux le travail de l'operateur */
/* de concatenation ("`") du pre-processeur... */
/* */
/* A cause de 'v $xcg/remote.01$K shell' l'option 'GvalDefaut(...)' a ete introduite */
/* le 19971021162819. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S C O O R D O N N E E S T R I D I M E N S I O N N E L L E S : */
/* */
/*************************************************************************************************************************************/
%define c_COORD_X \
GvarDefaut("COORD_X",".cX")
%define c_COORD_Y \
GvarDefaut("COORD_Y",".cY")
%define c_COORD_Z \
GvarDefaut("COORD_Z",".cZ")
/* Ceci fut introduit le 20050907092126 pour 'v $xci/genere$K c_COORD_.'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S S E Q U E N C E S D ' I M A G E S : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_DE_CHIFFRES \
QUATRE \
/* Nombre de chiffres dans le numero d'une image appartenant a une sequence. */
#define PREMIERE_IMAGE_ABSOLUE \
ZERO \
/* Premiere image d'une sequence ; en fait il se peut qu'elle ne soit pas generee : en */ \
/* cas de reprise sur defaut (coupure de courant par exemple...), un parametre de nom */ \
/* 'PREMIERE_IMAGE' (de valeur superieure a celui-ci) pourra etre defini... */
#define DERNIERE_IMAGE_ABSOLUE(nombre_d_images_dans_la_sequence) \
LSTX(PREMIERE_IMAGE_ABSOLUE,nombre_d_images_dans_la_sequence) \
/* Derniere image d'une sequence... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E S F E U X R O U G E S : */
/* */
/*************************************************************************************************************************************/
#define RACINE_RELATIVE_DES_FICHIERS_FEU \
"CoNtRoLe/feu." \
/* Nom general relatif des fichiers de type "feu"... */
#define RACINE_ABSOLUE_DES_FICHIERS_FEU \
EGAs(chain_Aconcaten2(directory_images,RACINE_RELATIVE_DES_FICHIERS_FEU)) \
/* Nom general absolue des fichiers de type "feu", que l'on doit definir a cause de la */ \
/* commande 'SYSTEM(...)' qui s'execute sous 'sh'. On notera que depuis peu, la commande */ \
/* 'SYSTEM(...)' n'est plus utilisee, voir les commentaires de 'ALLUMAGE_D_UN_FEU(...)'. */
#define FICHIER_FEU(nom_du_feu,rang_du_feu) \
EGAs(chain_Aconcaten3(RACINE_ABSOLUE_DES_FICHIERS_FEU \
,EGAs(chain_numero(rang_du_feu,NOMBRE_DE_CHIFFRES)) \
,nom_du_feu \
) \
) \
/* Nom general des fichiers de type "feu"... */
#define FICHIER_FEU_VERT(rang_du_feu) \
FICHIER_FEU(c_VERTE,rang_du_feu) \
/* Nom d'un fichier qui, s'il est present dans le directory "images", ne fait rien... */
#define FICHIER_FEU_ROUGE(rang_du_feu) \
FICHIER_FEU(c_ROUGE,rang_du_feu) \
/* Nom d'un fichier qui, s'il est present dans le directory "images", provoque la */ \
/* mise en attente du process qui le detecte... */
#define MESSAGES_D_ERREUR_POUR_LES_FEUX \
NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS \
/* Il n'y aura pas de messages d'erreur edites pour les feux... */
#define DUREE_DE_L_ATTENTE_AU_FEU_ROUGE \
DEUX \
/* Duree de l'attente au feu (c'est-a-dire avant de le re-tester...). */
#define INITIALISATION_D_UN_FEU(rang_du_feu) \
Bblock \
CALS(Fdelete_fichier(FICHIER_FEU_VERT(rang_du_feu),MESSAGES_D_ERREUR_POUR_LES_FEUX)); \
CALS(Fdelete_fichier(FICHIER_FEU_ROUGE(rang_du_feu),MESSAGES_D_ERREUR_POUR_LES_FEUX)); \
/* Nettoyage du feu... */ \
Eblock \
/* Procedure d'initialisation d'un feu... */
#define ALLUMAGE_D_UN_FEU(couleur_du_fichier_feu,anti_couleur_du_fichier_feu,rang_du_feu) \
Bblock \
CALS(Fstore_fichier_non_formatte(contenu_des_feux_de_signalisation \
,couleur_du_fichier_feu(rang_du_feu) \
,chain_taille(contenu_des_feux_de_signalisation) \
,size_CHAR \
,MESSAGES_D_ERREUR_POUR_LES_FEUX \
) \
); \
/* On cree au prealable la couleur. ATTENTION, il y avait autrefois : */ \
/* */ \
/* SYSTEM(chain_Aconcaten2(C_DATE */ \
/* ,chain_Aconcaten2(C_REDIRECTION_FICHIER */ \
/* ,couleur_du_fichier_feu(rang_du_feu) */ \
/* ) */ \
/* ) */ \
/* ); */ \
/* */ \
/* Or cette solution, si elle est simple, possede un gros inconvenient, celui de ne pas */ \
/* tester les erreurs d'ecriture (par exemple la saturation de l'espace disque). Ainsi, */ \
/* s'il y a erreur, il peut y avoir par consequent des erreurs de synchronisation, ce qui */ \
/* peut bien entendu etre catastrophique (voir par exemple 'v $xci/disk_video_P$Z'). Mais */ \
/* ATTENTION, cette nouvelle solution peu conduire a un inter-blocage "local" : en effet, */ \
/* par exemple, un programme produit des images et sature l'espace disque ; en parallele, */ \
/* ces images sont enregistrees, operation bloquee parce que les feux ne peuvent etre mis */ \
/* en place... Le deblocage ne peut qu'avoir lieu "a la main", en detruisant quelque chose. */ \
CALS(Fdelete_fichier(anti_couleur_du_fichier_feu(rang_du_feu) \
,MESSAGES_D_ERREUR_POUR_LES_FEUX \
) \
); \
/* Puis on efface l'"anti-couleur" ; il apparait que cet ordre des operations est le */ \
/* moins risque, car n'oublions pas que les deux operations ci-dessus ne forment pas */ \
/* (malheureusement) une sequence "atomique"... */ \
Eblock \
/* Procedure d'allumage d'un feu... */
#define MISE_DU_FEU_AU_VERT(rang_du_feu) \
Bblock \
ALLUMAGE_D_UN_FEU(FICHIER_FEU_VERT,FICHIER_FEU_ROUGE,rang_du_feu); \
Eblock \
/* Procedure de mise du feu au vert... */
#define MISE_DU_FEU_AU_ROUGE(rang_du_feu) \
Bblock \
ALLUMAGE_D_UN_FEU(FICHIER_FEU_ROUGE,FICHIER_FEU_VERT,rang_du_feu); \
Eblock \
/* Procedure de mise du feu au rouge... */
#define ATTENDRE_AU_FEU_ROUGE_AVEC_DETECTION_DE_TIME_OUT(rang_du_feu,duree_du_time_out,il_y_a_eu_un_time_out) \
Bblock \
INIT_ERROR; \
DEFV(Int,INIT(detecteur_de_time_out,duree_du_time_out)); \
/* Initialisation du detecteur de "time-out". ATTENTION : il convient d'utiliser ici une */ \
/* variable 'Int' et non pas une variable 'Positive', car en effet, le rapport entre */ \
/* 'duree_du_time_out' et 'DUREE_DE_L_ATTENTE_AU_FEU_ROUGE' n'est pas connu a priori, et */ \
/* donc un passage par zero de 'detecteur_de_time_out' n'est pas garanti : alors cette */ \
/* derniere risque de toujours rester positive... */ \
Tant(IFET(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(FICHIER_FEU_ROUGE(rang_du_feu) \
,EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS \
) \
) \
) \
,IZGT(detecteur_de_time_out) \
) \
) \
/* Nota : on utilise 'Ftest_fichier(...)' car d'une part 'FICHIER_FEU_ROUGE(...)' est un */ \
/* nom absolu, et que d'autre part, ce fichier n'est pas une image... */ \
Bblock \
DODO(DUREE_DE_L_ATTENTE_AU_FEU_ROUGE); \
/* Tant que le fichier "feu rouge" existe, on attend... */ \
DECR(detecteur_de_time_out,DUREE_DE_L_ATTENTE_AU_FEU_ROUGE); \
/* Et on decompte le temps restant avant de detecter un "time-out"... */ \
Eblock \
ETan \
Test(IZGT(detecteur_de_time_out)) \
Bblock \
EGAL(il_y_a_eu_un_time_out,FAUX); \
/* Cas ou il n'y a pas de "time-out"... */ \
Eblock \
ATes \
Bblock \
EGAL(il_y_a_eu_un_time_out,VRAI); \
/* Cas ou il y a "time-out", on le signale... */ \
Eblock \
ETes \
Eblock \
/* Procedure d'attente a un feu rouge avec detection de "time-out"... */
#define ABSENCE_DE_DETECTION_DE_TIME_OUT \
INFINI \
/* Valeur a donner a 'duree_du_time_out' pour qu'il n'y ait pas de "time-out" ; en fait, il */ \
/* y a malgre tout detection de "time-out", mais sa duree est telle (de l'ordre de 68 ans), */ \
/* que cela n'a plus de sens... */
#define ATTENDRE_AU_FEU_ROUGE(rang_du_feu) \
Bblock \
DEFV(Logical,INIT(il_y_a_time_out,FAUX)); \
/* A priori, il n'y a pas de "time-out" (il est theoriquement impossible...). */ \
ATTENDRE_AU_FEU_ROUGE_AVEC_DETECTION_DE_TIME_OUT(rang_du_feu,ABSENCE_DE_DETECTION_DE_TIME_OUT,il_y_a_time_out); \
/* Et on attend avec une duree de "time-out" infinie... */ \
Test(EST_VRAI(il_y_a_time_out)) \
Bblock \
PRINT_ERREUR("un 'time-out' de duree infinie a ete detecte"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Procedure d'attente a un feu rouge sans "time-out" (et donc avec possibilite ennuyeuse */ \
/* de blocage infini...). */
#define FEU_STANDARD \
Gval("feu_standard") \
/* Feu standard (ou a tout faire...). */
#define FEU_D_ARRET_DES_FRACTALES \
Gval("feu_fractales") \
/* Feu permettant de mettre en attente les genarateurs de fractales. */
#define FEU_feu_vide_LX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DES_HADRONS \
Gval("feu_vide_LX") \
/* Feu de synchronisation du programme 'v $xrq/vide.L0$K'. */
#define FEU_feu_meson_LX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DES_HADRONS \
Gval("feu_meson_LX") \
/* Feu de synchronisation du programme 'v $xrq/meson.L0$K'. */
#define FEU_feu_nucleon_LX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DES_HADRONS \
Gval("feu_nucleon_LX") \
/* Feu de synchronisation du programme 'v $xrq/nucleon.L0$K'. */
#define FEU_feu_di_elect_LX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DES_HADRONS \
Gval("feu_di_elect_LX") \
/* Feu de synchronisation du programme 'v $xrq/di_elec.L0$K'. */
#define FEU_feu_proton_JX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DU_PROTON \
Gval("feu_proton_JX") \
/* Feu de synchronisation du programme 'v $xrq/nucleon.L0$K'. */
#define FEU_feu_proton_KX_DE_SYNCHRONISATION_DE_LA_SIMULATION_DU_PROTON \
Gval("feu_proton_KX") \
/* Feu de synchronisation du programme 'v $xrq/nucleon.L0$K'. */
#if ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
# define FEU_DE_SYNCHRONISATION_DE_FIN_D_AFFICHAGE_D_IMAGE \
Gval("feu_display_RVB") \
/* Feu de synchronisation de fin d'affichage d'une image par 'v $xci/display_RVB$K'. */
#Aif ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
#Eif ( (defined(SYSTEME_SG4D20G_IRIX)) \
|| (defined(SYSTEME_SG4D25TG_IRIX)) \
|| (defined(SYSTEME_SG4D310VGX_IRIX)) \
|| (defined(SYSTEME_SG4D35TG_IRIX)) \
|| (defined(SYSTEME_SG4D85GT_IRIX)) \
|| (defined(SYSTEME_SGIND308_IRIX)) \
|| (defined(SYSTEME_SGIND324_IRIX)) \
|| (defined(SYSTEME_SGIND3GA_IRIX)) \
|| (defined(SYSTEME_SGIND408_IRIX)) \
|| (defined(SYSTEME_SGIND424_IRIX)) \
|| (defined(SYSTEME_SGIND4GA_IRIX)) \
|| (defined(SYSTEME_SGIND508_IRIX)) \
|| (defined(SYSTEME_SGIND524_IRIX)) \
|| (defined(SYSTEME_SGIND5GA_IRIX)) \
|| (defined(SYSTEME_SGIND808_IRIX)) \
|| (defined(SYSTEME_SGIND824_IRIX)) \
|| (defined(SYSTEME_SGIND8GA_IRIX)) \
|| (defined(SYSTEME_SGINDA08_IRIX)) \
|| (defined(SYSTEME_SGINDA24_IRIX)) \
|| (defined(SYSTEME_SGINDAGA_IRIX)) \
|| (defined(SYSTEME_SGO200A1_IRIX)) \
|| (defined(SYSTEME_SGO200A2_IRIX)) \
|| (defined(SYSTEME_SGO200A4_IRIX)) \
|| (defined(SYSTEME_SGO25224_IRIX)) \
|| (defined(SYSTEME_SGO252VA_IRIX)) \
|| (defined(SYSTEME_SGO252VN_IRIX)) \
|| (defined(SYSTEME_SGPCM801_IRIX)) \
|| (defined(SYSTEME_SGPCMA01_IRIX)) \
)
#define FEU_DE_SYNCHRONISATION_DE_FIN_DES_ENREGISTREMENTS_PAL_BETA \
Gval("feu_disqueP") \
/* Feu de synchronisation de fin des enregistrements sur le disque 'PAL-Beta'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E S A L B U M S : */
/* */
/*************************************************************************************************************************************/
#define NOM_DE_L_IMAGE_COURANTE_D_UNE_SEQUENCE(nom_de_l_image,nom_sequence,postfixe,numero_de_l_image_courante,nombre_de_chiffres) \
Bblock \
EGAp(nom_de_l_image \
,COND(IFEQ_chaine(postfixe,NOM_UNDEF_VIDE) \
,EGAs(chain_Aconcaten2_sauf_nom_pipe(nom_sequence \
,EGAs(chain_numero(numero_de_l_image_courante,nombre_de_chiffres)) \
) \
) \
,EGAs(chain_Aconcaten3_sauf_nom_pipe(nom_sequence \
,EGAs(chain_numero(numero_de_l_image_courante,nombre_de_chiffres)) \
,postfixe \
) \
) \
) \
); \
Eblock \
/* Generation du nom de l'image courante de l'album. */
#define INVERSION_DES_NUMEROS_D_IMAGE(inverser,numero,numero_inverse) \
COND(IL_FAUT(inverser),numero_inverse,numero) \
/* Introduit le 20181101090934... */
#define GdAload_album(AlbumIm,NomAlbum,Post,Premiere,Pas,NChiffres,Aabsent,nom_absent,attendre,duree,Load,Initialise,VDefaut,Inv,Inc) \
/* L'argument 'Inc' (pour 'Incomplet') a ete introduit le 20120322074924 et a cette */ \
/* occasion, 'Initialisation' a ete remplace par 'Initialise'... */ \
Bblock \
DEFV(Int,INIT(numero_de_l_image_courante,Premiere)); \
DEFV(Int,INIT(numero_inverse_de_l_image_courante,ADD2(Premiere,TRMU(dimZ)))); \
/* Numero de l'image courante initialise sur la premiere image a recuperer. Le numero */ \
/* "inverse" a ete introduit le 20181101090934... */ \
\
BSaveModifyVariable(Int,pasZ,Pas); \
/* Introduit le 20110119134835 car, en effet, il manquait... */ \
\
begin_fuite \
Bblock \
DEFV(Int,INIT(Z_effectif,COND(IL_NE_FAUT_PAS(Inv),NEUT(Z),RENZ(Z)))); \
/* Cette possibilite d'inverser l'axe 'OZ' a ete introduite le 20091125131531... */ \
\
Test(IFET(EST_VRAI(Aabsent),IFEQ_chaine(NomAlbum,nom_absent))) \
/* Cette possibilite a ete introduite le 20050621135646... */ \
Bblock \
CALS(Initialise(PAGE(AlbumIm,Z_effectif),VDefaut)); \
Eblock \
ATes \
Bblock \
DEFV(Int,INIT(code_d_erreur_anterieur,CODE_ERREUR)); \
/* Sauvegarde du code d'erreur avant le 'Load(...)' a venir... */ \
DEFV(CHAR,INIT(POINTERc(nom_de_l_image_courante),NOM_UNDEF)); \
/* Nom courant des images. */ \
\
NOM_DE_L_IMAGE_COURANTE_D_UNE_SEQUENCE(nom_de_l_image_courante \
,NomAlbum \
,Post \
,INVERSION_DES_NUMEROS_D_IMAGE(GdAload_album_____inverser_numeros \
,numero_de_l_image_courante \
,numero_inverse_de_l_image_courante \
) \
,NChiffres \
); \
\
BSaveVariable(Logical,bloquer_tous_les_messages_d_erreur_des_fichiers); \
\
Test(EST_VRAI(Inc)) \
Bblock \
EGAL(bloquer_tous_les_messages_d_erreur_des_fichiers \
,BLOQUER_TOUS_LES_MESSAGES_D_ERREUR_DES_FICHIERS \
); \
/* Dans le cas ou les albums peuvent etre incomplets, il ne faut editer aucun message */ \
/* d'erreur (introduit le 20120322141742). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFET(IL_FAUT(attendre) \
,EST_FAUX(Inc) \
) \
) \
/* Le test de 'Inc' a ete introduit le 20120322140718... */ \
Bblock \
/* Cas ou l'attente des images inexistantes est demandee : */ \
Tant(IL_Y_A_ERREUR(CODE_ERROR(Load(PAGE(AlbumIm,Z_effectif),nom_de_l_image_courante)))) \
Bblock \
DODO(duree); \
/* Le 20040928093300, cette boucle 'Tant(...)' est devenue une boucle eventuellement */ \
/* temporisee (si 'duree' est non nulle), alors qu'anterieurement a cette date, il */ \
/* s'agissait d'une boucle d'attente active (sans l'actuel 'DODO(...)'). */ \
Eblock \
ETan \
Eblock \
ATes \
Bblock \
/* Cas ou l'attente des images inexistantes n'est pas demandee, ce cas devant alors etre */ \
/* considere comme une erreur : */ \
Test(PAS_D_ERREUR(CODE_ERROR(Load(PAGE(AlbumIm,Z_effectif),nom_de_l_image_courante)))) \
Bblock \
Eblock \
ATes \
Bblock \
Test(EST_VRAI(Inc)) \
/* La possibilite d'avoir un album incomplet a ete introduite le 20120322074924... */ \
Bblock \
CALS(Initialise(PAGE(AlbumIm,Z_effectif),VDefaut)); \
/* Une page manquante est initialisee automatiquement et silencieusement... */ \
CODE_ERROR(OK); \
/* Dans le cas ou l'album peut etre incomplet, il n'y a plus d'erreur (introduit le */ \
/* 20120322143000). */ \
Eblock \
ATes \
Bblock \
gTest__CODE_ERREUR__ERREUR07 \
(BLOC(Bblock \
PRINT_ATTENTION("fin de flot rencontree lors du chargement d'un 'album'"); \
Eblock \
) \
,BLOC(Bblock \
Test(IL_FAUT(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers)) \
Bblock \
PRINT_ERREUR("probleme de lecture d'un album"); \
CAL1(Prer1("son nom est '%s' et les causes possibles sont :\n" \
,NomAlbum \
) \
); \
CAL1(Prer1("1-la page '%s' n'existe pas ou n'est pas de type 'image',\n" \
,nom_de_l_image_courante \
) \
); \
CAL1(Prer0("2-c'est un 'pipe' et il n'y a pas assez d'octets a lire ")); \
CAL1(Prer0("(venant, par exemple, d'un mauvais dimensionnement).\n")); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
) \
); \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
ETes \
\
ESaveVariable(Logical,bloquer_tous_les_messages_d_erreur_des_fichiers); \
\
CALZ_FreCC(nom_de_l_image_courante); \
\
INCR(numero_de_l_image_courante,Pas); \
DECR(numero_inverse_de_l_image_courante,Pas); \
/* Numero de l'image suivante a recuperer... */ \
\
CODE_ERROR(COND(IL_Y_A_ERREUR(CODE_ERREUR),CODE_ERREUR,code_d_erreur_anterieur)); \
/* S'il y a eu erreur dans le 'Load(...)' precedent, c'est ce dernier code d'erreur */ \
/* qui est renvoye, sinon, c'est le code d'erreur anterieur (c'est-a-dire tel qu'il etait */ \
/* avant le 'Load(...)' precedent) qui l'est... */ \
Eblock \
ETes \
Eblock \
end_fuite \
\
ESaveModifyVariable(Int,pasZ); \
/* Introduit le 20110119134835 car, en effet, il manquait... */ \
Eblock \
/* Chargement d'un album d'images quelconque... */
#define dAload_album(album_images,nom_de_l_album,postfixe,premiere_image,pas_des_images,NChiff,attendre,duree,Inv) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,NChiff \
,FAUX \
,NOM_UNDEF \
,attendre,duree \
,Iload_image \
,Iinitialisation \
,NIVEAU_UNDEF \
,Inv \
,FAUX \
); \
Eblock \
/* Chargement d'un album d'images "standard" devant etre present... */
#define idAload_album(album_images,nom_de_l_album,postfixe,premiere_image,pas_des_images,NChiff,attendre,duree,Inv,Inc,ValInc) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,NChiff \
,FAUX \
,NOM_UNDEF \
,attendre,duree \
,Iload_image \
,Iinitialisation \
,ValInc \
,Inv \
,Inc \
); \
Eblock \
/* Chargement d'un album d'images "standard" devant etre present, mais pouvant etre */ \
/* incomplet (introduit le 20120322084948)... */
#define gdAload_album(album_images,nom_de_l_album,postfixe,Premiere,pas_des_images,NChiff,nom_absent,attendre,duree,VDefaut,Inv) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,Premiere \
,pas_des_images \
,NChiff \
,VRAI \
,nom_absent \
,attendre,duree \
,Iload_image \
,Iinitialisation \
,VDefaut \
,Inv \
,FAUX \
); \
Eblock \
/* Chargement d'un album d'images "standard" pouvant etre absent... */
#define dAloadF_album(album_images,nom_de_l_album,postfixe,premiere_image,pas_des_images,NChiff,attendre,duree,Inv) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,NChiff \
,FAUX \
,NOM_UNDEF \
,attendre,duree \
,IloadF_image \
,IFinitialisation \
,FLOT__UNDEF \
,Inv \
,FAUX \
); \
Eblock \
/* Chargement d'un album d'images "flottant" devant etre present... */
#define idAloadF_album(album_images,nom_de_l_album,postfixe,premiere_image,pas_des_images,NChiff,attendre,duree,Inv,Inc,ValInc) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,NChiff \
,FAUX \
,NOM_UNDEF \
,attendre,duree \
,IloadF_image \
,IFinitialisation \
,ValInc \
,Inv \
,Inc \
); \
Eblock \
/* Chargement d'un album d'images "flottant" devant etre present, mais pouvant etre */ \
/* incomplet (introduit le 20120322084948)... */
#define gdAloadF_album(album_images,nom_de_l_album,postfixe,Premiere,pas_des_images,NChiff,nom_absent,attendre,duree,VDefaut,Inv) \
Bblock \
GdAload_album(album_images \
,nom_de_l_album \
,postfixe \
,Premiere \
,pas_des_images \
,NChiff \
,VRAI \
,nom_absent \
,attendre,duree \
,IloadF_image \
,IFinitialisation \
,VDefaut \
,Inv \
,FAUX \
); \
Eblock \
/* Chargement d'un album d'images "flottant" pouvant etre absent... */
#define GdAupdate_album(nom_de_l_album,postfixe,premiere_image,pas_des_images,album_d_images,nombre_de_chiffres,update,Inv) \
Bblock \
DEFV(Int,INIT(numero_de_l_image_courante,premiere_image)); \
DEFV(Int,INIT(numero_inverse_de_l_image_courante,ADD2(premiere_image,TRMU(dimZ)))); \
/* Numero de l'image courante initialise sur la premiere image a recuperer. Le numero */ \
/* "inverse" a ete introduit le 20181101090934... */ \
\
begin_fuite \
Bblock \
DEFV(Int,INIT(Z_effectif,COND(IL_NE_FAUT_PAS(Inv),NEUT(Z),RENZ(Z)))); \
/* Cette possibilite d'inverser l'axe 'OZ' a ete introduite le 20100624082847... */ \
\
DEFV(CHAR,INIT(POINTERc(nom_de_l_image_courante),NOM_UNDEF)); \
/* Nom courant des images. */ \
\
NOM_DE_L_IMAGE_COURANTE_D_UNE_SEQUENCE(nom_de_l_image_courante \
,nom_de_l_album \
,postfixe \
,INVERSION_DES_NUMEROS_D_IMAGE(GdAupdate_album_____inverser_numeros \
,numero_de_l_image_courante \
,numero_inverse_de_l_image_courante \
) \
,nombre_de_chiffres \
); \
\
CALS(update(nom_de_l_image_courante,PAGE(album_d_images,Z_effectif))); \
CALZ_FreCC(nom_de_l_image_courante); \
\
INCR(numero_de_l_image_courante,pas_des_images); \
DECR(numero_inverse_de_l_image_courante,pas_des_images); \
/* Numero de l'image suivante a generer... */ \
Eblock \
end_fuite \
Eblock \
/* Mise a jour d'un album d'images. */
#define dAupdate_album(nom_de_l_album,postfixe,premiere_image,pas_des_images,album_d_images,nombre_de_chiffres,Inv) \
Bblock \
GdAupdate_album(nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,album_d_images \
,nombre_de_chiffres \
,Iupdate_image \
,Inv \
); \
Eblock \
/* Mise a jour d'un album d'images "standard". */
#define dAupdateF_album(nom_de_l_album,postfixe,premiere_image,pas_des_images,album_d_images,nombre_de_chiffres,Inv) \
Bblock \
GdAupdate_album(nom_de_l_album \
,postfixe \
,premiere_image \
,pas_des_images \
,album_d_images \
,nombre_de_chiffres \
,IupdateF_image \
,Inv \
); \
Eblock \
/* Mise a jour d'un album d'images "flottant". */