/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   R E L A T I V E S   A   L A   M A R C H E   A L E A T O I R E  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrk/rdn_walk.31$I' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1997??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C E S   A   U N   A L B U M  :                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INVERSER_L_ORDRE_DES_COUPES_DANS_ACCES_ALBUM                                                                                  \
                    VRAI
#define   NE_PAS_INVERSER_L_ORDRE_DES_COUPES_DANS_ACCES_ALBUM                                                                           \
                    NOTL(INVERSER_L_ORDRE_DES_COUPES_DANS_ACCES_ALBUM)
                                        /* Pour l'initialisation de l'indicateur logique 'inverser' de 'ACCES_ALBUM(...)'.           */

#define   AUTORISER_LES_SEQUENCES_INCOMPLETES_DANS_UN_ALBUM                                                                             \
                    AUTORISE
#define   NE_PAS_AUTORISER_LES_SEQUENCES_INCOMPLETES_DANS_UN_ALBUM                                                                      \
                    NOTL(AUTORISER_LES_SEQUENCES_INCOMPLETES_DANS_UN_ALBUM)
                                        /* Pour l'initialisation de l'indicateur logique 'incomplet' de 'ACCES_ALBUM(...)'.          */

#define   NUMERO_DE_LA_COUPE(premiere_coupe,inverser)                                                                                   \
                    COND(IL_NE_FAUT_PAS(inverser)                                                                                       \
                        ,numero_de_la_coupe                                                                                             \
                        ,INVX(numero_de_la_coupe,premiere_coupe,LSTX(premiere_coupe,NBRE(Zmin,Zmax)))                                   \
                         )                                                                                                              \
                                        /* Fonction de calcul de la coupe courante.                                                  */

#define   editer_les_messages_d_erreur_de_lecture_des_fichiers                                                                          \
                    files_____editer_les_messages_d_erreur_de_lecture_des_fichiers                                                      \
                                        /* Afin de raccourcir la longueur d'une ligne a suivre...                                    */

#define   ACCES_ALBUM(utiliser_champ,champ,nom_champ,nom_postfixe,nombre_chiffres,wait,incomplet,premiere_coupe,pas_coupes,inverser,v0) \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(utiliser_champ))                                                                                       \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(numero_de_la_coupe,premiere_coupe));                                                             \
                                        /* Numero de la coupe courante.                                                              */ \
                                                                                                                                        \
                         begin_fuite                                                                                                    \
                              Bblock                                                                                                    \
                              Test(IFEQ_chaine(nom_champ,NOM_PIPE))                                                                     \
                                   Bblock                                                                                               \
                                   CALS(Iinitialisation(PAGE(champ,Z),v0));                                                             \
                                        /* Cas ou il n'y a pas d'images a lire, on force la valeur initiale 'v0'...                  */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                        /* Cas ou il y a des images a lire :                                                         */ \
                                   DEFV(CHAR,INIT(POINTERc(nom_d_une_coupe),NOM_UNDEF));                                                \
                                        /* Nom courant des coupes.                                                                   */ \
                                                                                                                                        \
                                   EGAL(nom_d_une_coupe                                                                                 \
                                       ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)                                                   \
                                            ,chain_Aconcaten2_sauf_nom_pipe(nom_champ                                                   \
                                                                           ,chain_numero(NUMERO_DE_LA_COUPE(premiere_coupe,inverser)    \
                                                                                        ,nombre_chiffres                                \
                                                                                         )                                              \
                                                                            )                                                           \
                                            ,chain_Aconcaten3_sauf_nom_pipe(nom_champ                                                   \
                                                                           ,chain_numero(NUMERO_DE_LA_COUPE(premiere_coupe,inverser)    \
                                                                                        ,nombre_chiffres                                \
                                                                                         )                                              \
                                                                           ,nom_postfixe                                                \
                                                                            )                                                           \
                                             )                                                                                          \
                                        );                                                                                              \
                                                                                                                                        \
                                   Test(IFET(EST_AUTORISE(incomplet)                                                                    \
                                            ,IL_Y_A_ERREUR(CODE_ERROR(Itest_fichier(nom_d_une_coupe)))                                  \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        CALS(Iinitialisation(PAGE(champ,Z),v0));                                                        \
                                        /* Cas ou il n'y a pas d'images a lire, on force la valeur initiale 'v0'...                  */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Test(IL_FAUT(wait))                                                                             \
                                             Bblock                                                                                     \
                                             Tant(IL_Y_A_ERREUR(CODE_ERROR(Iload_image(PAGE(champ,Z),nom_d_une_coupe))))                \
                                                  Bblock                                                                                \
                                                  Eblock                                                                                \
                                             ETan                                                                                       \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(PAGE(champ,Z),nom_d_une_coupe))))                 \
                                                  Bblock                                                                                \
                                                  Eblock                                                                                \
                                             ATes                                                                                       \
                                                  Bblock                                                                                \
                                                  gTest__CODE_ERREUR__ERREUR07                                                          \
                                                      (BLOC(Bblock                                                                      \
                                                            PRINT_ATTENTION("la fin de flot a ete rencontree");                         \
                                                            Eblock                                                                      \
                                                            )                                                                           \
                                                      ,BLOC(Bblock                                                                      \
                                                            Test(IL_FAUT(editer_les_messages_d_erreur_de_lecture_des_fichiers))         \
                                                                 Bblock                                                                 \
                                                                 PRINT_ERREUR("le fichier n'existe pas ou n'est pas de type 'image'");  \
                                                                 Eblock                                                                 \
                                                            ATes                                                                        \
                                                                 Bblock                                                                 \
                                                                 Eblock                                                                 \
                                                            ETes                                                                        \
                                                            Eblock                                                                      \
                                                            )                                                                           \
                                                       );                                                                               \
                                                  Eblock                                                                                \
                                             ETes                                                                                       \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   CALZ_FreCC(nom_d_une_coupe);                                                                         \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              INCR(numero_de_la_coupe,pas_coupes);                                                                      \
                                        /* Numero de l'image suivante a recuperer...                                                 */ \
                              Eblock                                                                                                    \
                         end_fuite                                                                                                      \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure de recuperation d'un album.                                                     */



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.