/*************************************************************************************************************************************/
/* */
/* P R I M I T I V E S D E T R A I T E M E N T D E S */
/* N I V E A U X S O U S F O R M E D E " F O N C T I O N S " : */
/* */
/* */
/* Definition : */
/* */
/* Dans ce fichier se trouvent toutes les */
/* primitives de traitement des niveaux d'une */
/* image raster ; elles sont exprimees */
/* sous forme de fonctions ce qui fait */
/* que la duree d'execution par rapport */
/* aux "defines" est tres allongee... */
/* */
/* */
/* Author of '$xiin/fonction.1$DEF' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N D ' U N N I V E A U : */
/* */
/*************************************************************************************************************************************/
#define INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_XX,fonction_de_substitution,modification_de_la_liste) \
Bblock \
CLEAR_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_XX); \
/* Initialisation preliminaire a 'NIVEAU_UNDEF' des listes "inverses". */ \
BoIn(index,NOIR,BLANC,PAS_COULEURS) \
Bblock \
EGAL(ACCES_listes_de_substitution(L_SUBSTITUTION_XX,index) \
,fonction_de_substitution(index) \
); \
CALCUL_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_XX,index); \
/* Puis initialisation des listes "directes" et "inverses", */ \
EGAL(ACCES_blocage_des_listes_de_substitution(L_SUBSTITUTION_XX,index) \
,modification_de_la_liste \
); \
/* Ainsi que de la matrice des blocages de modification des listes "directes". */ \
Eblock \
EBoI \
Eblock \
/* Deplace de 'v $xiin/$xiin/fonction.1$FON 20110401185706' a ici le 20110401190030 pour */ \
/* etre utilisable dans 'v $ximf/aleatoires$DEF INITIALISATION_LISTES_DE_SUBSTITUTION'... */
#define INITIALISATION_LISTES_DE_SUBSTITUTION \
Bblock \
Test(EST_FAUX(init_substitution)) \
Bblock \
BoIn(index,NOIR,BLANC,PAS_COULEURS) \
Bblock \
AUTORISATION_DE_SUBSTITUTION_D_UN_NIVEAU(index); \
/* A priori, on autorise la substitution de tous les niveaux... */ \
Eblock \
EBoI \
\
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_NEUTRE,fonction_neutre_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_01,fonction_01_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_02,fonction_02_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_11,fonction_11_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_12,fonction_12_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_13,fonction_13_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_14,fonction_14_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_21,fonction_21_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_22,fonction_22_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_23,fonction_23_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_24,fonction_24_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_25,fonction_25_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_26,fonction_26_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_27,fonction_27_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_28,fonction_28_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_31,fonction_31_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_32,fonction_32_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_33,fonction_33_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_34,fonction_34_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_35,fonction_35_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_36,fonction_36_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_37,fonction_37_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_38,fonction_38_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_39,fonction_39_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3A,fonction_3A_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3B,fonction_3B_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3C,fonction_3C_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3D,fonction_3D_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3E,fonction_3E_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3F,fonction_3F_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_3G,fonction_3G_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_FF,fonction_FF_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_FE,fonction_FE_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_FC,fonction_FC_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_F8,fonction_F8_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_F0,fonction_F0_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_E0,fonction_E0_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_C0,fonction_C0_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_80,fonction_80_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_ROUGE_BASIC,fonction_ROUGE_de_substitution,AUTORISE); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_VERTE_BASIC,fonction_VERTE_de_substitution,AUTORISE); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_BLEUE_BASIC,fonction_BLEUE_de_substitution,AUTORISE); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_VARIABLE,fonction_variable_de_substitution,AUTORISE); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_HISTOGRAMME,fonction_variable_de_substitution,AUTORISE); \
/* Introduit le 20081004123137... */ \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_SOLAR,fonction_SOLAR_de_substitution,INTERDIT); \
INITIALISATION_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_X_WINDOW,fonction_X_WINDOW_de_substitution,AUTORISE); \
\
EGAL(init_substitution,VRAI); \
/* Et on memorise que l'initialisation est faite... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Deplace de 'v $xiin/$xiin/fonction.1$FON 20110401185706' a ici le 20110401190030 pour */ \
/* etre utilisable dans 'v $ximf/aleatoires$DEF INITIALISATION_LISTES_DE_SUBSTITUTION'... */
#define BLANC_SOLAR \
MOCD \
/* Definition du niveau de blanc sur le SOLAR. */
#define NOIR_SOLAR \
NOIR \
/* Definition du niveau de noir sur le SOLAR. */
#define fonction_neutre_de_substitution(niveau) \
NEUT(niveau) \
/* Definition de la fonction standard ("1" pour "1")... */
#define fonction_01_de_substitution(niveau) \
NIVA(COND(EST_PAIR(ADD2(NIVR(NOIR) \
,NIVR(NOIR) \
) \
) \
,MOID(ADD2(NIVR(NOIR),NIVR(niveau))) \
,MOIE(ADD2(NIVR(NOIR),NIVR(niveau))) \
) \
) \
/* Definition de la fonction de mise dans [NOIR,FRA2(BLANC)]. */
#define fonction_02_de_substitution(niveau) \
NIVA(COND(EST_PAIR(ADD2(NIVR(BLANC) \
,NIVR(NOIR) \
) \
) \
,MOID(ADD2(NIVR(BLANC),NIVR(niveau))) \
,MOIE(ADD2(NIVR(BLANC),NIVR(niveau))) \
) \
) \
/* Definition de la fonction de mise dans [FRA2(BLANC),BLANC]. */
#define fonction_11_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA4(NIVR(niveau))) \
,GRO0(FRA4(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [NOIR,FRA4(BLANC)]. */
#define fonction_12_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA4(NIVR(niveau))) \
,GRO1(FRA4(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [FRA4(BLANC),FRA2(BLANC)]. */
#define fonction_13_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA4(NIVR(niveau))) \
,GRO2(FRA4(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [FRA2(BLANC),GRO3(FRA4(BLANC))]. */
#define fonction_14_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA4(NIVR(niveau))) \
,GRO3(FRA4(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO3(FRA4(BLANC)),BLANC]. */
#define fonction_21_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO0(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO0(FRA8(BLANC)),GRO1(FRA8(BLANC))]. */
#define fonction_22_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO1(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO1(FRA8(BLANC)),GRO2(FRA8(BLANC))]. */
#define fonction_23_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO2(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO2(FRA8(BLANC)),GRO3(FRA8(BLANC))]. */
#define fonction_24_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO3(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO3(FRA8(BLANC)),GRO4(FRA8(BLANC))]. */
#define fonction_25_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO4(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO4(FRA8(BLANC)),GRO5(FRA8(BLANC))]. */
#define fonction_26_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO5(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO5(FRA8(BLANC)),GRO6(FRA8(BLANC))]. */
#define fonction_27_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO6(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO6(FRA8(BLANC)),GRO7(FRA8(BLANC))]. */
#define fonction_28_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA8(NIVR(niveau))) \
,GRO7(FRA8(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO7(FRA8(BLANC)),GRO8(FRA8(BLANC))]. */
#define fonction_31_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO0(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO0(FRA16(BLANC)),GRO1(FRA16(BLANC))]. */
#define fonction_32_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO1(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO1(FRA16(BLANC)),GRO2(FRA16(BLANC))]. */
#define fonction_33_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO2(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO2(FRA16(BLANC)),GRO3(FRA16(BLANC))]. */
#define fonction_34_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO3(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO3(FRA16(BLANC)),GRO4(FRA16(BLANC))]. */
#define fonction_35_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO4(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO4(FRA16(BLANC)),GRO5(FRA16(BLANC))]. */
#define fonction_36_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO5(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO5(FRA16(BLANC)),GRO6(FRA16(BLANC))]. */
#define fonction_37_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO6(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO6(FRA16(BLANC)),GRO7(FRA16(BLANC))]. */
#define fonction_38_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO7(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO7(FRA16(BLANC)),GRO8(FRA16(BLANC))]. */
#define fonction_39_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO8(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO8(FRA16(BLANC)),GRO9(FRA16(BLANC))]. */
#define fonction_3A_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO9(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO9(FRA16(BLANC)),GRO10(FRA16(BLANC))]. */
#define fonction_3B_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO10(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO10(FRA16(BLANC)),GRO11(FRA16(BLANC))]. */
#define fonction_3C_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO11(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO11(FRA16(BLANC)),GRO12(FRA16(BLANC))]. */
#define fonction_3D_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO12(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO12(FRA16(BLANC)),GRO13(FRA16(BLANC))]. */
#define fonction_3E_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO13(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO13(FRA16(BLANC)),GRO14(FRA16(BLANC))]. */
#define fonction_3F_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO14(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO14(FRA16(BLANC)),GRO15(FRA16(BLANC))]. */
#define fonction_3G_de_substitution(niveau) \
NIVA(ADD2(GRO1(FRA16(NIVR(niveau))) \
,GRO15(FRA16(COULEURS)) \
) \
) \
/* Definition de la fonction de mise dans [GRO15(FRA16(BLANC)),GRO16(FRA16(BLANC))]. */
#define fonction_FF_de_substitution(niveau) \
NIVA(FRA1(FRA1(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA1(FRA1(BLANC))]. */
#define fonction_FE_de_substitution(niveau) \
NIVA(FRA1(FRA2(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA1(FRA2(BLANC))]. */
#define fonction_FC_de_substitution(niveau) \
NIVA(FRA1(FRA4(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA1(FRA4(BLANC))]. */
#define fonction_F8_de_substitution(niveau) \
NIVA(FRA1(FRA8(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA1(FRA8(BLANC))]. */
#define fonction_F0_de_substitution(niveau) \
NIVA(FRA1(FRA16(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA1(FRA16(BLANC))]. */
#define fonction_E0_de_substitution(niveau) \
NIVA(FRA2(FRA16(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA2(FRA16(BLANC))]. */
#define fonction_C0_de_substitution(niveau) \
NIVA(FRA4(FRA16(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA4(FRA16(BLANC))]. */
#define fonction_80_de_substitution(niveau) \
NIVA(FRA8(FRA16(NIVR(niveau)))) \
/* Definition de la fonction de mise dans [NOIR,FRA8(FRA16(BLANC))]. */
#define fonction_ROUGE_de_substitution(niveau) \
fonction_neutre_de_substitution(niveau) \
/* Definition de la fonction ROUGE initialisee a l'etat neutre. */
#define fonction_VERTE_de_substitution(niveau) \
fonction_neutre_de_substitution(niveau) \
/* Definition de la fonction VERTE initialisee a l'etat neutre. */
#define fonction_BLEUE_de_substitution(niveau) \
fonction_neutre_de_substitution(niveau) \
/* Definition de la fonction BLEUE initialisee a l'etat neutre. */
#define fonction_variable_de_substitution(niveau) \
fonction_neutre_de_substitution(niveau) \
/* Definition de la fonction variable initialisee a l'etat neutre. */
#define fonction_SOLAR_de_substitution(niveau) \
ADD2(INTE(MUL2(DIVI(FLOT(NIVR(niveau)) \
,FLOT(NIVR(BLANC)) \
) \
,FLOT(SOUS(BLANC_SOLAR,NOIR_SOLAR)) \
) \
) \
,NOIR_SOLAR \
) \
/* Definition de la fonction d'acces au SOLAR. */
#define fonction_X_WINDOW_de_substitution(niveau) \
fonction_neutre_de_substitution(niveau) \
/* Definition de la fonction X_WINDOW initialisee a l'etat neutre. */
#define CLEAR_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_XX) \
Bblock \
BoIn(niveau,NOIR,BLANC,PAS_COULEURS) \
Bblock \
EGAL(ACCES_listes_inverses_de_substitution(L_SUBSTITUTION_XX,niveau) \
,NIVEAU_UNDEF \
); \
Eblock \
EBoI \
Eblock \
/* Initialisation preliminaire a 'NIVEAU_UNDEF' des listes "inverses". */
#define CALCUL_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_XX,niveau) \
Bblock \
EGAL(ACCES_listes_inverses_de_substitution(L_SUBSTITUTION_XX \
,ACCES_listes_de_substitution(L_SUBSTITUTION_XX,niveau) \
) \
,niveau \
); \
Eblock \
/* Puis initialisation d'un element de liste "inverse" a partir d'un */ \
/* element de liste "directe". */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A S S A G E D E S I M A G E S A L A L I S T E */
/* D E S U B S T I T U T I O N V A R I A B L E E T I N V E R S E M E N T : */
/* */
/*************************************************************************************************************************************/
#define IMAGE_VERS_LISTE_DE_SUBSTITUTION(niveau,imageA,X,Y) \
Bblock \
MODIFICATION_LISTE_DE_SUBSTITUTION(niveau \
,load_point_valide(imageA,X,Y) \
); \
Eblock \
/* L_SUBSTITUTION_VARIABLE(niveau) <-- imageA(X,Y). */
#define LISTE_DE_SUBSTITUTION_VERS_IMAGE(imageR,X,Y,Vf,niveau) \
Bblock \
store_point_valide(ACCES_listes_de_substitution(L_SUBSTITUTION_VARIABLE,niveau) \
,imageR \
,X,Y \
,Vf \
); \
Eblock \
/* ImageR(X,Y) <-- L_SUBSTITUTION_VARIABLE(niveau). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I D E N T I F I C A T I O N D ' U N E L I S T E D E S U B S T I T U T I O N */
/* P A R S O N N O M E T N O N P A R S O N N U M E R O : */
/* */
/* */
/* Utilisation : */
/* */
/* RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(liste_cherchee,numero,liste_par_defaut); */
/* */
/* ou : */
/* */
/* 'liste_cherchee' : nom (alphanumerique) de la liste recherchee, */
/* 'numero' : numero renvoye lorsque la liste a ete trouvee (ou sinon, */
/* donne 'liste_par_defaut'). */
/* */
/* */
/*************************************************************************************************************************************/
#define RECHERCHE_LISTE_DE_SUBSTITUTION(liste_courante,liste_associee,liste_cherchee,numero) \
Bblock \
Test(EST_FAUX(on_a_trouve_la_liste_de_substitution)) \
Bblock \
Test(IFOU(IFEQ_chaine(liste_cherchee,"liste_courante") \
,IFEQ_chaine(liste_cherchee,"L_SUBSTITUTION`liste_courante") \
) \
) \
/* La possibilite d'omettre "L_SUBSTITUTION_" pour abreger le nom des listes de substitution */ \
/* a ete introduite le 20101029100412... */ \
Bblock \
EGAL(numero,liste_associee); \
/* Recuperation de la liste de substitution lorsqu'on l'a trouve... */ \
EGAL(on_a_trouve_la_liste_de_substitution,VRAI); \
/* Afin d'indiquer qu'on a trouve la liste cherchee... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Tentative d'identification d'une liste de substitution par comparaison a un nom courant. */
#define RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(liste_cherchee,numero,liste_par_defaut) \
Bblock \
DEFV(Logical,INIT(on_a_trouve_la_liste_de_substitution,FAUX)); \
/* Afin de savoir si la liste de substitution recherchee existe... */ \
RECHERCHE_LISTE_DE_SUBSTITUTION(NEUTRE,L_SUBSTITUTION_NEUTRE,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(01,L_SUBSTITUTION_01,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(02,L_SUBSTITUTION_02,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(11,L_SUBSTITUTION_11,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(12,L_SUBSTITUTION_12,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(13,L_SUBSTITUTION_13,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(14,L_SUBSTITUTION_14,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(21,L_SUBSTITUTION_21,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(22,L_SUBSTITUTION_22,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(23,L_SUBSTITUTION_23,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(24,L_SUBSTITUTION_24,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(25,L_SUBSTITUTION_25,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(26,L_SUBSTITUTION_26,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(27,L_SUBSTITUTION_27,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(28,L_SUBSTITUTION_28,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(31,L_SUBSTITUTION_31,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(32,L_SUBSTITUTION_32,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(33,L_SUBSTITUTION_33,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(34,L_SUBSTITUTION_34,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(35,L_SUBSTITUTION_35,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(36,L_SUBSTITUTION_36,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(37,L_SUBSTITUTION_37,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(38,L_SUBSTITUTION_38,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(39,L_SUBSTITUTION_39,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3A,L_SUBSTITUTION_3A,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3B,L_SUBSTITUTION_3B,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3C,L_SUBSTITUTION_3C,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3D,L_SUBSTITUTION_3D,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3E,L_SUBSTITUTION_3E,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3F,L_SUBSTITUTION_3F,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(3G,L_SUBSTITUTION_3G,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(FF,L_SUBSTITUTION_FF,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(FE,L_SUBSTITUTION_FE,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(FC,L_SUBSTITUTION_FC,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(F8,L_SUBSTITUTION_F8,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(F0,L_SUBSTITUTION_F0,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(E0,L_SUBSTITUTION_E0,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(C0,L_SUBSTITUTION_C0,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(80,L_SUBSTITUTION_80,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(ROUGE,L_SUBSTITUTION_ROUGE_BASIC,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(VERTE,L_SUBSTITUTION_VERTE_BASIC,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(BLEUE,L_SUBSTITUTION_BLEUE_BASIC,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(VARIABLE,L_SUBSTITUTION_VARIABLE,liste_cherchee,numero); \
RECHERCHE_LISTE_DE_SUBSTITUTION(HISTOGRAMME,L_SUBSTITUTION_HISTOGRAMME,liste_cherchee,numero); \
/* Introduit le 20081004123309... */ \
RECHERCHE_LISTE_DE_SUBSTITUTION(L_SUBSTITUTION_SOLAR,L_SUBSTITUTION_SOLAR,liste_cherchee,numero); \
\
Test(EST_FAUX(on_a_trouve_la_liste_de_substitution)) \
Bblock \
Test(IL_FAUT(RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION_____signaler_erreurs)) \
Bblock \
PRINT_ERREUR("la liste de SUBSTITUTION demandee n'existe pas"); \
CAL1(Prer1("il s'agissait de '%s'.\n",liste_cherchee)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
EGAL(numero,liste_par_defaut); \
/* Enfin, on force la substitution precisee par defaut. */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Tentative d'identification d'une liste de substitution par comparaison a l'ensemble */ \
/* des listes de 'SUBSTITUTION' disponibles et d'acces "autorise" (c'est ainsi que la */ \
/* liste 'L_SUBSTITUTION_X_WINDOW' ne figure pas ici...). */