_______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* 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 _______________________________________________________________________________________________________________________________________