/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F F I C H A G E   D ' U N   A L B U M   D ' I M A G E S  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande affiche une sequence                                                                            */
/*                  d'images Argument.                                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/album$K' :                                                                                                 */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_DI_ALBUM_EXT

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    message   "Le graphique SPIX n'est pas implemente."
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#    include   image_image_QUAD_IMAGE_EXT
                                        /* ATTENTION, avant le 20021230110037, les includes 'image_image_TRI_IMAGE_EXT' et           */
                                        /* 'image_image_QUAD_IMAGE_EXT' n'etaient faits que pour                                     */
                                        /* '__VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL'.                                             */
                                        /* Mais avec les modifications faites dans 'v $xiidX/fonct$vv$FON 20021230102551' il a       */
                                        /* fallu les rendre systematiques...                                                         */

#    include   image_drive_XWind_FONCTION_EXT

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         include   image_drive_SiliG_FONCTION_1_EXT
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/display.01.I"
#include  xci/album.01.I"

#define   TEMPORISATION_INTER_TRAMES                                                                                                    \
                    ZERO                                                                                                                \
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente...           */
#define   NOMBRE_DE_REPETITIONS                                                                                                         \
                    UN                                                                                                                  \
                                        /* Nombre implicite de repetitions de l'animation...                                         */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    message   "Le graphique SPIX n'est pas implemente."
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#    define    ATTENDRE_LES_IMAGES_INEXISTANTES                                                                                         \
                         VRAI                                                                                                           \
                                        /* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est   */ \
                                        /* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee...                */
#    define    DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES                                                                                  \
                         ZERO                                                                                                           \
                                        /* Duree d'attente des images inexistantes avec une valeur par defaut assurant la            */ \
                                        /* compatibilite avec la version anterieure au 20040928095359.                               */

#    define    TEMPORISATION_INTER_ANIMATIONS                                                                                           \
                         ZERO                                                                                                           \
                                        /* Attente implicite avant d'effacer l'image : une valeur nulle correspond a un arret        */ \
                                        /* interactif de l'affichage par appui sur l'une quelconque des trois touches de la          */ \
                                        /* souris, lorsque celle-ci est dans la fenetre de display...                                */
#    define    EDITER_LE_Z_DES_IMAGES                                                                                                   \
                         FAUX                                                                                                           \
                                        /* Indique si le 'Z' de chacune des images affichees doit etre indique ('VRAI') ou pas       */ \
                                        /* ('FAUX'), l'edition ayant lieu comme pour un message d'erreur (afin de ne pas perturber   */ \
                                        /* le "pipe" des images...).                                                                 */
#    define    EDITER_LE_NUMERO_DES_IMAGES_PLUTOT_QUE_LE_z_DES_IMAGES                                                                   \
                         FAUX                                                                                                           \
                                        /* Indique si 'IL_FAUT(editer_le_z_des_images)' c'est en fait le numero des images qu'il     */ \
                                        /* faut editer ('VRAI') plutot que le 'Z' ('FAUX'). Ceci fut introduit le 20101008205640.    */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/display.02.I"
#include  xci/album.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F F I C H A G E   D ' U N   A L B U M   D ' I M A G E S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de la sequence a visualiser.                                                          */
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom a priori inutile mais necessaire a cause de 'v $xci/album.04$I nom_imageR'...         */

     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */

     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette a utiliser.                                                             */
     DEFV(Int,INIT(temporisation_inter_trames,TEMPORISATION_INTER_TRAMES));
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente...           */
                                        /*                                                                                           */
                                        /* ATTENTION, jusqu'au 19970507160714, cet 'Int' avait le type 'Positive'.                   */
     DEFV(Positive,INIT(nombre_de_repetitions,NOMBRE_DE_REPETITIONS));
                                        /* Nombre implicite de repetitions de l'animation...                                         */
     DEFV(deltaF_2D,dimension_de_la_fenetre);
                                        /* Dimension de la fenetre de visualisation.                                                 */

