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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_SILICON_GRAPHICS
#    include   image_image_QUAD_IMAGE_EXT

#    nodefine  INCLURE_LE_GRAPHIQUE_X_WINDOW

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         define    INCLURE_LE_GRAPHIQUE_X_WINDOW
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    ifdef     INCLURE_LE_GRAPHIQUE_X_WINDOW
#         include   image_drive_XWind_FONCTION_EXT
#    Aifdef    INCLURE_LE_GRAPHIQUE_X_WINDOW
#    Eifdef    INCLURE_LE_GRAPHIQUE_X_WINDOW

#    include   image_drive_SiliG_FONCTION_1_EXT
                                        /* ATTENTION, l'ordre suivant est imperatif :                                                */
                                        /*                                                                                           */
                                        /*                  #              include   image_drive_XWind_FONCTION_EXT                  */
                                        /*                  #         include   image_drive_SiliG_FONCTION_1_EXT                     */
                                        /*                                                                                           */
                                        /* a cause des references de 'XWind' par 'SiliG'...                                          */

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_LES_MESSAGES_D_ERREUR                                                                                                  \
                    EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS                                                                           \
                                        /* Indique si les messages d'erreur des fichiers doivent etre emis ('VRAI') ou pas ('FAUX'), */ \
                                        /* ce qui peut etre tres utile lorsque l'on considere que les images non existantes ne sont  */ \
                                        /* pas encore produites et qu'il faut donc les attendre...                                   */

#define   EDITER_LE_NOM_DES_IMAGES                                                                                                      \
                    FAUX                                                                                                                \
                                        /* Indique si le nom 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_SEULEMENT_LE_NUMERO_DES_IMAGES                                                                                         \
                    FAUX                                                                                                                \
                                        /* Indique si 'IL_FAUT(editer_le_nom_des_images)' si le nom entier doit etre edite ('FAUX')  */ \
                                        /* ou seulement le numero ('VRAI').                                                          */

#include  xci/sequence.01.I"

#define   TEMPORISATION_INTER_TRAMES                                                                                                    \
                    ZERO                                                                                                                \
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente, et une      */ \
                                        /* valeur negative provoque l'attente sur la souris (ATTENTION, cette convention n'est pas   */ \
                                        /* celle de '$xci/display$K', car en effet, dans le cas de '$xci/sequence$K', en general on  */ \
                                        /* ne veut pas attendre apres chaque image, ce qui correspond reellement a une attente       */ \
                                        /* nulle ; cette convention ne peut donc etre utilisee...).                                  */
#define   FACTEUR_DE_RALENTISSEMENT                                                                                                     \
                    UN                                                                                                                  \
                                        /* Nombre de fois que chaque trame est repetee pour simuler un ralentissement...             */
#define   NOMBRE_DE_REPETITIONS                                                                                                         \
                    UN                                                                                                                  \
                                        /* Nombre implicite de repetitions de l'animation...                                         */

#define   ATTENDRE_LES_IMAGES_INEXISTANTES                                                                                              \
                    ATTENDRE_UN_FICHIER_INEXISTANT_OU_NON_CONFORME                                                                      \
                                        /* 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   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...                                */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#    define    CENTRER_LA_FENETRE                                                                                                       \
                         FAUX                                                                                                           \
                                        /* Faut-il centrer la fenetre ('VRAI') ou pas ('FAUX').                                      */

#    define    LAISSER_LE_CURSEUR_APPARAITRE_PENDANT_L_AFFICHAGE                                                                        \
                         FAUX                                                                                                           \
                                        /* Indicateur precisant s'il faut laisser le curseur de l'ecran pendant que cette fenetre    */ \
                                        /* est ouverte ('VRAI') ou le supprimer ('FAUX').                                            */

#    define    SERVEUR_STANDARD                                                                                                         \
                         NOM_UNDEF                                                                                                      \
                                        /* Le serveur standard est celui qui est defini par la variable "DISPLAY".                   */

