/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A N I M A T I O N   G R A P H I Q U E   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande affiche une animation                                                                           */
/*                  contenue matriciuellement dans une                                                                               */
/*                  image Argument.                                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/animation$K' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1988??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#    include   image_drive_dpx5c_FONCTION_EXT
#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 20021230110723, 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"

#define   TENTER_UN_REDIMENSIONNEMENT                                                                                                   \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') tenter le redimensionnement...                 */

#define   TEMPORISATION_INTER_TRAMES                                                                                                    \
                    ZERO                                                                                                                \
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente...           */
#define   TEMPORISATION_INTER_ANIMATIONS                                                                                                \
                    ZERO                                                                                                                \
                                        /* Temporisation inter_animations ; une valeur nulle fait qu'il n'y a pas d'attente...       */
#define   NOMBRE_DE_REPETITIONS                                                                                                         \
                    SEIZE                                                                                                               \
                                        /* Nombre implicite de repetitions de l'animation...                                         */
#define   NOMBRE_DE_TRAMES                                                                                                              \
                    EXP2(HUIT)                                                                                                          \
                                        /* Nombre implicite de trames (ou "sous-images") contenues dans l'animation...               */
#define   CENTRAGE_DE_L_ANIMATION                                                                                                       \
                    VRAI                                                                                                                \
                                        /* Faut-il centrer l'animation dans la fenetre...                                            */
#define   METTRE_UN_FOND                                                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il mettre un fond derriere l'animation ?                                             */
#define   METTRE_L_IMAGE_COMME_FOND                                                                                                     \
                    FAUX                                                                                                                \
                                        /* Faut-il mettre l'animation comme fond d'elle-meme (auquel cas, on ne centre pas...) ?     */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#    define    RECUPERER_UNE_IMAGE_EN_VRAIES_COULEURS                                                                                   \
                         VRAI                                                                                                           \
                                        /* Faut-il recuperer une image en vraies couleurs ('VRAI)' c'est-a-dire dont les trois       */ \
                                        /* composantes ont la meme racine, ou bien trois images "independantes" ('FAUX'). La         */ \
                                        /* valeur par defaut est choisie pour assurer la compatibilite anterieure. Ceci etant        */ \
                                        /* lie evidemment a 'EST_FAUX(IXopen_____mettre_X_Window_en_mode_fausses_couleurs)' et       */ \
                                        /* a ete introduit le 20021231172052.                                                        */

#    define    CHANGER_LA_DIMENSION_DE_LA_FENETRE                                                                                       \
                         FAUX
#    define    X_DIMENSION_DE_LA_FENETRE                                                                                                \
                         FU
#    define    Y_DIMENSION_DE_LA_FENETRE                                                                                                \
                         FU
                                        /* Faut-il redimensionner la fenetre de facon, par exemple, a ce qu'elle soit plus grande    */
                                        /* que l'image ('VRAI)' ou pas ('FAUX'). Ceci a ete introduit le 20030401175939.             */

#    define    FACTEUR_DE_RALENTISSEMENT                                                                                                \
                         TRENTE_DEUX                                                                                                    \
                                        /* Nombre de fois que chaque trame est repetee pour simuler un ralentissement...             */

#    define    TRANSLATION_HORIZONTALE_INTER_TRAMES                                                                                     \
                         ZERO
#    define    TRANSLATION_VERTICALE_INTER_TRAMES                                                                                       \
                         ZERO
                                        /* Translation horizontale ('dx') et verticale ('dy') separant deux trames consecutives      */
                                        /* de l'animation. Lorsque celles-ci ne sont pas nulles, cela permet de visualiser l'axe     */
                                        /* du temps comme une troisieme dimension spatiale. On notera un petit defaut contre lequel  */
                                        /* je ne peux rien : en general 'nombre_de_trames' est un nombre pair (4,16,64), ce qui      */
                                        /* fait qu'il n'y a pas de trame "du milieu", et qu'ainsi donc l'ensemble des trames n'est   */
                                        /* pas parfaitement centree par rapport au centre de la fenetre... Enfin, cette possibilite  */
                                        /* n'est offerte que si 'centrage_de_l_animation' est demandee...                            */