#include  xci/display.03.I"

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    message   "Le graphique SPIX n'est pas implemente."
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
     DEFV(Logical,INIT(attendre_les_images_inexistantes,ATTENDRE_LES_IMAGES_INEXISTANTES));
                                        /* Indique si les images inexistantes constituent une erreur ('FAUX'), ou bien si cela est   */
                                        /* normal ('VRAI'), ce qui signifie qu'elles n'ont pas encore ete calculee...                */
     DEFV(Positive,INIT(duree_d_attente_des_images_inexistantes,DUREE_D_ATTENTE_DES_IMAGES_INEXISTANTES));
                                        /* Duree d'attente des images inexistantes avec une valeur par defaut assurant la            */
                                        /* compatibilite avec la version anterieure au 20040928095359.                               */
     DEFV(Int,INIT(temporisation_inter_animations,TEMPORISATION_INTER_ANIMATIONS));
                                        /* Temporisation inter_animations ; une valeur nulle fait qu'il n'y a pas d'attente...       */
                                        /*                                                                                           */
                                        /* ATTENTION, jusqu'au 19970507160714, cet 'Int' avait le type 'Positive'.                   */
     DEFV(Logical,INIT(editer_le_Z_des_images,EDITER_LE_Z_DES_IMAGES));
                                        /* Indique si le 'Z' de chacune des images affichees doit etre indique ('VRAI') ou pas       */
                                        /* ('FAUX'), l'edition ayant lieu comme pour un message d'erreur (afin de ne pas perturber   */
                                        /* le "pipe" des images...                                                                   */
     DEFV(Logical,INIT(editer_le_numero_des_images_plutot_que_le_Z_des_images
                      ,EDITER_LE_NUMERO_DES_IMAGES_PLUTOT_QUE_LE_z_DES_IMAGES
                       )
          );
                                        /* Indique si 'IL_FAUT(editer_le_z_des_images)' c'est en fait le numero des images qu'il     */
                                        /* faut editer ('VRAI') plutot que le 'Z' ('FAUX'). Ceci fut introduit le 20101008205640.    */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

