_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/* */
/* 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$FON' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L I B R A G E D ' U N N I V E A U D E T Y P E " M O D U L O " : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,Ncalib_modulo(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a calibrer a la facon "modulo[origine,extremite]" ; ceci signifie que */
/* le niveau argument est ramene dans le segment [seuil_Corigine,seuil_Cextremite] */
/* lorsque ce calibrage est actif (voir 'etat_Cmodulo'). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(TEST_NIVEAU_MODULO(niveau));
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L I B R A G E D ' U N N I V E A U D E T Y P E " S E U I L B A S " : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,Ncalib_bas(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a calibrer a la facon "seuil bas" ; ceci signifie que le niveau */
/* argument est ramene a 'seuil_bas' s'il lui est inferieur, et si ce calibrage */
/* est actif (voir 'etat_Cbas'). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(TEST_NIVEAU_SEUIL_BAS(niveau));
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L I B R A G E D ' U N N I V E A U D E T Y P E " S E U I L H A U T " : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,Ncalib_haut(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a calibrer a la facon "seuil haut" ; ceci signifie que le niveau */
/* argument est ramene a 'seuil_haut' s'il lui est superieur, et si ce calibrage */
/* est actif (voir 'etat_Chaut'). */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(TEST_NIVEAU_SEUIL_HAUT(niveau));
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L I B R A G E D ' U N N I V E A U D E T Y P E " M U L T I P L E " : */
/* */
/*************************************************************************************************************************************/
BFonctionP
DEFV(Common,DEFV(FonctionP,Ncalibrage(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a calibrer a la facon dans l'ordre "modulo", "seuil haut" */
/* puis "seuil haut". */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
/*..............................................................................................................................*/
RETU(Ncalib_bas(Ncalib_haut(Ncalib_modulo(niveau))));
Eblock
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N D ' U N N I V E A U : */
/* */
/* */
/* Utilisation : */
/* */
/* MODIFICATION_LISTE_DE_SUBSTITUTION(niveau,niveau_substitue); */
/* */
/* permet de modifier la liste "VARIABLE", */
/* en indiquant que le niveau 'niveau' */
/* doit etre remplace par 'niveau_substitue', et */
/* */
/* REINITIALISATION_LISTE_DE_SUBSTITUTION; */
/* MISE_A_L_ETAT_INITIAL_LISTE_DE_SUBSTITUTION; */
/* */
/* permet une reinitialisation de la */
/* liste "VARIABLE", et un position- */
/* nement sur la liste "NEUTRE". */
/* */
/*************************************************************************************************************************************/
/* Le 20110401185706 'INITIALISATION_LISTE_DE_SUBSTITUTION' a ete deplace vers */
/* 'v $xiin/fonction.1$DEF INITIALISATION_LISTES_DE_SUBSTITUTION' pour etre utilisable */
/* dans 'v $ximf/aleatoires$DEF INITIALISATION_LISTES_DE_SUBSTITUTION'... */
/* Le 20110401185706 'INITIALISATION_LISTES_DE_SUBSTITUTION' a ete deplace vers */
/* 'v $xiin/fonction.1$DEF INITIALISATION_LISTES_DE_SUBSTITUTION' pour etre utilisable */
/* dans 'v $ximf/aleatoires$DEF INITIALISATION_LISTES_DE_SUBSTITUTION'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION_____signaler_erreurs,VRAI)));
/* Controle des messages d'erreur de 'RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(...)'. Cet */
/* indicateur a ete introduit le 19990302094348 car au prealable, la procedure */
/* 'RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(...)' ne signalait pas les recherches */
/* infructueuses de listes de SUBSTITUTION. Afin d'assurer une eventuelle compatibilite */
/* avec les versions anterieures et donc ne pas forcer l'edition d'un message d'erreur, */
/* cet indicateur a ete introduit... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N D ' U N N I V E A U : */
/* */
/*************************************************************************************************************************************/
#define ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau) \
Bblock \
VALIDATION_NIVEAU \
( \
niveau \
,BLOC(EGAL(niveau_substitue \
,ACCES_listes_de_substitution(L_SUBSTITUTION_XX,niveau) \
); \
) \
,BLOC(PRINT_ERREUR("un NIVEAU a substituer est invalide"); \
CAL1(Prer1("lors de la demande de la substitution de %08X\n",niveau)); \
) \
); \
Eblock
#define ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau) \
Bblock \
VALIDATION_NIVEAU \
( \
niveau \
,BLOC(EGAL(niveau_substitue \
,ACCES_listes_inverses_de_substitution(L_SUBSTITUTION_XX,niveau) \
); \
) \
,BLOC(PRINT_ERREUR("un NIVEAU a substituer est invalide"); \
CAL1(Prer1("lors de la demande de la substitution de %08X\n",niveau)); \
) \
); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N " D I R E C T E " D ' U N N I V E A U : */
/* */
/*************************************************************************************************************************************/
BFonctionP
#define FIXER_LE_PLANCHER \
VRAI
#define LAISSER_LE_PLANCHER \
NOTL(FIXER_LE_PLANCHER)
/* Pour savoir s'il faut ou pas modifier 'noir_plancher_substitution'... */
#define CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,fixer_le_noir_plancher,niveau_plancher,niveau) \
Ca1e(L_SUBSTITUTION_XX) \
Bblock \
Test(IL_FAUT(Nsubstitution_____utiliser_effectivement_la_substitution_directe)) \
Bblock \
ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau); \
/* Cas du fonctionnement "normal"... */ \
Eblock \
ATes \
Bblock \
ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau); \
/* Cas du fonctionnement "inverse" (introduit le 20081005101150). */ \
Eblock \
ETes \
\
Test(IL_FAUT(fixer_le_noir_plancher)) \
Bblock \
SET_NOIR_PLANCHER(niveau_plancher); \
SET_NOIR_PLANCHER_DES_VECTEURS(niveau_plancher); \
/* Mise en place systematique des niveaux planchers... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ECa1 \
/* Acces aux listes de substitution... */
DEFV(Common,DEFV(Logical,SINT(Nsubstitution_____utiliser_effectivement_la_substitution_directe,VRAI)));
/* Introduit le 20081005101150 afin de permettre a 'Nsubstitution(...)' d'utiliser les */
/* listes de substitution inverses. */
DEFV(Common,DEFV(FonctionP,Nsubstitution(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a substituer. */
/* RESULTAT : la fonction renvoie le niveau substitue. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(genere_p,INIT(niveau_substitue,NIVEAU_UNDEF));
/* Niveau resultant de la substitution. */
DEFV(Int,INIT(index,UNDEF));
/* Index d'acces aux niveaux dans les listes de substitution. */
/*..............................................................................................................................*/
INITIALISATION_LISTES_DE_SUBSTITUTION;
Test(EST_AUTORISE(ACCES_liste_d_autorisation_de_substitution_des_niveaux(niveau)))
Bblock
/* Lorsque la substitution du niveau argument est AUTORISEe, on le substitue : */
Choi(num_liste_de_substitution)
/* Choix de la liste de substitution. */
Bblock
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_NEUTRE,FIXER_LE_PLANCHER,NOIR_PLANCHER,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_ROUGE_BASIC,FIXER_LE_PLANCHER,NOIR_PLANCHER,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_VERTE_BASIC,FIXER_LE_PLANCHER,NOIR_PLANCHER,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_BLEUE_BASIC,FIXER_LE_PLANCHER,NOIR_PLANCHER,niveau);
/* On notera ici la necessite imperative d'acceder sans permutation aux listes de */
/* COLORIAGE (ROUGE,VERTE,BLEUE), car en effet 'num_liste_de_substitution' contient */
/* en general un numero de liste deja substitue s'il a ete initialise par l'une des */
/* trois valeurs 'L_SUBSTITUTION_ROUGE', 'L_SUBSTITUTION_VERTE' ou 'L_SUBSTITUTION_BLEUE'. */
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_01,FIXER_LE_PLANCHER,NOIR_PLANCHER_0,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_02,FIXER_LE_PLANCHER,NOIR_PLANCHER_0,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_11,FIXER_LE_PLANCHER,NOIR_PLANCHER_1,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_12,FIXER_LE_PLANCHER,NOIR_PLANCHER_1,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_13,FIXER_LE_PLANCHER,NOIR_PLANCHER_1,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_14,FIXER_LE_PLANCHER,NOIR_PLANCHER_1,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_21,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_22,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_23,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_24,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_25,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_26,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_27,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_28,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_31,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_32,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_33,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_34,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_35,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_36,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_37,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_38,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_39,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3A,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3B,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3C,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3D,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3E,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3F,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3G,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FF,FIXER_LE_PLANCHER,NOIR_PLANCHER_0,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FE,FIXER_LE_PLANCHER,NOIR_PLANCHER_1,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FC,FIXER_LE_PLANCHER,NOIR_PLANCHER_2,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_F8,FIXER_LE_PLANCHER,NOIR_PLANCHER_3,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_F0,FIXER_LE_PLANCHER,NOIR_PLANCHER_4,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_E0,FIXER_LE_PLANCHER,NOIR_PLANCHER_5,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_C0,FIXER_LE_PLANCHER,NOIR_PLANCHER_6,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_80,FIXER_LE_PLANCHER,NOIR_PLANCHER_7,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_VARIABLE,LAISSER_LE_PLANCHER,NIVEAU_UNDEF,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_HISTOGRAMME,LAISSER_LE_PLANCHER,NIVEAU_UNDEF,niveau);
/* Introduit le 20081004123137... */ \
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_SOLAR,FIXER_LE_PLANCHER,NOIR_PLANCHER,niveau);
CAS_ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_X_WINDOW,LAISSER_LE_PLANCHER,NIVEAU_UNDEF,niveau);
Defo
Bblock
PRINT_ERREUR("une liste de substitution inconnue est demandee");
CAL1(Prer1("son numero est %d\n",num_liste_de_substitution));
ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_NEUTRE,niveau);
Eblock
EDef
Eblock
ECho
Eblock
ATes
Bblock
EGAL(niveau_substitue,niveau);
/* Lorsque la substitution du niveau argument est INTERDITe, on le renvoie tel quel... */
Eblock
ETes
RETU(niveau_substitue);
Eblock
#undef CAS_ACCES_LISTE_DE_SUBSTITUTION
#undef FIXER_LE_PLANCHER
#undef LAISSER_LE_PLANCHER
EFonctionP
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* S U B S T I T U T I O N " I N V E R S E " D ' U N N I V E A U : */
/* */
/*************************************************************************************************************************************/
BFonctionP
#define CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau) \
Ca1e(L_SUBSTITUTION_XX) \
Bblock \
Test(IL_FAUT(Nsubstitution_inverse_____utiliser_effectivement_la_substitution_inverse)) \
Bblock \
ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau); \
/* Cas du fonctionnement "normal"... */ \
Eblock \
ATes \
Bblock \
ACCES_LISTE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_XX,niveau); \
/* Cas du fonctionnement "inverse" (introduit le 20081005101150). */ \
Eblock \
ETes \
Eblock \
ECa1 \
/* Acces aux listes inverses de substitution... */
DEFV(Common,DEFV(Logical,SINT(Nsubstitution_inverse_____utiliser_effectivement_la_substitution_inverse,VRAI)));
/* Introduit le 20081005101150 par symetrie avec 'Nsubstitution(...)'... */
DEFV(Common,DEFV(FonctionP,Nsubstitution_inverse(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau a substituer. */
/* RESULTAT : la fonction renvoie le niveau substitue. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(genere_p,INIT(niveau_substitue,NIVEAU_UNDEF));
/* Niveau resultant de la substitution. */
DEFV(Int,INIT(index,UNDEF));
/* Index d'acces aux niveaux dans les listes de substitution. */
/*..............................................................................................................................*/
INITIALISATION_LISTES_DE_SUBSTITUTION;
Choi(num_liste_de_substitution)
/* Choix de la liste de substitution. */
Bblock
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_NEUTRE,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_ROUGE_BASIC,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_VERTE_BASIC,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_BLEUE_BASIC,niveau);
/* On notera ici la necessite imperative d'acceder sans permutation aux listes de */
/* COLORIAGE (ROUGE,VERTE,BLEUE), car en effet 'num_liste_de_substitution' contient */
/* en general un numero de liste deja substitue s'il a ete initialise par l'une des */
/* trois valeurs 'L_SUBSTITUTION_ROUGE', 'L_SUBSTITUTION_VERTE' ou 'L_SUBSTITUTION_BLEUE'. */
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_01,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_02,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_11,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_12,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_13,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_14,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_21,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_22,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_23,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_24,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_25,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_26,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_27,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_28,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_31,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_32,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_33,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_34,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_35,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_36,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_37,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_38,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_39,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3A,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3B,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3C,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3D,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3E,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3F,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_3G,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FF,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FE,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_FC,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_F8,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_F0,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_E0,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_C0,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_80,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_VARIABLE,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_HISTOGRAMME,niveau);
/* Introduit le 20081004123137... */ \
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_SOLAR,niveau);
CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_X_WINDOW,niveau);
Defo
Bblock
PRINT_ERREUR("une liste de substitution inconnue est demandee");
CAL1(Prer1("son numero est %d\n",num_liste_de_substitution));
ACCES_LISTE_INVERSE_DE_SUBSTITUTION(niveau_substitue,L_SUBSTITUTION_NEUTRE,niveau);
Eblock
EDef
Eblock
ECho
RETU(niveau_substitue);
Eblock
#undef CAS_ACCES_LISTE_INVERSE_DE_SUBSTITUTION
EFonctionP
#undef ACCES_LISTE_INVERSE_DE_SUBSTITUTION
#undef ACCES_LISTE_DE_SUBSTITUTION
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E S T I O N D E L ' E C R A S E M E N T D E S N I V E A U X : */
/* */
/* */
/* Utilisation : */
/* */
/* ECRASEMENT_AUTORISE(niveau); */
/* ECRASEMENT_INTERDIT(niveau); */
/* */
/* permettent d'autoriser ou */
/* interdire respectivement */
/* l'ecrasement du niveau argument, */
/* */
/* et, */
/* */
/* Necrasement(niveau); */
/* */
/* permet de savoir si le niveau */
/* argument "niveau" peut etre */
/* ecrase ('AUTORISE') ou pas */
/* ('INTERDIT'). */
/* */
/* */
/* Nota : */
/* */
/* Lorsque le niveau argument */
/* n'est pas dans [NOIR,BLANC], */
/* il est ecrasable a priori... */
/* */
/*************************************************************************************************************************************/
BFonctionL
DEFV(Common,DEFV(FonctionL,Necrasement(niveau)))
DEFV(Argument,DEFV(genere_p,niveau));
/* Niveau dont on doit tester l'autorisation d'ecrasement. */
/* RESULTAT : la fonction renvoie l'autorisation ou l'interdiction de ce niveau. */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(ecrasement,LUNDEF));
/* Indicateur logique precisant si l'ecrasement du niveau argument est */
/* autorise ou pas... */
/*..............................................................................................................................*/
Test(EST_FAUX(init_ecrasement))
Bblock
BoIn(index,NOIR,BLANC,PAS_COULEURS)
Bblock
EGAL(ACCES_liste_d_ecrasement(index),AUTORISE);
/* A priori, on autorise l'ecrasement de tous les niveaux... */
Eblock
EBoI
EGAL(init_ecrasement,VRAI);
/* Et on memorise que l'initialisation est faite... */
Eblock
ATes
Bblock
Eblock
ETes
VALIDATION_NIVEAU
(
niveau
,BLOC(EGAL(ecrasement,ACCES_liste_d_ecrasement(niveau));
)
/* Pour un niveau dans [NOIR,BLANC], on teste la liste d'ecrasement. */
,BLOC(EGAL(ecrasement,AUTORISE);
)
/* Pour les niveaux hors de [NOIR,BLANC], l'ecrasement n'est pas inhibable. */
)
RETU(ecrasement);
/* Et renvoi de l'autorisation portant sur l'ecrasement du niveau argument. */
Eblock
EFonctionL
_______________________________________________________________________________________________________________________________________
Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.