#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/signature.11.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A N I M A T I O N   G R A P H I Q U E   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de l'image a displayer.                                                               */
     DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
                                        /* Nom du fond a utiliser derriere l'animation.                                              */
     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette a utiliser.                                                             */
     DEFV(Logical,INIT(tenter_un_redimensionnement,TENTER_UN_REDIMENSIONNEMENT));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') tenter le redimensionnement...                 */
     DEFV(Logical,INIT(mettre_un_fond,METTRE_UN_FOND));
                                        /* Indique s'il faut mettre ('VRAI') ou pas ('FAUX') un fond derriere l'animation.           */
     DEFV(Logical,INIT(mettre_l_image_comme_fond,METTRE_L_IMAGE_COMME_FOND));
                                        /* Faut-il mettre l'animation comme fond d'elle-meme (auquel cas, on ne centre pas...) ?     */
     DEFV(Positive,INIT(temporisation_inter_trames,TEMPORISATION_INTER_TRAMES));
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente...           */
     DEFV(Positive,INIT(temporisation_inter_animations,TEMPORISATION_INTER_ANIMATIONS));
                                        /* Temporisation inter_animations ; une valeur nulle fait qu'il n'y a pas d'attente...       */
     DEFV(Positive,INIT(nombre_de_repetitions,NOMBRE_DE_REPETITIONS));
                                        /* Nombre implicite de repetitions de l'animation...                                         */
     DEFV(Positive,INIT(nombre_de_trames,NOMBRE_DE_TRAMES));
                                        /* Nombre implicite de trames (ou "sous-images") contenues dans l'animation...               */
     DEFV(Logical,INIT(centrage_de_l_animation,CENTRAGE_DE_L_ANIMATION));
                                        /* Indicateur de centrage ('VRAI') ou de mise dans le coin haut-gauche de l'animation        */
                                        /* dans la fenetre.                                                                          */
     DEFV(deltaF_2D,dimension_de_la_fenetre);
                                        /* Dimension de la fenetre de visualisation.                                                 */