#include  xci/album.03.I"
     /*..............................................................................................................................*/
     EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,EDITER_LES_MESSAGES_D_ERREUR);
                                        /* Initialisation de l'indicateur d'edition des messages d'erreur...                         */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    message   "Le graphique SPIX n'est pas implemente."
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
     INITIALISATION_POINT_2D(coin_bas_gauche,_____cNORMALISE_OX11(X_COIN_BAS_GAUCHE),_____cNORMALISE_OY11(Y_COIN_BAS_GAUCHE));
                                        /* Definition de la position implicite de la fenetre.                                        */
     EGAL(X11_____signaler_les_evenements_inattendus,SIGNALER_LES_EVENEMENTS_INATTENDUS);
                                        /* Initialisation du signalisateur d'evenement inattendu...                                  */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("serveur=",serveur_standard);
                         GET_ARGUMENT_L("ne_pas_verifier_le_serveur=""npvs="
                                       ,IXopen_____X_Window_accepter_le_serveur_sans_verification
                                        );
                         GET_ARGUMENT_N("verifier_le_serveur=""vs="
                                       ,IXopen_____X_Window_accepter_le_serveur_sans_verification
                                        );
                                        /* Arguments introduits le 20100109113026 pour acceder au serveur 'Xming' (Windows Vista).   */
                         GET_ARGUMENT_L("attendre=",attendre_les_images_inexistantes);
                         GET_ARGUMENT_I("attente=",duree_d_attente_des_images_inexistantes);
                         GET_ARGUMENT_L("attention=",editer_les_PRINT_ATTENTION_initiaux);
                         GET_ARGUMENT_L("signaler=",X11_____signaler_les_evenements_inattendus);
                         GET_ARGUMENT_L("trop_grandes=""trop_grande="
                                       ,X11_____tenter_l_ouverture_des_fenetres_trop_grandes_par_rapport_a_l_ecran
                                        );

                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_I("nombre=""couleurs=",nombre_de_couleurs_necessaires);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ);
                                        /* L'argument 'pasZ' fut introduit le 20110119135719...                                      */
                         GET_ARGUMENT_L("editer=""editerZ=""lister=""listerZ=",editer_le_Z_des_images);
                         GET_ARGUMENT_L("editer_numero=""editerN=""lister_numero=""listerN="
                                       ,editer_le_numero_des_images_plutot_que_le_Z_des_images
                                        );
                                        /* Introduit le 20101008205640 et complete le 20101207151039 par "lister...".                */
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);

                         GET_ARGUMENT_L("standard=",les_images_sont_standards);
                                        /* Introduit le 20091206101605...                                                            */
                         GET_ARGUMENT_L("renormaliser=",Afloat_std_brutal_____renormaliser_plutot_que_convertir_brutalement);
                         GET_ARGUMENT_N("brutal=",Afloat_std_brutal_____renormaliser_plutot_que_convertir_brutalement);
                                        /* Introduit le 20100903213017...                                                            */

                         GET_ARGUMENT_L("message_attention_extrema=""mae="
                                       ,Ifloat_std_____editer_le_message_d_attention_relatif_aux_extrema
                                        );
                                        /* Introduit le 20101205134709 pour 'v $xE/.divers$D/anim1$vv$Y message_attention_extrema=". */

                         GET_ARGUMENT_I("repetition=""r=",nombre_de_repetitions);
                         GET_ARGUMENT_I("Duree=""D=",temporisation_inter_trames);
                         GET_ARGUMENT_I("duree=""d=",temporisation_inter_animations);
                         GET_ARGUMENT_L("centrer=""Fcentrer=""Fc=",centrer_la_fenetre);
                                        /* Parametre introduit le 20060427162409...                                                  */
                         GET_ARGUMENT_F("xc=""x=""X=",ASD1(coin_bas_gauche,x));
                         GET_ARGUMENT_F("yc=""y=""Y=",ASD1(coin_bas_gauche,y));
                         GET_ARGUMENT_C("substitution=""s=",nom_substitution);
                         GET_ARGUMENT_C("permutation=",permutation_des_dimensions);
                         )
                    );
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

     begin_nouveau_block
          Bblock
          BDEFV(album,album_d_images);
                                        /* Definition de l'album d'images dans lequel ranger la sequence a visualiser...             */
          BDEFV(album,album_d_images_transpose);
                                        /* Definition de l'album d'images apres transposition eventuelle des dimensions...           */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    message   "Le graphique SPIX n'est pas implemente."
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
          RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(nom_substitution,substitution_courante,substitution_courante);
                                        /* Tentative de recherche de la substitution demandee...                                     */
          CHARGEMENT_DE_LA_PALETTE_DE_COULEURS;
                                        /* Chargement des trois listes de substitution constitutive d'une palette.                   */
          Test(IFEQ(substitution_courante,L_SUBSTITUTION_VARIABLE))
               Bblock
               CALS(Icompactage_d_une_palette(nombre_de_couleurs_necessaires));
                                        /* Pour la substitution 'VARIABLE', on procede a un compactage de la palette Argument.       */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre,_____lNORMALISE_OX11(dimX11),_____lNORMALISE_OY11(dimY11));
                                        /* Definition des dimensions de la fenetre.                                                  */

          Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE))
               Bblock
               SUBSTITUTION(substitution_courante);
                                        /* Positionnement de la substitution courante quelqu'elle soit (mais non 'NEUTRE'...).       */
               SET_FILTRAGE(ACTIF);
                                        /* Et on active le filtrage...                                                               */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