#    define    EDITER_LES_PRINT_ATTENTION_INITIAUX                                                                                      \
                         FAUX                                                                                                           \
                                        /* Indique si les messages initiaux du type 'PRINT_ATTENTION(...)' doivent etre emis         */ \
                                        /* ('VRAI') ou pas ('FAUX').                                                                 */
#    define    X_COIN_BAS_GAUCHE                                                                                                        \
                         UNDEF                                                                                                          \
                                        /* Definition du coin bas gauche de la fenetre...                                            */
#    define    Y_COIN_BAS_GAUCHE                                                                                                        \
                         UNDEF                                                                                                          \
                                        /* Definition du coin bas gauche de la fenetre...                                            */

#    define    TRANSLATION_OX_DE_LA_FENETRE                                                                                             \
                         _____lNORMALISE_OXG(CGXR(XminG))                                                                               \
                                        /* Translation horizontale implicite de la fenetre,                                          */
#    define    TRANSLATION_OY_DE_LA_FENETRE                                                                                             \
                         _____lNORMALISE_OYG(CGYR(YminG))                                                                               \
                                        /* Translation verticale implicite de la fenetre.                                            */
#    define    CENTRER_L_IMAGE_DANS_LA_FENETRE                                                                                          \
                         VRAI                                                                                                           \
                                        /* Centrer ou pas (il faut alors la translation suivante) l'image dans la fenetre...         */
#    define    TRANSLATION_OX_DE_L_IMAGE_DANS_LA_FENETRE                                                                                \
                         _____lNORMALISE_OXG(CGXR(XminG))                                                                               \
                                        /* Translation horizontale implicite de l'image dans la fenetre,                             */
#    define    TRANSLATION_OY_DE_L_IMAGE_DANS_LA_FENETRE                                                                                \
                         _____lNORMALISE_OYG(CGYR(YminG))                                                                               \
                                        /* Translation verticale implicite de l'image dans la fenetre.                               */
#    define    FACTEUR_DE_ZOOM                                                                                                          \
                         RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom                                                                           \
                                        /* Facteur de zoom de l'image.                                                               */
#    define    NOM_DE_LA_FENETRE                                                                                                        \
                         "image"                                                                                                        \
                                        /* Nom de la fenetre...                                                                      */

#    define    GENERER_DE_LA_VIDEO                                                                                                      \
                         FAUX                                                                                                           \
                                        /* De la video "standard" 780x575 ('VRAI') ou de la "haute-definition" 1280x1024 ('FAUX').   */
#Aifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#Eifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#    define    OUVERTURE_DE_LA_FENETRE                                                                                                  \
                         Bblock                                                                                                         \
                         CALS(IGopen(nom_de_la_fenetre                                                                                  \
                                    ,centrer_la_fenetre                                                                                 \
                                    ,ADRESSE(translation_de_la_fenetre)                                                                 \
                                    ,GENERER_DE_LA_VIDEO                                                                                \
                                    ,laisser_le_curseur_apparaitre_pendant_l_affichage                                                  \
                                     )                                                                                                  \
                              );                                                                                                        \
                                        /* Ouverture du plan de travail.                                                             */ \
                         Eblock                                                                                                         \
                                        /* Ouverture d'une fenetre...                                                                */
#    define    FERMETURE_DE_LA_FENETRE                                                                                                  \
                         Bblock                                                                                                         \
                         CALS(IGclose());                                                                                               \
                                        /* Fermeture du plan de travail.                                                             */ \
                         Eblock                                                                                                         \
                                        /* Fermeture d'une fenetre...                                                                */