#include  xci/display.03.I"

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
     DEFV(pointF_2D,coin_haut_gauche);
                                        /* Position du coin haut gauche de la fenetre.                                               */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SPIX

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
     DEFV(CHAR,INIC(POINTERc(nom_imageAR),NOM_PIPE));
                                        /* Nom de l'image ROUGE a utiliser,                                                          */
     DEFV(CHAR,INIC(POINTERc(nom_imageAV),NOM_PIPE));
                                        /* Nom de l'image VERTE a utiliser,                                                          */
     DEFV(CHAR,INIC(POINTERc(nom_imageAB),NOM_PIPE));
                                        /* Nom de l'image BLEUE a utiliser.                                                          */
     DEFV(Logical,INIT(recuperer_une_image_en_vraies_couleurs,RECUPERER_UNE_IMAGE_EN_VRAIES_COULEURS));
                                        /* Faut-il recuperer une image en vraies couleurs ('VRAI)' c'est-a-dire dont les trois       */
                                        /* composantes ont la meme racine, ou bien trois images "independantes" ('FAUX'). La         */
                                        /* valeur par defaut est choisie pour assurer la compatibilite anterieure. Ceci etant        */
                                        /* lie evidemment a 'EST_FAUX(IXopen_____mettre_X_Window_en_mode_fausses_couleurs)' et       */
                                        /* a ete introduit le 20021231172052.                                                        */

     DEFV(Logical,INIT(changer_la_dimension_de_la_fenetre,CHANGER_LA_DIMENSION_DE_LA_FENETRE));
     DEFV(Float,INIT(X_dimension_de_la_fenetre,X_DIMENSION_DE_LA_FENETRE));
     DEFV(Float,INIT(Y_dimension_de_la_fenetre,Y_DIMENSION_DE_LA_FENETRE));
                                        /* Faut-il redimensionner la fenetre de facon, par exemple, a ce qu'elle soit plus grande    */
                                        /* que l'image ('VRAI)' ou pas ('FAUX'). Ceci a ete introduit le 20030401175939.             */

     DEFV(Positive,INIT(facteur_de_ralentissement,FACTEUR_DE_RALENTISSEMENT));
                                        /* Nombre de fois que chaque trame est repetee pour simuler un ralentissement...             */
     DEFV(deltaF_2D,translation_spatiale_entre_deux_trames);
                                        /* Translation horizontale ('dx') et verticale ('dy') separant deux trames consecutives      */
                                        /* de l'animation. Lorsque celles-ci ne sont pas nulles, cela permet de visualiser l'axe     */
                                        /* du temps comme une troisieme dimension spatiale. On notera un petit defaut contre lequel  */
                                        /* je ne peux rien : en general 'nombre_de_trames' est un nombre pair (4,16,64), ce qui      */
                                        /* fait qu'il n'y a pas de trame "du milieu", et qu'ainsi donc l'ensemble des trames n'est   */
                                        /* pas parfaitement centree par rapport au centre de la fenetre... Enfin, cette possibilite  */
                                        /* n'est offerte que si 'centrage_de_l_animation' est demandee...                            */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW

     /*..............................................................................................................................*/

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SPIX
     INITIALISATION_POINT_2D(coin_haut_gauche,_____cNORMALISE_OX5(X_COIN_HAUT_GAUCHE),_____cNORMALISE_OY5(Y_COIN_HAUT_GAUCHE));
                                        /* Definition de la position implicite de la fenetre.                                        */
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         SUPPRIME_LE_20090604084535(GET_ARGUMENT_L("redimensionner=",tenter_un_redimensionnement););
                                        /* Au sujet de la suppression du 20090604084535, 'v $xiii/files$FON 20090604090257'...       */
                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_L("fond=",mettre_un_fond);
                         GET_ARGUMENT_L("auto=",mettre_l_image_comme_fond);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_I("repetitions=""repetition=""r=",nombre_de_repetitions);
                         GET_ARGUMENT_I("Duree=""D=",temporisation_inter_trames);
                         GET_ARGUMENT_I("duree=""d=",temporisation_inter_animations);
                         GET_ARGUMENT_I("trames=""t=",nombre_de_trames);
                         GET_ARGUMENT_L("centrage=",centrage_de_l_animation);
                         GET_ARGUMENT_F("xc=""x=""X=",ASD1(coin_haut_gauche,x));
                         GET_ARGUMENT_F("yc=""y=""Y=",ASD1(coin_haut_gauche,y));
                         )
                    );

     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image_avec_redimensionnement_eventuel(ImageA1,nom_imageA
                                                                             ,tenter_un_redimensionnement
                                                                             ,nombre_d_arguments,arguments
                                                                              )
                                  )
                       )
          )
          Bblock
          CHARGEMENT_DE_LA_PALETTE_DE_COULEURS;
                                        /* Chargement des trois listes de substitution constitutive d'une palette.                   */
          INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre,_____lNORMALISE_OX5(dimX5),_____lNORMALISE_OY5(dimY5));
                                        /* Definition des dimensions de la fenetre.                                                  */

          Test(IL_FAUT(mettre_l_image_comme_fond))
               Bblock
                                        /* Cas ou l'image sert elle-meme de fond, on ne centre plus l'animation afin que cette       */
                                        /* derniere soit diffusee dans l'image situee en bas et a gauche...                          */
               EGAL(mettre_un_fond,VRAI);
               EGAL(centrage_de_l_animation,FAUX);
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(mettre_un_fond))
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA2,COND(IL_FAUT(mettre_l_image_comme_fond),nom_imageA,nom_imageF)))))
                                        /* Un fond a ete demande, on le charge...                                                    */
                    Bblock
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    CALi(Inoir(ImageA2));
                    EGAL(mettre_un_fond,FAUX);
                                        /* En cas d'erreur, on supprime le fond, ce qui correspond a un fond 'NOIR'.                 */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               CALi(Inoir(ImageA2));
                                        /* Il n'y a pas de fond, ce qui correspond a un fond 'NOIR'.                                 */
               Eblock
          ETes

          CALS(IDopen(nom_imageA,ADRESSE(dimension_de_la_fenetre),ADRESSE(coin_haut_gauche)));
          CALS(IDanimation(ImageA1
                          ,nombre_de_trames
                          ,temporisation_inter_trames
                          ,temporisation_inter_animations
                          ,nombre_de_repetitions
                          ,centrage_de_l_animation
                          ,mettre_un_fond,ImageA2
                           )
               );
          CALS(IDclose());
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes
#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.                                        */
     INITIALISATION_ACCROISSEMENT_2D(translation_spatiale_entre_deux_trames
                                    ,_____lNORMALISE_OX(TRANSLATION_HORIZONTALE_INTER_TRAMES)
                                    ,_____lNORMALISE_OY(TRANSLATION_VERTICALE_INTER_TRAMES)
                                     );
                                        /* Definition de la translation spatiale entre deux trames si 'centrage_de_l_animation'...   */
     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 20100109113056 pour acceder au serveur 'Xming' (Windows Vista).   */
                         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("Rouge=""ROUGE=""AR=",nom_imageAR);
                         GET_ARGUMENT_C("Verte=""VERTE=""AV=",nom_imageAV);
                         GET_ARGUMENT_C("Bleue=""BLEUE=""AB=",nom_imageAB);
                         GET_ARGUMENT_L("RVB=",recuperer_une_image_en_vraies_couleurs);
                         SUPPRIME_LE_20090604084535(GET_ARGUMENT_L("redimensionner=",tenter_un_redimensionnement););
                                        /* Au sujet de la suppression du 20090604084535, 'v $xiii/files$FON 20090604090257'...       */
                         GET_ARGUMENT_L("fc=""fausses_couleurs=",IXopen_____mettre_X_Window_en_mode_fausses_couleurs);
                         GET_ARGUMENT_N("vraies_couleurs=""vc=",IXopen_____mettre_X_Window_en_mode_fausses_couleurs);
                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_L("fond=",mettre_un_fond);
                         GET_ARGUMENT_L("auto=",mettre_l_image_comme_fond);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_I("nombre=""couleurs=",nombre_de_couleurs_necessaires);
                         GET_ARGUMENT_I("repetitions=""repetition=""r=",nombre_de_repetitions);
                         GET_ARGUMENT_I("Duree=""D=",temporisation_inter_trames);
                         GET_ARGUMENT_I("ralentissement=""ralenti=",facteur_de_ralentissement);
                         GET_ARGUMENT_I("duree=""d=",temporisation_inter_animations);
                         GET_ARGUMENT_I("trames=""t=",nombre_de_trames);
                         GET_ARGUMENT_L("centrage=",centrage_de_l_animation);
                         GET_ARGUMENT_F("trx=",ASD1(translation_spatiale_entre_deux_trames,dx));
                         GET_ARGUMENT_F("try=",ASD1(translation_spatiale_entre_deux_trames,dy));
                         GET_ARGUMENT_L("Fdimension=""Fd=",changer_la_dimension_de_la_fenetre);
                         GET_ARGUMENT_F("FXdimension=""FX=",X_dimension_de_la_fenetre);
                         GET_ARGUMENT_F("FYdimension=""FY=",Y_dimension_de_la_fenetre);
                         GET_ARGUMENT_L("centrer=""Fcentrer=""Fc=",centrer_la_fenetre);
                                        /* Parametre introduit le 20060427162434...                                                  */
                         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);
                         )
                    );

     Test(EST_VRAI(IXopen_____mettre_X_Window_en_mode_fausses_couleurs))
                                        /* Possibilite introduite le 20021231100222.                                                 */
          Bblock
          RECHERCHE_D_UNE_LISTE_DE_SUBSTITUTION(nom_substitution,substitution_courante,substitution_courante);
                                        /* Tentative de recherche de la substitution demandee...                                     */

          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image_avec_redimensionnement_eventuel(ImageA1,nom_imageA
                                                                                  ,tenter_un_redimensionnement
                                                                                  ,nombre_d_arguments,arguments
                                                                                   )
                                       )
                            )
               )
               Bblock
               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
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image_avec_redimensionnement_eventuel(Image_ROUGE
                                                                                  ,NOM_D_UNE_COMPOSANTE(nom_imageAR,c_ROUGE)
                                                                                  ,tenter_un_redimensionnement
                                                                                  ,nombre_d_arguments,arguments
                                                                                   )
                                       )
                            )
               )
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(Iload_image_avec_redimensionnement_eventuel(Image_VERTE
                                                                                       ,NOM_D_UNE_COMPOSANTE(nom_imageAV,c_VERTE)
                                                                                       ,tenter_un_redimensionnement
                                                                                       ,nombre_d_arguments,arguments
                                                                                        )
                                            )
                                 )
                    )
                    Bblock
                    Test(PAS_D_ERREUR(CODE_ERROR(Iload_image_avec_redimensionnement_eventuel(Image_BLEUE
                                                                                            ,NOM_D_UNE_COMPOSANTE(nom_imageAB,c_BLEUE)
                                                                                            ,tenter_un_redimensionnement
                                                                                            ,nombre_d_arguments,arguments
                                                                                             )
                                                 )
                                      )
                         )
                         Bblock
                         CALS(Iluminance(ImageA1,Image_ROUGE,Image_VERTE,Image_BLEUE));
                                        /* Au cas ou il serait ensuite impossible de visualiser en vraies couleurs (c'est le cas     */
                                        /* si le serveur -par exemple celui de '$LACT14'- ne connait pas 'TrueColor'...). Ainsi      */
                                        /* l'image visualisee en 'PseudoColor' sera representative de l'image 'TrueColor'...         */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ETes

     Test(PAS_D_ERREUR(CODE_ERREUR))
          Bblock
          Test(IL_FAUT(changer_la_dimension_de_la_fenetre))
                                        /* Ce test a ete introduit le 20030401175939.                                                */
               Bblock
               INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre
                                              ,X_dimension_de_la_fenetre
                                              ,Y_dimension_de_la_fenetre
                                               );
                                        /* Definition des dimensions arbitraire pour la fenetre.                                     */
               Eblock
          ATes
               Bblock
               INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre
                                              ,_____lNORMALISE_OX11(dimX11)
                                              ,_____lNORMALISE_OY11(dimY11)
                                               );
                                        /* Definition des dimensions de la fenetre tel qu'une image y tienne juste...                */
               Eblock
          ETes

          Test(IL_FAUT(mettre_l_image_comme_fond))
               Bblock
                                        /* Cas ou l'image sert elle-meme de fond, on ne centre plus l'animation afin que cette       */
                                        /* derniere soit diffusee dans l'image situee en bas et a gauche...                          */
               Test(EST_VRAI(IXopen_____mettre_X_Window_en_mode_fausses_couleurs))
                    Bblock
                    EGAL(mettre_un_fond,VRAI);
                    EGAL(centrage_de_l_animation,FAUX);
                    Eblock
               ATes
                    Bblock
                    PRINT_ATTENTION("en mode VRAIES COULEURS, l'image ne peut etre utilisee comme fond qui est en FAUSSES COULEURS");

                    EGAL(mettre_un_fond,FAUX);
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(mettre_un_fond))
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA2,COND(IL_FAUT(mettre_l_image_comme_fond),nom_imageA,nom_imageF)))))
                                        /* Un fond a ete demande, on le charge...                                                    */
                    Bblock
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    CALi(Inoir(ImageA2));
                    EGAL(mettre_un_fond,FAUX);
                                        /* En cas d'erreur, on supprime le fond, ce qui correspond a un fond 'NOIR'.                 */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               CALi(Inoir(ImageA2));
                                        /* Il n'y a pas de fond, ce qui correspond a un fond 'NOIR'.                                 */
               Eblock
          ETes

          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

          CALS(IXinitialisation());
                                        /* Initialisation fondamentale introduite le 20160815121949...                               */
          CALS(IXopen(serveur_standard
                     ,nom_imageA
                     ,ADRESSE(dimension_de_la_fenetre)
                     ,centrer_la_fenetre
                     ,ADRESSE(coin_bas_gauche)
                     ,editer_les_PRINT_ATTENTION_initiaux
                      )
               );

          CALS(IXanimation(ImageA1
                          ,Image_ROUGE
                          ,Image_VERTE
                          ,Image_BLEUE
                          ,nombre_de_trames
                          ,temporisation_inter_trames
                          ,facteur_de_ralentissement
                          ,temporisation_inter_animations
                          ,nombre_de_repetitions
                          ,centrage_de_l_animation
                          ,ADRESSE(translation_spatiale_entre_deux_trames)
                          ,mettre_un_fond,ImageA2
                           )
               );
                                        /* Le triplet {Image_ROUGE,Image_VERTE,Image_BLEUE} a ete introduit le 20030101113051.       */
          CALS(IXclose());

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

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_ROS
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(VIDE;
                         )
                    );
                                        /* Introduit le 20070301174416...                                                            */

     PRINT_ATTENTION("les fonctions graphiques ne sont pas implementees");
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ROS
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ROS

     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.