/*************************************************************************************************************************************/ /* */ /* 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". */