#include  xci/album.04.I"
                                        /* Permutation eventuelle des dimensions...                                                  */

          CALS(IXinitialisation());
                                        /* Initialisation fondamentale introduite le 20160815121753...                               */
          CALS(IXopen(serveur_standard
                     ,nom_imageA
                     ,ADRESSE(dimension_de_la_fenetre)
                     ,centrer_la_fenetre
                     ,ADRESSE(coin_bas_gauche)
                     ,editer_les_PRINT_ATTENTION_initiaux
                      )
               );
                                        /* Ouverture de la fenetre...                                                                */

          Repe(nombre_de_repetitions)
               Bblock
               begin_fuite
                    Bblock
                    CALS(IXdisplay_avec_reinitialisation_du_reaffichage(PAGE(album_d_images_transpose,Z)
                                                                       ,Image_ROUGE,Image_VERTE,Image_BLEUE
                                                                       ,INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay
                                                                       ,TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay
                                                                        )
                         );
                                        /* Affichage de la page 'Z' courante...                                                      */
                                        /*                                                                                           */
                                        /* On notera que {Image_ROUGE,Image_VERTE,Image_BLEUE} ne sont pas utiles ici, mais mises    */
                                        /* en place uniquement pour des raisons syntaxiques (introduit le 20030101115342).           */
                                        /*                                                                                           */
                                        /* Le 20101118083800, la fonction 'IXdisplay_avec_reinitialisation_du_reaffichage(...)'      */
                                        /* a remplacee 'IXdisplay(...)'.                                                             */

                    Test(IL_FAUT(editer_le_Z_des_images))
                         Bblock
                         Test(IL_FAUT(editer_le_numero_des_images_plutot_que_le_Z_des_images))
                              Bblock
                              CAL3(Prme1("%s\n",chain_numero(ADD2(premiere_image,COZR(Z)),nombre_de_chiffres)));
                                        /* Introduit le 20101008205640 et utilisation de 'chain_numero(...)' le 20101011112500...    */
                              Eblock
                         ATes
                              Bblock
                              CAL3(Prme1("%d\n",Z));
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IZLT(temporisation_inter_trames))
                         Bblock
                         CALS(IXattente_de_l_evenement_ButtonPress());
                                        /* Et on attend de nouveau un petit peu, jusqu'a ce que l'on appuie sur l'un des trois       */
                                        /* boutons de la souris...                                                                   */
                         Eblock
                    ATes
                         Bblock
                         DODO(temporisation_inter_trames);
                                        /* Et on attend de nouveau un petit peu, pour un temps pre-determine...                      */
                         Eblock
                    ETes
                    Eblock
               end_fuite

               Test(IFET(IZEQ(temporisation_inter_animations),IFEQ(compteur_des_repetitions_du_Repe,nombre_de_repetitions)))
                    Bblock
                    CALS(IXattente_de_l_evenement_ButtonPress());
                                        /* Boutons de la souris, mais ATTENTION uniquement sur la derniere repetition de la          */
                                        /* sequence et lorsque cela a ete demande...                                                 */
                    Eblock
               ATes
                    Bblock
                    DODO(temporisation_inter_animations);
                                        /* Et on attend de nouveau un petit peu, pour un temps pre-determine...                      */
                    Eblock
               ETes
               Eblock
          ERep

          CALS(IXclose());
          Test(IFNE(substitution_courante,L_SUBSTITUTION_NEUTRE))
               Bblock
               SET_FILTRAGE(INACTIF);
               SUBSTITUTION(L_SUBSTITUTION_NEUTRE);
               Eblock
          ATes
               Bblock
               Eblock
          ETes
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

          EDEFV(album,album_d_images_transpose);
                                        /* Definition de l'album d'images apres transposition eventuelle des dimensions...           */
          EDEFV(album,album_d_images);
                                        /* Definition de l'album d'images dans lequel ranger la sequence a visualiser...             */

          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.