#    define    EDITION_FACULTATIVE_DU_NOM_DE_CHAQUE_IMAGE                                                                               \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(editer_le_nom_des_images))                                                                        \
                              Bblock                                                                                                    \
                              Test(IFEQ(numero_d_image,premiere_image))                                                                 \
                                   Bblock                                                                                               \
                                   CALS(Fsauts_de_lignes(UN));                                                                          \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              Test(IL_FAUT(editer_seulement_le_numero_des_images))                                                      \
                                   Bblock                                                                                               \
                                   CAL3(Prme1("%s\n",chain_numero_modulo(numero_d_image,nombre_de_chiffres)));                          \
                                        /* Le 20221212115554, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   CAL3(Prme1("%s\n"                                                                                    \
                                             ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA,chain_numero_modulo(numero_d_image              \
                                                                                                           ,nombre_de_chiffres          \
                                                                                                            )                           \
                                                                             )                                                          \
                                              )                                                                                         \
                                        );                                                                                              \
                                        /* Le 20221212115554, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Edition, lorsque cela est demande, du nom de l'image courante...                          */
#Aifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#Eifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

#ifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    define    CONVERSION_D_UNE_IMAGE_QUELCONQUE(image_ROUGE,image_VERTE,image_BLEUE)                                                   \
                         Bblock                                                                                                         \
                         CALS(Ifausses_couleurs_BVR_888_universel(image_en_vraies_couleurs                                              \
                                                                 ,image_ROUGE,image_VERTE,image_BLEUE                                   \
                                                                  )                                                                     \
                              );                                                                                                        \
                                        /* Et 'multiplexage universel' des trois images Arguments.                                   */ \
                         Eblock                                                                                                         \
                                        /* Conversion d'une image au format attendu...                                               */
#Aifdef   __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#Eifdef   __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#ifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    define    CONVERSION_D_UNE_IMAGE_QUELCONQUE(image_ROUGE,image_VERTE,image_BLEUE)                                                   \
                         Bblock                                                                                                         \
                         CALS(Ifausses_couleurs_RVBg_888_universel(image_en_vraies_couleurs                                             \
                                                                  ,image_ROUGE,image_VERTE,image_BLEUE                                  \
                                                                   )                                                                    \
                              );                                                                                                        \
                                        /* Et 'multiplexage universel' des trois images Arguments.                                   */ \
                         Eblock                                                                                                         \
                                        /* Conversion d'une image au format attendu...                                               */
#Aifdef   __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#Eifdef   __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#define   AFFICHAGE_D_UNE_IMAGE_ET_ATTENTE(attendre)                                                                                    \
                    Bblock                                                                                                              \
                    Repe(facteur_de_ralentissement)                                                                                     \
                         Bblock                                                                                                         \
                         CALS(IGdisplay(image_en_vraies_couleurs                                                                        \
                                       ,facteur_de_zoom                                                                                 \
                                       ,centrer_l_image_dans_la_fenetre                                                                 \
                                       ,ADRESSE(translation_de_l_image_dans_la_fenetre)                                                 \
                                        )                                                                                               \
                              );                                                                                                        \
                                        /* Affichage de l'image.                                                                     */ \
                         Eblock                                                                                                         \
                    ERep                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(attendre))                                                                                             \
                         Bblock                                                                                                         \
                         Test(IZLT(temporisation_inter_trames))                                                                         \
                              Bblock                                                                                                    \
                              CALS(IGattente_de_l_evenement_ButtonPress());                                                             \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              DODO(temporisation_inter_trames);                                                                         \
                                        /* Et on attend de nouveau un petit peu, pour un temps pre-determine...                      */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Attente de la fin de visualisation d'une image...                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F F I C H A G E   D ' U N E   S E Q U E N C E   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(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere 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(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     DEFV(CHAR,INIC(POINTERc(nom_de_l_espace_de_couleurs),ESPACE_DE_COULEURS_RVB));
                                        /* L'image est une image de type 'RVB'.                                                      */
     DEFV(Logical,INIT(editer_le_nom_des_images,EDITER_LE_NOM_DES_IMAGES));
                                        /* Indique si le nom 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_seulement_le_numero_des_images,EDITER_SEULEMENT_LE_NUMERO_DES_IMAGES));
                                        /* Indique si 'IL_FAUT(editer_le_nom_des_images)' si le nom entier doit etre edite ('FAUX')  */
                                        /* ou seulement le numero ('VRAI').                                                          */
     DEFV(Int,INIT(temporisation_inter_trames,TEMPORISATION_INTER_TRAMES));
                                        /* Temporisation inter_trames ; une valeur nulle fait qu'il n'y a pas d'attente, et une      */
                                        /* valeur negative provoque l'attente sur la souris (ATTENTION, cette convention n'est pas   */
                                        /* celle de '$xci/display$K', car en effet, dans le cas de '$xci/sequence$K', en general on  */
                                        /* ne veut pas attendre apres chaque image, ce qui correspond reellement a une attente       */
                                        /* nulle ; cette convention ne peut donc etre utilisee...). C'est la raison pour laquelle    */
                                        /* 'temporisation_inter_trames' est de type 'Int' et non pas 'Positive'...                   */
     DEFV(Positive,INIT(facteur_de_ralentissement,FACTEUR_DE_RALENTISSEMENT));
                                        /* Nombre de fois que chaque trame est repetee pour simuler un ralentissement...             */
     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(Positive,INIT(nombre_de_repetitions,NOMBRE_DE_REPETITIONS));
                                        /* Nombre implicite de repetitions de l'animation...                                         */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
     DEFV(Logical,INIT(centrer_la_fenetre,CENTRER_LA_FENETRE));
                                        /* Faut-il centrer la fenetre ('VRAI') ou pas ('FAUX').                                      */
     DEFV(CHAR,INIC(POINTERc(nom_de_la_fenetre),NOM_DE_LA_FENETRE));
                                        /* Nom de la fenetre...                                                                      */
     DEFV(Logical,INIT(laisser_le_curseur_apparaitre_pendant_l_affichage,LAISSER_LE_CURSEUR_APPARAITRE_PENDANT_L_AFFICHAGE));
                                        /* Indicateur precisant s'il faut laisser le curseur de l'ecran pendant que cette fenetre    */
                                        /* est ouverte ('VRAI') ou le supprimer ('FAUX').                                            */
     DEFV(Float,INIT(translation_OX_de_la_fenetre,TRANSLATION_OX_DE_LA_FENETRE));
     DEFV(Float,INIT(translation_OY_de_la_fenetre,TRANSLATION_OY_DE_LA_FENETRE));
                                        /* Argument de translation de la fenetre.                                                    */
     DEFV(deltaF_2D,translation_de_la_fenetre);
                                        /* Translation de la fenetre.                                                                */
     DEFV(Logical,INIT(centrer_l_image_dans_la_fenetre,CENTRER_L_IMAGE_DANS_LA_FENETRE));
                                        /* Centrer ou pas (il faut alors la translation suivante) l'image dans la fenetre...         */
     DEFV(Float,INIT(translation_OX_de_l_image_dans_la_fenetre,TRANSLATION_OX_DE_L_IMAGE_DANS_LA_FENETRE));
     DEFV(Float,INIT(translation_OY_de_l_image_dans_la_fenetre,TRANSLATION_OY_DE_L_IMAGE_DANS_LA_FENETRE));
                                        /* Argument de translation de l'image dans la fenetre.                                       */
     DEFV(deltaF_2D,translation_de_l_image_dans_la_fenetre);
                                        /* Translation de l'image dans la fenetre.                                                   */
     DEFV(Float,INIT(facteur_de_zoom,FACTEUR_DE_ZOOM));
                                        /* Facteur de zoom de l'image.                                                               */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

     /*..............................................................................................................................*/
     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...                         */
     EGAL(attendre_un_fichier_inexistant_ou_non_conforme,ATTENDRE_LES_IMAGES_INEXISTANTES);
                                        /* Initialisation de l'indicateur d'attente eventuelle des images inexistantes.              */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_L("attendre=",attendre_un_fichier_inexistant_ou_non_conforme);
                         GET_ARGUMENT_L("editer=",editer_le_nom_des_images);
                         GET_ARGUMENT_L("numero=",editer_seulement_le_numero_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_C("titre=""nom=""fenetre=",nom_de_la_fenetre);
                         GET_ARGUMENT_I("xm=",SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("xM=",SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("Xm=",SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("XM=",SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("ym=",SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("yM=",SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("Ym=",SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("YM=",SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_L("Fcentrer=""Fc=",centrer_la_fenetre);
                                        /* Parametre introduit le 20060427162805...                                                  */
                         GET_ARGUMENT_F("trx=""trX=",translation_OX_de_la_fenetre);
                         GET_ARGUMENT_F("try=""trY=",translation_OY_de_la_fenetre);
                         GET_ARGUMENT_L("centrer=",centrer_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("tix=""tiX=",translation_OX_de_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("tiy=""tiY=",translation_OY_de_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("zoom=",facteur_de_zoom);
                         GET_ARGUMENT_L("curseur=",laisser_le_curseur_apparaitre_pendant_l_affichage);
                         GET_ARGUMENT_I("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);
                         )
                    );
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
     EGAL(IGdisplay_____on_peut_revisualiser_l_imageA_courante,FAUX);
                                        /* Ceci est destine a eviter que la premiere image d'une sequence ne soit reaffichee en      */
                                        /* cas de necessite.                                                                         */
                                        /*                                                                                           */
                                        /* En effet ('v $xiidG/fonction.1$FON IGdisplay_____on_peut_revisualiser_l_imageA_courante') */
                                        /* apres 'IGopen(...)' une seule image est memorisable par 'IGdisplay(...)' ; lorsque c'est  */
                                        /* une sequence d'images qui est diffusee, seule donc la premiere est memorisable...         */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_L("attendre=",attendre_un_fichier_inexistant_ou_non_conforme);
                         GET_ARGUMENT_L("editer=",editer_le_nom_des_images);
                         GET_ARGUMENT_L("numero=",editer_seulement_le_numero_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_C("titre=""nom=""fenetre=",nom_de_la_fenetre);
                         GET_ARGUMENT_I("xm=",SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("xM=",SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("Xm=",SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("XM=",SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("ym=",SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("yM=",SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("Ym=",SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_I("YM=",SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION);
                         GET_ARGUMENT_L("Fcentrer=""Fc=",centrer_la_fenetre);
                                        /* Parametre introduit le 20060427162805...                                                  */
                         GET_ARGUMENT_P("fondR=""fR=",SGI_____fond_de_la_fenetre_ROUGE);
                         GET_ARGUMENT_P("fondV=""fV=",SGI_____fond_de_la_fenetre_VERTE);
                         GET_ARGUMENT_P("fondB=""fB=",SGI_____fond_de_la_fenetre_BLEUE);
                         GET_ARGUMENT_F("trx=""trX=",translation_OX_de_la_fenetre);
                         GET_ARGUMENT_F("try=""trY=",translation_OY_de_la_fenetre);
                         GET_ARGUMENT_L("centrer=",centrer_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("tix=""tiX=",translation_OX_de_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("tiy=""tiY=",translation_OY_de_l_image_dans_la_fenetre);
                         GET_ARGUMENT_F("zoom=",facteur_de_zoom);
                         GET_ARGUMENT_L("curseur=",laisser_le_curseur_apparaitre_pendant_l_affichage);
                         GET_ARGUMENT_I("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_L("SGIattention=",SGI_____editer_les_PRINT_ATTENTION_initiaux);
                         )
                    );
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(VIDE;
                         )
                    );
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
     CALi(Inoir(Image_ROUGE));
     CALi(Inoir(Image_VERTE));
     CALi(Inoir(Image_BLEUE));
                                        /* Initialisation de l'image en couleurs...                                                  */

     INITIALISATION_ACCROISSEMENT_2D(translation_de_la_fenetre
                                    ,translation_OX_de_la_fenetre
                                    ,translation_OY_de_la_fenetre
                                     );
                                        /* Mise en place de la translation de la fenetre.                                            */
     INITIALISATION_ACCROISSEMENT_2D(translation_de_l_image_dans_la_fenetre
                                    ,translation_OX_de_l_image_dans_la_fenetre
                                    ,translation_OY_de_l_image_dans_la_fenetre
                                     );
                                        /* Mise en place de la translation de la fenetre.                                            */

     OUVERTURE_DE_LA_FENETRE;
                                        /* Ouverture de la fenetre.                                                                  */

     Repe(nombre_de_repetitions)
          Bblock
          DoQu(numero_d_image,premiere_image,derniere_image,pas_des_images)
               Bblock
               BDEFV(imageU,image_en_vraies_couleurs);
                                        /* Image en vraies couleurs au format 'Silicon-Graphics'.                                    */

               CALi(Iload_image_en_couleurs(Image_ROUGE,Image_VERTE,Image_BLEUE
                                           ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
                                                                          ,chain_numero_modulo(numero_d_image,nombre_de_chiffres)
                                                                           )
                                           ,nom_de_l_espace_de_couleurs
                                            )
                    );
                                        /* Chargement des trois composantes avec attente eventuelle...                               */
                                        /*                                                                                           */
                                        /* Le 20221212115554, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */
               EDITION_FACULTATIVE_DU_NOM_DE_CHAQUE_IMAGE;
                                        /* Edition, lorsque cela est demande, du nom de l'image courante lorsqu'elle existe...       */
                                        /* ATTENTION, on notera que 'EDITION_FACULTATIVE_DU_NOM_DE_CHAQUE_IMAGE' est situee apres    */
                                        /* l'appel a 'IDdisplay(...)' ce qui fait que le nom de l'image est edite apres, lorsque     */
                                        /* l'affichage est termine. Cela permet, par exemple, d'envoyer, via le reseau, des          */
                                        /* sequences d'images "en aveugle" et de simultanement les commenter par telephone...        */

               CONVERSION_D_UNE_IMAGE_QUELCONQUE(Image_ROUGE,Image_VERTE,Image_BLEUE);
               AFFICHAGE_D_UNE_IMAGE_ET_ATTENTE(VRAI);
                                        /* Conversion, puis affichage de l'image courante...                                         */

               EDEFV(imageU,image_en_vraies_couleurs);
                                        /* Image en vraies couleurs au format 'Silicon-Graphics'.                                    */
               Eblock
          EDoI

          Test(IFET(IZEQ(temporisation_inter_animations),IFEQ(compteur_des_repetitions_du_Repe,nombre_de_repetitions)))
               Bblock
               Test(IZLT(temporisation_inter_trames))
                    Bblock
                                        /* ATTENTION, sur la derniere image de la sequence, lorsque 'temporisation_inter_trames' est */
                                        /* negatif, il y a dans 'ATTENTE_DE_LA_FIN_DE_VISUALISATION' une premiere attente via la     */
                                        /* fonction 'IXattente_de_l_evenement_ButtonPress()' ; dans ces circonstances, il est donc   */
                                        /* inutile d'en faire une seconde ici...                                                     */
                    Eblock
               ATes
                    Bblock
                    CALS(IGattente_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
               ETes
               Eblock
          ATes
               Bblock
               DODO(temporisation_inter_animations);
                                        /* Et on attend de nouveau un petit peu, pour un temps pre-determine...                      */
               Eblock
          ETes
          Eblock
     ERep

     FERMETURE_DE_LA_FENETRE;

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS
     PRINT_ERREUR("l'animation en vraies couleurs n'est pas disponible sur ce SYSTEME");
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS

     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.