_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   B A S E   D ' E D I T I O N   D E S   I M A G E S                                                */
/*        S U I V A N T   L A   B I B L I O T H E Q U E   ' S I L I C O N -  G R A P H I C S '  :                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les fonctions                                                                       */
/*                  de base d'edition graphique des images raster,                                                                   */
/*                  quelle que soit la definition.                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiidG/fonction.1$FON' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19900000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P P O R T U N I T E   D E   C O M P I L E R   C E   M O D U L E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS));
                                        /* ATTENTION : c'etait "_______VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS`" qui etait   */
                                        /* defini ci-dessus par erreur jusqu'au 20060415172733...                                    */
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : indicateur de VERSION.   */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : compiler sur 'SiliG'.    */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E C L A R A T I O N   D E S   L I B R A I R I E S   U T I L E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */
DEFV(Common,DEFV(Logical,_______VERSION__UTILISER_LA_BIBLIOTHEQUE_GL));
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
DEFV(Common,DEFV(Logical,_______VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL));
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E C L A R A T I O N   D E S   O P T I O N S   P R E S E N T E  S  :                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS));
#    Aifdef    __VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_O2_DU_GRAPHIQUE_SILICON_GRAPHICS  /* Common,DEFV(Fonction,) : options.  */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_O2_DU_GRAPHIQUE_SILICON_GRAPHICS));
#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_O2_DU_GRAPHIQUE_SILICON_GRAPHICS  /* Common,DEFV(Fonction,) : options.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_O2_DU_GRAPHIQUE_SILICON_GRAPHICS  /* Common,DEFV(Fonction,) : options.  */

#    ifdef     __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS));
#    Aifdef    __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS              /* Common,DEFV(Fonction,) : options.  */

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : options.  */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS));
#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : options.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : options.  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   " B U G S "   P R E S E N T S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     BUG_SYSTEME_SG_GL_CURSOR_GLOBAL                                  /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SG_GL_CURSOR_GLOBAL));
#    Aifdef    BUG_SYSTEME_SG_GL_CURSOR_GLOBAL                                  /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SG_GL_CURSOR_GLOBAL                                  /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom));
#    Aifdef    BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom));
#    Aifdef    BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom         /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_INTERFERENCES_ENTRE_X_WINDOW_ET_VL          /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_INTERFERENCES_ENTRE_X_WINDOW_ET_VL));
#    Aifdef    BUG_SYSTEME_SGIND_VL_INTERFERENCES_ENTRE_X_WINDOW_ET_VL          /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_INTERFERENCES_ENTRE_X_WINDOW_ET_VL          /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO                    /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO));
#    Aifdef    BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO                    /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO                    /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES                    /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES));
#    Aifdef    BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES                    /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES                    /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_PACKING_RGB                                 /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_PACKING_RGB));
#    Aifdef    BUG_SYSTEME_SGIND_VL_PACKING_RGB                                 /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_PACKING_RGB                                 /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB   /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB));
#    Aifdef    BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB   /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB   /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE                        /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE));
#    Aifdef    BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE                        /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE                        /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL       /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL));
#    Aifdef    BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL       /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL       /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE       /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE));
#    Aifdef    BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE       /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE       /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE   /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE));
#    Aifdef    BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE   /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE   /* Common,DEFV(Fonction,) : bug...                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N C L U D E S   S P E C I F I Q U E S   D E   ' S I L I C O N - G R A P H I C S '  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
@         include   <gl/addrs.h>

@         include   <gl/device.h>
@         include   <gl/get.h>
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
                                        /* L'include '<gl/gl.h>' est du uniquement a l'utilisation de la fonction 'getgdesc(...)'    */
                                        /* afin de determiner le point 'veritable_coin_bas_gauche' avant l'ouverture d'une fenetre.  */
                                        /* Il doit etre mis malgre tout dans '$xiidG/fonction.1$DEF' a cause des definitions         */
                                        /* 'XMAXPAL' et 'YMAXPAL' qu'il contient...                                                  */
@         include   <GL/glx.h>
@         include   <GL/gl.h>
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#         if        (nSYSTEM_RELEASE < 503000000)
@              include   <vl/vl.h>
@              include   <vl/dev_ev1.h>
                                        /* L'include '<vl/dev_ev1.h>' correspond aux definitions specifiques a la carte 'Galileo'... */
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)

@              ifdef     SYSTEME_SGO252VA_IRIX
@                   define    __STDLIB_H__
                                        /* Afin de ne pas faire un include de '<stdlib.h>' dans les includes de '<dmedia/...>'...    */
@              Aifdef    SYSTEME_SGO252VA_IRIX
@              Eifdef    SYSTEME_SGO252VA_IRIX

@              include   <dmedia/vl.h>
@              include   <dmedia/vl_ev1.h>
                                        /* De meme pour l'include '<dmedia/vl_ev1.h>'...                                             */
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
@         include   <gl/cg2vme.h>
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

                                        /* Dans ces fichier se trouvent la plupart des definitions de type '#define' ainsi que       */
                                        /* les references externes. Nota :                                                           */
                                        /*                                                                                           */
                                        /*                  @    include   <gl/gl.h>                                                 */
                                        /*                                                                                           */
                                        /* est exceptionnellement situe dans '$xiidG/fonction$DEF' a cause de 'XMAXPAL' et 'YMAXPAL' */
                                        /* qu'il definit et qui sont utilises pour definir 'XminPal', 'XmaxPal', 'YminPal' et        */
                                        /* 'YmaxPal'...                                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   T Y P E S   N E C E S S A I R E S  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
TypedefP(G_Screencoord,Screencoord)
                                        /* Structure definissant les coordonnees sur l'ecran.                                        */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
TypedefP(G_Screencoord,GLint)
                                        /* Structure definissant les coordonnees sur l'ecran.                                        */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
TypedefP(G_VLServer,VLServer)
                                        /* Structure definissant un serveur video.                                                   */
TypedefP(G_VLDevList,VLDevList)
                                        /* Structure definissant la liste des "devices" disponibles sur un serveur video.            */
TypedefP(G_VLNode,VLNode)
                                        /* Structure definissant un "noeud" d'un serveur video.                                      */
TypedefP(G_VLPath,VLPath)
                                        /* Structure definissant un "chemin" entre deux "noeuds" d'un serveur video.                 */
TypedefP(G_VLPathList,VLPathList)
                                        /* Pointeur sur une structure 'G_VLPathList'...                                              */
#         define    Cast_G_VLPathList(x)                                                                                                \
                              CAST(G_VLPathList,x)                                                                                      \
                                        /* Pour "caster" un pointeur sur une structure 'G_VLPathList'...                             */
TypedefP(G_VLControlValue,VLControlValue)
                                        /* Structure definissant les listes de parametrage du controle d'un serveur video.           */
TypedefP(G_VLBuffer,VLBuffer)
                                        /* Structure definissant les buffers dans lesquels transitent les images.                    */
TypedefP(G_VLInfoPtr,VLInfoPtr)
                                        /* Structure definissant les informations de validite du contenu des buffers.                */
TypedefP(G_VLEvent,VLEvent)
                                        /* Structure definissant l'identite d'un evenement en attente.                               */
TypedefP(G_VLTransferDescriptor,VLTransferDescriptor)
                                        /* Structure definissant les descripteurs de transferts entre deux "noeuds".                 */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E F E R E N C E S   E X T E R N E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   V E R S I O N S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01                      /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Logical,_____GESTION_DE_L_OPTION_GALILEO_VERSION_01));
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01                      /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01                      /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Logical,_____GESTION_DE_L_OPTION_GALILEO_VERSION_02));
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   L O C A L E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   D I M E N S I O N S   D E   L A   F E N E T R E                                              */
/*        E N   M O D E   " H A U T E - D E F I N I T I O N "  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Int,ZINT(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION,XminG)));
DEFV(Common,DEFV(Int,ZINT(SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION,XmaxG)));
DEFV(Common,DEFV(Int,ZINT(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION,YminG)));
DEFV(Common,DEFV(Int,ZINT(SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION,YmaxG)));
                                        /* Definition de fenetre de type "MODE_HAUTE_DEFINITION"...                                  */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
DEFV(Common,DEFV(Int,ZINT(SGI_____ZminG_d_une_fenetre_HAUTE_DEFINITION,k___Zmin)));
DEFV(Common,DEFV(Int,ZINT(SGI_____ZmaxG_d_une_fenetre_HAUTE_DEFINITION,k___Zmax)));
                                        /* Definition de fenetre de type "MODE_HAUTE_DEFINITION" (suite...).                         */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         define    dimXG_d_une_fenetre_HAUTE_DEFINITION                                                                                \
                              DIMENSION(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION,SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION)
#         define    dimYG_d_une_fenetre_HAUTE_DEFINITION                                                                                \
                              DIMENSION(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION,SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION)
                                        /* Definition de la taille de la fenetre de type "MODE_HAUTE_DEFINITION"...                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         define    REDUIRE_dimXYG(Dfenetre,Dimage)                                                                                     \
                              DIVI(Dfenetre                                                                                             \
                                  ,QUOE(Dfenetre,ADD3(Dimage,Dimage,Dimage))                                                            \
                                   )                                                                                                    \
                                        /* Le programme 'v $xtc/OpenGL.16$c' montre experimentalement que l'affichage d'une image    */ \
                                        /* ne se fait pas si l'une de ses dimensions est inferieure au tiers de la dimension         */ \
                                        /* correspondante de la fenetre (d'ou le 'ADD3(...)' qui rappelle qu'il y a l'image au       */ \
                                        /* centre, et de part et d'autre deux bandes de meme largeur...). D'ou cette correction      */ \
                                        /* qui garantit que le rapport n'est jamais plus grand que 3... Mais en fait, depuis         */ \
                                        /* j'ai compris que le probleme venait du "viewport" que je fixai arbitrairement, alors      */ \
                                        /* qu'il faut en fait demande a qui de droit sa valeur. Malgre cela je conserve cette        */ \
                                        /* fonction qui est plus esthetique...                                                       */
#         define    dimXG_d_une_fenetre_HAUTE_DEFINITION                                                                                \
                              REDUIRE_dimXYG(DIMENSION(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION                                     \
                                                      ,SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION                                     \
                                                       )                                                                                \
                                            ,dimX                                                                                       \
                                             )
#         define    dimYG_d_une_fenetre_HAUTE_DEFINITION                                                                                \
                              REDUIRE_dimXYG(DIMENSION(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION                                     \
                                                      ,SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION                                     \
                                                       )                                                                                \
                                            ,dimY                                                                                       \
                                             )
                                        /* Definition de la taille de la fenetre de type "MODE_HAUTE_DEFINITION"...                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D O N N E S   D E   C O N T R O L E   E T   D ' I N F O R M A T I O N   G L O B A L E S  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         define    TEMPORISATION_DES_Tant_D_ETABLISSEMENT_DE_CONNEXION                                                                 \
                              GRO1(DIVI(nano_secondes,IMAGES_PAR_SECONDE))                                                              \
                                        /* Temporisation a chaque iteration d'un 'Tant(...)' d'etablissement de connexion.           */
#         define    TEMPORISATION_DES_Tant_ATTENTE_DE_BUFFER                                                                            \
                              GRO1(DIVI(nano_secondes,IMAGES_PAR_SECONDE))                                                              \
                                        /* Temporisation a chaque iteration d'un 'Tant(...)' d'atente de buffer.                     */

#         define    TAILLE_REELLE_DES_IMAGES_EN_OCTETS                                                                                  \
                              taille_reelle_des_images_en_octets                                                                        \
                                        /* Taille "reelle" des images en octets dans les buffers videos...                           */

#         if        (         (         (defined(BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES))                                        \
                              &&        (! defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                   \
                               )                                                                                                        \
                     )
#              undef     TAILLE_REELLE_DES_IMAGES_EN_OCTETS
#              define    TAILLE_REELLE_DES_IMAGES_EN_OCTETS                                                                             \
                                   SCAL(taille_reelle_des_images_en_octets                                                              \
                                       ,SIZE(genere_LPositive)                                                                          \
                                       ,NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                              \
                                        )                                                                                               \
                                        /* Taille "reelle" des images en octets dans les buffers videos... On notera la regle de     */ \
                                        /* trois, car en effet, il semblerait que 'taille_reelle_des_images_en_octets' donne une     */ \
                                        /* taille qui considere qu'un point est code sur 4 octets, alors que l'experience montre     */ \
                                        /* qu'en realite dans le cas de cette option, il s'agit en fait de 3 octets consecutifs...   */
#         Aif       (         (         (defined(BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES))                                        \
                              &&        (! defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                   \
                               )                                                                                                        \
                     )
#         Eif       (         (         (defined(BUG_SYSTEME_SGIND_VL_TAILLE_REELLE_DES_IMAGES))                                        \
                              &&        (! defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                   \
                               )                                                                                                        \
                     )

DEFV(Local,DEFV(Logical,INIT(la_connexion_video_pour_une_image_a_pu_etre_etablie,FAUX)));
                                        /* Indique en permanence si la connexion video demandee en mode 'MODE_BASSE_DEFINITION_PAL'  */
                                        /* a pu etre etablie ('VRAI') ou pas ('FAUX').                                               */
DEFV(Local,DEFV(Logical,INIT(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie,FAUX)));
                                        /* Indique en permanence si la connexion video demandee pour une sequence video temps reel   */
                                        /* a pu etre etablie ('VRAI') ou pas ('FAUX').                                               */

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )
#              define    NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO                                                                        \
                                   TROIS                                                                                                \
                                        /* Nombre de tentatives de connexion video. Ce parametre a valu 'DEUX' pendant longtemps,    */ \
                                        /* mais le 1994060400, je lui ai donne la valeur 'TROIS' (voir les commentaires de l'alias   */ \
                                        /* 'Ivideo' dans 'v $Fdivers'...                                                             */
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )
#              define    NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO                                                                        \
                                   UN                                                                                                   \
                                        /* Nombre de tentatives de connexion video (une seule doit suffire...).                      */
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )

#         define    NOM_DU_SERVEUR_VIDEO_DE_L_OPTION_GALILEO                                                                            \
                              C_VIDE                                                                                                    \
                                        /* Nom du serveur video utilise...                                                           */
DEFV(Local,DEFV(G_VLServer,identite_du_serveur_video));
                                        /* Identite du serveur video utilise.                                                        */

#         define    POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT                                                                            \
                              ZERO                                                                                                      \
                                        /* Valeur renvoyee par differentes fonctions en cas d'erreur...                              */

#         define    DEMANDE_D_UN_DEVICE_INDIFFERENT                                                                                     \
                              MOINS_L_INFINI                                                                                            \
                                        /* Afin de pouvoir selectionner n'importe quel "device"...                                   */
#         define    NOM_DU_DEVICE_ATTENDU                                                                                               \
                              "ev1"                                                                                                     \
                                        /* Malgre tout, le nom du "device" que l'on doit recuperer est connu...                      */

DEFV(Local,DEFV(CHAR,POINTERc(nom_du_device_reellement_utilise)));
                                        /* Nom du "device" reellement utilise...                                                     */

DEFV(Local,DEFV(G_VLNode,identite_du_noeud_emetteur));
DEFV(Local,DEFV(G_VLNode,identite_du_noeud_device));
DEFV(Local,DEFV(G_VLNode,identite_du_noeud_recepteur));
DEFV(Local,DEFV(G_VLNode,identite_du_noeud_mixage));
DEFV(Local,DEFV(G_VLNode,identite_du_noeud_station));
                                        /* Definition de l'identite des "noeud"s necessaires.                                        */
DEFV(Local,DEFV(G_VLPath,chemin_emetteur_recepteur));
                                        /* Definition du chemin entre les "noeud"s emetteur et recepteur.                            */

DEFV(Local,DEFV(Int,INIT(nombre_d_images_a_manipuler,UN)));
                                        /* Nombre d'images a manipuler...                                                            */
DEFV(Local,DEFV(G_VLBuffer,buffer_des_images));
                                        /* Descripteur du buffer dans lequel transiteront les images a manipuler...                  */
DEFV(Local,DEFV(CHAR,DdTb1(POINTERc,image_courante,TAILLE_REELLE_DES_IMAGES_EN_OCTETS,CHAINE_UNDEF)));
                                        /* Pointeur vers l'image manipulee courante. ATTENTION, il y avait autrefois :               */
                                        /*                                                                                           */
                                        /*             DEFV(Local,DEFV(CHAR,INIT(POINTERc(image_courante),CHAINE_UNDEF)));           */
                                        /*                                                                                           */
                                        /* avant l'introduction des procedures 'DdTb?(...)' et 'MdTb?(...)'.                         */
                                        /*                                                                                           */
                                        /* Enfin, on notera l'impossibilite d'implanter un :                                         */
                                        /*                                                                                           */
                                        /*             FdTb1(image_courante,TAILLE_REELLE_DES_IMAGES_EN_OCTETS,CHAR,CHAINE_UNDEF);   */
                                        /*                                                                                           */
                                        /* car cette image est allouee d'une maniere non standard par 'VLGETACTIVEREGION(...)'.      */
DEFV(Local,DEFV(Logical,INIT(il_y_a_le_transfert_d_une_image_en_cours,FAUX)));
                                        /* Afin de savoir s'il y a un transfert d'une image en cours...                              */
DEFV(Local,DEFV(Logical,INIT(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours,FAUX)));
                                        /* Afin de savoir s'il y a un transfert de sequence video temps reel en cours...             */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T A T   D E   L A   F E N E T R E  :                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         define    FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE                                                                      \
                              PROBLEMES                                                                                                 \
                                        /* Cette valeur "initiale" est choisie en fonction du code de retour en erreur de la         */ \
                                        /* fonction 'winopen(...)'.                                                                  */
DEFV(Local,DEFV(Int,INIT(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE)));
                                        /* Indique si la fenetre n'est pas ouverte (pas encore, ou bien s'il y a un probleme lors    */
                                        /* de l'ouverture).                                                                          */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         define    FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE                                                                      \
                              INACTIF                                                                                                   \
                                        /* Cette valeur "initiale" est choisie en fonction du code de retour en erreur de la         */ \
                                        /* fonction 'IXopen_pour_utiliser_OpenGL(...)'.                                              */
DEFV(Local,DEFV(Logical,INIT(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE)));
                                        /* Indique si la fenetre n'est pas ouverte (pas encore, ou bien s'il y a un probleme lors    */
                                        /* de l'ouverture).                                                                          */

DEFV(Common,DEFV(Logical,ZINT(SGI_____appeler_les_fonctions_X_Window_pour_les_sorties_OpenGL,VRAI)));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') appeler les fonctions 'X-Window' pour 'OpenGL' */
                                        /* ceci n'ayant d'utilite qu'en mode 'MODE_BASSE_DEFINITION_PAL'...                          */
#         define    APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL(action_X_Window,action_alternative)                                       \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(SGI_____appeler_les_fonctions_X_Window_pour_les_sorties_OpenGL))                             \
                                   Bblock                                                                                               \
                                   BLOC(action_X_Window;);                                                                              \
                                        /* Cas ou la fonction 'X-Window' doit etre appelee par 'OpenGL'.                             */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   BLOC(action_alternative;);                                                                           \
                                        /* Cas ou la fonction 'X-Window' ne doit pas etre appelee par 'OpenGL'.                      */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* Fonction permettant d'appeler conditionnellement les fonctions 'X-Window' par 'OpenGL'.   */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

DenumeT02(MODE_BASSE_DEFINITION_PAL
         ,MODE_HAUTE_DEFINITION
         ,modes_de_fonctionnement
          )
DEFV(Local,DEFV(Int,INIT(mode_de_fonctionnement,MODE_HAUTE_DEFINITION)));
                                        /* Cet indicateur precise le mode de fonctionnement :                                        */
                                        /*                                                                                           */
                                        /*   MODE_HAUTE_DEFINITION              : 1280x1024 60 Hz,                                   */
                                        /*                                                                                           */
                                        /*   MODE_BASSE_DEFINITION_PAL          : 768x576   50 Hz (uniquement avec la 'Video         */
                                        /*                                        Analogique', c'est-a-dire la carte 'Galileo' ou    */
                                        /*                                        bien l'option 'Video Analogique O2'),              */
                                        /*   MODE_BASSE_DEFINITION_PAL          : 780x575   50 Hz (uniquement avec 'GenLock', pour   */
                                        /*                                        plus d'informations sur les branchements utiles,   */
                                        /*                                        voir 'v $xiidP/$Fnota').                           */
                                        /*                                                                                           */
DEFV(Local,DEFV(pointI_2D,position_coin_bas_gauche));
DEFV(Local,DEFV(pointI_2D,position_coin_haut_droite));
                                        /* Memorisation des coordonnees des deux coins de reference opposes de la fenetre ouverte.   */
                                        /* Ces deux points sont declares en 'Local' afin de pouvoir etre utilises n'importe quand    */
                                        /* apres l'ouverture d'une fenetre, et en particulier dans :                                 */
                                        /*                                                                                           */
                                        /*                  IGattente_de_l_evenement_ButtonPress(...)                                */
                                        /*                  IGdisplay(...)                                                           */
                                        /*                                                                                           */

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

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#         if        (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )
                                        /* Liste des fonction disponibles avec la 'GESTION_DE_L_OPTION_GALILEO_VERSION_02' :         */
                                        /*                                                                                           */
                                        /*        1-releases anterieures a la 5.3 :                                                  */
                                        /*                                                                                           */
                                        /*                  vlAddCallback                                                            */
                                        /*                  vlAddNode                                                                */
                                        /*                  vlAllocID                                                                */
                                        /*                  vlBeginControlSetting                                                    */
                                        /*                  vlBeginTransfer                                                          */
                                        /*                  vlBufferDone                                                             */
                                        /*                  vlCallCallbacks                                                          */
                                        /*                  vlCheckEvent                                                             */
                                        /*                  vlCloseServer                                                            */
                                        /*                  vlCloseVideo                                                             */
                                        /*                  vlConnectionNumber                                                       */
                                        /*                  vlCreateBuffer                                                           */
                                        /*                  vlCreatePath                                                             */
                                        /*                  vlDefaults                                                               */
                                        /*                  vlDeleteContext                                                          */
                                        /*                  vlDeregisterBuffer                                                       */
                                        /*                  vlDestroyBuffer                                                          */
                                        /*                  vlDestroyPath                                                            */
                                        /*                  vlEndControlSetting                                                      */
                                        /*                  vlEndTransfer                                                            */
                                        /*                  vlEventToName                                                            */
                                        /*                  vlEventsQueued                                                           */
                                        /*                  vlFindContext                                                            */
                                        /*                  vlFractionCount                                                          */
                                        /*                  vlFractionList                                                           */
                                        /*                  vlGetActiveRegion                                                        */
                                        /*                  vlGetBufferInfo                                                          */
                                        /*                  vlGetControl                                                             */
                                        /*                  vlGetControlInfo                                                         */
                                        /*                  vlGetControlList                                                         */
                                        /*                  vlGetDMediaInfo                                                          */
                                        /*                  vlGetDevice                                                              */
                                        /*                  vlGetDeviceList                                                          */
                                        /*                  vlGetImageInfo                                                           */
                                        /*                  vlGetLatestValid                                                         */
                                        /*                  vlGetNextFree                                                            */
                                        /*                  vlGetNextValid                                                           */
                                        /*                  vlGetNode                                                                */
                                        /*                  vlGetTransferSize                                                        */
                                        /*                  vlLastKnownRequestProcessed                                              */
                                        /*                  vlMainLoop                                                               */
                                        /*                  vlMatchFloat                                                             */
                                        /*                  vlMatchFraction                                                          */
                                        /*                  vlMatchFractionInList                                                    */
                                        /*                  vlNextEvent                                                              */
                                        /*                  vlNextRequest                                                            */
                                        /*                  vlOpenVideo                                                              */
                                        /*                  vlPeekEvent                                                              */
                                        /*                  vlPending                                                                */
                                        /*                  vlPerror                                                                 */
                                        /*                  vlPutFree                                                                */
                                        /*                  vlPutValid                                                               */
                                        /*                  vlQLength                                                                */
                                        /*                  vlRegisterBuffer                                                         */
                                        /*                  vlRegisterHandler                                                        */
                                        /*                  vlRemoveAllCallbacks                                                     */
                                        /*                  vlRemoveCallback                                                         */
                                        /*                  vlRemoveHandler                                                          */
                                        /*                  vlRemoveNode                                                             */
                                        /*                  vlRestoreFactoryDefaults                                                 */
                                        /*                  vlRestoreSystemDefaults                                                  */
                                        /*                  vlSaveContext                                                            */
                                        /*                  vlSaveSystemDefaults                                                     */
                                        /*                  vlSelectEvents                                                           */
                                        /*                  vlServerProtocolRevision                                                 */
                                        /*                  vlServerProtocolVersion                                                  */
                                        /*                  vlServerString                                                           */
                                        /*                  vlServerVendor                                                           */
                                        /*                  vlServerVendorRelease                                                    */
                                        /*                  vlSetAuthorization                                                       */
                                        /*                  vlSetControl                                                             */
                                        /*                  vlSetErrorHandler                                                        */
                                        /*                  vlSetIOErrorHandler                                                      */
                                        /*                  vlSetupPaths                                                             */
                                        /*                  vlStrError                                                               */
                                        /*                  vlUniqueContext                                                          */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*        2-release 5.3 :                                                                    */
                                        /*                                                                                           */
                                        /*                  vlAddCallback                                                            */
                                        /*                  vlAddNode                                                                */
                                        /*                  vlAllocID                                                                */
                                        /*                  vlBeginTransfer                                                          */
                                        /*                  vlBufferAdvise                                                           */
                                        /*                  vlBufferDone                                                             */
                                        /*                  vlBufferGetFd                                                            */
                                        /*                  vlBufferReset                                                            */
                                        /*                  vlCallCallbacks                                                          */
                                        /*                  vlCheckEvent                                                             */
                                        /*                  vlChooseClosestFraction                                                  */
                                        /*                  vlCloseVideo                                                             */
                                        /*                  vlConnectionNumber                                                       */
                                        /*                  vlConversionAdviseFlag                                                   */
                                        /*                  vlConversionAdviseGamma                                                  */
                                        /*                  vlConversionAdviseMatrix                                                 */
                                        /*                  vlCreateBuffer                                                           */
                                        /*                  vlCreatePath                                                             */
                                        /*                  vlDefaults                                                               */
                                        /*                  vlDeregisterBuffer                                                       */
                                        /*                  vlDestroyBuffer                                                          */
                                        /*                  vlDestroyPath                                                            */
                                        /*                  vlEndTransfer                                                            */
                                        /*                  vlErrno                                                                  */
                                        /*                  vlEventToName                                                            */
                                        /*                  vlFractionCount                                                          */
                                        /*                  vlFractionList                                                           */
                                        /*                  vlFreeControlInfo                                                        */
                                        /*                  vlFreeControlList                                                        */
                                        /*                  vlGetActiveRegion                                                        */
                                        /*                  vlGetControl                                                             */
                                        /*                  vlGetControlInfo                                                         */
                                        /*                  vlGetControlList                                                         */
                                        /*                  vlGetDMediaInfo                                                          */
                                        /*                  vlGetDevice                                                              */
                                        /*                  vlGetDeviceList                                                          */
                                        /*                  vlGetErrno                                                               */
                                        /*                  vlGetImageInfo                                                           */
                                        /*                  vlGetLatestValid                                                         */
                                        /*                  vlGetNextFree                                                            */
                                        /*                  vlGetNextValid                                                           */
                                        /*                  vlGetNode                                                                */
                                        /*                  vlGetTransferSize                                                        */
                                        /*                  vlLastKnownRequestProcessed                                              */
                                        /*                  vlMainLoop                                                               */
                                        /*                  vlMatchFloat                                                             */
                                        /*                  vlMatchFraction                                                          */
                                        /*                  vlMatchFractionInList                                                    */
                                        /*                  vlNextEvent                                                              */
                                        /*                  vlNextRequest                                                            */
                                        /*                  vlOpenVideo                                                              */
                                        /*                  vlPeekEvent                                                              */
                                        /*                  vlPending                                                                */
                                        /*                  vlPerror                                                                 */
                                        /*                  vlPutFree                                                                */
                                        /*                  vlPutValid                                                               */
                                        /*                  vlQLength                                                                */
                                        /*                  vlRegisterBuffer                                                         */
                                        /*                  vlRegisterHandler                                                        */
                                        /*                  vlRemoveAllCallbacks                                                     */
                                        /*                  vlRemoveCallback                                                         */
                                        /*                  vlRemoveHandler                                                          */
                                        /*                  vlRemoveNode                                                             */
                                        /*                  vlRestoreFactoryDefaults                                                 */
                                        /*                  vlRestoreSystemDefaults                                                  */
                                        /*                  vlSaveSystemDefaults                                                     */
                                        /*                  vlSelectEvents                                                           */
                                        /*                  vlServerProtocolRevision                                                 */
                                        /*                  vlServerProtocolVersion                                                  */
                                        /*                  vlServerString                                                           */
                                        /*                  vlServerVendor                                                           */
                                        /*                  vlServerVendorRelease                                                    */
                                        /*                  vlSetControl                                                             */
                                        /*                  vlSetErrorHandler                                                        */
                                        /*                  vlSetIOErrorHandler                                                      */
                                        /*                  vlSetupPaths                                                             */
                                        /*                  vlStrError                                                               */
                                        /*                  vlerrorstrs                                                              */
                                        /*                                                                                           */

#              define    VLADDNODE(serveur_video,chemin,noeud)                                                                          \
                                   vlAddNode(serveur_video,chemin,noeud)                                                                \
                                        /* Ajout d'un noeud a un chemin.                                                             */
#              define    VLBEGINTRANSFER(serveur_video,chemin,nombre_de_descripteurs,descripteurs_de_transfert_d_images)                \
                                   vlBeginTransfer(serveur_video,chemin,nombre_de_descripteurs,descripteurs_de_transfert_d_images)      \
                                        /* Lancement d'un transfert.                                                                 */
#              define    VLBUFFERDONE(buffer_des_images)                                                                                \
                                   vlBufferDone(buffer_des_images)                                                                      \
                                        /* Acces au "flag" associe a un buffer.                                                      */
#              define    VLCLOSEVIDEO(serveur_video)                                                                                    \
                                   vlCloseVideo(serveur_video)                                                                          \
                                        /* Fermeture d'un serveur video.                                                             */
#              define    VLCREATEBUFFER(serveur_video,chemin,noeud,nombre_d_images_a_manipuler)                                         \
                                   vlCreateBuffer(serveur_video,chemin,noeud,nombre_d_images_a_manipuler)                               \
                                        /* Creation d'un buffer.                                                                     */
#              define    VLCREATEPATH(serveur_video,numero_du_device_a_utiliser,Nemetteur,Nrecepteur)                                   \
                                   vlCreatePath(serveur_video,numero_du_device_a_utiliser,Nemetteur,Nrecepteur)                         \
                                        /* Creation d'un chemen entre deux noeuds.                                                   */
#              define    VLDEREGISTERBUFFER(serveur_video,chemin,noeud,buffer_des_images)                                               \
                                   vlDeregisterBuffer(serveur_video,chemin,noeud,buffer_des_images)                                     \
                                        /* Desenregistrement d'un buffer.                                                            */
#              define    VLDESTROYBUFFER(serveur_video,buffer_des_images)                                                               \
                                   vlDestroyBuffer(serveur_video,buffer_des_images)                                                     \
                                        /* Destruction d'un buffer.                                                                  */
#              define    VLDESTROYPATH(serveur_video,chemin)                                                                            \
                                   vlDestroyPath(serveur_video,chemin)                                                                  \
                                        /* Destruction d'un chemin.                                                                  */
#              define    VLENDTRANSFER(serveur_video,chemin)                                                                            \
                                   vlEndTransfer(serveur_video,chemin)                                                                  \
                                        /* Fin d'un transfert.                                                                       */
#              define    VLGETACTIVEREGION(serveur_video,buffer_des_images,informations_sur_l_image_courante)                           \
                                   vlGetActiveRegion(serveur_video,buffer_des_images,informations_sur_l_image_courante)                 \
                                        /* Acces a la region active d'un buffer.                                                     */
#              define    VLGETCONTROL(serveur_video,chemin,noeud,type,parametres_courants)                                              \
                                   vlGetControl(serveur_video,chemin,noeud,type,parametres_courants)                                    \
                                        /* Recuperation d'informations de controle d'un noeud.                                       */
#              define    VLGETDEVICE(serveur_video,chemin)                                                                              \
                                   vlGetDevice(serveur_video,chemin)                                                                    \
                                        /* Acces a un "device".                                                                      */
#              define    VLGETDEVICELIST(serveur_video,liste_des_devices_disponibles)                                                   \
                                   vlGetDeviceList(serveur_video,liste_des_devices_disponibles)                                         \
                                        /* Acces a la liste des "devices"s disponibles.                                              */
#              define    VLGETNEXTFREE(serveur_video,buffer_des_images,taille_des_images)                                               \
                                   vlGetNextFree(serveur_video,buffer_des_images,taille_des_images)                                     \
                                        /* Acces au prochain buffer libre (et donc disponible...).                                   */
#              define    VLGETNEXTVALID(serveur_video,buffer_des_images)                                                                \
                                   vlGetNextValid(serveur_video,buffer_des_images)                                                      \
                                        /* Acces aux informations valides suivantes.                                                 */
#              define    VLGETNODE(serveur_video,type_du_noeud,classe_du_noeud,numero_du_noeud)                                         \
                                   vlGetNode(serveur_video,type_du_noeud,classe_du_noeud,numero_du_noeud)                               \
                                        /* Acces a un noeud.                                                                         */
#              define    VLGETTRANSFERSIZE(serveur_video,chemin)                                                                        \
                                   vlGetTransferSize(serveur_video,chemin)                                                              \
                                        /* Acces a la taille du transfert a realiser.                                                */
#              define    VLNEXTEVENT(serveur_video,evenement)                                                                           \
                                   vlNextEvent(serveur_video,ADRESSE(evenement))                                                        \
                                        /* Acces a l'evenement en attente situe en tete de la liste.                                 */
#              define    VLOPENVIDEO(nom_du_serveur)                                                                                    \
                                   vlOpenVideo(nom_du_serveur)                                                                          \
                                        /* Ouverture d'un serveur video.                                                             */
#              define    VLPENDING(serveur_video)                                                                                       \
                                   vlPending(serveur_video)                                                                             \
                                        /* Acces au nombre d'evenements en attente...                                                */
#              define    VLPERROR(message_d_erreur)                                                                                     \
                                   vlPerror(message_d_erreur)                                                                           \
                                        /* Edition d'un message d'erreur "explicite"...                                              */
#              define    VLPUTFREE(serveur_video,buffer_des_images)                                                                     \
                                   vlPutFree(serveur_video,buffer_des_images)                                                           \
                                        /* Liberation d'un buffer acquis par 'VLGETNEXTVALID(...)'.                                  */
#              define    VLPUTVALID(serveur_video,buffer_des_images)                                                                    \
                                   vlPutValid(serveur_video,buffer_des_images)                                                          \
                                        /* Mise en place du buffer valide.                                                           */
#              define    VLREGISTERBUFFER(serveur_video,chemin,noeud,buffer_des_images)                                                 \
                                   vlRegisterBuffer(serveur_video,chemin,noeud,buffer_des_images)                                       \
                                        /* Enregistrement d'un buffer.                                                               */
#              define    VLRESTOREFACTORYDEFAULTS(serveur_video)                                                                        \
                                   vlRestoreFactoryDefaults(serveur_video)                                                              \
                                        /* Reinitialisation de base...                                                               */
#              define    VLRESTORESYSTEMDEFAULTS(serveur_video)                                                                         \
                                   vlRestoreSystemDefaults(serveur_video)                                                               \
                                        /* Reinitialisation a partir du fichier '/usr/etc/video/videod.defaults'.                    */
#              define    VLSELECTEVENTS(serveur_video,chemin,evenements_interessants)                                                   \
                                   vlSelectEvents(serveur_video,chemin,evenements_interessants)                                         \
                                        /* Selection des evenements utiles.                                                          */
#              define    VLSETCONTROL(serveur_video,chemin,identite_du_noeud,type_du_parametre,parametres_courants)                     \
                                   vlSetControl(serveur_video,chemin,identite_du_noeud,type_du_parametre,parametres_courants)           \
                                        /* Mise en place de certaines informations de controle d'un noeud.                           */
#              define    VLSETUPPATHS(serveur_video,chemin,nombre_de_chemins_a_etablir,usage_controle,controle_flot)                    \
                                   vlSetupPaths(serveur_video,chemin,nombre_de_chemins_a_etablir,usage_controle,controle_flot)          \
                                        /* Etablissement d'un chemin.                                                                */
#         Aif       (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )
#         Eif       (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )

#         define    REINITIALISATION_DE_LA_CARTE_GALILEO(serveur_video)                                                                 \
                              VLRESTOREFACTORYDEFAULTS(serveur_video)                                                                   \
                                        /* Reinitialisation de la carte 'Galileo'. Il y a deux possibilites :                        */ \
                                        /*                                                                                           */ \
                                        /*   VLRESTOREFACTORYDEFAULTS(...)    : qui parait etre la possibilite la plus logique.      */ \
                                        /*                                      Malheureusement, tant que les deux controles         */ \
                                        /*                                      'VL_DEFAULT_SOURCE' et 'VL_SYNC' ne fonctionnent     */ \
                                        /*                                      pas correctement, une partie de la programmation     */ \
                                        /*                                      de la carte 'Galileo' doit passer par le fichier     */ \
                                        /*                                      '/usr/etc/video/videod.defaults' de configuration.   */ \
                                        /*                                                                                           */ \
                                        /*   VLRESTORESYSTEMDEFAULTS(...)     : qui ne devrait pas etre utilisee, car, en effet,     */ \
                                        /*                                      toute modification qui pourrait etre apportee au     */ \
                                        /*                                      fichier '/usr/etc/video/videod.defaults', par        */ \
                                        /*                                      exemple, a l'aide de la commande 'videopanel' se     */ \
                                        /*                                      trouverait incluse dans les initialisations qui      */ \
                                        /*                                      suivent et pourrait alors rentrer en conflit avec    */ \
                                        /*                                      la configuration qui doit etre reellement mise en    */ \
                                        /*                                      place...                                             */ \
                                        /*                                                                                           */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N E T T O Y A G E   D ' U N E   F E N E T R E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL                           /* Common,DEFV(Fonction,) : avec 'GL'...             */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
DEFV(Common,DEFV(genere_p,SINT(SGI_____fond_de_la_fenetre_ROUGE,NOIR)));
DEFV(Common,DEFV(genere_p,SINT(SGI_____fond_de_la_fenetre_VERTE,NOIR)));
DEFV(Common,DEFV(genere_p,SINT(SGI_____fond_de_la_fenetre_BLEUE,NOIR)));
DEFV(Common,DEFV(genere_p,SINT(SGI_____fond_de_la_fenetre_ALPHA,BLANC)));
                                        /* Afin de definir le fond de la fenetre...                                                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */

DEFV(Common,DEFV(FonctionI,IGclear()))
                                        /* Cette fonction a ete introduite le 19990310141501 afin d'assurer le nettoyage du fond     */
                                        /* d'une fenetre apres son retour au premier-plan...                                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */

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

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
     CALS(color(BLACK));
     CALS(clear());
                                        /* Nettoyage du plan de travail.                                                             */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
     CALS(glClearColor(______NORMALISE_NIVEAU(SGI_____fond_de_la_fenetre_ROUGE)
                      ,______NORMALISE_NIVEAU(SGI_____fond_de_la_fenetre_VERTE)
                      ,______NORMALISE_NIVEAU(SGI_____fond_de_la_fenetre_BLEUE)
                      ,______NORMALISE_NIVEAU(SGI_____fond_de_la_fenetre_ALPHA)
                       )
          );
     CALS(glClear(GL_COLOR_BUFFER_BIT));
                                        /* Initialisation du contenu de la fenetre.                                                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O U V E R T U R E   D ' U N E   F E N E T R E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#         define    VL_INDIFFERENT                                                                                                      \
                              ZERO                                                                                                      \
                                        /* Valeur qui semble manquer dans <vl/vl$h>...                                               */
#         define    VL_DOIT_ETRE_NUL                                                                                                    \
                              ZERO                                                                                                      \
                                        /* Valeur qui semble manquer dans <vl/vl$h>...                                               */

#         define    ERREUR_DE_PARAMETRAGE(identite_du_noeud,type_parametre,message_d_erreur,iter)                                       \
                              Bblock                                                                                                    \
                              VLPERROR(message_d_erreur);                                                                               \
                                                                                                                                        \
                              CAL1(Prer1(" nom du 'device'....=%s\n",nom_du_device_reellement_utilise));                                \
                                        /* Le nom du 'device' attendu est "ev1"...                                                   */ \
                              CAL1(Prer1(" nature du noeud....=%s\n"                                                                    \
                                        ,COND(IFID(identite_du_noeud,identite_du_noeud_emetteur)                                        \
                                             ,"emetteur"                                                                                \
                                             ,COND(IFID(identite_du_noeud,identite_du_noeud_device)                                     \
                                                  ,"device"                                                                             \
                                                  ,COND(IFID(identite_du_noeud,identite_du_noeud_recepteur)                             \
                                                       ,"recepteur"                                                                     \
                                                       ,"autre"                                                                         \
                                                        )                                                                               \
                                                   )                                                                                    \
                                              )                                                                                         \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CAL1(Prer0(" type du Parametre..=type_parametre\n"));                                                     \
                                        /* On notera que l'on n'ecrit pas :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  CAL1(Prer0(" type du Parametre='type_parametre'\n"));                    */ \
                                        /*                                                                                           */ \
                                        /* car en effet, la chaine de caractere substituee a 'type_parametre' est suivie de          */ \
                                        /* nombreux blancs ; cela ferait alors une mauvaise mise en page...                          */ \
                                        /*                                                                                           */ \
                                        /* On notera les "..." introduits (ici et ailleurs...) le 20030331171922 afin de garantir    */ \
                                        /* la position horizontale des "="s.                                                         */ \
                                                                                                                                        \
                              Test(EST_FAUX(une_erreur_forcant_l_iteration_a_ete_rencontree))                                           \
                                   Bblock                                                                                               \
                                   EGAL(une_erreur_forcant_l_iteration_a_ete_rencontree,iter);                                          \
                                        /* Dans le cas ou une erreur demandant l'iteration n'a pas ete encore rencontree, on         */ \
                                        /* fait ce qu'il faut pour l'erreur courante...                                              */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                        /* Dans le cas ou une erreur demandant l'iteration a deja rencontree, on maintient cette     */ \
                                        /* demande en ne faisant rien d'autre...                                                     */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* Edition d'une partie des messages d'erreur de 'PARAMETRAGE_NOEUD_?(...)'.                 */

#         define    UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION                                                                              \
                              VRAI
#         define    UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION                                                                       \
                              NOTL(UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION)
                                        /* Afin de savoir si une erreur dans un 'PARAMETRAGE_NOEUD_?(...)' doit forcer l'iteration   */
                                        /* de la fonction 'IGdebut_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)'. Cette */
                                        /* possibilite a ete rajoutee a cause du controle 'VL_MUXSWITCH' (et de ceux qui le suivent) */
                                        /* lorsque par malheur lors du controle 'VL_DEFAULT_SOURCE' qui le precede, il y a eu un     */
                                        /* changement de source par defaut (ce qui signifie qu'anterieurement on etait en mode       */
                                        /* "digital 1" ou "digital 2"). Alors les controles du type 'VL_MUXSWITCH' sont refuses      */
                                        /* avec le message :                                                                         */
                                        /*                                                                                           */
                                        /*                  VL: Bad control passed as parameter                                      */
                                        /*                                                                                           */
                                        /* ce qui signifie que la liste des controles autorises pour ce chemin ne s'est pas          */
                                        /* enrichi des nouveaux controles associes au passage en mode "analog"... Afin de ne pas     */
                                        /* rajouter une nouvelle serie de 'Test(...)' imbriques les uns dans les autres et associes  */
                                        /* au refus de ces controles, on donne ici la possibilite de faire forcer la repetition de   */
                                        /* la sequence complete d'ouverture et en particulier 'VLOPENVIDEO(...)' qui fait qu'apres   */
                                        /* cet appel, les controles en cause ('VL_MUXSWITCH',...) sont miraculeusement autorises...  */

#         define    EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL                                                                        \
                              VRAI
#         define    NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL                                                                 \
                              NOTL(EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL)
                                        /* Pour editer ou pas les messages d'erreur de 'VLSETCONTROL(...)'.                          */

DEFV(Local,DEFV(G_VLControlValue,parametres_courants));
                                        /* Liste des parametres courants des noeuds, des chemins, du serveur,...                     */

#         define    PARAMETRAGE_NOEUD_1(identite_du_noeud,parametre,valeur,type_parametre,edit,iter)                                    \
                                        /* On notera que l'on ne peut pas creer 'PARAMETRAGE_NOEUD_QUELCONQUE(...)' a cause          */ \
                                        /* de l'edition d'un nombre variable de valeurs en cas d'erreur...                           */ \
                              Bblock                                                                                                    \
                              EGAL(ASD1(parametres_courants,parametre),valeur);                                                         \
                                                                                                                                        \
                              Test(PAS_D_ERREUR(VLSETCONTROL(identite_du_serveur_video                                                  \
                                                            ,chemin_emetteur_recepteur                                                  \
                                                            ,identite_du_noeud                                                          \
                                                            ,type_parametre                                                             \
                                                            ,ADRESSE(parametres_courants)                                               \
                                                             )                                                                          \
                                                )                                                                                       \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(IL_FAUT(edit))                                                                                  \
                                        Bblock                                                                                          \
                                        ERREUR_DE_PARAMETRAGE(identite_du_noeud                                                         \
                                                             ,type_parametre                                                            \
                                                             ,"\n Parametrage Noeud 1"                                                  \
                                                             ,iter                                                                      \
                                                              );                                                                        \
                                        CAL1(Prer1(" Valeur demandee....=%d\n"                                                          \
                                                  ,valeur                                                                               \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        /* On notera que l'on edite systematiquement en format 'entier %d' ce qui n'est pas genant   */ \
                                        /* car, en effet, toutes les valeurs possibles sont dans ce format...                        */ \
                                        Test(PAS_D_ERREUR(VLGETCONTROL(identite_du_serveur_video                                        \
                                                                      ,chemin_emetteur_recepteur                                        \
                                                                      ,identite_du_noeud                                                \
                                                                      ,type_parametre                                                   \
                                                                      ,ADRESSE(parametres_courants)                                     \
                                                                       )                                                                \
                                                          )                                                                             \
                                             )                                                                                          \
                                             Bblock                                                                                     \
                                             CAL1(Prer1(" Valeur obtenue.....=%d\n"                                                     \
                                                       ,ASD1(parametres_courants,parametre)                                             \
                                                        )                                                                               \
                                                  );                                                                                    \
                                        /* On notera que l'on edite systematiquement en format 'entier %d' ce qui n'est pas genant   */ \
                                        /* car, en effet, toutes les valeurs possibles sont dans ce format...                        */ \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             ERREUR_DE_PARAMETRAGE(identite_du_noeud                                                    \
                                                                  ,type_parametre                                                       \
                                                                  ,"Verification Noeud 1"                                               \
                                                                  ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION                        \
                                                                   );                                                                   \
                                        /* On notera l'utilisation de 'UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION' quelle que     */ \
                                        /* soit la valeur de 'iter' afin de ne traiter qu'une seule fois 'iter' dans les procedures  */ \
                                        /* de type 'PARAMETRAGE_NOEUD_?(...)'.                                                       */ \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* Parametrage d'un noeud avec une valeur.                                                   */
#         define    PARAMETRAGE_NOEUD_2(identite_du_noeud,parametre1,parametre11,valeur1,parametre12,valeur2,type_parametre,edit,iter)  \
                                        /* On notera que l'on ne peut pas creer 'PARAMETRAGE_NOEUD_QUELCONQUE(...)' a cause          */ \
                                        /* de l'edition d'un nombre variable de valeurs en cas d'erreur...                           */ \
                              Bblock                                                                                                    \
                              EGAL(ASD2(parametres_courants,parametre1,parametre11),valeur1);                                           \
                              EGAL(ASD2(parametres_courants,parametre1,parametre12),valeur2);                                           \
                                                                                                                                        \
                              Test(PAS_D_ERREUR(VLSETCONTROL(identite_du_serveur_video                                                  \
                                                            ,chemin_emetteur_recepteur                                                  \
                                                            ,identite_du_noeud                                                          \
                                                            ,type_parametre                                                             \
                                                            ,ADRESSE(parametres_courants)                                               \
                                                             )                                                                          \
                                                )                                                                                       \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(IL_FAUT(edit))                                                                                  \
                                        Bblock                                                                                          \
                                        ERREUR_DE_PARAMETRAGE(identite_du_noeud                                                         \
                                                             ,type_parametre                                                            \
                                                             ,"\n Parametrage Noeud 2"                                                  \
                                                             ,iter                                                                      \
                                                              );                                                                        \
                                        CAL1(Prer2(" Valeur demandee....={%d,%d}\n"                                                     \
                                                  ,valeur1                                                                              \
                                                  ,valeur2                                                                              \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        /* On notera que l'on edite systematiquement en format 'entier %d' ce qui n'est pas genant   */ \
                                        /* car, en effet, toutes les valeurs possibles sont dans ce format...                        */ \
                                        Test(PAS_D_ERREUR(VLGETCONTROL(identite_du_serveur_video                                        \
                                                                      ,chemin_emetteur_recepteur                                        \
                                                                      ,identite_du_noeud                                                \
                                                                      ,type_parametre                                                   \
                                                                      ,ADRESSE(parametres_courants)                                     \
                                                                       )                                                                \
                                                          )                                                                             \
                                             )                                                                                          \
                                             Bblock                                                                                     \
                                             CAL1(Prer2(" Valeur obtenue.....={%d,%d}\n"                                                \
                                                       ,ASD2(parametres_courants,parametre1,parametre11)                                \
                                                       ,ASD2(parametres_courants,parametre1,parametre12)                                \
                                                        )                                                                               \
                                                  );                                                                                    \
                                        /* On notera que l'on edite systematiquement en format 'entier %d' ce qui n'est pas genant   */ \
                                        /* car, en effet, toutes les valeurs possibles sont dans ce format...                        */ \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             ERREUR_DE_PARAMETRAGE(identite_du_noeud                                                    \
                                                                  ,type_parametre                                                       \
                                                                  ,"Verification Noeud 2"                                               \
                                                                  ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION                        \
                                                                   );                                                                   \
                                        /* On notera l'utilisation de 'UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION' quelle que     */ \
                                        /* soit la valeur de 'iter' afin de ne traiter qu'une seule fois 'iter' dans les procedures  */ \
                                        /* de type 'PARAMETRAGE_NOEUD_?(...)'.                                                       */ \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* Parametrage d'un noeud avec deux valeurs.                                                 */

#         define    nPARAMETRAGE_NOEUD_1(identite_du_noeud,parametre,valeur,type_parametre,edit,iter)                                   \
                              Bblock                                                                                                    \
                              BLOC(VIDE;);                                                                                              \
                              Eblock                                                                                                    \
                                        /* Parametrage ineffectif d'un noeud avec une valeur. Cette procedure a ete introduite       */ \
                                        /* pour conserver des sequences de code apparemment inutiles...                              */
#         define    nPARAMETRAGE_NOEUD_2(identite_du_noeud,parametre1,parametre11,valeur1,parametre12,valeur2,type_parametre,edit,iter) \
                              Bblock                                                                                                    \
                              BLOC(VIDE;);                                                                                              \
                              Eblock                                                                                                    \
                                        /* Parametrage ineffectif d'un noeud avec deux valeurs. Cette procedure a ete introduite     */ \
                                        /* pour conserver des sequences de code apparemment inutiles...                              */

#         define    SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE                                                                              \
                              SGI_____se_synchroniser_sur_une_source_externe
#         define    SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE                                                                \
                              VRAI
#         define    NE_PAS_SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE                                                         \
                              NOTL(SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE)
DEFV(Common,DEFV(Logical,SINT(SGI_____se_synchroniser_sur_une_source_externe,SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE)));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') se synchroniser sur une source externe, par    */
                                        /* exemple pour des enregistrements disques...                                               */
                                        /*                                                                                           */
                                        /* ATTENTION, lorsque l'on est en 'VL_SYNC_GENLOCK' la sortie 'Pal' ("composite") de la      */
                                        /* carte 'Galileo' ne fonctionne pas correctement ; en particulier on perd la couleur...     */
                                        /* Pour sortir du 'Pal', il faut donc etre en mode 'VL_SYNC_INTERNAL', et donc ne pas se     */
                                        /* synchroniser sur une source externe...                                                    */

#         if        (nSYSTEM_RELEASE < 503000000)                               /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */
#              define    LISTE_DES_EVENEMENTS_A_DETECTER                                                                                \
                                   VLNoEventsMask                                                                                       \
                                        /* Liste des evenements a detecter au cours d'un transfert.                                  */
#              define    DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT(se_mettre_en_mode_genlock)                                         \
                                   Bblock                                                                                               \
                                   BLOC(VIDE;);                                                                                         \
                                   Eblock                                                                                               \
                                        /* Detection des defauts ayant eu lieu au cours d'un transfert.                              */
#         Aif       (nSYSTEM_RELEASE < 503000000)                               /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */
#         Eif       (nSYSTEM_RELEASE < 503000000)                               /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */

#         if        (nSYSTEM_RELEASE >= 503000000)                              /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */
#              define    LISTE_DES_EVENEMENTS_A_DETECTER                                                                                \
                                   OUIN(COND(IL_FAUT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE)                                            \
                                            ,VLSyncLostMask                                                                             \
                                            ,VLNoEventsMask                                                                             \
                                             )                                                                                          \
                                       ,OUIN(VLTransferFailedMask                                                                       \
                                            ,VLNoEventsMask                                                                             \
                                             )                                                                                          \
                                        )                                                                                               \
                                        /* Liste des evenements a detecter au cours d'un transfert.                                  */
#              define    TEMPORISATION_AVANT_DE_TESTER_LES_EVENEMENTS                                                                   \
                                   ZERO                                                                                                 \
                                        /* L'experience montre qu'il est necessaire d'attendre un peu avant d'executer la fonction   */ \
                                        /* 'VLPENDING(...)' car, sinon, on perd au moins un evenement... Malheureusement, une valeur */ \
                                        /* non nulle provoque un phenomene visuel ennuyeux : en effet, lors d'une entree video, la   */ \
                                        /* fenetre 'X-Window' ouverte precedemment, le reste alors que l'on a decide d'arreter le    */ \
                                        /* transfert ; alors un desagreable effet Larsen apparait (la memoire se trouve alors en     */ \
                                        /* quelque sorte bouclee sur elle-meme).                                                     */

#              define    TEMPORISATION_DE_BLOCAGE_SUR_DEFAUT_EN_COURS_DE_TRANSFERT                                                      \
                                   SECONDES_PAR_MINUTE
DEFV(Common,DEFV(Logical,SINT(SGI_____bloquer_generation_video_si_defaut_en_cours_de_transfert,VRAI)));
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') bloquer ad vitam eternam la generation video   */
                                        /* si un defaut de type 'VLSyncLost' se presente, et ce afin d'eviter des enregistrements    */
                                        /* d'images NOIR sur le disque 'PAL-beta'...                                                 */

#              define    DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT(se_mettre_en_mode_genlock)                                         \
                                   Bblock                                                                                               \
                                   DEFV(Int,INIT(nombre_d_evements_en_attente,UNDEF));                                                  \
                                        /* Afin de parcourir la liste des evenements en attente...                                   */ \
                                                                                                                                        \
                                   DODO(TEMPORISATION_AVANT_DE_TESTER_LES_EVENEMENTS);                                                  \
                                        /* Attente eventuelle afin de garantir qu'on connait tous les evenements...                  */ \
                                   EGAL(nombre_d_evements_en_attente,VLPENDING(identite_du_serveur_video));                             \
                                        /* Recuperation du nombre d'evenements en attente, qui sont en fait des defauts...           */ \
                                                                                                                                        \
                                   Test(IZNE(nombre_d_evements_en_attente))                                                             \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("il y a eu au moins un defaut pendant le transfert qui s'acheve ici");             \
                                                                                                                                        \
                                        Repe(nombre_d_evements_en_attente)                                                              \
                                             Bblock                                                                                     \
                                             DEFV(G_VLEvent,evenement_courant);                                                         \
                                             CALS(VLNEXTEVENT(identite_du_serveur_video,evenement_courant));                            \
                                        /* Recuperation de l'evenement courant.                                                      */ \
                                                                                                                                        \
                                             Choi(ASD1(evenement_courant,reason))                                                       \
                                                  Bblock                                                                                \
                                                  Ca1e(VLSyncLost)                                                                      \
                                                       Bblock                                                                           \
                                                       PRINT_ERREUR("il y a soit un probleme de synchronisation en sortie");            \
                                                       PRINT_ERREUR("ou bien une absence de signal video en entree");                   \
                                                       Test(IL_FAUT(se_mettre_en_mode_genlock))                                         \
                                                            Bblock                                                                      \
                                                            PRINT_ATTENTION("le mode 'genlock' etait demande");                         \
                                                            Eblock                                                                      \
                                                       ATes                                                                             \
                                                            Bblock                                                                      \
                                                            Eblock                                                                      \
                                                       ETes                                                                             \
                                                                                                                                        \
                                                       Test(IL_FAUT(SGI_____bloquer_generation_video_si_defaut_en_cours_de_transfert))  \
                                                            Bblock                                                                      \
                                                            Loop                                                                        \
                                                                 Bblock                                                                 \
                                                                 PRINT_ATTENTION("le processus de generation video est bloque");        \
                                                                 DODO(TEMPORISATION_DE_BLOCAGE_SUR_DEFAUT_EN_COURS_DE_TRANSFERT);       \
                                        /* Le 19980316122616, ce blocage ad vitam eternam a ete introduit afin de garantir que       */ \
                                        /* lorsque ceci est utilise pour enregistrer sur le disque 'PAL-beta' il n'y ait pas de      */ \
                                        /* risque d'enregistrer les images NOIR...                                                   */ \
                                                                 Eblock                                                                 \
                                                            ELoo                                                                        \
                                                            Eblock                                                                      \
                                                       ATes                                                                             \
                                                            Bblock                                                                      \
                                                            Eblock                                                                      \
                                                       ETes                                                                             \
                                                       Eblock                                                                           \
                                                  ECa1                                                                                  \
                                                                                                                                        \
                                                  Ca1e(VLTransferFailed)                                                                \
                                                       Bblock                                                                           \
                                                       PRINT_ERREUR("le transfert a ete aborte");                                       \
                                                       Eblock                                                                           \
                                                  ECa1                                                                                  \
                                                                                                                                        \
                                                  Defo                                                                                  \
                                                       Bblock                                                                           \
                                                       PRINT_ERREUR("un defaut n'est pas reconnu");                                     \
                                        /* Bizarre, voir la definition de 'LISTE_DES_EVENEMENTS_A_DETECTER'...                       */ \
                                                       Eblock                                                                           \
                                                  EDef                                                                                  \
                                                  Eblock                                                                                \
                                             ECho                                                                                       \
                                             Eblock                                                                                     \
                                        ERep                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Eblock                                                                                               \
                                        /* Detection des defauts ayant eu lieu au cours d'un transfert.                              */
#         Aif       (nSYSTEM_RELEASE >= 503000000)                              /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */
#         Eif       (nSYSTEM_RELEASE >= 503000000)                              /* Common,DEFV(Fonction,) : avec 'VideoAnalogique'.  */

#         define    VISUALISER_LE_CONTENU_DE_L_ECRAN_DE_LA_STATION_DE_TRAVAIL                                                           \
                              VRAI
#         define    VISUALISER_UNE_IMAGE_RASTER                                                                                         \
                              NOTL(VISUALISER_LE_CONTENU_DE_L_ECRAN_DE_LA_STATION_DE_TRAVAIL)
DEFV(Common,DEFV(Logical,SINT(SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail,VISUALISER_UNE_IMAGE_RASTER)));
                                        /* Indique s'il faut ('VRAI') visualiser le contenu de l'ecran de la station de travail ou   */
                                        /* bien une image raster ('FAUX'), ce qui est l'etat par defaut... On notera que lorsque     */
                                        /* cette option est utilisee, avec le parametre 'SGI_____decalage_de_VL_EV1_V_OFFSET' par    */
                                        /* defaut, il y a une bande blanche en haut de l'ecran ; toucher au decalage vertical (en    */
                                        /* fixant a 2 par exemple) fait disparaitre cette bande, mais ce n'est pas pour cela que     */
                                        /* l'on recupere le bas de l'ecran qui semble toujours perdu...                              */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */
#              define    CHOIX_DE_LA_SOURCE_DE_SYNCHRONISATION_EXTERNE                                                                  \
                                   Bblock                                                                                               \
                                   Test(IFET(IL_FAUT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE)                                            \
                                            ,I3ET(IFNE(SGI_____Gentree_de_synchronisation_genlock                                       \
                                                      ,VL_SYNC_SOURCE_COMPOSITE_1                                                       \
                                                       )                                                                                \
                                                 ,IFNE(SGI_____Gentree_de_synchronisation_genlock                                       \
                                                      ,VL_SYNC_SOURCE_COMPOSITE_2                                                       \
                                                       )                                                                                \
                                                 ,IFNE(SGI_____Gentree_de_synchronisation_genlock                                       \
                                                      ,VL_SYNC_SOURCE_COMPOSITE_3                                                       \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("entree 'genlock' non reconnue (entree implicite forcee)");                        \
                                        EGAL(SGI_____Gentree_de_synchronisation_genlock,VL_SYNC_SOURCE_COMPOSITE);                      \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_device                                                         \
                                                      ,intVal                                                                           \
                                                      ,SGI_____Gentree_de_synchronisation_genlock                                       \
                                                      ,VL_SYNC_SOURCE                                                                   \
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL                                     \
                                                      ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION                                    \
                                                       );                                                                               \
                                   Eblock                                                                                               \
                                        /* Choix et validation de la source de synchronisation externe...                            */

#              define    VL_SYNC_SOURCE_COMPOSITE_1                                                                                     \
                                   ZERO
#              define    VL_SYNC_SOURCE_COMPOSITE_2                                                                                     \
                                   UN
#              define    VL_SYNC_SOURCE_COMPOSITE_3                                                                                     \
                                   DEUX
                                        /* Valeur qui semble manquer dans <vl/vl$h> et qui definissent les sources possibles pour    */
                                        /* la synchronisation "genlock" ; ces informations ont ete obtenues grace a la commande :    */
                                        /*                                                                                           */
                                        /*                  vlinfo    -l                                                             */
                                        /*                                                                                           */
                                        /* en examinant les lignes :                                                                 */
                                        /*                                                                                           */
                                        /*                  Name:               genlocksrc                                           */
                                        /*                  Type:               58                                                   */
                                        /*                                                                                           */
                                        /*                                      ||                                                   */
                                        /*                                      ||                                                   */
                                        /*                                       ===========> 'VL_SYNC_SOURCE' (dans '<vl/vl.h>')    */
                                        /*                                                                                           */
                                        /*                  composite 1         = 0                                                  */
                                        /*                  composite 2         = 1                                                  */
                                        /*                  composite 3         = 2                                                  */
                                        /*                                                                                           */
                                        /* On notera les correspondances physiques (au niveau des connecteurs) suivantes :           */
                                        /*                                                                                           */
                                        /*                  VL_SYNC_SOURCE_COMPOSITE_1    <==>      VL_MUXSWITCH_COMPOSITE_1         */
                                        /*                  VL_SYNC_SOURCE_COMPOSITE_2    <==>      VL_MUXSWITCH_COMPOSITE_2         */
                                        /*                  VL_SYNC_SOURCE_COMPOSITE_3    <==>      VL_MUXSWITCH_COMPOSITE_3         */
                                        /*                                                                                           */
#              define    VL_SYNC_SOURCE_COMPOSITE                                                                                       \
                                   VL_SYNC_SOURCE_COMPOSITE_2
DEFV(Common,DEFV(Int,SINT(SGI_____Gentree_de_synchronisation_genlock,VL_SYNC_SOURCE_COMPOSITE)));
                                        /* Definition de la source de synchronisation "genlock" utilisee. Il parait d'ailleurs       */
                                        /* que l'on ne peut utiliser ici que 'VL_SYNC_SOURCE_COMPOSITE_2'...                         */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */

#         define    MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK                                                                                    \
                              Bblock                                                                                                    \
                              Test(PAS_D_ERREUR(VLSETUPPATHS(identite_du_serveur_video                                                  \
                                                            ,Cast_G_VLPathList(ADRESSE(chemin_emetteur_recepteur))                      \
                                                            ,nombre_de_chemins_a_etablir                                                \
                                                            ,VL_LOCK                                                                    \
                                                            ,VL_LOCK                                                                    \
                                                             )                                                                          \
                                                )                                                                                       \
                                   )                                                                                                    \
                                        /* Preparation du hardware pour permettre l'usage des controles et des flots d'informations. */ \
                                        /* L'usage ici choisit est le mode exclusif ('VL_LOCK'). On notera que 'VLSETUPPATHS(...)'   */ \
                                        /* est obligatoire a cause du mode {VL_SHARE,VL_READ_ONLY} impose precedemment et ce afin    */ \
                                        /* de permettre le controle 'VL_SYNC'...                                                     */ \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("l'usage du chemin n'a pu etre modifie");                                               \
                                   PRINT_ERREUR("le transfert demande ne pourra pas etre realise");                                     \
                                        /* On notera au passage que l'ensemble du code qui suit pourrait etre place a l'interieur    */ \
                                        /* de la premiere alternative de ce 'Test(...)' mais que ce n'est pas fait car il faudrait   */ \
                                        /* alors le retabuler, or il y a des lignes tres longues...                                  */ \
                                   CAL1(Prer1(" identite du noeud emetteur  = %d\n"                                                     \
                                             ,identite_du_noeud_emetteur                                                                \
                                              )                                                                                         \
                                        );                                                                                              \
                                   CAL1(Prer1(" identite du noeud recepteur = %d\n"                                                     \
                                             ,identite_du_noeud_recepteur                                                               \
                                              )                                                                                         \
                                        );                                                                                              \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* Mise du chemin en mode {VL_LOCK,VL_LOCK}.                                                 */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
#              define    FORMAT_DE_PACKING_DES_POINTS_VIDEO                                                                             \
                                   VL_PACKING_RGB                                                                                       \
                                        /* Format de definition des points en video.                                                 */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              define    FORMAT_DE_PACKING_DES_POINTS_VIDEO                                                                             \
                                   VL_PACKING_RGB_8                                                                                     \
                                        /* Format de definition des points en video. ATTENTION, il semblerait que le format a        */ \
                                        /* utiliser soit :                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                  VL_PACKING_RGB_8_P                                                       */ \
                                        /*                                                                                           */ \
                                        /* qui correspondrait a :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  VL_PACKING_RGB                                                           */ \
                                        /*                                                                                           */ \
                                        /* des versions anterieures a la release 5.2. Malheureusement, si 'N' est le nombre de       */ \
                                        /* points de l'image, 'VL_PACKING_RGB_8_P' devrait donner par 'VLGETTRANSFERSIZE(...)'       */ \
                                        /* une taille d'image egale a '3xN', or elle donne '1xN'. On notera au passage que           */ \
                                        /* 'VL_PACKING_RGB_8' donne correctement (et par definition) la taille '4xN'.                */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, l'ordre des composantes n'est pas le meme suivant le 'VL_PACKING_RGB_...'      */ \
                                        /* utilise :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  VL_PACKING_RGB_8    = {NOIR,B,V,R}                                       */ \
                                        /*                                                                                           */ \
                                        /*                  VL_PACKING_RGB_8_P  = {R,B,V}                                            */ \
                                        /*                                                                                           */ \
                                        /* pourquoi ? D'autre part, les composantes des points sont intercalees les unes dans les    */ \
                                        /* autres (voir 'v $Dcourrier_in/940421140427'), ce dernier mode est donc pratiquement       */ \
                                        /* inutilisable...                                                                           */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#         define    VL_PACKING_RGB_8                                                                                                    \
                              UNDEF
                                        /* Afin de ne pas avoir d'erreur au niveau du pre-processeur, car en effet, le symbole       */
                                        /* 'VL_PACKING_RGB_8' n'est defini qu'en passe '$PASSE_5', alors que le test correspondant   */
                                        /* ci-apres est fait en '$PASSE_1', c'est-a-dire trop tot...                                 */

#         if        (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO == VL_PACKING_RGB_8)                                        \
                               )                                                                                                        \
                     )
#              define    NOMBRE_D_IMAGES_A_MANIPULER                                                                                    \
                                   COND(IFEQ(nombre_d_images_a_manipuler,UN),DEUX,nombre_d_images_a_manipuler)                          \
                                        /* Nombre d'images a communiquer a 'VLCREATEBUFFER(...)'. Ainsi, si un seul buffer doit      */ \
                                        /* etre cree, il convient en fait d'en declarer deux, afin d'eviter, lors de certains        */ \
                                        /* transferts de la memoire vers la sortie video, que le driver 'ev1' de la carte 'Galileo'  */ \
                                        /* attente un mauvais changement d'etat (ceci est le bug '#260256' corrige par le "patch"    */ \
                                        /* d'identite 'Patch_SG0000294').                                                            */
#         Aif       (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO == VL_PACKING_RGB_8)                                        \
                               )                                                                                                        \
                     )
#              define    NOMBRE_D_IMAGES_A_MANIPULER                                                                                    \
                                   nombre_d_images_a_manipuler                                                                          \
                                        /* Nombre d'images a communiquer a 'VLCREATEBUFFER(...)'.                                    */
#         Eif       (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO == VL_PACKING_RGB_8)                                        \
                               )                                                                                                        \
                     )

#         undef     VL_PACKING_RGB_8                                                                                                    \
                                        /* Afin de ne pas avoir d'erreur au niveau du pre-processeur, car en effet, le symbole       */ \
                                        /* 'VL_PACKING_RGB_8' n'est defini qu'en passe '$PASSE_5', alors que le test correspondant   */ \
                                        /* ci-dessus est fait en '$PASSE_1', c'est-a-dire trop tot...                                */

#         define    DECALAGE_DE_VL_EV1_DELAY_SYNC                                                                                       \
                              ZERO
DEFV(Common,DEFV(Int,SINT(SGI_____decalage_de_VL_EV1_DELAY_SYNC,DECALAGE_DE_VL_EV1_DELAY_SYNC)));
                                        /* Definition du decalage des synchronisations de sortie par rapport a celles d'entree...    */

DEFV(Common,DEFV(Int,SINT(SGI_____nombre_de_lignes_blankees,ZERO)));
                                        /* Definition du nombre de lignes "blankees" en haut de l'image...                           */

#         define    DECALAGE_DE_VL_EV1_V_OFFSET                                                                                         \
                              ZERO
DEFV(Common,DEFV(Int,SINT(SGI_____decalage_de_VL_EV1_V_OFFSET,DECALAGE_DE_VL_EV1_V_OFFSET)));
                                        /* Definition du decalage de l'offset vertical standard. La valeur par defaut ('ZERO')       */
                                        /* donne avec l'option 'SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail'   */
                                        /* une bande blanche en haut de l'ecran...                                                   */

#         if        (nSYSTEM_RELEASE < 503000000)
#              define    DECALAGE_DE_VL_EV1_H_OFFSET                                                                                    \
                                   NEGA(DIX)
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
#              define    DECALAGE_DE_VL_EV1_H_OFFSET                                                                                    \
                                   NEGA(ADD2(CINQUANTE,HUIT))
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

DEFV(Common,DEFV(Int,SINT(SGI_____decalage_de_VL_EV1_H_OFFSET,DECALAGE_DE_VL_EV1_H_OFFSET)));
                                        /* Definition du decalage de l'offset horizontal standard. ATTENTION, il y a eu pendant      */
                                        /* longtemps la valeur 'ONZE', mais alors les images etaient decadrees a gauche...           */
                                        /*                                                                                           */
                                        /* ATTENTION, on notera qu'en fait deux valeurs sont utilisees :                             */
                                        /*                                                                                           */
                                        /*                  -42     : pour faire des enregistrements video sur le disque,            */
                                        /*                  -76     : pour faire des photographies d'ecran,                          */
                                        /*                                                                                           */
                                        /* cette derniere valeur est fixee dans la commande '$Fdivers', alors qu'avant le 1995031400 */
                                        /* on trouvait ici :                                                                         */
                                        /*                                                                                           */
                                        /*                  NEGA(ADD2(SOIXANTE_QUATRE,DOUZE))                                        */
                                        /*                                                                                           */
                                        /* mais il parait plus logique de mettre ici une valeur qui centre bien le signal. Cette     */
                                        /* valeur a ete obtenue experimentalement grace au programme 'v $xtc/SGI_G.530.71$c' en      */
                                        /* faisant varier ce parametre de part et d'autre de cette valeur et en essayant d'obtenir   */
                                        /* la disparition de liseres rouges qui apparaissent a gauche (<-42) ou a droite (>-42)      */
                                        /* des textes blancs inseres par le disque video alors qu'il est en 'Rec Standby'...         */
                                        /*                                                                                           */
                                        /* Le 20010613151819, j'ai note (un peu tardivement...) que la valeur :                      */
                                        /*                                                                                           */
                                        /*                  -58                                                                      */
                                        /*                                                                                           */
                                        /* centrait beaucoup plus correctement les images pour les enregistrements video sur le      */
                                        /* disque, mais jusqu'a nouvel ordre, je conserve la valeur "-42" pour des raisons de        */
                                        /* compatibilite entre les sequences futures et les sequences deja enregistrees. Au passage, */
                                        /* avec la valeur "-42" les images sont decalees vers la gauche. Malgre tout, il convient    */
                                        /* de noter que l'image enregistree n'est pas tronquee comme il est possible de le verifier  */
                                        /* sur un moniteur en mode "UnderScan" avec une image du type :                              */
                                        /*                                                                                           */
                                        /*                  xivPdf    12 1                                                           */
                                        /*                  r         003073_003584                                                  */
                                        /*                                                                                           */
                                        /* qui possede un cadre "exterieur"...                                                       */
                                        /*                                                                                           */
                                        /* Le 20010626104408, je passe (enfin) de la valeur :                                        */
                                        /*                                                                                           */
                                        /*                  NEGA(ADD2(QUARANTE,DEUX))                                                */
                                        /*                                                                                           */
                                        /* a la valeur :                                                                             */
                                        /*                                                                                           */
                                        /*                  NEGA(ADD2(CINQUANTE,HUIT))                                               */
                                        /*                                                                                           */
                                        /* les essais ayant ete fait a l'aide de l'image 'v $xiirk/REFM.11' qui possede un cadre     */
                                        /* exterieur.                                                                                */
#         define    DECALAGE_DE_VL_EV1_H_PHASE                                                                                          \
                              ZERO
DEFV(Common,DEFV(Int,SINT(SGI_____decalage_de_VL_EV1_H_PHASE,DECALAGE_DE_VL_EV1_H_PHASE)));
                                        /* Definition du decalage de l'offset horizontal "fin" standard...                           */
#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

#    ifdef     __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS
#         define    SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE                                                                              \
                              VRAI                                                                                                      \
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') se synchroniser sur une source externe, par    */ \
                                        /* exemple pour des enregistrements disques...                                               */
#    Aifdef    __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS
#    Eifdef    __VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         define    POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimens_x,x_bas_gauche,x_haut_droite,dimens_y,y_bas_gauche,y_haut_droite)      \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_2D(position_coin_bas_gauche,x_bas_gauche,y_bas_gauche);                              \
                              INITIALISATION_POINT_2D(position_coin_haut_droite,x_haut_droite,y_haut_droite);                           \
                                        /* Memorisation des coordonnees des deux coins de reference opposes de la fenetre ouverte.   */ \
                                                                                                                                        \
                              CALS(prefsize(dimens_x,dimens_y));                                                                        \
                                        /* Dimensionnement du plan de travail,                                                       */ \
                                                                                                                                        \
                              CALS(prefposition(ASD1(position_coin_bas_gauche,x)                                                        \
                                               ,ASD1(position_coin_haut_droite,x)                                                       \
                                               ,ASD1(position_coin_bas_gauche,y)                                                        \
                                               ,ASD1(position_coin_haut_droite,y)                                                       \
                                                )                                                                                       \
                                   );                                                                                                   \
                                        /* Et positionnement de la fenetre...                                                        */ \
                              Eblock                                                                                                    \
                                        /* Positionnement et memorisation de celui-ci pour la fenetre courante...                    */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
DEFV(Common,DEFV(Logical,SINT(SGI_____editer_les_PRINT_ATTENTION_initiaux,FAUX)));
                                        /* Faut-il editer les 'PRINT_ATTENTION(...)' initiaux de 'IXopen_pour_utiliser_OpenGL(...)'. */
                                        /*                                                                                           */
                                        /* ATTENTION : jusqu'au 20061120103540 'SGI_____editer_les_PRINT_ATTENTION_initiaux'         */
                                        /* s'appelait en fait 'editer_les_PRINT_ATTENTION_initiaux'. Or, il y a dans ce meme         */
                                        /* fichier 'v $xiidG/fonction.1$FON editer_les_PRINT_ATTENTION_initiaux' de nombreuses       */
                                        /* variables de type 'Argument' qui portent aussi ce nom. C'est aussi le cas de nombreuses   */
                                        /* variables dans '$xci' et dans 'v $xci/display.03$I editer_les_PRINT_ATTENTION_initiaux'.  */
                                        /* Cela semble etre une erreur qui a donc ete corrigee le 20061120103540 a l'occasion de     */
                                        /* grande operation d'unification des variables 'v $xau/LACT16.D1.modifier$sed'...           */

DEFV(Local,DEFV(deltaI_2D,dimension_non_normalisee_de_la_fenetre));
DEFV(Local,DEFV(deltaF_2D,dimension_de_la_fenetre));
                                        /* Dimensions de la fenetre non normalisee, puis normalisee.                                 */

#         define    POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimens_x,x_bas_gauche,x_haut_droite,dimens_y,y_bas_gauche,y_haut_droite)      \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_2D(position_coin_bas_gauche,x_bas_gauche,y_bas_gauche);                              \
                              INITIALISATION_POINT_2D(position_coin_haut_droite,x_haut_droite,y_haut_droite);                           \
                                        /* Memorisation des coordonnees des deux coins de reference opposes de la fenetre ouverte.   */ \
                                                                                                                                        \
                              INITIALISATION_ACCROISSEMENT_2D(dimension_non_normalisee_de_la_fenetre                                    \
                                                             ,dimens_x                                                                  \
                                                             ,dimens_y                                                                  \
                                                              );                                                                        \
                              INITIALISATION_ACCROISSEMENT_2D(dimension_de_la_fenetre                                                   \
                                                             ,_____lNORMALISE_OX11(dimens_x)                                            \
                                                             ,_____lNORMALISE_OY11(dimens_y)                                            \
                                                              );                                                                        \
                                        /* Et definition de la taille de la fenetre 'X-Window' necessaire. On notera l'utilisation   */ \
                                        /* de '_____lNORMALISE_OX11(...)' et de '_____lNORMALISE_OY11(...)' et non pas de            */ \
                                        /* '_____lNORMALISE_OXG(...)' et de '_____lNORMALISE_OYG(...)' afin de faire que la fenetre  */ \
                                        /* ouverte ait la meme dimension que cette de '__VERSION__UTILISER_LA_BIBLIOTHEQUE_GL'...    */ \
                              Eblock                                                                                                    \
                                        /* Positionnement et memorisation de celui-ci pour la fenetre courante...                    */

#         define    GL_CURRENT_RASTER_DEBUT_VIEWPORT                                                                                    \
                              INDEX0
Denumer05(INIS(GL_CURRENT_RASTER_X_VIEWPORT,GL_CURRENT_RASTER_DEBUT_VIEWPORT)
         ,GL_CURRENT_RASTER_Y_VIEWPORT
         ,GL_CURRENT_RASTER_LARGEUR_VIEWPORT
         ,GL_CURRENT_RASTER_HAUTEUR_VIEWPORT
         ,GL_CURRENT_RASTER_FIN_VIEWPORT
         ,format_du_view_port_raster_courant
          );
                                        /* Format des informations renvoyees par 'glGetIntegerv(GL_VIEWPORT,...)'.                   */
#         define    X_VIEWPORT                                                                                                          \
                              ITb1(viewport_raster_courant                                                                              \
                                  ,INDX(GL_CURRENT_RASTER_X_VIEWPORT,GL_CURRENT_RASTER_DEBUT_VIEWPORT)                                  \
                                   )
#         define    Y_VIEWPORT                                                                                                          \
                              ITb1(viewport_raster_courant                                                                              \
                                  ,INDX(GL_CURRENT_RASTER_Y_VIEWPORT,GL_CURRENT_RASTER_DEBUT_VIEWPORT)                                  \
                                   )
#         define    LARGEUR_VIEWPORT                                                                                                    \
                              ITb1(viewport_raster_courant                                                                              \
                                  ,INDX(GL_CURRENT_RASTER_LARGEUR_VIEWPORT,GL_CURRENT_RASTER_DEBUT_VIEWPORT)                            \
                                   )
#         define    HAUTEUR_VIEWPORT                                                                                                    \
                              ITb1(viewport_raster_courant                                                                              \
                                  ,INDX(GL_CURRENT_RASTER_HAUTEUR_VIEWPORT,GL_CURRENT_RASTER_DEBUT_VIEWPORT)                            \
                                   )
                                        /* Definition du "viewport"...                                                               */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#         define    XminPal_bandeau                                                                                                     \
                              XminPal
#         define    XmaxPal_bandeau                                                                                                     \
                              XmaxPal
#         define    dimXPal_bandeau                                                                                                     \
                              dimXPal

#         define    YminPal_bandeau                                                                                                     \
                              YminPal
#         define    YmaxPal_bandeau                                                                                                     \
                              XYZmax(YminPal,DIVI(SV_PAL_YMAX,SGI_____facteur_de_reduction_verticale_d_une_fenetre_bandeau))
#         define    dimYPal_bandeau                                                                                                     \
                              DIMENSION(YminPal_bandeau,YmaxPal_bandeau)

                                        /* Definition d'une fenetre dite "bandeau" qui est en fait une bande ayant la largeur de     */
                                        /* de toute les fenetres 'Pal' mais etant tres plate, ce qui lui permet d'etre affichee      */
                                        /* tout en bas de l'ecran sans se superposer (ou tres peu) aux autres fenetres, et donc      */
                                        /* ainsi elle ne "volera" jamais (?) le "focus" d'une fenetre active, tout en permettant     */
                                        /* (grace a sa grande largeur) l'action de 'IGattente_de_l_evenement_ButtonPress(...)'.      */

DEFV(Common,DEFV(Int,SINT(SGI_____facteur_de_reduction_verticale_d_une_fenetre_bandeau,SEIZE)));
                                        /* Facteur de reduction permettant de passer d'une fenetre 'Pal' a une fenetre "bandeau"...  */
                                        /*                                                                                           */
                                        /* On notera au passage que ce rapport a une valeur implicite liee au fait que :             */
                                        /*                                                                                           */
                                        /*                                       6   2                                               */
                                        /*                  SV_PAL_YMAX = 576 = 2  .3                                                */
                                        /*                                                                                           */
                                        /* qui est donc divisible exactement par 16.                                                 */
#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

DEFV(Common,DEFV(FonctionI,IGopen(nom_de_la_fenetreA
                                 ,centrer_la_fenetre
                                 ,ARGUMENT_POINTERs(coin_bas_gauche)
                                 ,generer_de_la_video
                                 ,laisser_le_curseur_apparaitre_pendant_l_affichage
                                  )
                 )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_fenetreA)));
                                        /* Nom de la fenetre a ouvrir.                                                               */
DEFV(Argument,DEFV(Logical,centrer_la_fenetre));
                                        /* Faut-il centrer la fenetre ('VRAI') ou bien donner explicitement la position de son coin  */
                                        /* "bas gauche" ('FAUX') ?                                                                   */
DEFV(Argument,DEFV(pointF_2D,POINTERs(coin_bas_gauche)));
                                        /* Abscisse du point de reference,                                                           */
DEFV(Argument,DEFV(Logical,generer_de_la_video));
                                        /* Cet indicateur precise si l'on doit generer de la video 625 lignes ('VRAI'), ou           */
                                        /* bien des signaux "haute-definition" 1024 lignes ('FAUX'). Les modes suivants sont         */
                                        /* donc disponibles :                                                                        */
                                        /*                                                                                           */
                                        /*        FAUX    : 1280x1024 60 Hz,                                                         */
                                        /*                                                                                           */
                                        /*        VRAI    : 768x576   50 Hz                                                          */
                                        /*                ('__VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS'),    */
                                        /*          780x575   50 Hz                                                                  */
                                        /*                ('__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS'),    */
                                        /*                                                                                           */
DEFV(Argument,DEFV(Logical,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').                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */

     DEFV(pointF_2D,veritable_coin_bas_gauche);
                                        /* Abscisse du point de reference reellement utilise...                                      */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
     DEFV(G_Screencoord,DTb1(viewport_raster_courant,NBRE(GL_CURRENT_RASTER_DEBUT_VIEWPORT,PRED(GL_CURRENT_RASTER_FIN_VIEWPORT))));
                                        /* Informations renvoyees par 'glGetIntegerv(GL_VIEWPORT,...)'.                              */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
     DEFV(G_VLDevList,liste_des_devices_disponibles);
                                        /* Liste des "device"s disponibles sur le serveur video...                                   */
     DEFV(Int,INIT(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT));
                                        /* Numero du "device" (indifferent...) a utiliser...                                         */
     DEFV(Int,INIT(nombre_de_chemins_a_etablir,UN));
                                        /* Nombre de chemins a etablir (entre les "noeud"s emetteur et recepteur).                   */
     DEFV(Int,INIT(taille_reelle_des_images_en_octets,UNDEF));
                                        /* Taille reelle des images a manipuler...                                                   */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

     /*..............................................................................................................................*/
     Test(IFEQ(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
          Bblock
          TRANSFERT_POINT_2D(veritable_coin_bas_gauche,PINDIRECT(coin_bas_gauche));
                                        /* A priori, c'est le 'coin_bas_gauche' qui sera utilise...                                  */

          Test(IL_FAUT(generer_de_la_video))
               Bblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
               EGAL(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL);
                                        /* Mise en place du mode de fonctionnement...                                                */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
               PRINT_ATTENTION("cette machine ne dispose pas d'option video ('Galileo' ou 'GenLock')");
               EGAL(mode_de_fonctionnement,MODE_HAUTE_DEFINITION);
                                        /* Le mode de fonctionnement est alors force...                                              */
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

               Eblock
          ATes
               Bblock
               EGAL(mode_de_fonctionnement,MODE_HAUTE_DEFINITION);
                                        /* Mise en place du mode de fonctionnement...                                                */
               Eblock
          ETes

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          Test(IFET(IFNE(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)
                   ,IL_NE_FAUT_PAS(SGI_____appeler_les_fonctions_X_Window_pour_les_sorties_OpenGL)
                    )
               )
               Bblock
               PRINT_ERREUR("lorsqu'il n'y a pas enregistrement video, l'appel de 'X-Window' par 'OpenGL' est imperatif");
               EGAL(SGI_____appeler_les_fonctions_X_Window_pour_les_sorties_OpenGL,VRAI);
                                        /* Et on force l'appel...                                                                    */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          Choi(mode_de_fonctionnement)
               Bblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
               Ca1e(MODE_BASSE_DEFINITION_PAL)
                    Bblock
                    Test(IFOU(IL_FAUT(centrer_la_fenetre)
                             ,IFOU(IZNE(_cDENORMALISE_OXG(ASD1(veritable_coin_bas_gauche,x)))
                                  ,IZNE(_cDENORMALISE_OYG(ASD1(veritable_coin_bas_gauche,y)))
                                   )
                              )
                         )
                         Bblock
                         PRINT_ATTENTION("la fenetre va etre positionnee en bas a gauche pour le 'PAL'");
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

#         if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                     )
                    POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimXPal_bandeau
                                                         ,XminPal_bandeau
                                                         ,XmaxPal_bandeau
                                                         ,dimYPal_bandeau
                                                         ,YminPal_bandeau
                                                         ,YmaxPal_bandeau
                                                          );
                                        /* Definition d'une fenetre dite "bandeau" qui est en fait une bande ayant la largeur de     */
                                        /* de toute les fenetres 'Pal' mais etant tres plate, ce qui lui permet d'etre affichee      */
                                        /* tout en bas de l'ecran sans se superposer (ou tres peu) aux autres fenetres, et donc      */
                                        /* ainsi elle ne "volera" jamais (?) le "focus" d'une fenetre active, tout en permettant     */
                                        /* (grace a sa grande largeur) l'action de 'IGattente_de_l_evenement_ButtonPress(...)'.      */
                                        /*                                                                                           */
                                        /* On notera au passage que le rapport 'FRA16(...)' est lie au fait que :                    */
                                        /*                                                                                           */
                                        /*                                       6   2                                               */
                                        /*                  SV_PAL_YMAX = 576 = 2  .3                                                */
                                        /*                                                                                           */
                                        /* qui est donc divisible exactement par 16.                                                 */
#         Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                     )
#         Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                     )

#         if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )
                    POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimXPal
                                                         ,XminPal
                                                         ,XmaxPal
                                                         ,dimYPal
                                                         ,YminPal
                                                         ,YmaxPal
                                                          );
                                        /* Dimensionnement du plan de travail et positionnement en mode format 'PAL'...              */
                                        /*                                                                                           */
                                        /* ATTENTION, il y a eu pendant longtemps :                                                  */
                                        /*                                                                                           */
                                        /*        POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimXPal                                      */
                                        /*                                             ,SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION */
                                        /*                                             ,XMAXPAL                                      */
                                        /*                                             ,dimYPal                                      */
                                        /*                                             ,SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION */
                                        /*                                             ,YMAXPAL                                      */
                                        /*                                              );                                           */
                                        /*                                                                                           */
                                        /* ce qui donnait des images mal centrees a l'interieur...                                   */
#         Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )
#         Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )

                    Eblock
               ECa1
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
               ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

               Ca1e(MODE_HAUTE_DEFINITION)
                    Bblock
                    Test(IL_FAUT(centrer_la_fenetre))
                         Bblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                         INITIALISATION_POINT_2D(veritable_coin_bas_gauche
                                                ,_____cNORMALISE_OXG(ADD2(XminG
                                                                         ,SOUS(MOIT(getgdesc(GD_XPMAX))
                                                                              ,MOIT(dimXG_d_une_fenetre_HAUTE_DEFINITION)
                                                                               )
                                                                          )
                                                                     )
                                                ,_____cNORMALISE_OYG(ADD2(YminG
                                                                         ,SOUS(MOIT(getgdesc(GD_YPMAX))
                                                                              ,MOIT(dimYG_d_une_fenetre_HAUTE_DEFINITION)
                                                                               )
                                                                          )
                                                                     )
                                                 );
                                        /* Cas ou le centrage est demande : l'argument 'coin_bas_gauche' est ignore...               */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
                         INITIALISATION_POINT_2D(veritable_coin_bas_gauche
                                                ,_____cNORMALISE_OXG(ADD2(XminG
                                                                         ,SOUS(MOIT(getgdesc(GD_XPMAX))
                                                                              ,MOIT(dimXG_d_une_fenetre_HAUTE_DEFINITION)
                                                                               )
                                                                          )
                                                                     )
                                                ,_____cNORMALISE_OYG(ADD2(YminG
                                                                         ,SOUS(MOIT(getgdesc(GD_YPMAX))
                                                                              ,MOIT(dimYG_d_une_fenetre_HAUTE_DEFINITION)
                                                                               )
                                                                          )
                                                                     )
                                                 );
                                        /* Cas ou le centrage est demande : l'argument 'coin_bas_gauche' est ignore...               */
                                        /*                                                                                           */
                                        /* ATTENTION, on notera qu'il n'y a aucune difference entre 'GL' et 'OpenGL' car, en effet,  */
                                        /* etant donne que la fenetre 'X-Window' n'est pas encore ouverte, je ne sais pas comment    */
                                        /* recuperer simplement la taille de l'ecran (d'ou l'utilisation de 'getgdesc(...)' qui      */
                                        /* est malheureusement une fonction 'GL'...).                                                */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                         Eblock
                    ATes
                         Bblock
                                        /* Cas ou le centrage n'est pas demande : c'est l'argument 'coin_bas_gauche' qui donne la    */
                                        /* position de la fenetre...                                                                 */
                         Eblock
                    ETes

                    POSITIONNEMENT_DE_LA_FENETRE_COURANTE(dimXG_d_une_fenetre_HAUTE_DEFINITION
                                                         ,ADD2(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION
                                                              ,CGXR(_cDENORMALISE_OXG(ASD1(veritable_coin_bas_gauche,x)))
                                                               )
                                                         ,ADD2(SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION
                                                              ,CGXR(_cDENORMALISE_OXG(ASD1(veritable_coin_bas_gauche,x)))
                                                               )
                                                         ,dimYG_d_une_fenetre_HAUTE_DEFINITION
                                                         ,ADD2(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION
                                                              ,CGYR(_cDENORMALISE_OYG(ASD1(veritable_coin_bas_gauche,y)))
                                                               )
                                                         ,ADD2(SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION
                                                              ,CGYR(_cDENORMALISE_OYG(ASD1(veritable_coin_bas_gauche,y)))
                                                               )
                                                          );
                                        /* Dimensionnement du plan de travail et positionnement en mode haute-definition...          */
                    Eblock
               ECa1

               Defo
                    Bblock
                    PRINT_ERREUR("un mode de fonctionnement n'est pas reconnu");
                    Eblock
               EDef
               Eblock
          ECho

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
          EGAL(identificateur_de_la_fenetre
              ,winopen(Cara(nom_de_la_fenetreA))
               );
                                        /* Ouverture du plan de travail. ATTENTION : il est tres important de ne pas mettre juste    */
                                        /* avant le 'winopen(Cara(nom_de_la_fenetreA))' la sequence suivante (qui placerait en       */
                                        /* background les activites graphiques) :                                                    */
                                        /*                                                                                           */
                                        /*                  CALS(foreground());                                                      */
                                        /*                                                                                           */
                                        /* En effet, il est important que les operations qui suivent l'ouverture d'une fenetre       */
                                        /* et l'affichage d'une image (par exemple l'enregistrement video...) puissent prendre la    */
                                        /* main immediatement et faire ce qu'elles ont a faire (pendant que l'image est affichee     */
                                        /* s'il s'agit de l'enregistrer...). Dans le cas contraire, la fermeture de la fenetre       */
                                        /* aurait lieu avant qu'elles fussent lancees (voir par exemple la programmation de la       */
                                        /* commande d'affichage 'v $xci/display_RVB$K')...                                           */
                                        /*                                                                                           */
                                        /* ATTENTION, l'appel a la fonction 'winopen(...)' est fait dans tous les cas, et en         */
                                        /* particulier meme pour le mode 'MODE_BASSE_DEFINITION_PAL' alors qu'on est en presence     */
                                        /* de l'option '__VERSION__COMPILER_L_OPTION_GALILEO_DU_GRAPHIQUE_SILICON_GRAPHICS'. En      */
                                        /* effet, cela permet d'arreter interactivement la visualisation en video en utilisant la    */
                                        /* fonction 'IGattente_de_l_evenement_ButtonPress(...)' (voir les durees "nulles" de la      */
                                        /* commande 'v $xci/display_RVB$K'). On notera que j'ai cherche comment faire que la fenetre */
                                        /* courante que l'on ouvre ne soit pas au sommet de la pile des fenetres, d'une part afin    */
                                        /* qu'elle ne gene pas visuellement, et que d'autre part, elle ne "vole" pas le "focus" de   */
                                        /* la fenetre interactive active. Je n'ai malheureusement pas trouve de solutions generales  */
                                        /* (dans 'glresources' en particulier) ; c'est pourquoi, j'ai introduit la notion de         */
                                        /* "bandeau" (voir l'appel a 'POSITIONNEMENT_DE_LA_FENETRE_COURANTE(...)').                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          BACKGROUND;
                                        /* La mise en "background" n'est plus assuree automatiquement par 'OpenGL' comme elle        */
                                        /* l'etait par 'GL' ; il faut donc le faire explicitement. Il parait plus sage de faire      */
                                        /* cette mise en 'BACKGROUND' avant d'ouvrir la fenetre qu'apres car sinon, lors de          */
                                        /* de l'execution de la fonction 'Exit(OK)' pour le "pere", il semblerait qu'il se passe     */
                                        /* des choses anormales sur '$LACT12' (et non pas sur '$LACT27'...) ; en effet, sur          */
                                        /* '$LACT12', la fenetre s'ouvre, puis se referme immediatement, alors que sur '$LACT27'     */
                                        /* la fenetre s'ouvre, l'image apparait et reste a l'ecran le temps qu'il faut...            */
          APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL(BLOC(EGAL(identificateur_de_la_fenetre
                                                             ,IXopen_pour_utiliser_OpenGL(DEFINITION_DU_SERVEUR_X_WINDOW
                                                                                         ,nom_de_la_fenetreA
                                                                                         ,ADRESSE(dimension_de_la_fenetre)
                                                                                         ,centrer_la_fenetre
                                                                                         ,ADRESSE(veritable_coin_bas_gauche)
                                                                                         ,SGI_____editer_les_PRINT_ATTENTION_initiaux
                                                                                          )
                                                              );
                                                         )
                                                   ,BLOC(EGAL(identificateur_de_la_fenetre
                                                             ,NOTL(FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE)
                                                              );
                                                         )
                                                    );
                                        /* Ouverture du plan de travail.                                                             */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          Test(IFNE(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
               Bblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
               CALS(RGBmode());
               CALS(gconfig());
                                        /* Et configuration en mode {R,V,B} ; on notera que l'appel 'gconfig()' est obligatoire,     */
                                        /* car sinon, 'RGBmode()' est ineffectif...                                                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
               APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL(BLOC(CALS(IXconnexion_avec_OpenGL());)
                                                        ,BLOC(VIDE;)
                                                         );
                                        /* Etablissement de la connexion entre 'X-Window' et 'OpenGL'...                             */

               CALS(IGclear());
                                        /* Nettoyage de la fenetre...                                                                */

               CALS(glFlush());
                                        /* Cette operation semble essentielle. En effet, en son absence, s'il s'ecoule un certain    */
                                        /* temps entre le 'IGopen(...)' et le 'IGdisplay(...)' (par exemple lors de la visualisation */
                                        /* d'une sequence d'images par 'v $xci/sequence_RVB$K', la premiere image n'existant pas     */
                                        /* encore) l'effacement ne se fait reellement que lors du passage dans 'IGdisplay(...)'. On  */
                                        /* peut donc avoir, pendant une duree indeterminee, une fenetre "sale", c'est-a-dire ou      */
                                        /* seule la composante '$ROUGE' a ete effacee, alors que les composantes '$VERTE' et         */
                                        /* '$BLEUE' sont toujours la (ce sont en fait des vestiges anterieurs...).                   */

               CALS(glGetIntegerv(GL_VIEWPORT,viewport_raster_courant));
                                        /* Regardons le "viewport" courant...                                                        */
               CALS(glViewport(X_VIEWPORT
                              ,Y_VIEWPORT
                              ,LARGEUR_VIEWPORT
                              ,HAUTEUR_VIEWPORT
                               )
                    );
                                        /* ATTENTION, ecrire :                                                                       */
                                        /*                                                                                           */
                                        /*                  CALS(glViewport(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION             */
                                        /*                                 ,SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION             */
                                        /*                                 ,SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION             */
                                        /*                                 ,SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION             */
                                        /*                                  )                                                        */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* provoque un phenomene bizarre lorsque, par exemple, depuis '$LACT27' on ouvre une         */
                                        /* fenetre 'OpenGl' sur '$LACT12' ; alors l'exterieur de l'image affichee, qui devrait       */
                                        /* etre parfaitement NOIR contient un "fantome" des fenetres situees en dessous, le          */
                                        /* phenomene ne se voyant qu'avec un "gamma" eleve (superieur a 4...).                       */
                                        /*                                                                                           */
                                        /* Puis, j'ai essaye :                                                                       */
                                        /*                                                                                           */
                                        /*                  CALS(glViewport(Xmin,Ymin                                                */
                                        /*                                 ,Xmax,Ymax                                                */
                                        /*                                  )                                                        */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* mais cela provoquait le defaut evoque dans 'v $xtc/OpenGL.16$c'...                        */

               CALS(glMatrixMode(GL_PROJECTION));
               CALS(glLoadIdentity());
               CALS(glOrtho(FLOT(X_VIEWPORT)
                           ,FLOT(XYZmax(X_VIEWPORT,LARGEUR_VIEWPORT))
                           ,FLOT(Y_VIEWPORT)
                           ,FLOT(XYZmax(Y_VIEWPORT,HAUTEUR_VIEWPORT))
                           ,FLOT(Zmin)
                           ,FLOT(Zmax)
                            )
                    );
                                        /* Definition de la projection utilisee (et oui c'est obligatoire, meme lorsque l'on est     */
                                        /* en bidimensionnel, ce qui est le cas ici...).                                             */
                                        /*                                                                                           */
                                        /* ATTENTION, ecrire :                                                                       */
                                        /*                                                                                           */
                                        /*                  CALS(glOrtho(FLOT(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                              ,FLOT(SGI_____XmaxG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                              ,FLOT(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                              ,FLOT(SGI_____YmaxG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                              ,FLOT(SGI_____ZminG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                              ,FLOT(SGI_____ZmaxG_d_une_fenetre_HAUTE_DEFINITION)          */
                                        /*                               )                                                           */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* provoque un phenomene bizarre lorsque, par exemple, depuis '$LACT27' on ouvre une         */
                                        /* fenetre 'OpenGl' sur '$LACT12' ; alors l'exterieur de l'image affichee, qui devrait       */
                                        /* etre parfaitement NOIR contient un "fantome" des fenetres situees en dessous, le          */
                                        /* phenomene ne se voyant qu'avec un "gamma" eleve (superieur a 4...).                       */
                                        /*                                                                                           */
                                        /* Puis, j'ai essaye :                                                                       */
                                        /*                                                                                           */
                                        /*                  CALS(glOrtho(FLOT(Xmin),FLOT(Xmax)                                       */
                                        /*                              ,FLOT(Ymin),FLOT(Ymax)                                       */
                                        /*                              ,FLOT(Zmin),FLOT(Zmax)                                       */
                                        /*                               )                                                           */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* mais cela provoquait le defaut evoque dans 'v $xtc/OpenGL.16$c'...                        */

               CALS(glMatrixMode(GL_MODELVIEW));
               CALS(glLoadIdentity());
                                        /* Definition du modele de visualisation...                                                  */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

               Test(IL_NE_FAUT_PAS(laisser_le_curseur_apparaitre_pendant_l_affichage))
                    Bblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         if        (         (defined(BUG_SYSTEME_SG_GL_CURSOR_GLOBAL))                                                                \
                     )
                    CALS(cursoff());
                                        /* Pour eviter de voir un vilain curseur dans l'image, on inhibe le curseur. Mais            */
                                        /* ATTENTION, sur la Personal IRIS, un bug fait que le curseur se trouve inhibe dans toutes  */
                                        /* les autres fenetres mais c'est tellement plus sur... D'autre part, la commande 'gamma'    */
                                        /* fait un 'curson()', donc il convient d'etre prudent si celle-ci est emise alors qu'une    */
                                        /* fenetre est ouverte...                                                                    */
#         Aif       (         (defined(BUG_SYSTEME_SG_GL_CURSOR_GLOBAL))                                                                \
                     )
                    CALS(cursoff());
                                        /* Pour eviter de voir un vilain curseur dans l'image, on inhibe le curseur. Mais            */
                                        /* ATTENTION, sur la Personal IRIS, un bug fait que le curseur se trouve inhibe dans toutes  */
                                        /* les autres fenetres... D'autre part, la commande 'gamma' fait un 'curson()', donc il      */
                                        /* convient d'etre prudent si celle-ci est emise alors qu'une fenetre est ouverte... Enfin,  */
                                        /* on notera que 'CALS(cursoff())' est en fait execute qu'il y ait le bug ou pas sur les     */
                                        /* systemes 'SYSTEME_SG4D..._IRIX'.                                                          */
#         Eif       (         (defined(BUG_SYSTEME_SG_GL_CURSOR_GLOBAL))                                                                \
                     )

#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
               CALS(IGclear());
                                        /* Nettoyage de la fenetre...                                                                */

               CALS(pixmode(PM_SIZE,MUL2(size_Positive,NBITOC)));
                                        /* Definition du nombre de bits par pixels.                                                  */
               CALS(pixmode(PM_STRIDE,dimX));
                                        /* Definition de la longueur des lignes de l'image a visualiser (exprimee en nombres de      */
                                        /* pixels).                                                                                  */
               CALS(pixmode(PM_OFFSET,ZERO));
                                        /* Definition du nombre de bits a ignorer dans le premier mot de chaque ligne.               */
               CALS(pixmode(PM_SHIFT,ZERO));
                                        /* Definition  d'un decalage eventuel des pixels (sous leur forme {R,V,B}.                   */
               CALS(pixmode(PM_TTOB,FALSE));
                                        /* Demande de remplissage des images de bas en haut ("top-to-bottom" est "FALSE")...         */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

               Choi(mode_de_fonctionnement)
                    Bblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
                    Ca1e(MODE_BASSE_DEFINITION_PAL)
                         Bblock
                         DEFV(Logical,INIT(essayer_d_etablir_la_connexion,VRAI));
                                        /* A priori, il va falloir essayer d'etablir la connexion...                                 */
                         DEFV(Int,INIT(nombre_de_tentatives_d_etablissement_de_connexion,NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO));
                                        /* Mais on ne pourra pas essayer une infinite de fois...                                     */

                                        /* ATTENTION, il y a eu ici pendant un temps :                                               */
                                        /*                                                                                           */
                                        /*                  CALS(winpush());                                                         */
                                        /*                                                                                           */
                                        /* pour mettre la fenetre 'GL' en arriere-plan. Malheureusement, faire ceci avant la         */
                                        /* sequence suivante de connexion video a pour consequence (mysterieuse...) de faire que     */
                                        /* le contenu de cette fenetre 'GL' est vide, sauf en ce qui concerne la partie qui n'est    */
                                        /* pas cachee par les autre fenetres. C'est pourquoi, cet appel a ete deplace apres la       */
                                        /* sequence de connexion video...                                                            */

                         EGAL(la_connexion_video_pour_une_image_a_pu_etre_etablie,FAUX);
                                        /* A priori, la connexion video demandee ne va pas etre etablie...                           */

                         Tant(IFET(IL_FAUT(essayer_d_etablir_la_connexion)
                                  ,IZGT(nombre_de_tentatives_d_etablissement_de_connexion)
                                   )
                              )
                              Bblock
                              Test(IFEQ(nombre_de_tentatives_d_etablissement_de_connexion,NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO))
                                        /* Cas de la premiere tentative : il n'y a rien a faire...                                   */
                                   Bblock
                                   Eblock
                              ATes
                                        /* Cas des tentatives ulterieures : il faut annuler certaines des initialisations realisees  */
                                        /* a la tentative precedente...                                                              */
                                   Bblock
                                   CALS(VLDESTROYPATH(identite_du_serveur_video
                                                     ,chemin_emetteur_recepteur
                                                      )
                                        );
                                        /* Destruction du chemin entre l'emetteur et le recepteur...                                 */

                                   Test(PAS_D_ERREUR(VLCLOSEVIDEO(identite_du_serveur_video)))
                                        /* Enfin, fermeture de la connexion video...                                                 */
                                        Bblock
                                        Eblock
                                   ATes
                                        Bblock
                                        PRINT_ERREUR("la fermeture de la connexion video est impossible (1)");
                                        Eblock
                                   ETes
                                   Eblock
                              ETes

                              DECR(nombre_de_tentatives_d_etablissement_de_connexion,I);
                                        /* Et une tentative de moins...                                                              */
                              EGAL(identite_du_serveur_video,VLOPENVIDEO(NOM_DU_SERVEUR_VIDEO_DE_L_OPTION_GALILEO));
                                        /* Tentative d'ouverture de la connexion video.                                              */
                              Test(IFNE(identite_du_serveur_video,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT))
                                   Bblock
                                   REINITIALISATION_DE_LA_CARTE_GALILEO(identite_du_serveur_video);
                                        /* Reinitialisation de la carte (voir 'REINITIALISATION_DE_LA_CARTE_GALILEO(...)' et ses     */
                                        /* commentaires...).                                                                         */
                                   Test(IZGE(VLGETDEVICELIST(identite_du_serveur_video,ADRESSE(liste_des_devices_disponibles))))
                                        Bblock
                                        Test(IFOU(IFEQ(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                                                 ,IFET(IFNE(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                                                      ,IFLT(numero_du_device_a_utiliser
                                                           ,INTE(ASD1(liste_des_devices_disponibles,numDevices))
                                                            )
                                                       )
                                                  )
                                             )
                                             Bblock
                                             EGAL(identite_du_noeud_emetteur
                                                 ,VLGETNODE(identite_du_serveur_video,VL_SRC,VL_MEM,VL_ANY)
                                                  );
                                        /* Definition du noeud emetteur (c'est-a-dire la "memoire").                                 */
                                             EGAL(identite_du_noeud_device
                                                 ,VLGETNODE(identite_du_serveur_video,VL_DEVICE,VL_DOIT_ETRE_NUL,VL_DOIT_ETRE_NUL)
                                                  );
                                        /* Definition du noeud "device"...                                                           */
                                             EGAL(identite_du_noeud_recepteur
                                                 ,VLGETNODE(identite_du_serveur_video,VL_DRN,VL_VIDEO,VL_ANY)
                                                  );
                                        /* Definition du noeud recepteur (c'est-a-dire la "video").                                  */

                                             Test(IL_FAUT(SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail))
                                                  Bblock
                                                  EGAL(identite_du_noeud_mixage
                                                      ,VLGETNODE(identite_du_serveur_video,VL_INTERNAL,VL_BLENDER,VL_ANY)
                                                       );
                                        /* Definition du noeud de "mixage".                                                          */
                                                  EGAL(identite_du_noeud_station
                                                      ,VLGETNODE(identite_du_serveur_video,VL_SRC,VL_SCREEN,VL_ANY)
                                                       );
                                        /* Definition du noeud emetteur definissant le contenu de l'ecran de la station de travail.  */
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  Eblock
                                             ETes

                                             EGAL(chemin_emetteur_recepteur
                                                 ,VLCREATEPATH(identite_du_serveur_video
                                                              ,COND(IFEQ(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                                                                   ,VL_ANY
                                                                   ,numero_du_device_a_utiliser
                                                                    )
                                                              ,identite_du_noeud_emetteur
                                                              ,identite_du_noeud_recepteur
                                                               )
                                                  );
                                        /* Etablissement d'un chemin entre les "noeud"s emetteur et recepteur...                     */

                                             Test(PAS_D_ERRORS(chemin_emetteur_recepteur))
                                                  Bblock
                                                  CALS(VLADDNODE(identite_du_serveur_video
                                                                ,chemin_emetteur_recepteur
                                                                ,identite_du_noeud_emetteur
                                                                 )
                                                       );
                                                  CALS(VLADDNODE(identite_du_serveur_video
                                                                ,chemin_emetteur_recepteur
                                                                ,identite_du_noeud_device
                                                                 )
                                                       );
                                                  CALS(VLADDNODE(identite_du_serveur_video
                                                                ,chemin_emetteur_recepteur
                                                                ,identite_du_noeud_recepteur
                                                                 )
                                                       );
                                        /* Operations dont je ne comprends pas bien l'utilite...                                     */

                                                  Test(IL_FAUT(SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail))
                                                       Bblock
                                                       CALS(VLADDNODE(identite_du_serveur_video
                                                                     ,chemin_emetteur_recepteur
                                                                     ,identite_du_noeud_mixage
                                                                      )
                                                            );
                                                       CALS(VLADDNODE(identite_du_serveur_video
                                                                     ,chemin_emetteur_recepteur
                                                                     ,identite_du_noeud_station
                                                                      )
                                                            );
                                        /* Operations dont je ne comprends pas bien l'utilite...                                     */
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       Eblock
                                                  ETes

                                                  EGAL(numero_du_device_a_utiliser
                                                      ,VLGETDEVICE(identite_du_serveur_video
                                                                  ,chemin_emetteur_recepteur
                                                                   )
                                                       );
                                        /* Recuperation du "device" reellement utilise (lorsque 'DEMANDE_D_UN_DEVICE_INDIFFERENT'    */
                                        /* n'est pas utilise...),                                                                    */
                                                  EGAL(nom_du_device_reellement_utilise
                                                      ,ASD1(ITb1(ASD1(liste_des_devices_disponibles,devices)
                                                                ,numero_du_device_a_utiliser
                                                                 )
                                                           ,name
                                                            )
                                                       );
                                        /* Et de son nom au cas ou...                                                                */
                                                  Test(IFNE_chaine(nom_du_device_reellement_utilise,NOM_DU_DEVICE_ATTENDU))
                                                       Bblock
                                                       PRINT_ERREUR("le nom du 'device' utilise n'est pas celui qui etait attendu");
                                                       PRINT_ERREUR("on l'utilise malgre tout");
                                                       CAL1(Prer1(" 'device' attendu = %s\n",NOM_DU_DEVICE_ATTENDU));
                                                       CAL1(Prer1(" 'device' utilise = %s\n",nom_du_device_reellement_utilise));
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       Eblock
                                                  ETes

                                                  Test(PAS_D_ERREUR(VLSETUPPATHS(identite_du_serveur_video
                                                                                ,Cast_G_VLPathList(ADRESSE(chemin_emetteur_recepteur))
                                                                                ,nombre_de_chemins_a_etablir
                                                                                ,VL_SHARE
                                                                                ,VL_READ_ONLY
                                                                                 )
                                                                    )
                                                       )
                                        /* Preparation du hardware pour permettre l'usage des controles et des flots d'informations. */
                                        /*                                                                                           */
                                        /* ATTENTION, on notera les deux valeurs tres particulieres suivantes :                      */
                                        /*                                                                                           */
                                        /*   VL_SHARE     : destinee a pouvoir refaire un peu plus loin un autre 'VLSETUPPATHS(...)' */
                                        /*                  sans avoir le desagreable message suivant :                              */
                                        /*                                                                                           */
                                        /*                  VL connection to :0.0 broken (explicit kill or server shutdown).         */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*   VL_READ_ONLY : qui permet (enfin...) d'utiliser le controle 'VL_SYNC' (ci-dessous)      */
                                        /*                  sans avoir le desagreable message suivant :                              */
                                        /*                                                                                           */
                                        /*                  Bad access to the library                                                */
                                        /*                                                                                           */
                                        /* tout cela m'ayant fait perdre pas mal de temps...                                         */
                                                       Bblock
                                                       DEFV(Logical,INIT(une_erreur_forcant_l_iteration_a_ete_rencontree
                                                                        ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                         )
                                                            );
                                        /* ATTENTION, cette definition n'est la que pour permettre une compilation correcte des      */
                                        /* procedures 'PARAMETRAGE_NOEUD_?(...)', mais ne sert a rien d'autre...                     */

                                                       CALS(VLSELECTEVENTS(identite_du_serveur_video
                                                                          ,chemin_emetteur_recepteur
                                                                          ,LISTE_DES_EVENEMENTS_A_DETECTER
                                                                           )
                                                            );
                                        /* Selection des evenements a detecter...                                                    */

                                                       PARAMETRAGE_NOEUD_1(identite_du_noeud_device
                                                                          ,intVal
                                                                          ,VL_TIMING_625_SQ_PIX
                                                                          ,VL_TIMING
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage des frequences. ATENTION, la demande que le signal de synchronisation ne      */
                                        /* soit pas porte par le vert par le controle 'VL_EV1_YG_SYNC' ne peut avoir lieu qu'apres   */
                                        /* le controle 'VL_FORMAT_RGB' ; ici, il serait ineffectif...                                */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
                                                       CHOIX_DE_LA_SOURCE_DE_SYNCHRONISATION_EXTERNE;
                                        /* Choix et validation de la source de synchronisation externe...                            */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

                                                       PARAMETRAGE_NOEUD_1(identite_du_noeud_device
                                                                          ,intVal
                                                                          ,COND(IL_FAUT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE)
                                                                               ,VL_SYNC_GENLOCK
                                                                               ,VL_SYNC_INTERNAL
                                                                                )
                                                                          ,VL_SYNC
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage du type de synchronisation et de la source "genlock" utilisee. On notera      */
                                        /* l'utilisation de 'identite_du_noeud_device' (et non pas de 'identite_du_noeud_recepteur') */
                                        /* pour les controles 'VL_SYNC' et 'VL_SYNC_SOURCE'...                                       */
                                        /*                                                                                           */
                                        /* ATTENTION, lorsque l'on est en 'VL_SYNC_GENLOCK' la sortie 'Pal' ("composite") de la      */
                                        /* carte 'Galileo' ne fonctionne pas correctement ; en particulier on perd la couleur...     */

                                                       MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK;
                                        /* Preparation du hardware pour permettre l'usage des controles et des flots d'informations. */
                                        /* L'usage ici choisit est le mode exclusif ('VL_LOCK'). On notera que 'VLSETUPPATHS(...)'   */
                                        /* est obligatoire a cause du mode {VL_SHARE,VL_READ_ONLY} impose precedemment et ce afin    */
                                        /* de permettre le controle 'VL_SYNC'...                                                     */
                                        /*                                                                                           */
                                        /* On notera au passage que l'ensemble du code qui suit devrait etre place a l'interieur     */
                                        /* de la premiere alternative du 'Test(...)' de 'MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK'. Mais     */
                                        /* cela n'est pas fait car il faudrait alors le retabuler, or il y a des lignes tres         */
                                        /* longues...                                                                                */

                                                       Test(IL_FAUT(SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail))
                                                            Bblock
                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,identite_du_noeud_emetteur
                                                                               ,VL_BLEND_A
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,VL_BLDFCN_ZERO
                                                                               ,VL_BLEND_A_FCN
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );

                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,identite_du_noeud_station
                                                                               ,VL_BLEND_B
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,VL_BLDFCN_ONE
                                                                               ,VL_BLEND_B_FCN
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                        /* Programmation du "mixage" telle que seul apparaisse le contenu de l'ecran de la station   */
                                        /* de travail. On notera que permuter l'identite des noeuds 'identite_du_noeud_emetteur' et  */
                                        /* 'identite_du_noeud_station' revient a ne faire apparaitre que l'image raster ; malgre     */
                                        /* tout cette solution n'est pas utilisee pour faire cela, car c'est en effet un peu lourd.  */
                                        /*                                                                                           */
                                        /* Rappelons ici quelques definitions :                                                      */
                                        /*                                                                                           */
                                        /*                  'A'     : designe le "Foreground",                                       */
                                        /*                  'B'     : designe le "Background",                                       */
                                        /*                                                                                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                   -----------------------------                                           */
                                        /*                  |                             |                                          */
                                        /*                  |       Background  (B)       |                                          */
                                        /*                  |                             |                                          */
                                        /*                  |                             |                                          */
                                        /*                  |                             |                                          */
                                        /*                  |-------------------          |                                          */
                                        /*                  |                   |         |                                          */
                                        /*                  |                   |         |                                          */
                                        /*                  |  Foreground  (A)  |         |                                          */
                                        /*                  |                   |         |                                          */
                                        /*                  |                   |         |                                          */
                                        /*                  |                   |         |                                          */
                                        /*                   -----------------------------                                           */
                                        /*                                                                                           */
                                        /* Dans le cas qui nous interesse ici (visualiser l'ecran de la station de travail), on      */
                                        /* choisit :                                                                                 */
                                        /*                                                                                           */
                                        /*                  B = l'ecran de la station de travail,                                    */
                                        /*                  A = l'image "raster".                                                    */
                                        /*                                                                                           */
                                        /* et donc on choisit de ne visualiser que le "Background" (grace aux 'VL_BLEND_?_FCN').     */

                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,VL_EV1_KEYERMODE_LUMA
                                                                               ,VL_EV1_KEYER_MODE
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                                            PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                                               ,intVal
                                                                               ,NIVR(NOIR)
                                                                               ,VL_EV1_KEYER_FG_OPACITY
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                        /* Je crois qu'il y a une certaine redondance entre la valeur de 'VL_EV1_KEYER_FG_OPACITY'   */
                                        /* (c'est-a-dire 'NOIR') et les valeurs attribuees a 'VL_BLEND_?_FCN'. Mais dans la mesure   */
                                        /* ou il y a de temps en temps des points parasites qui apparaissent a l'exterieur des       */
                                        /* images "raster", toutes les precautions doivent etre prises...                            */
                                        /*                                                                                           */
                                        /* On notera de plus que j'ai essaye d'utiliser le mode 'VL_EV1_KEYERMODE_NONE', mais il     */
                                        /* n'est apparemment pas disponible...                                                       */

                                                            PARAMETRAGE_NOEUD_2(identite_du_noeud_station
                                                                               ,fractVal
                                                                               ,numerator
                                                                               ,UN
                                                                               ,denominator
                                                                               ,DEUX
                                                                               ,VL_ZOOM
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
                                        /* Programmation d'un zoom de rapport 1/2 permettant de faire apparaitre l'integralite de    */
                                        /* l'ecran de la station de travail (ou presque ?) sur la sortie video...                    */
                                                            Eblock
                                                       ATes
                                                            Bblock
                                                            Eblock
                                                       ETes

                                                       PARAMETRAGE_NOEUD_1(VL_ANY
                                                                          ,intVal
                                                                          ,VL_FORMAT_RGB
                                                                          ,VL_FORMAT
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage du format des images (debut).                                                 */

                                                       PARAMETRAGE_NOEUD_1(identite_du_noeud_recepteur
                                                                          ,boolVal
                                                                          ,FALSE
                                                                          ,VL_EV1_YG_SYNC
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage des signaux en demandant avec le controle 'VL_EV1_YG_SYNC' que le             */
                                        /* signal de synchronisation ne soit pas porte par le vert ('FALSE'). En effet, dans le      */
                                        /* cas contraire, lorsque le disque video est en sonde (entre la carte 'Galileo' et le       */
                                        /* moniteur 'Pal', lors du prepararif d'un enregistrement), la charge du signal vert         */
                                        /* n'est pas bonne (en fait, il parait ne pas etre charge...).                               */
                                        /*                                                                                           */
                                        /* ATTENTION, il est imperatif que le controle 'VL_EV1_YG_SYNC' suive lui-meme le controle   */
                                        /* 'VL_FORMAT_RGB', car sinon, il est ineffectif...                                          */

                                                       CALS(VLGETCONTROL(identite_du_serveur_video
                                                                        ,chemin_emetteur_recepteur
                                                                        ,identite_du_noeud_recepteur
                                                                        ,VL_EV1_DELAY_SYNC
                                                                        ,ADRESSE(parametres_courants)
                                                                         )
                                                            );
                                                       PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                          ,fractVal
                                                                          ,numerator
                                                                          ,ADD2(ASD2(parametres_courants,fractVal,numerator)
                                                                               ,SGI_____decalage_de_VL_EV1_DELAY_SYNC
                                                                                )
                                                                          ,denominator
                                                                          ,ASD2(parametres_courants,fractVal,denominator)
                                                                          ,VL_EV1_DELAY_SYNC
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Programmation du retard entre les entrees et les sorties, qui est appele suivant les      */
                                        /* documents :                                                                               */
                                        /*                                                                                           */
                                        /*                  Fine H offset                                                            */
                                        /*                  ev1.Analog-Video-Output.delaysync                                        */
                                        /*                                                                                           */
                                                       PARAMETRAGE_NOEUD_1(identite_du_noeud_recepteur
                                                                          ,intVal
                                                                          ,SGI_____nombre_de_lignes_blankees
                                                                          ,VL_EV1_BLANK_LINE
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage du nombre de ligne "blankee" en haut de l'image. On notera que mettre le      */
                                        /* controle 'VL_EV1_BLANK_LINE' avant le controle 'VL_EV1_DELAY_SYNC' donne le message       */
                                        /* d'erreur suivant :                                                                        */
                                        /*                                                                                           */
                                        /*                  VL: Bad value passed as parameter                                        */
                                        /*                                                                                           */
                                        /* tout en etant correctement pris en compte !                                               */
                                                       CALS(VLGETCONTROL(identite_du_serveur_video
                                                                        ,chemin_emetteur_recepteur
                                                                        ,identite_du_noeud_recepteur
                                                                        ,VL_EV1_V_OFFSET
                                                                        ,ADRESSE(parametres_courants)
                                                                         )
                                                            );
                                                       PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                          ,fractVal
                                                                          ,numerator
                                                                          ,ADD2(ASD2(parametres_courants,fractVal,numerator)
                                                                               ,SGI_____decalage_de_VL_EV1_V_OFFSET
                                                                                )
                                                                          ,denominator
                                                                          ,ASD2(parametres_courants,fractVal,denominator)
                                                                          ,VL_EV1_V_OFFSET
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                                       CALS(VLGETCONTROL(identite_du_serveur_video
                                                                        ,chemin_emetteur_recepteur
                                                                        ,identite_du_noeud_recepteur
                                                                        ,VL_EV1_H_OFFSET
                                                                        ,ADRESSE(parametres_courants)
                                                                         )
                                                            );
                                                       PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                          ,fractVal
                                                                          ,numerator
                                                                          ,ADD2(ASD2(parametres_courants,fractVal,numerator)
                                                                               ,SGI_____decalage_de_VL_EV1_H_OFFSET
                                                                                )
                                                                          ,denominator
                                                                          ,ASD2(parametres_courants,fractVal,denominator)
                                                                          ,VL_EV1_H_OFFSET
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Programmation de l'offset video vertical et horizontal.                                   */
                                        /*                                                                                           */
                                        /* On notera que le changement de cadrage de l'image par rapport aux synchronisations        */
                                        /* "ligne" et "trame" n'est visible qu'a condition d'observer les images "out" :             */
                                        /*                                                                                           */
                                        /*   -soit sur la sortie composite 'Pal' (auquel cas, il faut etre en synchronisation        */
                                        /*   "internal", car sinon, la "chroma" est perdue ; voir a ce propos l'alias 'bgenlock'     */
                                        /*   defini dans 'v $Fdivers'),                                                              */
                                        /*   -soit sur la sortie 'RVB' associee non pas a la synchronisation "out" sortant de        */
                                        /*   la carte 'Galileo', mais a la synchronisation "genlock"...                              */
                                        /*                                                                                           */
                                                       CALS(VLGETCONTROL(identite_du_serveur_video
                                                                        ,chemin_emetteur_recepteur
                                                                        ,identite_du_noeud_recepteur
                                                                        ,VL_EV1_H_PHASE
                                                                        ,ADRESSE(parametres_courants)
                                                                         )
                                                            );
                                                       PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                          ,fractVal
                                                                          ,numerator
                                                                          ,ADD2(ASD2(parametres_courants,fractVal,numerator)
                                                                               ,SGI_____decalage_de_VL_EV1_H_PHASE
                                                                                )
                                                                          ,denominator
                                                                          ,ASD2(parametres_courants,fractVal,denominator)
                                                                          ,VL_EV1_H_PHASE
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Programmation de ce qui est appele suivant les documents :                                */
                                        /*                                                                                           */
                                        /*                  Genlock H-phase                                                          */
                                        /*                  ev1.Analog-Video-Output.hphase                                           */
                                        /*                                                                                           */
                                        /* On notera que le changement de cadrage de l'image par rapport aux synchronisations        */
                                        /* "ligne" et "trame" n'est visible qu'a condition d'observer les images "out" :             */
                                        /*                                                                                           */
                                        /*   -soit sur la sortie composite 'Pal' (auquel cas, il faut etre en synchronisation        */
                                        /*   "internal", car sinon, la "chroma" est perdue ; voir a ce propos l'alias 'bgenlock'     */
                                        /*   defini dans 'v $Fdivers'),                                                              */
                                        /*   -soit sur la sortie 'RVB' associee non pas a la synchronisation "out" sortant de        */
                                        /*   la carte 'Galileo', mais a la synchronisation "genlock"...                              */
                                        /*                                                                                           */

                                                       PARAMETRAGE_NOEUD_1(VL_ANY
                                                                          ,intVal
                                                                          ,FORMAT_DE_PACKING_DES_POINTS_VIDEO
                                                                          ,VL_PACKING
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage du format des images (fin).                                                   */

                                                       PARAMETRAGE_NOEUD_2(identite_du_noeud_emetteur
                                                                          ,xyVal
                                                                          ,x
                                                                          ,dimXPal
                                                                          ,y
                                                                          ,dimYPal
                                                                          ,VL_SIZE
                                                                          ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                          ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                           );
                                        /* Parametrage de la taille des images.                                                      */
                                                       CALS(VLGETCONTROL(identite_du_serveur_video
                                                                        ,chemin_emetteur_recepteur
                                                                        ,identite_du_noeud_emetteur
                                                                        ,VL_SIZE
                                                                        ,ADRESSE(parametres_courants)
                                                                         )
                                                            );
                                        /* Et validation de la taille...                                                             */
                                                       Test(IFET(IFEQ(ASD2(parametres_courants,xyVal,x),dimXPal)
                                                                ,IFEQ(ASD2(parametres_courants,xyVal,y),dimYPal)
                                                                 )
                                                            )
                                                            Bblock

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE))                                                      \
                     )
                                                            PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                               ,xyVal
                                                                               ,x
                                                                               ,dimXPal
                                                                               ,y
                                                                               ,dimYPal
                                                                               ,VL_SIZE
                                                                               ,NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE))                                                      \
                     )
                                                            PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                               ,xyVal
                                                                               ,x
                                                                               ,dimXPal
                                                                               ,y
                                                                               ,dimYPal
                                                                               ,VL_SIZE
                                                                               ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                );
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_VLSETCONTROL_VL_SIZE))                                                      \
                     )

                                        /* Parametrage de la taille des images.                                                      */
                                                            CALS(VLGETCONTROL(identite_du_serveur_video
                                                                             ,chemin_emetteur_recepteur
                                                                             ,identite_du_noeud_recepteur
                                                                             ,VL_SIZE
                                                                             ,ADRESSE(parametres_courants)
                                                                              )
                                                                 );
                                        /* Et validation de la taille...                                                             */
                                                            Test(IFET(IFEQ(ASD2(parametres_courants,xyVal,x),dimXPal)
                                                                     ,IFEQ(ASD2(parametres_courants,xyVal,y),dimYPal)
                                                                      )
                                                                 )
                                                                 Bblock
                                                                 nPARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                                     ,xyVal
                                                                                     ,x
                                                                                     ,XminPal
                                                                                     ,y
                                                                                     ,YminPal
                                                                                     ,VL_ORIGIN
                                                                                     ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                                     ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                      );
                                        /* Parametrage de l'origine de la video dans l'ecran...                                      */
                                                                 nPARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                                     ,fractVal
                                                                                     ,numerator
                                                                                     ,UNITE
                                                                                     ,denominator
                                                                                     ,UNITE
                                                                                     ,VL_ZOOM
                                                                                     ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                                     ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                                      );
                                        /* Parametrage du rapport de zoom. Mais, en fait, apparemment, le controle 'VL_ZOOM' n'a de  */
                                        /* sens que pour les noeuds de type 'VL_SCREEN'...                                           */
                                                                 EGAL(taille_reelle_des_images_en_octets
                                                                     ,VLGETTRANSFERSIZE(identite_du_serveur_video
                                                                                       ,chemin_emetteur_recepteur
                                                                                        )
                                                                      );
                                        /* Recuperation de la taille des images a manipuler en octets...                             */

                                                                 EGAL(buffer_des_images
                                                                     ,VLCREATEBUFFER(identite_du_serveur_video
                                                                                    ,chemin_emetteur_recepteur
                                                                                    ,identite_du_noeud_emetteur
                                                                                    ,NOMBRE_D_IMAGES_A_MANIPULER
                                                                                     )
                                                                      );
                                        /* Creation des buffers necessaires a la manipulation des images.                            */
                                                                 Test(IFNE(buffer_des_images
                                                                          ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                                                                           )
                                                                      )
                                                                      Bblock
                                                                      DEFV(G_VLInfoPtr,informations_sur_l_image_courante);
                                        /* Informations permettant de garantir la validite des images...                             */

#         if        (nSYSTEM_RELEASE >= 503000000)
                                                                      DEFV(Logical,INIT(attendre_un_buffer_valide,VRAI));
                                        /* Afin de boucler tant qu'il le faut sur 'VLGETNEXTVALID(...)'.                             */
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

                                                                      CALS(VLREGISTERBUFFER(identite_du_serveur_video
                                                                                           ,chemin_emetteur_recepteur
                                                                                           ,identite_du_noeud_emetteur
                                                                                           ,buffer_des_images
                                                                                            )
                                                                           );
                                        /* Et enfin, enregistrement des buffers...                                                   */

                                                                      EGAL(informations_sur_l_image_courante
                                                                          ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                                                                           );
                                        /* Afin de faire au moins une fois la boucle d'attente 'Tant(...)' qui va suivre...          */

#         if        (nSYSTEM_RELEASE < 503000000)
                                                                      CALS(VLPUTVALID(identite_du_serveur_video
                                                                                     ,buffer_des_images
                                                                                      )
                                                                           );
                                        /* Operation mysterieuse, mais essentielle...                                                */

                                                                      Tant(IFEQ(informations_sur_l_image_courante
                                                                               ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                                                                                )
                                                                           )
                                                                           Bblock
                                                                           EGAL(informations_sur_l_image_courante
                                                                               ,VLGETNEXTVALID(identite_du_serveur_video
                                                                                              ,buffer_des_images
                                                                                               )
                                                                                );
                                        /* Et attente de validite...                                                                 */

                                                                           PETIT_DODO(TEMPORISATION_DES_Tant_ATTENTE_DE_BUFFER);
                                        /* Afin de ne pas bloquer le systeme, et ce au cas ou il y aurait des defauts du type :      */
                                        /*                                                                                           */
                                        /*                  unix: WARNING: Frame transfer aborted: analog video input not locked     */
                                        /*                                                                                           */
                                        /* qui seraient permanents...                                                                */
                                                                           Eblock
                                                                      ETan
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
                                                                      Tant(IL_FAUT(attendre_un_buffer_valide))
                                                                           Bblock
                                                                           EGAL(informations_sur_l_image_courante
                                                                               ,VLGETNEXTFREE(identite_du_serveur_video
                                                                                             ,buffer_des_images
                                                                                             ,taille_reelle_des_images_en_octets
                                                                                              )
                                                                                );
                                        /* Et attente de validite...                                                                 */
                                                                           Test(IFOU(IFEQ(informations_sur_l_image_courante
                                                                                         ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                                                                                          )
                                                                                    ,IL_Y_A_ERRORS(VLBUFFERDONE(buffer_des_images))
                                                                                     )
                                                                                )
                                        /* ATTENTION, d'apres '/usr/people/4Dgifts/examples/dmedia/video/vl/simplem2v$c', il         */
                                        /* faudrait mettre :                                                                         */
                                        /*                                                                                           */
                                        /*                  IFET(IFEQ(informations_sur_l_image_courant                               */
                                        /*                           ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT                       */
                                        /*                            )                                                              */
                                        /*                      ,IL_Y_A_ERRORS(VLBUFFERDONE(buffer_des_images))                      */
                                        /*                       )                                                                   */
                                        /*                                                                                           */
                                        /* mais, le 'man' dit autre chose, d'ou cette nouvelle version...                            */
                                                                                Bblock
                                                                                PETIT_DODO(TEMPORISATION_DES_Tant_ATTENTE_DE_BUFFER);
                                        /* Afin de ne pas bloquer le systeme, et ce au cas ou il y aurait des defauts du type :      */
                                        /*                                                                                           */
                                        /*                  unix: WARNING: Frame transfer aborted: analog video input not locked     */
                                        /*                                                                                           */
                                        /* qui seraient permanents...                                                                */
                                                                                Eblock
                                                                           ATes
                                                                                Bblock
                                                                                EGAL(attendre_un_buffer_valide,FAUX);
                                        /* On arrete de boucler...                                                                   */
                                                                                Eblock
                                                                           ETes
                                                                           Eblock
                                                                      ETan
                                        /* ATTENTION, il y a eu pendant longtemps ici :                                              */
                                        /*                                                                                           */
                                        /*                  Tant(IFET(IFEQ(informations_sur_l_image_courante                         */
                                        /*                                ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT                  */
                                        /*                                 )                                                         */
                                        /*                           ,PAS_D_ERRORS(VLBUFFERDONE(buffer_des_images))                  */
                                        /*                            )                                                              */
                                        /*                       )                                                                   */
                                        /*                       Bblock                                                              */
                                        /*                       EGAL(informations_sur_l_image_courante                              */
                                        /*                           ,VLGETNEXTFREE(identite_du_serveur_video                        */
                                        /*                                         ,buffer_des_images                                */
                                        /*                                         ,taille_reelle_des_images_en_octets               */
                                        /*                                          )                                                */
                                        /*                            );                                                             */
                                        /*                       Eblock                                                              */
                                        /*                  ETan                                                                     */
                                        /*                                                                                           */
                                        /* mais cela n'est pas conforme a l'ordre de 'v $xtc/SGI_G.530.71$c' ainsi qu'aux programmes */
                                        /* d'exemple, d'ou cette nouvelle version...                                                 */
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

                                                                      EGAL(image_courante
                                                                          ,VLGETACTIVEREGION(identite_du_serveur_video
                                                                                            ,buffer_des_images
                                                                                            ,informations_sur_l_image_courante
                                                                                             )
                                                                           );
                                        /* Lorsque tout est valide, on peut recuperer un pointeur sur la zone "image courante"...    */

                                                                      EGAL(il_y_a_le_transfert_d_une_image_en_cours,FAUX);
                                        /* Afin de savoir qu'il n'y a pas de transferts en cours...                                  */

                                                                      EGAL(la_connexion_video_pour_une_image_a_pu_etre_etablie,VRAI);
                                        /* La connexion video demandee a pu etre etablie...                                          */
                                                                      EGAL(essayer_d_etablir_la_connexion,FAUX);
                                        /* Et donc, ce n'est plus la peine de faire des tentatives...                                */
                                                                      Eblock
                                                                 ATes
                                                                      Bblock
                                                                      PRINT_ERREUR("les buffers d'images n'ont pu etre alloues");
                                                                      Eblock
                                                                 ETes
                                                                 Eblock
                                                            ATes
                                                                 Bblock
                                                                 PRINT_ERREUR("la taille incorrecte pour le noeud emetteur");
                                                                 CAL1(Prer2(" demandee = (%d,%d)\n"
                                                                           ,dimXPal
                                                                           ,dimYPal
                                                                            )
                                                                      );
                                                                 CAL1(Prer2(" reconnue = (%d,%d)\n"
                                                                           ,ASD2(parametres_courants,xyVal,x)
                                                                           ,ASD2(parametres_courants,xyVal,y)
                                                                            )
                                                                      );
                                                                 Eblock
                                                            ETes
                                                            Eblock
                                                       ATes
                                                            Bblock
                                                            PRINT_ERREUR("la taille incorrecte pour le noeud emetteur");
                                                            CAL1(Prer2(" demandee = (%d,%d)\n"
                                                                      ,dimXPal
                                                                      ,dimYPal
                                                                       )
                                                                 );
                                                            CAL1(Prer2(" reconnue = (%d,%d)\n"
                                                                      ,ASD2(parametres_courants,xyVal,x)
                                                                      ,ASD2(parametres_courants,xyVal,y)
                                                                       )
                                                                 );
                                                            Eblock
                                                       ETes

                                                       Test(EST_VRAI(une_erreur_forcant_l_iteration_a_ete_rencontree))
                                                            Bblock
                                        /* Ce test est rajoute car 'une_erreur_forcant_l_iteration_a_ete_rencontree' puisque cette   */
                                        /* variable est inutile...                                                                   */
                                                            PRINT_ERREUR("une iteration impossible est rencontree");
                                                            Eblock
                                                       ATes
                                                            Bblock
                                                            Eblock
                                                       ETes
                                                       Eblock
                                                  ATes
                                                       Bblock
                                                       PRINT_ERREUR("le chemin n'a pu etre etabli (2)");
                                                       CAL1(Prer1(" identite du noeud emetteur  = %d\n",identite_du_noeud_emetteur));
                                                       CAL1(Prer1(" identite du noeud recepteur = %d\n",identite_du_noeud_recepteur));
                                                       Eblock
                                                  ETes
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  PRINT_ERREUR("le chemin n'a pu etre etabli (1)");
                                                  CAL1(Prer1(" identite du noeud emetteur  = %d\n",identite_du_noeud_emetteur));
                                                  CAL1(Prer1(" identite du noeud recepteur = %d\n",identite_du_noeud_recepteur));
                                                  Eblock
                                             ETes
                                             Eblock
                                        ATes
                                             Bblock
                                             PRINT_ERREUR("le numero de 'device' demande est incorrect");
                                             CAL1(Prer1(" numero de device demande = %d\n",numero_du_device_a_utiliser));
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        PRINT_ERREUR("impossible d'obtenir la liste des 'device's");
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   PRINT_ERREUR("impossible d'ouvrir la connexion video");
                                   Eblock
                              ETes

                              PETIT_DODO(TEMPORISATION_DES_Tant_D_ETABLISSEMENT_DE_CONNEXION);
                                        /* Afin de ne pas bloquer le systeme, et ce au cas ou il y aurait des defauts du type :      */
                                        /*                                                                                           */
                                        /*                  unix: WARNING: Frame transfer aborted: analog video input not locked     */
                                        /*                                                                                           */
                                        /* qui seraient permanents...                                                                */
                              Eblock
                         ETan

                         Test(IL_FAUT(essayer_d_etablir_la_connexion))
                              Bblock
                              PRINT_ERREUR("impossible d'etablir la connexion video apres plusieurs tentatives");
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                         CALS(winpush());
                                        /* On notera qu'une fenetre 'GL' a ete ouverte ci-dessus par 'winopen(...)'. On conserve     */
                                        /* cette facilite car elle permet de surveiller que tout va bien, mais cette fenetre est     */
                                        /* placee ici derriere toutes les autres afin de ne pas deranger le travail. De plus, cela   */
                                        /* permet de la fermer interactivement via 'IGattente_de_l_evenement_ButtonPress(...)' (voir */
                                        /* les durees "nulles" de 'v $xci/display_RVB$K'). En contre-partie, cela presente un petit  */
                                        /* inconvenient : celui de risquer de perdre des caracteres lorsque la fenetre graphique     */
                                        /* qui s'ouvre contient le curseur de la souris et qu'au meme moment on est train de taper   */
                                        /* sur le clavier...). Ce delicat probleme a ete resolu (provisoirement ?) par la definition */
                                        /* d'une taille de fenetre 'Pal' dite "bandeau" qui permet, dans ce cas, de reduire la       */
                                        /* hauteur de la fenetre de facon considerable, et ce afin qu'elle n'apparaisse qu'en bas    */
                                        /* de l'ecran et qu'elle ne recouvre pas, meme partiellement, d'autres fenetres...           */
                                        /*                                                                                           */
                                        /* ATTENTION, cet appel a du etre mis apres la phase d'etablissement de la connexion video   */
                                        /* car si il se trouve avant, lorsque la fenetre 'GL' est ramenee au premier plan, elle est  */
                                        /* vide (sauf en ce qui concerne les parties non cachees par d'autres fenetres...). Ici la   */
                                        /* situation est meilleure ; le seul defaut, mais general a toutes mes fenetres 'GL', est    */
                                        /* que la composante 'ROUGE' est absente (sauf en ce qui concerne les parties non cachees    */
                                        /* par d'autres fenetres...), ce qui vient du fait qu'il faudrait peut-etre gerer une sorte  */
                                        /* de rafraichissement...                                                                    */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                         Eblock
                    ECa1
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
                    Ca1e(MODE_BASSE_DEFINITION_PAL)
                         Bblock

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                         CALS(setmonitor(PAL));
                                        /* Mise au format 'PAL' avec signal de synchronisation separe.                               */
                         CALS(setvideo(CG_MODE
                                      ,COND(IL_FAUT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE)
                                           ,CG2_M_MODE9
                                           ,CG2_M_MODEA
                                            )
                                       )
                              );
                         CALS(setvideo(DE_R1
                                      ,DER1_G_PAL
                                       )
                              );
                                        /* Synchronisation sur une source video externe sans sous-porteuse couleur, et inhibition    */
                                        /* de la fonction 'overlay'.                                                                 */
                         CALS(viewport(SGI_____XminG_d_une_fenetre_HAUTE_DEFINITION
                                      ,XMAXPAL
                                      ,SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION
                                      ,YMAXPAL
                                       )
                              );
                                        /* Definition de la partie de la fenetre qui contient l'image (en fait toute...).            */
                         CALS(blanktime(MUL2(ZERO,getgdesc(GD_TIMERHZ))));
                                        /* Et ce afin de ne pas voir un ecran tout noir (une duree nulle en secondes inhibe le       */
                                        /* processus...).                                                                            */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#              message   "ATTENTION : l'option 'GENLOCK' n'est pas disponible avec la bibliotheque 'OpenGL' (2)."
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                         Eblock
                    ECa1
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

                    Ca1e(MODE_HAUTE_DEFINITION)
                         Bblock
                         Eblock
                    ECa1

                    Defo
                         Bblock
                         PRINT_ERREUR("un mode de fonctionnement n'est pas reconnu");
                         Eblock
                    EDef
                    Eblock
               ECho

               Eblock
          ATes
               Bblock
               PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu");
               Test(IFNE(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
                    Bblock
                    Eblock
               ATes
                    Bblock
                    PRINT_ERREUR("le code 'FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE' est incompatible avec 'winopen(...)'");
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fenetre est deja ouverte");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     dimYPal_bandeau
#         undef     YmaxPal_bandeau
#         undef     YminPal_bandeau

#         undef     dimXPal_bandeau
#         undef     XmaxPal_bandeau
#         undef     XminPal_bandeau
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         undef     POSITIONNEMENT_DE_LA_FENETRE_COURANTE
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         undef     HAUTEUR_VIEWPORT
#         undef     LARGEUR_VIEWPORT
#         undef     Y_VIEWPORT
#         undef     X_VIEWPORT
#         undef     GL_CURRENT_RASTER_DEBUT_VIEWPORT
#         undef     POSITIONNEMENT_DE_LA_FENETRE_COURANTE
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A N G E M E N T   D E   L A   C O R E C T I O N   D E   G A M M A   D E   L ' E C R A N                                */
/*        ( A P R E S   O U V E R T U R E   D ' U N E   F E N E T R E )  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#    define    COULEURS_DE_CORRECTION_DE_GAMMA                                                                                          \
                         COULEURS
#    define    NOIR_DE_CORRECTION_DE_GAMMA                                                                                              \
                         NOIR
#    define    BLANC_DE_CORRECTION_DE_GAMMA                                                                                             \
                         LSTX(NOIR_DE_CORRECTION_DE_GAMMA,COULEURS_DE_CORRECTION_DE_GAMMA)
                                        /* Definition des niveaux necessaires a la correction de gamma.                              */

#    define    NIVR_DE_CORRECTION_DE_GAMMA(niveau)                                                                                      \
                         SOUS(niveau,NOIR_DE_CORRECTION_DE_GAMMA)                                                                       \
                                        /* Fonction 'NIVR(...)' necessaire pour la fonction de gamma.                                */

#    define    CORRECTION_DE_GAMMA(rampe_de_correction_de_gamma,correction_de_gamma)                                                    \
                         EGAL(ITb1(rampe_de_correction_de_gamma,INDX(index,NOIR_DE_CORRECTION_DE_GAMMA))                                \
                             ,ARRI(MUL2(PUIX(DIVI(FLOT(NIVR_DE_CORRECTION_DE_GAMMA(index))                                              \
                                                 ,FLOT(NIVR_DE_CORRECTION_DE_GAMMA(BLANC_DE_CORRECTION_DE_GAMMA))                       \
                                                  )                                                                                     \
                                            ,INVE(correction_de_gamma)                                                                  \
                                             )                                                                                          \
                                       ,FLOT(NIVR_DE_CORRECTION_DE_GAMMA(BLANC_DE_CORRECTION_DE_GAMMA))                                 \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Correction de gamma pour un niveau d'une des trois composantes chromatiques.              */

DEFV(Common,DEFV(FonctionI,IGchangement_de_la_correction_de_gamma(correction_de_gamma_ROUGE
                                                                 ,correction_de_gamma_VERTE
                                                                 ,correction_de_gamma_BLEUE
                                                                  )
                 )
     )
DEFV(Argument,DEFV(Float,correction_de_gamma_ROUGE));
DEFV(Argument,DEFV(Float,correction_de_gamma_VERTE));
DEFV(Argument,DEFV(Float,correction_de_gamma_BLEUE));
                                        /* Correction de gamma demandee pour les trois composantes chromatiques.                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(I3ET(IZGT(correction_de_gamma_ROUGE)
              ,IZGT(correction_de_gamma_VERTE)
              ,IZGT(correction_de_gamma_BLEUE)
               )
          )
          Bblock
          DEFV(vrai_Short_Int_de_base,DTb1(rampe_de_correction_de_gamma_ROUGE,COULEURS_DE_CORRECTION_DE_GAMMA));
          DEFV(vrai_Short_Int_de_base,DTb1(rampe_de_correction_de_gamma_VERTE,COULEURS_DE_CORRECTION_DE_GAMMA));
          DEFV(vrai_Short_Int_de_base,DTb1(rampe_de_correction_de_gamma_BLEUE,COULEURS_DE_CORRECTION_DE_GAMMA));
                                        /* Vecteur destine a contenir la correction de Gamma relative aux trois composantes          */
                                        /* chromatiques...                                                                           */
          DEFV(Int,INIT(index,UNDEF));
                                        /* Index d'initialisation de 'rampe_de_correction_de_gamma'.                                 */

          BoIn(index,NOIR_DE_CORRECTION_DE_GAMMA,BLANC_DE_CORRECTION_DE_GAMMA,PAS_COULEURS)
               Bblock
               CORRECTION_DE_GAMMA(rampe_de_correction_de_gamma_ROUGE,correction_de_gamma_ROUGE);
               CORRECTION_DE_GAMMA(rampe_de_correction_de_gamma_VERTE,correction_de_gamma_VERTE);
               CORRECTION_DE_GAMMA(rampe_de_correction_de_gamma_BLEUE,correction_de_gamma_BLEUE);
                                        /* Generation des "rampes" de correction de Gamma relative aux trois composantes             */
                                        /* chromatiques...                                                                           */
               Eblock
          EBoI

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
          CALS(gammaramp(rampe_de_correction_de_gamma_ROUGE
                        ,rampe_de_correction_de_gamma_VERTE
                        ,rampe_de_correction_de_gamma_BLEUE
                         )
               );
                                        /* Et demande de changement de la correction de gamma courante...                            */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
               Bblock
               DEFV(Int,INIT(identificateur_fictif_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE));
                                        /* Fenetre fictive necessaire au fonctionnement de 'gammaramp(...)'...                       */

               CALS(noport());
                                        /* Afin de ne pas faire apparaitre la fenetre fictive a l'ecran...                           */
               EGAL(identificateur_fictif_de_la_fenetre
                   ,winopen(C_VIDE)
                    );
                                        /* Ouverture d'une fenetre fictive necessaire au fonctionnement de 'gammaramp(...)' car,     */
                                        /* sinon, en version '__VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL', on recupere le message :  */
                                        /*                                                                                           */
                                        /*                  error, gammaramp: Permission denied                                      */
                                        /*                                                                                           */
                                        /* et le gamma ne change pas...                                                              */
               CALS(gammaramp(rampe_de_correction_de_gamma_ROUGE
                             ,rampe_de_correction_de_gamma_VERTE
                             ,rampe_de_correction_de_gamma_BLEUE
                              )
                    );
                                        /* Et demande de changement de la correction de gamma courante...                            */
               CALS(gexit());
                                        /* Fermeture de la fenetre fictive...                                                        */
               Eblock
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la correction de gamma ne peut etre que strictement positive");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    undef     CORRECTION_DE_GAMMA

#    undef     NIVR_DE_CORRECTION_DE_GAMMA

#    undef     BLANC_DE_CORRECTION_DE_GAMMA
#    undef     NOIR_DE_CORRECTION_DE_GAMMA
#    undef     COULEURS_DE_CORRECTION_DE_GAMMA

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A T T E N T E   D E   L ' E V E N E M E N T   ' B u t t o n P r e s s '  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IGattente_de_l_evenement_ButtonPress()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(IFNE(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
          Bblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
          Tant(IFOU(I3ET(IFEQ(getbutton(LEFTMOUSE),FALSE)
                        ,IFEQ(getbutton(MIDDLEMOUSE),FALSE)
                        ,IFEQ(getbutton(RIGHTMOUSE),FALSE)
                         )
                   ,IFOU(IFEXff(getvaluator(MOUSEX),ASD1(position_coin_bas_gauche,x),ASD1(position_coin_haut_droite,x))
                        ,IFEXff(getvaluator(MOUSEY),ASD1(position_coin_bas_gauche,y),ASD1(position_coin_haut_droite,y))
                         )
                    )
               )
                                        /* Attente tant qu'aucun des trois boutons de la souris n'est presse. On notera que cet      */
                                        /* evenement est baptise 'ButtonPress' par analogie avec 'X-Window'... Toujours suite a      */
                                        /* l'analogie, il faut que cette action ait lieu alors que le curseur de la souris se situe  */
                                        /* dans la fenetre ouverte...                                                                */
                                        /*                                                                                           */
                                        /* On notera qu'il y a une petite anomalie dont je ne suis pas responsable. En effet, il     */
                                        /* est impossible de savoir si le curseur de la souris {MOUSEX,MOUSEY} est reellement dans   */
                                        /* une partie visible de la fenetre (on sait qu'il est dans la fenetre, mais cette partie    */
                                        /* de la fenetre peut etre cachee par une autre...). Il n'existe pas de fonctions qui        */
                                        /* permettent de savoir l'identite de la fenetre dans lequel se trouve a chaque instant      */
                                        /* le curseur de la souris (ce que l'on pourrait comparer a 'identificateur_de_la_fenetre'). */
                                        /* Une solution batarde pourrait etre de modifier le 'Tant(IFOU(...))' en :                  */
                                        /*                                                                                           */
                                        /*                  Tant(I3OU(I3ET(...)                                                      */
                                        /*                           ,IFOU(...)                                                      */
                                        /*                           ,IFET(IFNE(windepth(identificateur_de_la_fenetre),UN)           */
                                        /*                                ,IFNE(windepth(identificateur_de_la_fenetre),DEUX)         */
                                        /*                                 )                                                         */
                                        /*                            )                                                              */
                                        /*                       )                                                                   */
                                        /*                       Bblock                                                              */
                                        /*                       (...)                                                               */
                                        /*                       Eblock                                                              */
                                        /*                  ETan                                                                     */
                                        /*                                                                                           */
                                        /* car en effet, l'experience montre que 'windepth(...)' renvoie 'UN' apres 'winopen(...)'   */
                                        /* et 'DEUX' apres qu'une fenetre ait ete rapatriee au premier plan. Ainsi l'evenement       */
                                        /* 'ButtonPress' ne serait activable que pour une fenetre au premier plan. Malheureusement,  */
                                        /* le manuel de 'windepth(...)' laisse entendre que la valeur renvoyee ne peut pas etre      */
                                        /* toujours interpretee de facon aussi simpliste...                                          */
               Bblock
               BLOC(VIDE;);
               Eblock
          ETan
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL(BLOC(CALS(IXattente_de_l_evenement_ButtonPress());)
                                                   ,BLOC(VIDE;)
                                                    );
                                        /* Et on attend de nouveau un petit peu, jusqu'a ce que l'on appuie sur l'un des trois       */
                                        /* boutons de la souris...                                                                   */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fenetre n'est pas ouverte");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F E R M E T U R E   D ' U N E   F E N E T R E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#        define     G_RESTAURATION_DU_blanktime                                                                                         \
                              GRO10(SOIXANTE)                                                                                           \
                                        /* Duree en secondes avant l'extinction de l'ecran...                                        */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

DEFV(Common,DEFV(FonctionI,IGclose()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

     /*..............................................................................................................................*/
     Test(IFNE(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
          Bblock
          Choi(mode_de_fonctionnement)
               Bblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
               Ca1e(MODE_BASSE_DEFINITION_PAL)
                    Bblock
                    Test(EST_VRAI(la_connexion_video_pour_une_image_a_pu_etre_etablie))
                         Bblock
                         Test(EST_VRAI(il_y_a_le_transfert_d_une_image_en_cours))
                              Bblock
                              CALS(VLPUTFREE(identite_du_serveur_video,buffer_des_images));
                                        /* Pour faire "pendant" au 'VLGETNEXTVALID(...)' qui a precede...                            */
                              Test(PAS_D_ERREUR(VLENDTRANSFER(identite_du_serveur_video,chemin_emetteur_recepteur)))
                                        /* Lorsqu'il y a un transfert en cours, on le termine...                                     */
                                   Bblock
                                   Eblock
                              ATes
                                   Bblock
                                   PRINT_ERREUR("un transfert en cours ne peut etre interrompu");
                                   Eblock
                              ETes

                              DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE);
                                        /* S'est-il produit des defauts pendant le transfert precedent ?                             */

                              EGAL(il_y_a_le_transfert_d_une_image_en_cours,FAUX);
                                        /* Et on memorise que c'est fini, meme si 'VLENDTRANSFER(...)' a echoue ; sinon, que faire   */
                                        /* d'autre ?                                                                                 */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         CALS(VLDEREGISTERBUFFER(identite_du_serveur_video
                                                ,chemin_emetteur_recepteur
                                                ,identite_du_noeud_emetteur
                                                ,buffer_des_images
                                                 )
                              );
                                        /* Et enfin, desenregistrement des buffers...                                                */
                         CALS(VLDESTROYBUFFER(identite_du_serveur_video
                                             ,buffer_des_images
                                              )
                              );

                                        /* Puis destruction de ces memes buffers...                                                  */

                         Test(IL_FAUT(SGI_____visualiser_le_contenu_de_l_ecran_de_la_station_de_travail))
                              Bblock
                              DEFV(Logical,INIT(une_erreur_forcant_l_iteration_a_ete_rencontree
                                               ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                )
                                   );
                                        /* ATTENTION, cette definition n'est la que pour permettre une compilation correcte des      */
                                        /* procedures 'PARAMETRAGE_NOEUD_?(...)', mais ne sert a rien d'autre...                     */

                              PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                 ,intVal
                                                 ,identite_du_noeud_emetteur
                                                 ,VL_BLEND_A
                                                 ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                 ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                  );
                              PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                 ,intVal
                                                 ,VL_BLDFCN_ZERO
                                                 ,VL_BLEND_A_FCN
                                                 ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                 ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                  );

                              PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                 ,intVal
                                                 ,identite_du_noeud_emetteur
                                                 ,VL_BLEND_B
                                                 ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                 ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                  );
                              PARAMETRAGE_NOEUD_1(identite_du_noeud_mixage
                                                 ,intVal
                                                 ,VL_BLDFCN_ZERO
                                                 ,VL_BLEND_B_FCN
                                                 ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                 ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                  );
                                        /* Deprogrammation du "mixage" afin d'eviter un probleme lors d'une utilisation ulterieure   */
                                        /* de l'entree video temps reel : celle-ci se retrouverait alors mixee avec le contenu de    */
                                        /* l'ecran de la station de travail... ATTENTION, ce n'est pas une erreur de trouver         */
                                        /* deux fois le noeud 'identite_du_noeud_emetteur' (sans 'identite_du_noeud_station') car    */
                                        /* autrement l'effet obtenu est desastreux (des melanges etranges apparaissent...).          */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         CALS(VLDESTROYPATH(identite_du_serveur_video
                                           ,chemin_emetteur_recepteur
                                            )
                              );
                                        /* Puis destruction du chemin entre l'emetteur et le recepteur. On notera que c'est l'appel  */
                                        /* a 'VLDESTROYPATH(...)' qui provoque la disparition de l'image sur la sortie video (et     */
                                        /* donc son retour au noir...) contrairement a l'anomalie constatee dans la fonction         */
                                        /* 'IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)' ou alors la video       */
                                        /* continue de sortir...                                                                     */
                                        /*                                                                                           */
                                        /* ATTENTION, on lira avec soin les commentaires relatifs a la mise en place de la           */
                                        /* connexion de repos par 'SGI_____Gentree_video_de_repos' que l'on ne peut malheureusement  */
                                        /* implementer ici aussi...                                                                  */

                         Test(PAS_D_ERREUR(VLCLOSEVIDEO(identite_du_serveur_video)))
                                        /* Enfin, fermeture de la connexion video...                                                 */
                              Bblock
                              Eblock
                         ATes
                              Bblock
                              PRINT_ERREUR("la fermeture de la connexion video est impossible (2)");
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    EGAL(la_connexion_video_pour_une_image_a_pu_etre_etablie,FAUX);
                                        /* A priori, on ne sait pas ce qui se passera la fois suivante...                            */
                    Eblock
               ECa1
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
               Ca1e(MODE_BASSE_DEFINITION_PAL)
                    Bblock

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                    CALS(blanktime(MUL2(G_RESTAURATION_DU_blanktime,getgdesc(GD_TIMERHZ))));
                                        /* Et ce afin de re-autoriser l'extinction de l'ecran...                                     */
                    CALS(setmonitor(HZ60));
                                        /* On repasse a priori en mode haute-definition...                                           */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#              message   "ATTENTION : l'option 'GENLOCK' n'est pas disponible avec la bibliotheque 'OpenGL' (3)."
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                    Eblock
               ECa1
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

               Ca1e(MODE_HAUTE_DEFINITION)
                    Bblock
                    Eblock
               ECa1

               Defo
                    Bblock
                    PRINT_ERREUR("un mode de fonctionnement n'est pas reconnu");
                    Eblock
               EDef
               Eblock
          ECho

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
          CALS(curson());
                                        /* Remise en place du curseur. On notera que celle-ci a lieu que le curseur ait ete elimine  */
                                        /* dans 'IGopen(...)' ou pas, et ce afin d'eviter un parametre supplementaire pour la        */
                                        /* fonction 'IGclose(...)'. ATTENTION, voir le commentaire ci-dessous relatif au deplacement */
                                        /* de cet appel...                                                                           */

          CALS(finish());
                                        /* Attente eventuelle de vidage du pipe-line graphique...                                    */
          CALS(gexit());
                                        /* Fermeture de la fenetre...                                                                */

                                        /* ATTENTION, afin de ne pas voir re-apparaitre le curseur juste avant la fermeture d'une    */
                                        /* fenetre, et ce quand il est indesirable, il serait preferable de le retablir ici, et      */
                                        /* donc apres la fermeture de la fenetre. Il faudrait donc placer ici :                      */
                                        /*                                                                                           */
                                        /*                  CALS(curson());                                                          */
                                        /*                                                                                           */
                                        /* Malheureusement, cela provoque un "core"...                                               */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL(BLOC(CALS(IXclose_pour_utiliser_OpenGL());)
                                                   ,BLOC(VIDE;)
                                                    );
                                        /* Fermeture de la fenetre...                                                                */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          EGAL(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE);
                                        /* Et sa memorisation...                                                                     */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fenetre n'est pas ouverte");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         undef     G_RESTAURATION_DU_blanktime
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I S P L A Y   G R A P H I Q U E   D ' U N E   I M A G E   " V R A I E S   C O U L E U R S "  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

                                        /* Ce pragma a ete deplace de 'v $xiidX/fonct$vv$FON IGdisplay_____imageA_courante' (la ou   */
                                        /* est definie cette image) jusqu'ici le 20040521130935 car, en effet, c'est lorsque ce      */
                                        /* module est necessaire ('v $xcc/cpp$Z SiliG_EXT') que l'on a besoin de cette image...      */
                                        /* Le 20040523111133 ce '#pragma' relatif a 'xcc__cpp_Z__liste_utiles' et concernant la      */
                                        /* definition 'IGdisplay_____imageA_courante' a pu etre remis a sa place et ce grace au      */
                                        /* dispositif 'v $xcc/cpp$Z 20040522102819'.                                                 */

#    if        (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )
#         define    FACTEUR_DE_ZOOM                                                                                                     \
                              INTE(facteur_de_zoom)                                                                                     \
                                        /* Facteur de zoom qui doit etre un nombre entier...                                         */
#    Aif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )
#         define    FACTEUR_DE_ZOOM                                                                                                     \
                              NEUT(facteur_de_zoom)                                                                                     \
                                        /* Facteur de zoom.                                                                          */
#    Eif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )

#    define    G_TRANSLATION_HORIZONTALE_DE_L_IMAGE                                                                                     \
                         COND(IL_FAUT(centrer_l_image_dans_la_fenetre)                                                                  \
                             ,MOYS(COND(IFEQ(mode_de_fonctionnement,MODE_HAUTE_DEFINITION)                                              \
                                       ,dimXG_d_une_fenetre_HAUTE_DEFINITION                                                            \
                                       ,COND(IFEQ(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)                                     \
                                            ,dimXPal                                                                                    \
                                            ,dimXG_d_une_fenetre_HAUTE_DEFINITION                                                       \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COND(IFEQ(mode_de_fonctionnement,MODE_HAUTE_DEFINITION)                                              \
                                       ,INTE(MUL2(facteur_de_zoom_effectif,FLOT(dimX)))                                                 \
                                       ,COND(IFEQ(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)                                     \
                                            ,dimX                                                                                       \
                                            ,dimX                                                                                       \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,_lDENORMALISE_OXG(ASI1(translation_de_l_image_dans_la_fenetre,dx))                                        \
                              )                                                                                                         \
                                        /* Translation horizontale de l'image dans le plan de travail. ATTENTION : on notera que     */ \
                                        /* cette definition, bien que referencant le mode 'MODE_BASSE_DEFINITION_PAL', ne depend     */ \
                                        /* pas de '__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS' afin de       */ \
                                        /* simplifier les choses...                                                                  */
#    define    G_TRANSLATION_VERTICALE_DE_L_IMAGE                                                                                       \
                         COND(IL_FAUT(centrer_l_image_dans_la_fenetre)                                                                  \
                             ,MOYS(COND(IFEQ(mode_de_fonctionnement,MODE_HAUTE_DEFINITION)                                              \
                                       ,dimYG_d_une_fenetre_HAUTE_DEFINITION                                                            \
                                       ,COND(IFEQ(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)                                     \
                                            ,dimYPal                                                                                    \
                                            ,dimYG_d_une_fenetre_HAUTE_DEFINITION                                                       \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,COND(IFEQ(mode_de_fonctionnement,MODE_HAUTE_DEFINITION)                                              \
                                       ,INTE(MUL2(facteur_de_zoom_effectif,FLOT(dimY)))                                                 \
                                       ,COND(IFEQ(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)                                     \
                                            ,dimY                                                                                       \
                                            ,dimY                                                                                       \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,_lDENORMALISE_OYG(ASI1(translation_de_l_image_dans_la_fenetre,dy))                                        \
                              )                                                                                                         \
                                        /* Translation verticale de l'image dans le plan de travail. ATTENTION : on notera que       */ \
                                        /* cette definition, bien que referencant le mode 'MODE_BASSE_DEFINITION_PAL', ne depend     */ \
                                        /* pas de '__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS' afin de       */ \
                                        /* simplifier les choses...                                                                  */

#    define    CORRELATION_DES_PARITES_DE_LIGNES(Ymax_fenetre,Ymax_image_dans_la_fenetre)                                               \
                         COND(MEME_PARITE(Ymax_fenetre,Ymax_image_dans_la_fenetre)                                                      \
                             ,ZERO                                                                                                      \
                             ,UN                                                                                                        \
                              )                                                                                                         \
                                        /* Procedure destinee a "aligner" les parites des lignes dans une fenetre et dans l'image    */ \
                                        /* contenue dans cette fenetre (en n'oubliant pas que l'axe des 'Y' en video descend au      */ \
                                        /* lieu de monter...). Cet "alignement" est rendu necessaire par la possibilite de generer   */ \
                                        /* des images stereoscopiques multiplexant les images '$DROITE' et '$GAUCHE' sur les trames  */ \
                                        /* paires et impaires. Il faut donc alors que les parites des lignes de l'image soient les   */ \
                                        /* memes que celles de la fenetre video pour voir le bon relief...                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, cela pourrait etre utilise pour entrelacer les images d'une animation afin     */ \
                                        /* de faire que la frequence des images soit 50 Hz et non pas 25 Hz. Malheureusement, cela   */ \
                                        /* n'est pas tres utile car, en effet, ne favoriserait ni les ralentis ni les arrets sur     */ \
                                        /* image car alors les images seraient "tremblottantes"...                                   */

#    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    GL_CURRENT_RASTER_DEBUT_POSITION                                                                                    \
                              INDEX0
Denumer05(INIS(GL_CURRENT_RASTER_X_POSITION,GL_CURRENT_RASTER_DEBUT_POSITION)
         ,GL_CURRENT_RASTER_Y_POSITION
         ,GL_CURRENT_RASTER_Z_POSITION
         ,GL_CURRENT_RASTER_W_POSITION
         ,GL_CURRENT_RASTER_FIN_POSITION
         ,format_de_la_position_raster_courante
          );
                                        /* Format des informations renvoyees par 'glGetIntegerv(GL_CURRENT_RASTER_POSITION,...)'.    */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         define    ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO(niveau)                                                                  \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(image_courante                                                                                 \
                                        ,index_dans_l_image_courante                                                                    \
                                        ,TAILLE_REELLE_DES_IMAGES_EN_OCTETS                                                             \
                                         )                                                                                              \
                                  ,niveau                                                                                               \
                                   );                                                                                                   \
                                        /* Transfert d'un niveau sous forme d'un octet. On notera la regle de trois, car en effet,   */ \
                                        /* il semblerait que 'taille_reelle_des_images_en_octets' donne une taille qui considere     */ \
                                        /* qu'un point est code sur 4 octets, alors que l'experience montre qu'en realite dans le    */ \
                                        /* cas de cette option, il s'agit en fait de 3 octets consecutifs...                         */ \
                              INCR(index_dans_l_image_courante,I);                                                                      \
                                        /* Et progression de l'index courant...                                                      */ \
                              Eblock                                                                                                    \
                                        /* Envoi d'un niveau video (ROUGE, VERTE ou BLEUE).                                          */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

DEFV(Common,DEFV(FonctionI,IGdisplay(imageA
                                    ,facteur_de_zoom
                                    ,centrer_l_image_dans_la_fenetre
                                    ,ARGUMENT_POINTERs(translation_de_l_image_dans_la_fenetre)
                                     )
                 )
     )
DEFV(Argument,DEFV(imageU,imageA));
                                        /* Image Argument que l'on veut visualiser sur le bit-map couleur.                           */
DEFV(Argument,DEFV(Float,facteur_de_zoom));
                                        /* Facteur de zoom horizontal et vertical de l'image...                                      */
DEFV(Argument,DEFV(Logical,centrer_l_image_dans_la_fenetre));
                                        /* Indicateur precisant s'il faut un centrage automatique de l'image dans la fenetre         */
                                        /* ('VRAI') ou si la translation est definie en tant que l'argument suivant ('FAUX').        */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_de_l_image_dans_la_fenetre)));
                                        /* Translation explicite de l'image dans la fenetre lorsque le centrage automatique n'est    */
                                        /* pas demande ('centrer_l_image_dans_la_fenetre'='FAUX'). Dans le cas ou le centrage        */
                                        /* automatique est demande, cet argument (qui doit etre present a cause de la validation     */
                                        /* du nombre des arguments) n'est pas utilise...                                             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(Float,INIT(facteur_de_zoom_effectif,RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom));
                                        /* Facteur de zoom horizontal et vertical de l'image effectivement utilise...                */
     DEFV(G_Screencoord,INIT(abscisse_en_bas_a_gauche,ADD2(Xmin,G_TRANSLATION_HORIZONTALE_DE_L_IMAGE)));
     DEFV(G_Screencoord,INIT(ordonnee_en_bas_a_gauche,ADD2(Ymin,G_TRANSLATION_VERTICALE_DE_L_IMAGE)));
     DEFV(G_Screencoord,INIT(abscisse_en_haut_a_droite,ADD2(Xmax,G_TRANSLATION_HORIZONTALE_DE_L_IMAGE)));
     DEFV(G_Screencoord,INIT(ordonnee_en_haut_a_droite,ADD2(Ymax,G_TRANSLATION_VERTICALE_DE_L_IMAGE)));
                                        /* Definition de l'emplacement de l'image. Mais ATTENTION : cette initialisation est         */
                                        /* eventuellement mauvaise, car en effet 'facteur_de_zoom_effectif' n'est pas encore         */
                                        /* connu...                                                                                  */
     DEFV(Int,INIT(translation_d_alignement_des_parites_des_lignes,UNDEF));
                                        /* Afin de permettre une visualisation stereoscopique par multiplexage "trame paire" et      */
                                        /* "trame impaire"...                                                                        */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
     DEFV(G_Screencoord,DTb1(position_raster_courante,NBRE(GL_CURRENT_RASTER_DEBUT_POSITION,PRED(GL_CURRENT_RASTER_FIN_POSITION))));
                                        /* Informations renvoyees par 'glGetIntegerv(GL_CURRENT_RASTER_POSITION,...)'.               */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
     DEFV(Int,INIT(nombre_de_descripteurs_de_transfert_d_images,UN));
                                        /* Nombre de transferts d'images a effectuer...                                              */
     DEFV(G_VLTransferDescriptor,descripteurs_de_transfert_d_images);
                                        /* Descripteurs des transferts d'images...                                                   */
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

     /*..............................................................................................................................*/
     Test(IFNE(identificateur_de_la_fenetre,FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE))
          Bblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         if        (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                       \
                     )
          Test(IFNE(facteur_de_zoom,FLOT(FACTEUR_DE_ZOOM)))
               Bblock
               PRINT_ATTENTION("le facteur de zoom doit etre entier");
               CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
               CAL1(Prer1(" rapport de zoom utilise = %d\n",FACTEUR_DE_ZOOM));
               Eblock
          ATes
               Bblock
               Eblock
          ETes
#         Aif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                       \
                     )
#         Eif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                       \
                     )

          Choi(mode_de_fonctionnement)
               Bblock

#         if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                    ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )
               Ca1e(MODE_BASSE_DEFINITION_PAL)
                    Bblock
                    Test(IFNE(facteur_de_zoom,RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom))
                         Bblock
                         PRINT_ATTENTION("le facteur de zoom est ignore en 'PAL', la valeur standard est forcee");
                         CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
                         CAL1(Prer1(" rapport de zoom utilise = %g\n",RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ECa1
#         Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                    ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )
#         Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                    \
                    ||        (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                             \
                     )

               Ca1e(MODE_HAUTE_DEFINITION)
                    Bblock

#         if        (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom))                                       \
                     )
                    Test(IFGT(facteur_de_zoom,VALEUR_MAXIMALE_DU_RAPPORT_DE_ZOOM_DE_rectzoom))
                         Bblock
                         PRINT_ATTENTION("le rapport de zoom est trop grand, la valeur standard est conservee");
                         CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
                         CAL1(Prer1(" rapport de zoom maximal = %g\n",VALEUR_MAXIMALE_DU_RAPPORT_DE_ZOOM_DE_rectzoom));
                         Eblock
                    ATes
                         Bblock
                         Test(IZLE(facteur_de_zoom))
                              Bblock
                              PRINT_ATTENTION("le rapport de zoom ne peut etre negatif ou nul, la valeur standard est conservee");
                              CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
                              CAL1(Prer1(" rapport de zoom utilise = %g\n",RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom));
                              Eblock
                         ATes
                              Bblock
                              EGAL(facteur_de_zoom_effectif,FACTEUR_DE_ZOOM);
                                        /* Mise en place du facteur de zoom effectif (c'est-a-dire inchange au cas ou l'argument     */
                                        /* serait errone).                                                                           */
                              Eblock
                         ETes
                         Eblock
                    ETes
#         Aif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom))                                       \
                     )
                    Test(IZLE(facteur_de_zoom))
                         Bblock
                         PRINT_ATTENTION("le rapport de zoom ne peut etre negatif ou nul, la valeur standard est conservee");
                         CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
                         CAL1(Prer1(" rapport de zoom utilise = %g\n",RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom));
                         Eblock
                    ATes
                         Bblock
                         EGAL(facteur_de_zoom_effectif,FACTEUR_DE_ZOOM);
                                        /* Mise en place du facteur de zoom effectif (c'est-a-dire inchange au cas ou l'argument     */
                                        /* serait errone).                                                                           */
                         Eblock
                    ETes
#         Eif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_TROP_GRAND_DE_rectzoom))                                       \
                     )

                    Eblock
               ECa1

               Defo
                    Bblock
                    PRINT_ERREUR("un mode de fonctionnement n'est pas reconnu");
                    Eblock
               EDef
               Eblock
          ECho

          Test(IFOU(IFGT(INTE(MUL2(facteur_de_zoom_effectif,FLOT(dimX))),dimXG_d_une_fenetre_HAUTE_DEFINITION)
                   ,IFGT(INTE(MUL2(facteur_de_zoom_effectif,FLOT(dimY))),dimYG_d_une_fenetre_HAUTE_DEFINITION)
                    )
               )
               Bblock
               PRINT_ATTENTION("l'image est trop grande par rapport a la fenetre ouverte, on force le zoom standard");
               CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
               CAL1(Prer1(" rapport de zoom utilise = %g\n",RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom));
                                        /* On notera que le test utilise 'facteur_de_zoom_effectif' mais que c'est 'facteur_de_zoom' */
                                        /* qui est edite, car seul ce dernier est connu a l'exterieur...                             */
                                        /*                                                                                           */
                                        /* On notera que ce cas peut se rencontrer, meme lorsque l'on ne l'attend pas. Ainsi, par    */
                                        /* exemple, faisons :                                                                        */
                                        /*                                                                                           */
                                        /*                  set       XmaxG=1269                                                     */
                                        /*                  set       YmaxG=1013                                                     */
                                        /*                                                                                           */
                                        /* ce qui donne une fenetre plein-ecran (avec juste la bordure de la fenetre...). Alors,     */
                                        /* pour les images de format "plus grand ou egal" a 'Std', seul le zoom de rapport egal      */
                                        /* a 1 est utilisable car en effet, on a dans ces conditions :                               */
                                        /*                                                                                           */
                                        /*                  2*512  >  (1013-0) + 1                                                   */
                                        /*                                                                                           */
                                        /*                    /|\        /\                                                          */
                                        /*                     |         ||                                                          */
                                        /*                     |         ||                                                          */
                                        /*                                                                                           */
                                        /*                   =dimY     =dimYG                                                        */
                                        /*                                                                                           */
                                        /* et l'image agrandie ne tient pas verticalement dans la fenetre...                         */

               EGAL(facteur_de_zoom_effectif,RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom);
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CALS(rectzoom(facteur_de_zoom_effectif,facteur_de_zoom_effectif));
                                        /* Mise en place du facteur de zoom effectif (c'est-a-dire inchange au cas ou l'argument     */
                                        /* serait errone).                                                                           */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          EGAL(facteur_de_zoom_effectif,RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom);
                                        /* A priori. On pourrait supprimer completement le rapport de zoom, mais il est en fait      */
                                        /* utilise a differents endroits ; le plus simple est donc de le rendre neutre...            */
          Test(IFNE(facteur_de_zoom,facteur_de_zoom_effectif))
               Bblock
               PRINT_ATTENTION("avec 'OpenGl' il n'y a pas de zoom");
               CAL1(Prer1(" rapport de zoom demande = %g\n",facteur_de_zoom));
               CAL1(Prer1(" rapport de zoom utilise = %f\n",facteur_de_zoom_effectif));
               Eblock
          ATes
               Bblock
               Eblock
          ETes
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

          EGAL(abscisse_en_bas_a_gauche,ADD2(Xmin,G_TRANSLATION_HORIZONTALE_DE_L_IMAGE));
          EGAL(ordonnee_en_bas_a_gauche,ADD2(Ymin,G_TRANSLATION_VERTICALE_DE_L_IMAGE));
          EGAL(abscisse_en_haut_a_droite,ADD2(Xmax,G_TRANSLATION_HORIZONTALE_DE_L_IMAGE));
          EGAL(ordonnee_en_haut_a_droite,ADD2(Ymax,G_TRANSLATION_VERTICALE_DE_L_IMAGE));
                                        /* Definition de l'emplacement de l'image lorsque 'facteur_de_zoom_effectif' est connu...    */
          EGAL(translation_d_alignement_des_parites_des_lignes
              ,CORRELATION_DES_PARITES_DE_LIGNES(ADD2(SGI_____YminG_d_une_fenetre_HAUTE_DEFINITION
                                                     ,SOUS(ASD1(position_coin_haut_droite,y),ASD1(position_coin_bas_gauche,y))
                                                      )
                                                ,ordonnee_en_haut_a_droite
                                                 )
               );
          INCR(ordonnee_en_bas_a_gauche,translation_d_alignement_des_parites_des_lignes);
          INCR(ordonnee_en_haut_a_droite,translation_d_alignement_des_parites_des_lignes);
                                        /* Alignement des parites des lignes de l'image sur celles de la fenetre...                  */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
                                        /* Deplacement en {X,Y} permettant de definir le coin en haut et a gauche d'une image par    */
                                        /* rapport au coin en haut et a gauche d'une fenetre. Ceci a ete introduit le 20000324094524 */
                                        /* afin de permettre d'editer correctement les coordonnees d'un point d'une image visualisee */
                                        /* dans une fenetre plus grande. En fait le code :                                           */
                                        /*                                                                                           */
                                        /*     EGAL(fenetre_X_Window_____deplacement_horizontal_en_haut_a_gauche_d_une_image         */
                                        /*         ,CGXR(abscisse_en_bas_a_gauche)                                                   */
                                        /*          );                                                                               */
                                        /*     EGAL(fenetre_X_Window_____deplacement_vertical_en_haut_a_gauche_d_une_image           */
                                        /*         ,LONGUEUR(SOUS(ASD1(dimension_non_normalisee_de_la_fenetre,dy)                    */
                                        /*                       ,CGYR(ordonnee_en_haut_a_droite))                                   */
                                        /*                        )                                                                  */
                                        /*          );                                                                               */
                                        /*                                                                                           */
                                        /* a ete supprime le 20000327093959 ('v $xiidX/fonct$vv$FON 20000327093959').                */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
          CALS(lrectwrite(abscisse_en_bas_a_gauche,ordonnee_en_bas_a_gauche
                         ,abscisse_en_haut_a_droite,ordonnee_en_haut_a_droite
                         ,imageA
                          )
               );
                                        /* Display de l'image en "vraies couleurs" au milieu du plan de travail...                   */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
          CALS(glRasterPos2i(abscisse_en_bas_a_gauche,ordonnee_en_bas_a_gauche));
                                        /* Positionnement de l'image dans la fenetre...                                              */

          CALS(glGetIntegerv(GL_CURRENT_RASTER_POSITION,position_raster_courante));
                                        /* Regardons le positionnement reellement effectue...                                        */

          Test(IFNE(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL))
               Bblock
               Test(IFOU(IFNE(ITb1(position_raster_courante,INDX(GL_CURRENT_RASTER_X_POSITION,GL_CURRENT_RASTER_DEBUT_POSITION))
                             ,abscisse_en_bas_a_gauche
                              )
                        ,IFNE(ITb1(position_raster_courante,INDX(GL_CURRENT_RASTER_Y_POSITION,GL_CURRENT_RASTER_DEBUT_POSITION))
                             ,ordonnee_en_bas_a_gauche
                              )
                         )
                    )
                    Bblock
                    PRINT_ERREUR("la position de l'image raster est differente de ce qui a ete demande");
                    CAL1(Prer2(" position demandee = (%d,%d)\n"
                              ,abscisse_en_bas_a_gauche
                              ,ordonnee_en_bas_a_gauche
                               )
                         );
                    CAL1(Prer2(" position obtenue  = (%d,%d)\n"
                              ,ITb1(position_raster_courante,INDX(GL_CURRENT_RASTER_X_POSITION,GL_CURRENT_RASTER_DEBUT_POSITION))
                              ,ITb1(position_raster_courante,INDX(GL_CURRENT_RASTER_Y_POSITION,GL_CURRENT_RASTER_DEBUT_POSITION))
                               )
                         );
                                        /* Notons que le trace aura quand meme lieu...                                               */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
                                        /* En mode 'MODE_BASSE_DEFINITION_PAL', le test n'est pas fait, car, en effet, il est        */
                                        /* apparemment normal que cette erreur apparaisse (voir 'v $xiidG/$Fnota').                  */
               Eblock
          ETes

          CALS(glDrawPixels(dimX,dimY
                           ,GL_RGBA
                           ,GL_UNSIGNED_BYTE
                           ,imageA
                            )
               );
          CALS(glFlush());
                                        /* Display de l'image en "vraies couleurs" au milieu du plan de travail. On notera           */
                                        /* l'usage imperatif de 'GL_RGBA' et non pas de 'GL_RGBA' afin de rester compatible          */
                                        /* avec le type 'imageU' de 'imageA'...                                                      */

          Test(IFET(EST_VRAI(IGdisplay_____on_peut_revisualiser_l_imageA_courante)
                   ,IFNE(mode_de_fonctionnement,MODE_BASSE_DEFINITION_PAL)
                    )
               )
                                        /* Le test de 'MODE_BASSE_DEFINITION_PAL' a ete rajoute le 1996091100 car il est apparu      */
                                        /* que la possibilite de reaffichage des images sur l'ecran de la station de travail         */
                                        /* interferait dangereusement avec la fonction 'VLBEGINTRANSFER(...)' qui renvoie alors      */
                                        /* un code d'erreur, meme si le transfert a l'air de bien se passer. En effet, il doit       */
                                        /* alors y avoir une rerentree dans 'IGdisplay(...)'. D'ou cette interdiction...             */
               Bblock
               Test(EST_FAUX(IGdisplay_____imageA_courante_visualisable))
                                        /* Ce qui suit ne doit etre fait qu'apres le "premier" appel a 'IGdisplay(...)'.             */
                    Bblock
                    CALS(IUmove(IGdisplay_____imageA_courante,imageA));
                                        /* Et sauvegarde systematique de la derniere image affichee 'imageA'. On notera que l'on     */
                                        /* sauvegarde l'image elle-meme (et non pas son adresse) car, en effet, entre l'instant      */
                                        /* de cette sauvegarde et son eventuelle utilisation, l'image (en memoire) peut avoir        */
                                        /* changee, voire avoir disparue (son espace memoire ayant ete desalloue par exemple...).    */
                    EGAL(IGdisplay_____imageA_courante_visualisable,VRAI);
                                        /* A partir de maintenant, 'imageA' est "revisualisable", mais a condition d'aller ensuite   */
                                        /* dans une fonction du type 'IGattente_de_l_evenement_ButtonPress(...)'.                    */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               EGAL(IGdisplay_____imageA_courante_visualisable,FAUX);
                                        /* On ne sait jamais...                                                                      */
               Eblock
          ETes

#         undef     GL_CURRENT_RASTER_DEBUT_POSITION                                                                                    \
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
          Choi(mode_de_fonctionnement)
               Bblock
               Ca1e(MODE_BASSE_DEFINITION_PAL)
                    Bblock
                    Test(EST_VRAI(la_connexion_video_pour_une_image_a_pu_etre_etablie))
                         Bblock
                         DEFV(Int,INIT(index_dans_l_image_courante,INDEX0));
                                        /* Definition de l'index sequentiel de rangement dans l'image a sortir en video...           */

                         Test(EST_VRAI(il_y_a_le_transfert_d_une_image_en_cours))
                              Bblock
                              CALS(VLPUTFREE(identite_du_serveur_video,buffer_des_images));
                                        /* Pour faire "pendant" au 'VLGETNEXTVALID(...)' qui a precede...                            */
                              Test(PAS_D_ERREUR(VLENDTRANSFER(identite_du_serveur_video,chemin_emetteur_recepteur)))
                                        /* Lorsqu'il y a un transfert en cours, on le termine avant de commencer le suivant...       */
                                   Bblock
                                   Eblock
                              ATes
                                   Bblock
                                   PRINT_ERREUR("un transfert en cours ne peut etre interrompu");
                                   Eblock
                              ETes
                              EGAL(il_y_a_le_transfert_d_une_image_en_cours,FAUX);
                                        /* Et on memorise que c'est fini, meme si 'VLENDTRANSFER(...)' a echoue ; sinon, que faire   */
                                        /* d'autre ?                                                                                 */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         begin_colonneQ(DoDe,MIN2(Ymin,YminPal),MAX2(Ymax,YmaxPal),pasY)
                              Bblock
                              begin_ligneQ(DoIn,MIN2(Xmin,XminPal),MAX2(Xmax,XmaxPal),pasX)
                                   Bblock
                                   DEFV(deltaI_2D,translation_de_l_image_par_rapport_a_la_fenetre);
                                        /* Definition de la translation de l'image Argument par rapport a la fenetre video.          */
                                   DEFV(pointI_2D,point_courant_de_l_image);
                                        /* Definition du point courant de l'image Argument.                                          */
                                   DEFV(genere_LPositive,INIT(point_courant,UNDEF));
                                        /* Point courant {X,Y} de l'image Argument.                                                  */

                                   INITIALISATION_ACCROISSEMENT_2D(translation_de_l_image_par_rapport_a_la_fenetre
                                                                  ,MOYS(dimX,dimXPal)
                                                                  ,MOYS(dimY,dimYPal)
                                                                   );
                                        /* Calcul de la translation de l'image Argument par rapport a la fenetre video.              */
                                   EGAL(translation_d_alignement_des_parites_des_lignes
                                       ,CORRELATION_DES_PARITES_DE_LIGNES(YmaxPal
                                                                         ,ADD2(Ymax
                                                                              ,ASD1(translation_de_l_image_par_rapport_a_la_fenetre
                                                                                   ,dy
                                                                                    )
                                                                               )
                                                                          )
                                        );
                                        /* Alignement des parites des lignes de l'image sur celles de la fenetre...                  */

                                   INITIALISATION_POINT_2D(point_courant_de_l_image
                                                          ,ADD2(X
                                                               ,ASD1(translation_de_l_image_par_rapport_a_la_fenetre,dx)
                                                                )
                                                          ,ADD3(Y
                                                               ,ASD1(translation_de_l_image_par_rapport_a_la_fenetre,dy)
                                                               ,translation_d_alignement_des_parites_des_lignes
                                                                )
                                                           );
                                        /* Calcul du point courant de l'image Argument.                                              */

                                   Test(TEST_DANS_L_IMAGE(ASD1(point_courant_de_l_image,x),ASD1(point_courant_de_l_image,y)))
                                        Bblock
                                        EGAL(point_courant
                                            ,loadU_point(imageA,ASD1(point_courant_de_l_image,x),ASD1(point_courant_de_l_image,y))
                                             );
                                        /* Lorsque le point courant {X,Y} est dans l'image Argument, on le recupere...               */
                                        Eblock
                                   ATes
                                        Bblock

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                                        EGAL(point_courant,MULTIPLEXAGE_BVR_888(NOIR,NOIR,NOIR));
                                        /* Lorsque le point courant {X,Y} n'est pas dans l'image Argument, on genere du NOIR...      */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
                                        EGAL(point_courant,MULTIPLEXAGE_RVBg_888(NOIR,NOIR,NOIR));
                                        /* Lorsque le point courant {X,Y} n'est pas dans l'image Argument, on genere du NOIR...      */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

                                        Eblock
                                   ETes

                                   Test(IFET(IFINff(X,XminPal,XmaxPal)
                                            ,IFINff(Y,YminPal,YmaxPal)
                                             )
                                        )
                                        Bblock

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
                                        DEFV(genere_p,INIT(niveau_ROUGE,DEMULTIPLEXAGE_BVR_888_ROUGE(point_courant)));
                                        DEFV(genere_p,INIT(niveau_VERTE,DEMULTIPLEXAGE_BVR_888_VERTE(point_courant)));
                                        DEFV(genere_p,INIT(niveau_BLEUE,DEMULTIPLEXAGE_BVR_888_BLEUE(point_courant)));
                                        /* Definition des trois composantes {R,V,B}...                                               */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#         ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
                                        DEFV(genere_p,INIT(niveau_ROUGE,DEMULTIPLEXAGE_RVBg_888_ROUGE(point_courant)));
                                        DEFV(genere_p,INIT(niveau_VERTE,DEMULTIPLEXAGE_RVBg_888_VERTE(point_courant)));
                                        DEFV(genere_p,INIT(niveau_BLEUE,DEMULTIPLEXAGE_RVBg_888_BLEUE(point_courant)));
                                        /* Definition des trois composantes {R,V,B}...                                               */
#         Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                               \
                     )
                                        ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO(NOIR);
                                        /* Lorsqu'il faut quatre octets au lieu de trois, il faut inserer un 'NOIR' devant le        */
                                        /* triplet {B,V,R}...                                                                        */
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                               \
                     )
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_PACKING_RGB))                                                               \
                     )

                                        ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO(niveau_BLEUE);
                                        ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO(niveau_VERTE);
                                        ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO(niveau_ROUGE);
                                        /* Envoi des trois composantes chromatiques...                                               */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              end_ligneQ(EDoI)
                              Eblock
                         end_colonneQ(EDoD)

#         if        (nSYSTEM_RELEASE < 503000000)
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
                         CALS(VLPUTVALID(identite_du_serveur_video
                                        ,buffer_des_images
                                         )
                              );
                                        /* Declaration de la validite du contenu du buffer...                                        */
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

                         EGAL(ASD1(descripteurs_de_transfert_d_images,mode),VL_TRANSFER_MODE_DISCRETE);
                         EGAL(ASD1(descripteurs_de_transfert_d_images,count),nombre_d_images_a_manipuler);
                         EGAL(ASD1(descripteurs_de_transfert_d_images,delay),ZERO);

#         if        (nSYSTEM_RELEASE < 503000000)
                         EGAL(ASD1(descripteurs_de_transfert_d_images,trigger),VLDeviceEvent);
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
                         EGAL(ASD1(descripteurs_de_transfert_d_images,trigger),VLTriggerImmediate);
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

                         Test(PAS_D_ERREUR(VLBEGINTRANSFER(identite_du_serveur_video
                                                          ,chemin_emetteur_recepteur
                                                          ,nombre_de_descripteurs_de_transfert_d_images
                                                          ,ADRESSE(descripteurs_de_transfert_d_images)
                                                           )
                                           )
                              )
                                        /* Initialisation du transfert et transfert proprement dit...                                */
                              Bblock
                              EGAL(il_y_a_le_transfert_d_une_image_en_cours,VRAI);
                                        /* Et on memorise un transfert en cours...                                                   */
                              Eblock
                         ATes
                              Bblock
                              PRINT_ERREUR("un transfert n'a pu etre initialise et lance");
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ECa1

               Ca1e(MODE_HAUTE_DEFINITION)
                    Bblock
                    Eblock
               ECa1

               Defo
                    Bblock
                    PRINT_ERREUR("un mode de fonctionnement n'est pas reconnu");
                    Eblock
               EDef
               Eblock
          ECho
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fenetre n'est pas ouverte");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     ENVOI_D_UN_NIVEAU_VIDEO_A_LA_CARTE_GALILEO

#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

#    undef     CORRELATION_DES_PARITES_DE_LIGNES
#    undef     G_TRANSLATION_VERTICALE_DE_L_IMAGE
#    undef     G_TRANSLATION_HORIZONTALE_DE_L_IMAGE

#    if        (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )
#         undef     FACTEUR_DE_ZOOM
#    Aif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )
#         undef     FACTEUR_DE_ZOOM
#    Eif       (         (defined(BUG_SYSTEME_SG_GL_RAPPORT_DE_ZOOM_NON_ENTIER_DE_rectzoom))                                            \
                )

EFonctionI

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

BFonctionI

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
#                   define    SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO                                                    \
                                        NE_PAS_SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE                                     \
                                        /* Definition des possibilites de synchronisation externes lors d'une entree video...        */
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
#                   define    SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO                                                    \
                                        SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE                                                          \
                                        /* Definition des possibilites de synchronisation externes lors d'une entree video...        */
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )

#              define    VL_DEFAULT_SOURCE_ANALOG                                                                                       \
                                   ZERO
#              define    VL_DEFAULT_SOURCE_DIGITAL_1                                                                                    \
                                   UN
#              define    VL_DEFAULT_SOURCE_DIGITAL_2                                                                                    \
                                   DEUX
                                        /* Valeur qui semble manquer dans <vl/vl$h> et qui definissent la source par defaut de       */
                                        /* l'entree video ; ces informations ont ete obtenues grace a la commande :                  */
                                        /*                                                                                           */
                                        /*                  vlinfo    -l                                                             */
                                        /*                                                                                           */
                                        /* en examinant les lignes :                                                                 */
                                        /*                                                                                           */
                                        /*                  Name:               default_input                                        */
                                        /*                  Type:               0                                                    */
                                        /*                                                                                           */
                                        /*                                      |                                                    */
                                        /*                                      |                                                    */
                                        /*                                       -----------> 'VL_DEFAULT_SOURCE' (dans '<vl/vl.h>') */
                                        /*                                                                                           */
                                        /*                  analog              = 0                                                  */
                                        /*                  digital 1           = 1                                                  */
                                        /*                  digital 2           = 2                                                  */
                                        /*                                                                                           */

#              define    VL_MUXSWITCH_YsC_1                                                                                             \
                                   ZERO
#              define    VL_MUXSWITCH_YsC_2                                                                                             \
                                   UN
#              define    VL_MUXSWITCH_YsC_3                                                                                             \
                                   DEUX
#              define    VL_MUXSWITCH_COMPOSITE_1                                                                                       \
                                   TROIS
#              define    VL_MUXSWITCH_COMPOSITE_2                                                                                       \
                                   QUATRE
#              define    VL_MUXSWITCH_COMPOSITE_3                                                                                       \
                                   CINQ
#              define    VL_MUXSWITCH_Y_RmY_BmY_1                                                                                       \
                                   SIX
#              define    VL_MUXSWITCH_Y_RmY_BmY_2                                                                                       \
                                   SEPT
                                        /* Valeur qui semble manquer dans <vl/vl$h> et qui definissent les sources possibles pour    */
                                        /* l'entree video ; ces informations ont ete obtenues grace a la commande :                  */
                                        /*                                                                                           */
                                        /*                  vlinfo    -l                                                             */
                                        /*                                                                                           */
                                        /* en examinant les lignes :                                                                 */
                                        /*                                                                                           */
                                        /*                  Name:               switch                                               */
                                        /*                  Type:               20                                                   */
                                        /*                                                                                           */
                                        /*                                      ||                                                   */
                                        /*                                      ||                                                   */
                                        /*                                       ===========> 'VL_MUXSWITCH' (dans '<vl/vl.h>')      */
                                        /*                                                                                           */
                                        /*                  Y/C (svideo) 1      = 0                                                  */
                                        /*                  Y/C (svideo) 2      = 1                                                  */
                                        /*                  Y/C (svideo) 3      = 2                                                  */
                                        /*                  composite 1         = 3                                                  */
                                        /*                  composite 2         = 4                                                  */
                                        /*                  composite 3         = 5                                                  */
                                        /*                  Y, R-Y, B-Y 1       = 6                                                  */
                                        /*                  Y, R-Y, B-Y 2       = 7                                                  */
                                        /*                                                                                           */
#              define    VL_MUXSWITCH_COMPOSITE                                                                                         \
                                   VL_MUXSWITCH_COMPOSITE_1
DEFV(Common,DEFV(Int,SINT(SGI_____Gentree_video_utilisee,VL_MUXSWITCH_COMPOSITE)));
                                        /* Definition de la source video utilisee...                                                 */

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
#                   define    VL_MUXSWITCH_COMPOSITE_DE_REPOS                                                                           \
                                        VL_MUXSWITCH_COMPOSITE_2                                                                        \
                                        /* Definition de la source video implicite utilisee pour faire le "repos" (c'est-a-dire,     */ \
                                        /* etat a mettre en place a la fin de l'entree video temps reel).                            */
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )

#              ifdef     BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL                 /* Common,DEFV(Fonction,) : BUG. */
DEFV(Common,DEFV(Int,SINT(SGI_____Gentree_video_de_repos,VL_MUXSWITCH_COMPOSITE_DE_REPOS)));
                                        /* Definition de la source video utilisee pour faire le "repos" (c'est-a-dire, etat a        */
                                        /* mettre en place a la fin de l'entree video temps reel) ; ceci a ete introduit, car        */
                                        /* dans 'IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)', malgre le         */
                                        /* 'VLDESTROYPATH(...)', on continue a voir sur les sorties composite 'Pal' (bien qu'avec    */
                                        /* du jitter) et 'RVB' la video entrante (voir les commentaires concernant l'utilisation     */
                                        /* de 'SGI_____Gentree_video_de_repos').                                                     */
#              Aifdef    BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL                 /* Common,DEFV(Fonction,) : BUG. */
#              Eifdef    BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL                 /* Common,DEFV(Fonction,) : BUG. */

#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02                      /* Common,DEFV(Fonction,) : en 'VERSION_02'...       */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              define    VL_TBCMODE                                                                                                     \
                                   VL_EV1_TBC_MODE                                                                                      \
                                        /* Valeur definie dans <vl/dev_ev1$h> et qui correspond au bouton "Synchronizer Mode"        */ \
                                        /* de la commande 'videopanel' ; il permet lorsqu'il est TRUE de stabiliser l'image...       */ \
                                        /* On notera enfin que :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  1163264039 = 0x45560027                                                  */ \
                                        /*                                                                                           */ \
                                        /* afin de permettre de lire les sorties de 'vlinfo    -l'.                                  */
#              define    VL_QUALITY                                                                                                     \
                                   VL_EV1_QUALITY                                                                                       \
                                        /* Valeur definie dans <vl/dev_ev1$h> et qui correspond au bouton "Lock to VTR"              */ \
                                        /* de la commande 'videopanel' ; il permet lorsqu'il est TRUE de stabiliser l'image...       */ \
                                        /* On notera enfin que :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  1163264023 = 0x45560017                                                  */ \
                                        /*                                                                                           */ \
                                        /* afin de permettre de lire les sorties de 'vlinfo    -l'.                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : le controle 'VL_QUALITY' est applique a 'identite_du_noeud_emetteur' lors     */ \
                                        /* 'IGdebut_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)'. Il pourrait etre     */ \
                                        /* utilise aussi lors de 'IGopen(...)' pour 'identite_du_noeud_recepteur'. Mais alors on     */ \
                                        /* peut constater parfois une degradation de la qualite lors des entrees qui suivent : des   */ \
                                        /* franges horizontales d'une vingtaine de pixels peuvent alors apparaitre a droite des      */ \
                                        /* images...                                                                                 */
#              define    VL_PREFILTER                                                                                                   \
                                   VL_EV1_PREFILTER
#              define    VL_FILTER                                                                                                      \
                                   VL_EV1_FILTER
                                        /* Valeurs definies dans <vl/dev_ev1$h> et qui sont necessaires a garantir la                */
                                        /* meilleure qualite possible d'image...                                                     */
                                        /* On notera enfin que :                                                                     */
                                        /*                                                                                           */
                                        /*                  1163264027 = 0x4556001b                                                  */
                                        /*                  1163264022 = 0x45560016                                                  */
                                        /*                                                                                           */
                                        /* afin de permettre de lire les sorties de 'vlinfo    -l'.                                  */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
#              define    PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_X                                                                         \
                                   NEUT(TRENTE_DEUX)
#              define    PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_Y                                                                         \
                                   NEUT(ZERO)
                                        /* Increment permettant de passer de la taille de la fenetre video a la taille de la         */
                                        /* fenetre 'X-Window' necessaire...                                                          */
#              define    DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_X                                                                    \
                                   NEUT(ZERO)
#              define    DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y                                                                    \
                                   NEUT(ZERO)
                                        /* Decalage du signal video dans la fenetre video...                                         */
#              define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X                                                                    \
                                   NEUT(ZERO)
#              define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y                                                                    \
                                   NEUT(UN)
                                        /* Decalage de la fenetre video dans la fenetre 'X-Window'...                                */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              define    PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_X                                                                         \
                                   NEUT(TRENTE_DEUX)
#              define    PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_Y                                                                         \
                                   NEGA(QUATRE)
                                        /* Increment permettant de passer de la taille de la fenetre video a la taille de la         */
                                        /* fenetre 'X-Window' necessaire.                                                            */
                                        /*                                                                                           */
                                        /* On notera le '-4' sans lequel un effet "Larsen" apparait en haut de la fenetre (sur 4     */
                                        /* lignes) ; en l'absence de ce decalage vertical, pour le faire disparaitre, il suffit      */
                                        /* que la fenetre "sous-jacente" depuis laquelle on lance la commande 'video' (par exemple)  */
                                        /* soit nettoyee par un 'clear'. Si besoin est (et par exemple a des fins demonstratives),   */
                                        /* cet effet peut etre "active" a l'aide d'une commande du type :                            */
                                        /*                                                                                           */
                                        /*                  video     d2y=100                                                        */
                                        /*                                                                                           */
                                        /* qui donne (dans ce cas) l'effet Larsen dans la partie superieure de la fenetre...         */
#              define    DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_X                                                                    \
                                   NEUT(ZERO)
#              define    DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y                                                                    \
                                   NEUT(ZERO)
                                        /* Decalage du signal video dans la fenetre video...                                         */

#              if        (nSYSTEM_RELEASE < 503000000)
#                   define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X                                                               \
                                        NEUT(DEUX)
#              Aif       (nSYSTEM_RELEASE < 503000000)
#              Eif       (nSYSTEM_RELEASE < 503000000)

#              if        (nSYSTEM_RELEASE >= 503000000)
#                   define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X                                                               \
                                        NEUT(ADD2(SEIZE,DEUX))
#              Aif       (nSYSTEM_RELEASE >= 503000000)
#              Eif       (nSYSTEM_RELEASE >= 503000000)

#              define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y                                                                    \
                                   NEUT(UN)
                                        /* Decalage de la fenetre video dans la fenetre 'X-Window'...                                */
                                        /*                                                                                           */
                                        /* On notera le '+1' associe au '-4' ci-dessus. De plus, il a ete utilise pendant            */
                                        /* longtemps :                                                                               */
                                        /*                                                                                           */
                                        /*                  #              define    DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X  \  */
                                        /*                                                     NEUT(QUATORZE)                        */
                                        /*                                                                                           */
                                        /* mais l'introduction de la fonction 'Iredimensionnement(...)', qui permet de generer       */
                                        /* des images "plein-ecran", a montre que cela decalait trop les images a droite...          */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

DEFV(Common,DEFV(Int,SINT(SGI_____fenetre_X_WINDOW_decalage_2_video_X,DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X)));
DEFV(Common,DEFV(Int,SINT(SGI_____fenetre_X_WINDOW_decalage_2_video_Y,DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y)));
                                        /* Decalage de la fenetre video dans la fenetre 'X-Window'...                                */

#         define    NUMERATEUR_1_DU_RAPPORT_DE_ZOOM                                                                                     \
                              UN
#         define    NUMERATEUR_2_DU_RAPPORT_DE_ZOOM                                                                                     \
                              DEUX
#         define    NUMERATEUR_4_DU_RAPPORT_DE_ZOOM                                                                                     \
                              QUATRE
                                        /* Definition des numerateurs possibles pour le rapport de zoom.                             */

#         define    DENOMINATEUR_1_DU_RAPPORT_DE_ZOOM                                                                                   \
                              UN
#         define    DENOMINATEUR_n_DU_RAPPORT_DE_ZOOM                                                                                   \
                              HUIT
                                        /* Definition de la "fourchette" des denominateurs possibles pour le rapport de zoom.        */

#         define    NUMERATEUR_DU_RAPPORT_DE_ZOOM                                                                                       \
                              NUMERATEUR_1_DU_RAPPORT_DE_ZOOM
#         define    DENOMINATEUR_DU_RAPPORT_DE_ZOOM                                                                                     \
                              DENOMINATEUR_1_DU_RAPPORT_DE_ZOOM
DEFV(Common,DEFV(Int,SINT(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_DU_RAPPORT_DE_ZOOM)));
DEFV(Common,DEFV(Int,SINT(SGI_____denominateur_du_rapport_de_zoom,DENOMINATEUR_DU_RAPPORT_DE_ZOOM)));
                                        /* Definition du rapport de zoom en tant que rapport :                                       */
                                        /*                                                                                           */
                                        /*                           numerateur                                                      */
                                        /*                  zoom = --------------                                                    */
                                        /*                          denominateur                                                     */
                                        /*                                                                                           */
                                        /* ceci ne pouvant s'appliquer qu'a 'identite_du_noeud_recepteur' qui est un noeud de type   */
                                        /* 'VL_SCREEN'...                                                                            */

#         define    MISE_A_L_ECHELLE_DES_DECALAGES_X_WINDOW(decalage)                                                                   \
                              INTE(MUL2(decalage                                                                                        \
                                       ,ADD2(FU                                                                                         \
                                            ,RACX(SOUS(EXP2(SOUS(DENOMINATEUR_n_DU_RAPPORT_DE_ZOOM                                      \
                                                                ,DENOMINATEUR_1_DU_RAPPORT_DE_ZOOM                                      \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                      ,EXP2(SOUS(SGI_____denominateur_du_rapport_de_zoom                                \
                                                                ,DENOMINATEUR_n_DU_RAPPORT_DE_ZOOM                                      \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                                        /* Fonction de mise a l'echelle des decalages 'X-Window' en fonction du rapport courant      */ \
                                        /* de zoom. Cette formule est tout a fait heuristique et son fonctionnement n'est garanti    */ \
                                        /* que pour les reductions ; c'est la raison pour laquelle on interdit dorenavant les zooms  */ \
                                        /* de rapports superieurs a 1 (d'ailleurs, ils etaient de tres mauvaise qualite...).         */

DEFV(Common,DEFV(Int,SINT(SGI_____mode_de_numerisation_des_images,VL_CAPTURE_INTERLEAVED)));
                                        /* Definition du mode de numerisation des images ; les possibilites suivantes sont           */
                                        /* disponibles :                                                                             */
                                        /*                                                                                           */
                                        /*                  VL_CAPTURE_NONINTERLEAVED               (0)                              */
                                        /*                  VL_CAPTURE_INTERLEAVED                  (1)                              */
                                        /*                  VL_CAPTURE_EVEN_FIELDS                  (2)                              */
                                        /*                  VL_CAPTURE_ODD_FIELDS                   (3)                              */
                                        /*                                                                                           */
                                        /* ce qui est donne dans '/usr/include/vl/vl.h'.                                             */

DEFV(Common,DEFV(Int,SINT(SGI_____nombre_d_images_a_ignorer_avant_d_en_numeriser_une,GRO6(FREQUENCE_DE_BALAYAGE_DES_IMAGES))));
                                        /* Definition du nombre d'images a ignorer avant d'en numeriser une ; ce parametre est       */
                                        /* rendu necessaire par le fait que lors d'une entree video, la stabilisation des couleurs   */
                                        /* demande plusieurs secondes (apparemment, il en faut au moins 5...).                       */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
DEFV(Local,DEFV(G_VLBuffer,buffer_alloue_pour_la_numerisation));
                                        /* Buffer a allouer par le serveur pour numeriser une image.                                 */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

DEFV(Local,DEFV(FonctionI,IGdebut_de_diffusion_ou_de_numerisation_d_une_sequence_video(nom_variable_shell_serveur_ecran
                                                                                      ,nom_de_la_fenetreA
                                                                                      ,centrer_la_fenetre_video_temps_reel
                                                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                                      ,editer_les_PRINT_ATTENTION_initiaux
                                                                                      ,diffuser_sequence_sinon_numeriser_image
                                                                                       )
                )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_variable_shell_serveur_ecran)));
                                        /* Nom de la variable shell d'acces au nom du serveur et de l'ecran ; en general, ce sera    */
                                        /* celui qui est defini par la variable 'DEFINITION_DU_SERVEUR_X_WINDOW'.                    */
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_fenetreA)));
                                        /* Nom de la fenetre a ouvrir.                                                               */
DEFV(Argument,DEFV(Logical,centrer_la_fenetre_video_temps_reel));
                                        /* Faut-il centrer la fenetre video temps reel ('VRAI') ou bien donner explicitement la      */
                                        /* position de son coin "bas gauche" ('FAUX') ?                                              */
DEFV(Argument,DEFV(pointF_2D,POINTERs(coin_bas_gauche)));
                                        /* Abscisse du point de reference,                                                           */
DEFV(Argument,DEFV(Logical,editer_les_PRINT_ATTENTION_initiaux));
                                        /* Indique si les messages initiaux du type 'PRINT_ATTENTION(...)' doivent etre emis         */
                                        /* ('VRAI') ou pas ('FAUX').                                                                 */
DEFV(Argument,DEFV(Logical,diffuser_sequence_sinon_numeriser_image));
                                        /* Indique si l'on diffuse une sequence, ou bien dans le cas contraire, si l'on numerise     */
                                        /* une seule image.                                                                          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(Logical,INIT(essayer_d_etablir_la_connexion,VRAI));
                                        /* A priori, il va falloir essayer d'etablir la connexion...                                 */
     DEFV(Logical,INIT(une_erreur_forcant_l_iteration_a_ete_rencontree,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION));
                                        /* A priori, il n'y a pas encore eu d'erreur forcant l'iteration...                          */
     DEFV(Int,INIT(nombre_de_tentatives_d_etablissement_de_connexion,NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO));
                                        /* Mais on ne pourra pas essayer une infinite de fois...                                     */
     DEFV(G_VLDevList,liste_des_devices_disponibles);
                                        /* Liste des "device"s disponibles sur le serveur video...                                   */
     DEFV(Int,INIT(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT));
                                        /* Numero du "device" (indifferent...) a utiliser...                                         */
     DEFV(Int,INIT(nombre_de_chemins_a_etablir,UN));
                                        /* Nombre de chemins a etablir (entre les "noeud"s emetteur et recepteur).                   */
     DEFV(deltaF_2D,dimension_de_la_fenetre);
                                        /* Dimension horizontale de la fenetre,                                                      */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
     DEFV(Int,INIT(nombre_de_descripteurs_de_transfert_d_images,ZERO));
                                        /* Nombre de transferts d'images a effectuer...                                              */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
     DEFV(Int,INIT(nombre_de_descripteurs_de_transfert_d_images,UN));
                                        /* Nombre de transferts d'images a effectuer...                                              */
     DEFV(Int,INIT(nombre_d_images_a_manipuler,UNDEF));
                                        /* Nombre d'images a manipuler...                                                            */
     DEFV(G_VLTransferDescriptor,descripteurs_de_transfert_d_images);
                                        /* Descripteurs des transferts d'images...                                                   */

#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

     /*..............................................................................................................................*/
     EGAL(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie,FAUX);
                                        /* A priori, la connexion video demandee ne va pas etre etablie...                           */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
     PRINT_ATTENTION("il manque la programmation du choix des sources videos et de synchronisation, ainsi que leur parametrage");
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
     Test(IL_FAUT(SGI_____se_synchroniser_sur_une_source_externe))
          Bblock
          PRINT_ATTENTION("il est provisoirement plus simple et plus prudent de ne pas 'genlocker' les entrees videos temps reel");
          Eblock
     ATes
          Bblock
          Eblock
     ETes
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )

     Tant(IFET(IL_FAUT(essayer_d_etablir_la_connexion)
              ,IZGT(nombre_de_tentatives_d_etablissement_de_connexion)
               )
          )
          Bblock
          Test(IFEQ(nombre_de_tentatives_d_etablissement_de_connexion,NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO))
                                        /* Cas de la premiere tentative : il n'y a rien a faire...                                   */
               Bblock
               Eblock
          ATes
                                        /* Cas des tentatives ulterieures : il faut annuler certaines des initialisations realisees  */
                                        /* a la tentative precedente...                                                              */
               Bblock
               CALS(VLDESTROYPATH(identite_du_serveur_video
                                 ,chemin_emetteur_recepteur
                                  )
                    );
                                        /* Destruction du chemin entre l'emetteur et le recepteur...                                 */

               Test(PAS_D_ERREUR(VLCLOSEVIDEO(identite_du_serveur_video)))
                                        /* Enfin, fermeture de la connexion video...                                                 */
                    Bblock
                    Eblock
               ATes
                    Bblock
                    PRINT_ERREUR("la fermeture de la connexion video est impossible (1)");
                    Eblock
               ETes
               Eblock
          ETes

          DECR(nombre_de_tentatives_d_etablissement_de_connexion,I);
                                        /* Et une tentative de moins...                                                              */
          EGAL(identite_du_serveur_video,VLOPENVIDEO(NOM_DU_SERVEUR_VIDEO_DE_L_OPTION_GALILEO));
                                        /* Tentative d'ouverture de la connexion video.                                              */
          Test(IFNE(identite_du_serveur_video,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT))
               Bblock
               REINITIALISATION_DE_LA_CARTE_GALILEO(identite_du_serveur_video);
                                        /* Reinitialisation de la carte (voir 'REINITIALISATION_DE_LA_CARTE_GALILEO(...)' et ses     */
                                        /* commentaires...).                                                                         */
                                        /*                                                                                           */
                                        /* ATTENTION, tant qu'il y a des problemes avec les deux controles 'VL_DEFAULT_SOURCE' et    */
                                        /* 'VL_SYNC', il est imperatif de passer par 'VLRESTORESYSTEMDEFAULTS(...)' qui fait des     */
                                        /* initialisations "impossibles" et necessaires ici pour les 'PARAMETRAGE_NOEUD_1(...)'      */
                                        /* qui suivent (et en particulier ceux qui sont relatifs a 'VL_MUXSWITCH', 'VL_TBCMODE',     */
                                        /* 'VL_QUALITY', 'VL_PREFILTER' et 'VL_FILTER') ne seraient pas acceptes la premiere fois    */
                                        /* apres avoir change la 'VL_DEFAULT_SOURCE' "a la main" (par exemple a l'aide de la         */
                                        /* commande 'videopanel') ; en effet, on peut observer grace a 'v $xtc/SGI_G.520.42$c'       */
                                        /* qu'alors le nombre de controles reconnus n'est que de 18 (au lieu de 41) en temps normal. */
                                        /* Il est donc important de maintenir a jour, en cas de nouvelle release du systeme par      */
                                        /* exemple, le fichier '/usr/etc/video/videod.defaults'.                                     */
               Test(IZGE(VLGETDEVICELIST(identite_du_serveur_video,ADRESSE(liste_des_devices_disponibles))))
                    Bblock
                    Test(IFOU(IFEQ(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                             ,IFET(IFNE(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                                  ,IFLT(numero_du_device_a_utiliser
                                       ,INTE(ASD1(liste_des_devices_disponibles,numDevices))
                                        )
                                   )
                              )
                         )
                         Bblock
                         EGAL(identite_du_noeud_emetteur
                             ,VLGETNODE(identite_du_serveur_video,VL_SRC,VL_VIDEO,VL_ANY)
                              );
                                        /* Definition du noeud emetteur (c'est-a-dire la "video").                                   */
                         EGAL(identite_du_noeud_device
                             ,VLGETNODE(identite_du_serveur_video,VL_DEVICE,VL_DOIT_ETRE_NUL,VL_DOIT_ETRE_NUL)
                              );
                                        /* Definition du noeud "device"...                                                           */

                         Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                              Bblock
                              EGAL(identite_du_noeud_recepteur
                                  ,VLGETNODE(identite_du_serveur_video,VL_DRN,VL_SCREEN,VL_ANY)
                                   );
                                        /* Definition du noeud recepteur (c'est-a-dire la "fenetre X11").                            */
                              Eblock
                         ATes
                              Bblock
                              EGAL(identite_du_noeud_recepteur
                                  ,VLGETNODE(identite_du_serveur_video,VL_DRN,VL_MEM,VL_ANY)
                                   );
                                        /* Definition du noeud recepteur (c'est-a-dire le buffer de numerisation de l'image).        */
                              Eblock
                         ETes

                         EGAL(chemin_emetteur_recepteur
                             ,VLCREATEPATH(identite_du_serveur_video
                                          ,COND(IFEQ(numero_du_device_a_utiliser,DEMANDE_D_UN_DEVICE_INDIFFERENT)
                                               ,VL_ANY
                                               ,numero_du_device_a_utiliser
                                                )
                                          ,identite_du_noeud_emetteur
                                          ,identite_du_noeud_recepteur
                                           )
                              );
                                        /* Etablissement d'un chemin entre les "noeud"s emetteur et recepteur...                     */

                         Test(PAS_D_ERRORS(chemin_emetteur_recepteur))
                              Bblock
                              CALS(VLADDNODE(identite_du_serveur_video
                                            ,chemin_emetteur_recepteur
                                            ,identite_du_noeud_emetteur
                                             )
                                   );
                              CALS(VLADDNODE(identite_du_serveur_video
                                            ,chemin_emetteur_recepteur
                                            ,identite_du_noeud_device
                                             )
                                   );
                              CALS(VLADDNODE(identite_du_serveur_video
                                            ,chemin_emetteur_recepteur
                                            ,identite_du_noeud_recepteur
                                             )
                                   );
                                        /* Operation dont je ne comprends pas bien l'utilite, mais essentiel si l'on veut que le     */
                                        /* controle 'VL_DEFAULT_SOURCE' soit pris en compte...                                       */
                              EGAL(numero_du_device_a_utiliser
                                  ,VLGETDEVICE(identite_du_serveur_video
                                              ,chemin_emetteur_recepteur
                                               )
                                   );
                                        /* Recuperation du "device" reellement utilise (lorsque 'DEMANDE_D_UN_DEVICE_INDIFFERENT'    */
                                        /* n'est pas utilise...),                                                                    */
                              EGAL(nom_du_device_reellement_utilise
                                  ,ASD1(ITb1(ASD1(liste_des_devices_disponibles,devices)
                                            ,numero_du_device_a_utiliser
                                             )
                                       ,name
                                        )
                                   );
                                        /* Et de son nom au cas ou...                                                                */

                              Test(PAS_D_ERREUR(VLSETUPPATHS(identite_du_serveur_video
                                                            ,Cast_G_VLPathList(ADRESSE(chemin_emetteur_recepteur))
                                                            ,nombre_de_chemins_a_etablir
                                                            ,VL_SHARE
                                                            ,VL_READ_ONLY
                                                             )
                                                )
                                   )
                                        /* Preparation du hardware pour permettre l'usage des controles et des flots d'informations. */
                                        /*                                                                                           */
                                        /* ATTENTION, on notera les deux valeurs tres particulieres suivantes :                      */
                                        /*                                                                                           */
                                        /*   VL_SHARE     : destinee a pouvoir refaire un peu plus loin un autre 'VLSETUPPATHS(...)' */
                                        /*                  sans avoir le desagreable message suivant :                              */
                                        /*                                                                                           */
                                        /*                  VL connection to :0.0 broken (explicit kill or server shutdown).         */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*   VL_READ_ONLY : qui permet (enfin...) d'utiliser le controle 'VL_SYNC' (ci-dessous)      */
                                        /*                  sans avoir le desagreable message suivant :                              */
                                        /*                                                                                           */
                                        /*                  Bad access to the library                                                */
                                        /*                                                                                           */
                                        /* tout cela m'ayant fait perdre pas mal de temps...                                         */
                                   Bblock
                                   CALS(VLSELECTEVENTS(identite_du_serveur_video
                                                      ,chemin_emetteur_recepteur
                                                      ,LISTE_DES_EVENEMENTS_A_DETECTER
                                                       )
                                        );
                                        /* Selection des evenements a detecter...                                                    */

                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_device
                                                      ,intVal
                                                      ,VL_DEFAULT_SOURCE_ANALOG
                                                      ,VL_DEFAULT_SOURCE
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                       );
                                        /* Selection de l'entree par defaut...                                                       */

                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_device
                                                      ,intVal
                                                      ,VL_TIMING_625_SQ_PIX
                                                      ,VL_TIMING
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
                                   CHOIX_DE_LA_SOURCE_DE_SYNCHRONISATION_EXTERNE;
                                        /* Choix et validation de la source de synchronisation externe...                            */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_device
                                                      ,intVal
                                                      ,COND(IL_FAUT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO)
                                                           ,VL_SYNC_GENLOCK
                                                           ,VL_SYNC_INTERNAL
                                                            )
                                                      ,VL_SYNC
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                       );
                                        /* Parametrage du type de synchronisation et de la source "genlock" utilisee. On notera      */
                                        /* l'utilisation de 'identite_du_noeud_device' (et non pas de 'identite_du_noeud_recepteur') */
                                        /* pour les controles 'VL_SYNC' et 'VL_SYNC_SOURCE'...                                       */
                                        /*                                                                                           */
                                        /* ATTENTION, lorsque l'on est en 'VL_SYNC_GENLOCK' la sortie 'Pal' ("composite") de la      */
                                        /* carte 'Galileo' ne fonctionne pas correctement ; en particulier on perd la couleur...     */
                                        /*                                                                                           */
                                        /* ATTENTION, cette mise en place de 'VL_SYNC' est lie au nouveau branchement du moniteur    */
                                        /* 'RVB'. En effet, il recoit maintenant comme signal de synchronisation la synchronisation  */
                                        /* externe dit "genlock". Lors de l'entree video temps reel, il faut que l'image qu'il       */
                                        /* diffuse soit stable ; d'ou 'CHOIX_DE_LA_SOURCE_DE_SYNCHRONISATION_EXTERNE' et la mise     */
                                        /* en place du controle 'VL_SYNC' qui ont ete ajoutes... Cela a donc aussi demande que le    */
                                        /* chemin soit d'abord etabli en mode {VL_SHARE,VL_READ_ONLY} afin de mettre en place ces    */
                                        /* controles, puis de passer ci-apres en mode {VL_LOCK,VL_LOCK}...                           */

                                   MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK;
                                        /* Preparation du hardware pour permettre l'usage des controles et des flots d'informations. */
                                        /* L'usage ici choisit est le mode exclusif ('VL_LOCK'). On notera que 'VLSETUPPATHS(...)'   */
                                        /* est obligatoire a cause du mode {VL_SHARE,VL_READ_ONLY} impose precedemment et ce afin    */
                                        /* de permettre le controle 'VL_SYNC'...                                                     */
                                        /*                                                                                           */
                                        /* On notera au passage que l'ensemble du code qui suit devrait etre place a l'interieur     */
                                        /* de la premiere alternative du 'Test(...)' de 'MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK'. Mais     */
                                        /* cela n'est pas fait car il faudrait alors le retabuler, or il y a des lignes tres         */
                                        /* longues...                                                                                */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
                                   Test(I3ET(IFNE(SGI_____Gentree_video_utilisee,VL_MUXSWITCH_COMPOSITE_1)
                                            ,IFNE(SGI_____Gentree_video_utilisee,VL_MUXSWITCH_COMPOSITE_2)
                                            ,IFNE(SGI_____Gentree_video_utilisee,VL_MUXSWITCH_COMPOSITE_3)
                                             )
                                        )
                                        Bblock
                                        PRINT_ERREUR("l'entree video demandee n'est pas reconnue (entree implicite forcee)");
                                        EGAL(SGI_____Gentree_video_utilisee,VL_MUXSWITCH_COMPOSITE);
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                      ,intVal
                                                      ,SGI_____Gentree_video_utilisee
                                                      ,VL_MUXSWITCH
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );
                                        /* C'est principalement a cause du controle 'VL_MUXSWITCH' qu'a ete introduit l'argument     */
                                        /* 'iter' des procedures 'PARAMETRAGE_NOEUD_?(...)' afin de permettre sa prise en compte     */
                                        /* correcte lors d'un changement effectif du controle 'VL_DEFAULT_SOURCE'...                 */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

                                        /* Parametrage des frequences et de l'entree utilisee...                                     */
                                   nPARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                       ,intVal
                                                       ,VL_FORMAT_COMPOSITE
                                                       ,VL_FORMAT
                                                       ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                       ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                        );
                                   nPARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                       ,intVal
                                                       ,FORMAT_DE_PACKING_DES_POINTS_VIDEO
                                                       ,VL_PACKING
                                                       ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                       ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                        );
                                        /* Parametrage du format des images. On notera que le controle 'VL_FORMAT' est parait-il     */
                                        /* inutile car l'entree selectionnee peu avant par 'SGI_____Gentree_video_utilisee' est      */
                                        /* de type 'VL_MUXSWITCH_COMPOSITE_?'...                                                     */
                                   nPARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                       ,intVal
                                                       ,SGI_____mode_de_numerisation_des_images
                                                       ,VL_CAP_TYPE
                                                       ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                       ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                        );
                                        /* Parametrage du format des images. On notera que le controle 'VL_CAP_TYPE' est apparemment */
                                        /* interdit avec le type du noeud 'identite_du_noeud_emetteur' (et qu'il est seul autorise   */
                                        /* avec des noeuds de type 'VL_MEM' et 'VL_SCREEN'...).                                      */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                      ,intVal
                                                      ,TRUE
                                                      ,VL_TBCMODE
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                      ,intVal
                                                      ,TRUE
                                                      ,VL_QUALITY
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                      ,intVal
                                                      ,TRUE
                                                      ,VL_PREFILTER
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );
                                   PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                                                      ,intVal
                                                      ,TRUE
                                                      ,VL_FILTER
                                                      ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                      ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                       );
                                        /* Choix de la meilleure qualite d'image possible. On notera l'utilisation de 'TRUE' (et non */
                                        /* pas de 'VRAI') afin de garantir la portabilite...                                         */
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

                                   Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                                        Bblock
                                        Test(I3OU(I3ET(IFNE(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_1_DU_RAPPORT_DE_ZOOM)
                                                      ,IFNE(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_2_DU_RAPPORT_DE_ZOOM)
                                                      ,IFNE(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_4_DU_RAPPORT_DE_ZOOM)
                                                       )
                                                 ,IFEXff(SGI_____denominateur_du_rapport_de_zoom
                                                        ,DENOMINATEUR_1_DU_RAPPORT_DE_ZOOM
                                                        ,DENOMINATEUR_n_DU_RAPPORT_DE_ZOOM
                                                         )
                                                 ,IFOU(IFEQ(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_2_DU_RAPPORT_DE_ZOOM)
                                                      ,IFEQ(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_4_DU_RAPPORT_DE_ZOOM)
                                                       )
                                                  )
                                             )
                                        /* Nota : 'NUMERATEUR_2_DU_RAPPORT_DE_ZOOM' et 'NUMERATEUR_4_DU_RAPPORT_DE_ZOOM' sont        */
                                        /* elimines a cause de la fonction de 'MISE_A_L_ECHELLE_DES_DECALAGES_X_WINDOW(...) qui      */
                                        /* a ete introduite pour cadrer correctement la video quel que soit le rapport de zoom ;     */
                                        /* d'autre part, les agrandissements (rapport>1) etaient de tres mauvaise qualite...         */
                                             Bblock
                                             PRINT_ERREUR("le rapport de zoom demande n'est pas reconnu (zoom implicite force)");
                                             CAL1(Prer2(" zoom = %d/%d\n"
                                                       ,SGI_____numerateur_du_rapport_de_zoom,SGI_____denominateur_du_rapport_de_zoom
                                                        )
                                                  );
                                             EGAL(SGI_____numerateur_du_rapport_de_zoom,NUMERATEUR_DU_RAPPORT_DE_ZOOM);
                                             EGAL(SGI_____denominateur_du_rapport_de_zoom,DENOMINATEUR_DU_RAPPORT_DE_ZOOM);
                                             Eblock
                                        ATes
                                             Bblock
                                             Eblock
                                        ETes
                                        PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                           ,fractVal
                                                           ,numerator
                                                           ,SGI_____numerateur_du_rapport_de_zoom
                                                           ,denominator
                                                           ,SGI_____denominateur_du_rapport_de_zoom
                                                           ,VL_ZOOM
                                                           ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                           ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                            );
                                        /* Parametrage du rapport de zoom (qui ne peut se faire, rappelons-le, que sur un noeud      */
                                        /* du type 'VL_SCREEN').                                                                     */
                                        Eblock
                                   ATes
                                        Bblock
                                        PARAMETRAGE_NOEUD_1(identite_du_noeud_recepteur
                                                           ,intVal
                                                           ,FORMAT_DE_PACKING_DES_POINTS_VIDEO
                                                           ,VL_PACKING
                                                           ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                           ,UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
                                                            );
                                        /* Programmation du format des pixels apres la numerisation...                               */
                                        Eblock
                                   ETes

                                   Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                                        Bblock
                                        /* Cas de la diffusion d'une sequence :                                                      */
                                        CALS(VLGETCONTROL(identite_du_serveur_video
                                                         ,chemin_emetteur_recepteur
                                                         ,identite_du_noeud_recepteur
                                                         ,VL_SIZE
                                                         ,ADRESSE(parametres_courants)
                                                          )
                                             );
                                        /* Recuperation de la taille de la fenetre video,                                            */

                                        INITIALISATION_ACCROISSEMENT_2D
                                                                (dimension_de_la_fenetre
                                                                ,_____lNORMALISE_OX11(ADD2(ASD2(parametres_courants,xyVal,x)
                                                                                          ,PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_X
                                                                                           )
                                                                                      )
                                                                ,_____lNORMALISE_OY11(ADD2(ASD2(parametres_courants,xyVal,y)
                                                                                          ,PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_Y
                                                                                           )
                                                                                      )
                                                                 );
                                        /* Et definition de la taille de la fenetre 'X-Window' necessaire...                         */

                                        Test(EST_FAUX(une_erreur_forcant_l_iteration_a_ete_rencontree))
                                             Bblock
                                             Test(EST_ACTIF(IXopen_pour_l_entree_video_temps_reel
                                                                                          (nom_variable_shell_serveur_ecran
                                                                                          ,nom_de_la_fenetreA
                                                                                          ,ADRESSE(dimension_de_la_fenetre)
                                                                                          ,centrer_la_fenetre_video_temps_reel
                                                                                          ,coin_bas_gauche
                                                                                          ,editer_les_PRINT_ATTENTION_initiaux
                                                                                           )
                                                            )
                                                  )
                                        /* Ouverture de la fenetre 'X-Window' necessaire pour la diffusion de la video...            */
                                        /*                                                                                           */
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */
                                        /*                                                                                           */
                                        /*                  ,ADRESSE(coin_bas_gauche)                                                */
                                        /*                                                                                           */
                                        /* car 'coin_bas_gauche' est declare en tant que 'POINTERs(...)'...                          */
                                                  Bblock
                                                  DEFV(pointI_2D,origine_video_dans_la_fenetre);
                                        /* Definition de l'origine de la video dans la fenetre...                                    */

                                                  PARAMETRAGE_NOEUD_1(identite_du_noeud_recepteur
                                                                     ,intVal
                                                                     ,X11_____fenetre_courante
                                                                     ,VL_WINDOW
                                                                     ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                     ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                      );
                                        /* Etablissement de la correspondance entre la fenetre video (via 'VL_WINDOW') et la fenetre */
                                        /* 'X-Window' (via 'X11_____fenetre_courante').                                              */

                                                  CALS(IXmapping_pour_l_entree_video_temps_reel
                                                                                (DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
                                                                                ,DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y
                                                                                ,ADRESSE(ASD1(origine_video_dans_la_fenetre,x))
                                                                                ,ADRESSE(ASD1(origine_video_dans_la_fenetre,y))
                                                                                 )
                                                       );
                                        /* Affichage de la fenetre a l'ecran...                                                      */

                                                  PARAMETRAGE_NOEUD_2(identite_du_noeud_recepteur
                                                                     ,xyVal
                                                                     ,x
                                                                     ,ADD2(ASD1(origine_video_dans_la_fenetre,x)
                                                                          ,MISE_A_L_ECHELLE_DES_DECALAGES_X_WINDOW
                                                                               (SGI_____fenetre_X_WINDOW_decalage_2_video_X)
                                                                           )
                                                                     ,y
                                                                     ,ADD2(ASD1(origine_video_dans_la_fenetre,y)
                                                                          ,SGI_____fenetre_X_WINDOW_decalage_2_video_Y
                                                                           )
                                                                     ,VL_ORIGIN
                                                                     ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                                                                     ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                                      );
                                        /* Cadrage de la video dans la fenetre 'X-Window'...                                         */

                                                  EGAL(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie,VRAI);
                                        /* La connexion video demandee a pu etre etablie...                                          */
                                                  EGAL(essayer_d_etablir_la_connexion,FAUX);
                                        /* Et donc, ce n'est plus la peine de faire des tentatives...                                */
                                                  Eblock
                                             ATes
                                                  Bblock
                                                  PRINT_ERREUR("la fenetre n'a pu etre ouverte");
                                                  PRINT_ATTENTION("ne pas oublier que cette fenetre ne peut etre que locale");
                                                  CAL1(Prer1(" variable '$DISPLAY' = '%s'\n",Gvar(nom_variable_shell_serveur_ecran)));
                                                  Eblock
                                             ETes
                                             Eblock
                                        ATes
                                             Bblock
                                        /* Lorsqu'une erreur forcant l'iteration a ete rencontree, la sequence complete d'ouverture  */
                                        /* va etre repetee (si l'on n'a pas epuise le "credit"...). On notera que l'on n'execute pas */
                                        /* alors la fonction 'IXopen_pour_l_entree_video_temps_reel(...)' car sinon, a l'iteration   */
                                        /* suivante, elle serait refusee (voir les controles qu'elle effectue...).                   */
                                             EGAL(une_erreur_forcant_l_iteration_a_ete_rencontree
                                                 ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                                                  );
                                        /* A priori, il n'y a plus d'erreur forcant l'iteration...                                   */
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        /* Cas de la numerisation d'une image :                                                      */
                                             EGAL(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie,VRAI);
                                        /* La connexion video demandee a pu etre etablie...                                          */
                                             EGAL(essayer_d_etablir_la_connexion,FAUX);
                                        /* Et donc, ce n'est plus la peine de faire des tentatives...                                */
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   PRINT_ERREUR("le chemin n'a pu etre etabli (2)");
                                   CAL1(Prer1(" identite du noeud emetteur  = %d\n",identite_du_noeud_emetteur));
                                   CAL1(Prer1(" identite du noeud recepteur = %d\n",identite_du_noeud_recepteur));
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              PRINT_ERREUR("le chemin n'a pu etre etabli (1)");
                              CAL1(Prer1(" identite du noeud emetteur  = %d\n",identite_du_noeud_emetteur));
                              CAL1(Prer1(" identite du noeud recepteur = %d\n",identite_du_noeud_recepteur));
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("le numero de 'device' demande est incorrect");
                         CAL1(Prer1(" numero de device demande = %d\n",numero_du_device_a_utiliser));
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    PRINT_ERREUR("impossible d'obtenir la liste des 'device's");
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("impossible d'ouvrir la connexion video");
               Eblock
          ETes

          PETIT_DODO(TEMPORISATION_DES_Tant_D_ETABLISSEMENT_DE_CONNEXION);
                                        /* Afin de ne pas bloquer le systeme, et ce au cas ou il y aurait des defauts du type :      */
                                        /*                                                                                           */
                                        /*                  unix: WARNING: Frame transfer aborted: analog video input not locked     */
                                        /*                                                                                           */
                                        /* qui seraient permanents...                                                                */
          Eblock
     ETan

     Test(IL_FAUT(essayer_d_etablir_la_connexion))
          Bblock
          PRINT_ERREUR("impossible d'etablir la connexion video apres plusieurs tentatives");
          Eblock
     ATes
          Bblock
          Test(EST_VRAI(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie))
               Bblock
               Test(EST_FAUX(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours))
                    Bblock

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
                    Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                         Bblock
                         Test(PAS_D_ERREUR(VLBEGINTRANSFER(identite_du_serveur_video
                                                          ,chemin_emetteur_recepteur
                                                          ,nombre_de_descripteurs_de_transfert_d_images
                                                          ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                                                           )
                                           )
                              )
                                        /* Initialisation du transfert et transfert proprement dit...                                */
                              Bblock
                              EGAL(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours,VRAI);
                                        /* Afin de savoir qu'il y a un transfert en cours...                                         */
                              Eblock
                         ATes
                              Bblock
                              PRINT_ERREUR("un transfert n'a pu etre initialise et lance");
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("la numerisation d'image n'est pas disponible dans cette version");
                                        /* On notera que 'il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours' est 'FAUX'.  */
                         Eblock
                    ETes
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
                    EGAL(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours,VRAI);
                                        /* Afin de savoir qu'il y a un transfert en cours...                                         */

                    Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                         Bblock
                         EGAL(ASD1(descripteurs_de_transfert_d_images,mode),VL_TRANSFER_MODE_CONTINUOUS);
                         EGAL(ASD1(descripteurs_de_transfert_d_images,count),nombre_d_images_a_manipuler);
                         EGAL(ASD1(descripteurs_de_transfert_d_images,delay),ZERO);
                         EGAL(ASD1(descripteurs_de_transfert_d_images,trigger),VLDeviceEvent);
                                        /* Preparation du transfert pour une diffusion de sequence...                                */
                         Eblock
                    ATes
                         Bblock
                         EGAL(nombre_d_images_a_manipuler,UN);
                                        /* Il n'y a qu'une image a manipuler...                                                      */
                         EGAL(ASD1(descripteurs_de_transfert_d_images,mode)
                             ,VL_TRANSFER_MODE_DISCRETE
                              );
                         EGAL(ASD1(descripteurs_de_transfert_d_images,count)
                             ,nombre_d_images_a_manipuler
                              );
                         EGAL(ASD1(descripteurs_de_transfert_d_images,delay)
                             ,SGI_____nombre_d_images_a_ignorer_avant_d_en_numeriser_une
                              );
                         EGAL(ASD1(descripteurs_de_transfert_d_images,trigger)
                             ,COND(IFEQ(SGI_____mode_de_numerisation_des_images,VL_CAPTURE_INTERLEAVED)
                                  ,VLFrameVerticalRetraceMask
                                  ,COND(IFEQ(SGI_____mode_de_numerisation_des_images,VL_CAPTURE_EVEN_FIELDS)
                                       ,VLEvenVerticalRetraceMask
                                       ,COND(IFEQ(SGI_____mode_de_numerisation_des_images,VL_CAPTURE_ODD_FIELDS)
                                            ,VLOddVerticalRetraceMask
                                            ,VLFrameVerticalRetraceMask
                                             )
                                        )
                                   )
                              );
                                        /* Preparation du transfert pour une numerisation d'image. Le 'VLFrameVerticalRetraceMask'   */
                                        /* est destine (du moins je l'espere) a commencer la numerisation apres une synchronisation  */
                                        /* "image" ; les "trigger"s suivants existent :                                              */
                                        /*                                                                                           */
                                        /*                  VLEvenVerticalRetraceMask                                                */
                                        /*                  VLOddVerticalRetraceMask                                                 */
                                        /*                  VLFrameVerticalRetraceMask                                               */
                                        /*                                                                                           */
                                        /* apparemment pour se synchronsier sur les trames paires ('Even'), impaires ('Odd') ou      */
                                        /* bien enfin sur les images ('Frame'). La synchronisation 'Frame' etant le mode choisi      */
                                        /* par defaut...                                                                             */

                         EGAL(buffer_alloue_pour_la_numerisation
                             ,VLCREATEBUFFER(identite_du_serveur_video
                                            ,chemin_emetteur_recepteur
                                            ,identite_du_noeud_recepteur
                                            ,nombre_d_images_a_manipuler
                                             )
                              );
                         CALS(VLREGISTERBUFFER(identite_du_serveur_video
                                              ,chemin_emetteur_recepteur
                                              ,identite_du_noeud_recepteur
                                              ,buffer_alloue_pour_la_numerisation
                                               )
                              );
                                        /* Allocation et enregistrement du buffer necessaire a la numerisation.                      */
                         Eblock
                    ETes

                    Test(PAS_D_ERREUR(VLBEGINTRANSFER(identite_du_serveur_video
                                                     ,chemin_emetteur_recepteur
                                                     ,nombre_de_descripteurs_de_transfert_d_images
                                                     ,ADRESSE(descripteurs_de_transfert_d_images)
                                                      )
                                      )
                         )
                                        /* Initialisation du transfert et transfert proprement dit...                                */
                         Bblock
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("un transfert video temps reel ne peut etre demarre");
                         Eblock
                    ETes
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

                    Eblock
               ATes
                    Bblock
                    PRINT_ERREUR("un transfert video temps reel est demande alors qu'il y en a deja un en cours");
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#         undef     MISE_A_L_ECHELLE_DES_DECALAGES_X_WINDOW

#         undef     DENOMINATEUR_DU_RAPPORT_DE_ZOOM
#         undef     NUMERATEUR_DU_RAPPORT_DE_ZOOM

#         undef     DENOMINATEUR_n_DU_RAPPORT_DE_ZOOM
#         undef     DENOMINATEUR_1_DU_RAPPORT_DE_ZOOM

#         undef     NUMERATEUR_4_DU_RAPPORT_DE_ZOOM
#         undef     NUMERATEUR_2_DU_RAPPORT_DE_ZOOM
#         undef     NUMERATEUR_1_DU_RAPPORT_DE_ZOOM

EFonctionI

#         undef     DECALAGE_DE_VL_EV1_H_PHASE

#         if        (nSYSTEM_RELEASE < 503000000)
#              undef     DECALAGE_DE_VL_EV1_H_OFFSET
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
#              undef     DECALAGE_DE_VL_EV1_H_OFFSET
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

#         undef     DECALAGE_DE_VL_EV1_V_OFFSET
#         undef     DECALAGE_DE_VL_EV1_DELAY_SYNC

#         define    VL_PACKING_RGB_8                                                                                                    \
                              UNDEF
                                        /* Afin de ne pas avoir d'erreur au niveau du pre-processeur, car en effet, le symbole       */
                                        /* 'VL_PACKING_RGB_8' n'est defini qu'en passe '$PASSE_5', alors que le test correspondant   */
                                        /* ci-apres est fait en '$PASSE_1', c'est-a-dire trop tot...                                 */

#         if        (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO==VL_PACKING_RGB_8)                                          \
                               )                                                                                                        \
                     )
#              undef     NOMBRE_D_IMAGES_A_MANIPULER
#         Aif       (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO==VL_PACKING_RGB_8)                                          \
                               )                                                                                                        \
                     )
#              undef     NOMBRE_D_IMAGES_A_MANIPULER
#         Eif       (         (         (defined(BUG_SYSTEME_SGIND_VL_NOMBRE_DE_BUFFERS_PAR_IMAGE_EN_SORTIE_RVB))                       \
                              &&        (FORMAT_DE_PACKING_DES_POINTS_VIDEO==VL_PACKING_RGB_8)                                          \
                               )                                                                                                        \
                     )

#         undef     VL_PACKING_RGB_8                                                                                                    \
                                        /* Afin de ne pas avoir d'erreur au niveau du pre-processeur, car en effet, le symbole       */ \
                                        /* 'VL_PACKING_RGB_8' n'est defini qu'en passe '$PASSE_5', alors que le test correspondant   */ \
                                        /* ci-dessus est fait en '$PASSE_1', c'est-a-dire trop tot...                                */

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
#              undef     FORMAT_DE_PACKING_DES_POINTS_VIDEO
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              undef     FORMAT_DE_PACKING_DES_POINTS_VIDEO
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#         undef     MISE_DU_CHEMIN_EN_MODE_LOCK_LOCK

#         undef     VL_DOIT_ETRE_NUL
#         undef     VL_INDIFFERENT

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

BFonctionI

DEFV(Common,DEFV(FonctionI,IGdebut_de_diffusion_d_une_sequence_video_temps_reel(nom_variable_shell_serveur_ecran
                                                                               ,nom_de_la_fenetreA
                                                                               ,centrer_la_fenetre_video_temps_reel
                                                                               ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                               ,editer_les_PRINT_ATTENTION_initiaux
                                                                                )
                 )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_variable_shell_serveur_ecran)));
                                        /* Nom de la variable shell d'acces au nom du serveur et de l'ecran ; en general, ce sera    */
                                        /* celui qui est defini par la variable 'DEFINITION_DU_SERVEUR_X_WINDOW'.                    */
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_fenetreA)));
                                        /* Nom de la fenetre a ouvrir.                                                               */
DEFV(Argument,DEFV(Logical,centrer_la_fenetre_video_temps_reel));
                                        /* Faut-il centrer la fenetre video temps reel ('VRAI') ou bien donner explicitement la      */
                                        /* position de son coin "bas gauche" ('FAUX') ?                                              */
DEFV(Argument,DEFV(pointF_2D,POINTERs(coin_bas_gauche)));
                                        /* Abscisse du point de reference,                                                           */
DEFV(Argument,DEFV(Logical,editer_les_PRINT_ATTENTION_initiaux));
                                        /* Indique si les messages initiaux du type 'PRINT_ATTENTION(...)' doivent etre emis         */
                                        /* ('VRAI') ou pas ('FAUX').                                                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     CALS(IGdebut_de_diffusion_ou_de_numerisation_d_une_sequence_video(nom_variable_shell_serveur_ecran
                                                                      ,nom_de_la_fenetreA
                                                                      ,centrer_la_fenetre_video_temps_reel
                                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                      ,editer_les_PRINT_ATTENTION_initiaux
                                                                      ,DIFFUSER_UNE_SEQUENCE_VIDEO_TEMPS_REEL
                                                                       )
          );
                                        /* Vers la demande de diffusion d'une sequence...                                            */

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E B U T   D E   L A   N U M E R I S A T I O N   D ' U N E   I M A G E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IGdebut_de_numerisation_d_une_image_video()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(CHAR,INIT(POINTERc(nom_variable_shell_serveur_ecran),CHAINE_UNDEF));
                                        /* Nom de la variable shell d'acces au nom du serveur et de l'ecran ; en general, ce sera    */
                                        /* celui qui est defini par la variable 'DEFINITION_DU_SERVEUR_X_WINDOW'.                    */
     DEFV(CHAR,INIT(POINTERc(nom_de_la_fenetreA),CHAINE_UNDEF));
                                        /* Nom de la fenetre a ouvrir.                                                               */
     DEFV(Logical,INIT(centrer_la_fenetre_video_temps_reel,LUNDEF));
                                        /* Faut-il centrer la fenetre video temps reel ('VRAI') ou bien donner explicitement la      */
                                        /* position de son coin "bas gauche" ('FAUX') ?                                              */
     DEFV(pointF_2D,coin_bas_gauche);
                                        /* Abscisse du point de reference,                                                           */
     DEFV(Logical,INIT(editer_les_PRINT_ATTENTION_initiaux,LUNDEF));
                                        /* Indique si les messages initiaux du type 'PRINT_ATTENTION(...)' doivent etre emis         */
                                        /* ('VRAI') ou pas ('FAUX').                                                                 */
     /*..............................................................................................................................*/
     INITIALISATION_POINT_2D(coin_bas_gauche,_____cNORMALISE_OX11(Xmin11),_____cNORMALISE_OY11(Ymin11));
                                        /* Juste pour le plaisir...                                                                  */

     CALS(IGdebut_de_diffusion_ou_de_numerisation_d_une_sequence_video(nom_variable_shell_serveur_ecran
                                                                      ,nom_de_la_fenetreA
                                                                      ,centrer_la_fenetre_video_temps_reel
                                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                      ,editer_les_PRINT_ATTENTION_initiaux
                                                                      ,NUMERISER_UNE_IMAGE_D_UNE_SEQUENCE_VIDEO_TEMPS_REEL
                                                                       )
          );
                                        /* Vers la demande de numerisation d'une image...                                            */

     RETU_ERROR;
     Eblock

EFonctionI

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

BFonctionI

DEFV(Local,DEFV(FonctionI,IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(diffuser_sequence_sinon_numeriser_image
                                                                                    ,composante_numerisee_ROUGE
                                                                                    ,composante_numerisee_VERTE
                                                                                    ,composante_numerisee_BLEUE
                                                                                    ,methode_de_redimensionnement
                                                                                     )
                )
     )
DEFV(Argument,DEFV(Logical,diffuser_sequence_sinon_numeriser_image));
                                        /* Indique si l'on diffuse une sequence, ou bien dans le cas contraire, si l'on numerise     */
                                        /* une seule image.                                                                          */
DEFV(Argument,DEFV(image,composante_numerisee_ROUGE));
DEFV(Argument,DEFV(image,composante_numerisee_VERTE));
DEFV(Argument,DEFV(image,composante_numerisee_BLEUE));
                                        /* Resultat de la numerisation d'une image lorsqu'elle est demandee...                       */
DEFV(Argument,DEFV(Int,methode_de_redimensionnement));
                                        /* Methode de redimensionnement demandee pour l'eventuelle image numerisee...                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(Logical,INIT(une_erreur_forcant_l_iteration_a_ete_rencontree,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION));
                                        /* A priori, il n'y a pas encore eu d'erreur forcant l'iteration...                          */
     /*..............................................................................................................................*/
     Test(EST_VRAI(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie))
          Bblock
          Test(EST_VRAI(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours))
               Bblock
               Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
                    Bblock
                    Test(PAS_D_ERREUR(VLENDTRANSFER(identite_du_serveur_video,chemin_emetteur_recepteur)))
                                        /* Lorsqu'il y a un transfert en cours, on le termine afin d'arreter la sequence...          */
                         Bblock
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("un transfert en cours ne peut etre interrompu (1)");
                         Eblock
                    ETes

                    DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO);
                                        /* S'est-il produit des defauts pendant le transfert precedent ?                             */

                    Eblock
               ATes
                    Bblock
                    DEFV(G_VLInfoPtr,informations_sur_l_image_courante);
                                        /* Afin de savoir quand l'information contenue dans le buffer est valide...                  */
                    DEFV(Void,INIT(POINTEUR(image_numerisee),ADRESSE_NON_ENCORE_DEFINIE));
                                        /* Pointeur sur le resultat de la numerisation dans le buffer alloue...                      */

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
                    BDEFV(image,composante_numerisee_avant_symetrisation_ROUGE);
                    BDEFV(image,composante_numerisee_avant_symetrisation_VERTE);
                    BDEFV(image,composante_numerisee_avant_symetrisation_BLEUE);
                                        /* Definition des trois composantes de l'image numerisee apres le redimensionnement,         */
                                        /* mais avant la symetrie d'axe horizontal...                                                */
#              define    COMPOSANTE_NUMERISEE_ROUGE                                                                                     \
                                   composante_numerisee_avant_symetrisation_ROUGE
#              define    COMPOSANTE_NUMERISEE_VERTE                                                                                     \
                                   composante_numerisee_avant_symetrisation_VERTE
#              define    COMPOSANTE_NUMERISEE_BLEUE                                                                                     \
                                   composante_numerisee_avant_symetrisation_BLEUE
                                        /* Definition des trois composantes de l'image numerisee apres le redimensionnement.         */
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
#              define    COMPOSANTE_NUMERISEE_ROUGE                                                                                     \
                                   composante_numerisee_ROUGE
#              define    COMPOSANTE_NUMERISEE_VERTE                                                                                     \
                                   composante_numerisee_VERTE
#              define    COMPOSANTE_NUMERISEE_BLEUE                                                                                     \
                                   composante_numerisee_BLEUE
                                        /* Definition des trois composantes de l'image numerisee apres le redimensionnement.         */
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )

                    EGAL(informations_sur_l_image_courante
                        ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                         );
                    Tant(IFEQ(informations_sur_l_image_courante
                             ,POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
                              )
                         )
                         Bblock
                         EGAL(informations_sur_l_image_courante
                             ,VLGETNEXTVALID(identite_du_serveur_video
                                            ,buffer_alloue_pour_la_numerisation
                                             )
                              );
                                        /* Et attente de validite...                                                                 */

                         PETIT_DODO(TEMPORISATION_DES_Tant_ATTENTE_DE_BUFFER);
                                        /* Afin de ne pas bloquer le systeme, et ce au cas ou il y aurait des defauts du type :      */
                                        /*                                                                                           */
                                        /*                  unix: WARNING: Frame transfer aborted: analog video input not locked     */
                                        /*                                                                                           */
                                        /* qui seraient permanents...                                                                */
                         Eblock
                    ETan

                    EGAL(image_numerisee
                        ,VLGETACTIVEREGION(identite_du_serveur_video
                                          ,buffer_alloue_pour_la_numerisation
                                          ,informations_sur_l_image_courante
                                           )
                         );
                                        /* Lorsque tout est valide, on peut recuperer un pointeur sur la zone "image courante"...    */

                    CALS(VLGETCONTROL(identite_du_serveur_video
                                     ,chemin_emetteur_recepteur
                                     ,identite_du_noeud_recepteur
                                     ,VL_SIZE
                                     ,ADRESSE(parametres_courants)
                                      )
                         );
                                        /* Recuperation de la taille de l'image numerisee...                                         */
                    PUSH_DIMENSIONS_2D;
                                        /* Sauvegarde du dimensionnement initial...                                                  */
                    SET_DIMENSIONS_2D_SANS_VALIDATION(XminG,XYZmax(XminG,ASD2(parametres_courants,xyVal,x))
                                                     ,YminG,XYZmax(YminG,ASD2(parametres_courants,xyVal,y))
                                                      );
                                        /* Mise en place du dimensionnement de l'image numerisee...                                  */

                         Bblock
                         BDEFV(image,composante_numerisee_avant_redimensionnement_ROUGE);
                         BDEFV(image,composante_numerisee_avant_redimensionnement_VERTE);
                         BDEFV(image,composante_numerisee_avant_redimensionnement_BLEUE);
                                        /* Definition des trois composantes de l'image numerisee avant sont redimensionnement...     */

                         CALS(IBVR_888_universel_fausses_couleurs(composante_numerisee_avant_redimensionnement_ROUGE
                                                                 ,composante_numerisee_avant_redimensionnement_VERTE
                                                                 ,composante_numerisee_avant_redimensionnement_BLEUE
                                                                 ,image_numerisee
                                                                  )
                              );
                                        /* Demultiplexage des trois composantes...                                                   */

                         CALS(Iredimensionnement(COMPOSANTE_NUMERISEE_ROUGE
                                                ,EnTete_de_sauvegardM ## Xmin,EnTete_de_sauvegardM ## Xmax
                                                ,EnTete_de_sauvegardM ## Ymin,EnTete_de_sauvegardM ## Ymax
                                                ,composante_numerisee_avant_redimensionnement_ROUGE
                                                ,Xmin,Xmax,Ymin,Ymax
                                                ,methode_de_redimensionnement
                                                 )
                              );
                         CALS(Iredimensionnement(COMPOSANTE_NUMERISEE_VERTE
                                                ,EnTete_de_sauvegardM ## Xmin,EnTete_de_sauvegardM ## Xmax
                                                ,EnTete_de_sauvegardM ## Ymin,EnTete_de_sauvegardM ## Ymax
                                                ,composante_numerisee_avant_redimensionnement_VERTE
                                                ,Xmin,Xmax,Ymin,Ymax
                                                ,methode_de_redimensionnement
                                                 )
                              );
                         CALS(Iredimensionnement(COMPOSANTE_NUMERISEE_BLEUE
                                                ,EnTete_de_sauvegardM ## Xmin,EnTete_de_sauvegardM ## Xmax
                                                ,EnTete_de_sauvegardM ## Ymin,EnTete_de_sauvegardM ## Ymax
                                                ,composante_numerisee_avant_redimensionnement_BLEUE
                                                ,Xmin,Xmax,Ymin,Ymax
                                                ,methode_de_redimensionnement
                                                 )
                              );
                                        /* Et enfin, redimensionnement des trois composantes...                                      */

                         EDEFV(image,composante_numerisee_avant_redimensionnement_BLEUE);
                         EDEFV(image,composante_numerisee_avant_redimensionnement_VERTE);
                         EDEFV(image,composante_numerisee_avant_redimensionnement_ROUGE);
                                        /* Definition des trois composantes de l'image numerisee avant sont redimensionnement...     */
                         Eblock

                    PULL_DIMENSIONS_2D;
                                        /* Restauration du dimensionnement initial...                                                */

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
                         Bblock
                         CALS(Ix_symetrie(composante_numerisee_ROUGE,COMPOSANTE_NUMERISEE_ROUGE));
                         CALS(Ix_symetrie(composante_numerisee_VERTE,COMPOSANTE_NUMERISEE_VERTE));
                         CALS(Ix_symetrie(composante_numerisee_BLEUE,COMPOSANTE_NUMERISEE_BLEUE));
                                        /* Il est donc parfois necessaire de symetriser horizontalement l'image numerisee. On        */
                                        /* notera que l'on ne peut utiliser :                                                        */
                                        /*                                                                                           */
                                        /*                  CALS(pixmode(PM_TTOB,TRUE));                                             */
                                        /*                                                                                           */
                                        /* pour ce faire...                                                                          */
                         Eblock

#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )

                    CALS(VLPUTFREE(identite_du_serveur_video,buffer_alloue_pour_la_numerisation));
                                        /* Liberation du buffer acquis par 'VLGETNEXTVALID(...)'.                                    */
                    Test(PAS_D_ERREUR(VLENDTRANSFER(identite_du_serveur_video,chemin_emetteur_recepteur)))
                                        /* Lorsqu'il y a un transfert en cours, on le termine afin d'arreter la sequence...          */
                         Bblock
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("un transfert en cours ne peut etre interrompu (2)");
                         Eblock
                    ETes

                    DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT(SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO);
                                        /* S'est-il produit des defauts pendant le transfert precedent ?                             */

                    CALS(VLDEREGISTERBUFFER(identite_du_serveur_video
                                           ,chemin_emetteur_recepteur
                                           ,chemin_emetteur_recepteur
                                           ,buffer_des_images
                                            )
                         );
                    CALS(VLDESTROYBUFFER(identite_du_serveur_video
                                        ,buffer_alloue_pour_la_numerisation
                                         )
                         );
                                        /* Liberation du buffer...                                                                   */

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
                    EDEFV(image,composante_numerisee_avant_symetrisation_BLEUE);
                    EDEFV(image,composante_numerisee_avant_symetrisation_VERTE);
                    EDEFV(image,composante_numerisee_avant_symetrisation_ROUGE);
                                        /* Definition des trois composantes de l'image numerisee apres le redimensionnement,         */
                                        /* mais avant la symetrie d'axe horizontal...                                                */
#              undef     COMPOSANTE_NUMERISEE_ROUGE
#              undef     COMPOSANTE_NUMERISEE_VERTE
#              undef     COMPOSANTE_NUMERISEE_BLEUE
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )
#              undef     COMPOSANTE_NUMERISEE_ROUGE
#              undef     COMPOSANTE_NUMERISEE_VERTE
#              undef     COMPOSANTE_NUMERISEE_BLEUE
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_AXE_DES_Y_LORS_D_UNE_NUMERISATION_D_IMAGE))                                 \
                     )

                    Eblock
               ETes

               EGAL(il_y_a_le_transfert_d_une_sequence_video_temps_reel_en_cours,FAUX);
                                        /* Et on memorise que c'est fini...                                                          */
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("une fin de transfert est demandee alors qu'il n'y en a aucun en cours");
               Eblock
          ETes

          Test(IL_FAUT(diffuser_sequence_sinon_numeriser_image))
               Bblock
               CALS(IXclose_pour_l_entree_video_temps_reel());
                                        /* Fermeture de la fenetre 'X-Window'...                                                     */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
          Test(I3ET(IFNE(SGI_____Gentree_video_de_repos,VL_MUXSWITCH_COMPOSITE_1)
                   ,IFNE(SGI_____Gentree_video_de_repos,VL_MUXSWITCH_COMPOSITE_2)
                   ,IFNE(SGI_____Gentree_video_de_repos,VL_MUXSWITCH_COMPOSITE_3)
                    )
               )
               Bblock
               PRINT_ERREUR("l'entree video de repos n'est pas reconnue (entree implicite forcee)");
               EGAL(SGI_____Gentree_video_de_repos,VL_MUXSWITCH_COMPOSITE_DE_REPOS);
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur
                             ,intVal
                             ,SGI_____Gentree_video_de_repos
                             ,VL_MUXSWITCH
                             ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
                             ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
                              );
                                        /* Mise en place d'une source video de "repos". Ceci a ete introduit, car malgre le          */
                                        /* 'VLDESTROYPATH(...)' qui suit, on continue a voir, apres le 'VLCLOSEVIDEO(...)' sur       */
                                        /* les sorties composite 'Pal' (bien qu'avec jitter)  et 'RVB' la video entrante...          */
                                        /* Un 'VLRESTOREFACTORYDEFAULTS(...)' ne fait pas l'affaire non plus que le controle :       */
                                        /*                                                                                           */
                                        /*                  PARAMETRAGE_NOEUD_1(identite_du_noeud_emetteur                           */
                                        /*                                     ,intVal                                               */
                                        /*                                     ,VL_SIGNAL_BLACK                                      */
                                        /*                                     ,VL_SIGNAL                                            */
                                        /*                                     ,EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL         */
                                        /*                                     ,UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION        */
                                        /*                                      );                                                   */
                                        /*                                                                                           */
                                        /* qui n'est pas supporte par la carte 'Galileo'. Enfin, un 'VLREMOVENODE(...)' (procedure   */
                                        /* d'ailleurs non definie...) ne fait pas non plus l'affaire...                              */
                                        /*                                                                                           */
                                        /* On notera que bizarrement, dans 'IGclose(...)' le fonctionnement de 'VLDESTROYPATH(...)'  */
                                        /* donne toute satisfaction et assure donc le retour au noir de la sortie...                 */
                                        /*                                                                                           */
                                        /* Enfin, on regardera la commande 'allume' introduite dans '$Fdivers' afin de traiter le    */
                                        /* cas particulier du login. Mais ceci s'est avere insuffisant ; en effet, si au moment du   */
                                        /* login, le disque video est par exemple actif (c'est-a-dire presente une image), celle-ci  */
                                        /* est vue sur la sortie 'RVB', meme apres la commande 'allume'. C'est pourquoi, l'appel a   */
                                        /* la commande 'video' a ete ajoute afin de garantir la mise en place de l'entree video      */
                                        /* 'SGI_____Gentree_video_de_repos' ; on notera que cette operation ne peut etre mise en     */
                                        /* place de plus et simplement dans 'IGclose(...)' a cause de l'ordre des definitions qui    */
                                        /* sont faites ici (dans '$xiidG/fonction.1$FON') ; cela demanderait de deplacer plusieurs   */
                                        /* morceaux (par exemple la definition de 'SGI_____Gentree_video_de_repos'), ce qui presente */
                                        /* toujours un certain danger... Enfin, derniere raison d'impossibilite, dans la fonction    */
                                        /* 'Gclose(...)', le noeud 'identite_du_noeud_emetteur' (de type 'VL_VIDEO') n'existe pas.   */
                                        /*                                                                                           */
                                        /* On consultera aussi les commentaires relatifs a l'alias 'Ivideo' dans les deux fichiers   */
                                        /* 'v $Fdivers' et 'v $xci/disk_video_P$Z'...                                                */
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )

#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

          CALS(VLDESTROYPATH(identite_du_serveur_video
                            ,chemin_emetteur_recepteur
                             )
               );
                                        /* Puis destruction du chemin entre l'emetteur et le recepteur...                            */

          Test(PAS_D_ERREUR(VLCLOSEVIDEO(identite_du_serveur_video)))
                                        /* Enfin, fermeture de la connexion video...                                                 */
               Bblock
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("la fermeture de la connexion video est impossible");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fin d'une sequence est demandee alors qu'il n'y a pas eu de debut");
          Eblock
     ETes

     EGAL(la_connexion_video_pour_une_sequence_video_temps_reel_a_pu_etre_etablie,FAUX);
                                        /* A priori, on ne sait pas ce qui se passera la fois suivante...                            */

     RETU_ERROR;
     Eblock

EFonctionI

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

BFonctionI

DEFV(Common,DEFV(FonctionI,IGfin_de_diffusion_d_une_sequence_video_temps_reel()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     BDEFV(image,composante_numerisee_ROUGE);
     BDEFV(image,composante_numerisee_VERTE);
     BDEFV(image,composante_numerisee_BLEUE);
                                        /* Ces trois images sont en fait inutiles, mais crees malgre tout afin de pouvoir appeler    */
                                        /* correctement 'IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)'.           */
     DEFV(Int,INIT(methode_de_redimensionnement,UNDEF));
                                        /* Methode de redimensionnement inutilisee ici...                                            */
     /*..............................................................................................................................*/
     CALS(IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(DIFFUSER_UNE_SEQUENCE_VIDEO_TEMPS_REEL
                                                                    ,composante_numerisee_ROUGE
                                                                    ,composante_numerisee_VERTE
                                                                    ,composante_numerisee_BLEUE
                                                                    ,methode_de_redimensionnement
                                                                     )
          );

     EDEFV(image,composante_numerisee_BLEUE);
     EDEFV(image,composante_numerisee_VERTE);
     EDEFV(image,composante_numerisee_ROUGE);
                                        /* Ces trois images sont en fait inutiles, mais crees malgre tout afin de pouvoir appeler    */
                                        /* correctement 'IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(...)'.           */

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I N   D E   N U M E R I S A T I O N   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IGfin_de_numerisation_d_une_image_video(composante_numerisee_ROUGE
                                                                  ,composante_numerisee_VERTE
                                                                  ,composante_numerisee_BLEUE
                                                                  ,methode_de_redimensionnement
                                                                   )
                 )
     )
DEFV(Argument,DEFV(image,composante_numerisee_ROUGE));
DEFV(Argument,DEFV(image,composante_numerisee_VERTE));
DEFV(Argument,DEFV(image,composante_numerisee_BLEUE));
                                        /* Resultat de la numerisation d'une image lorsqu'elle est demandee...                       */
DEFV(Argument,DEFV(Int,methode_de_redimensionnement));
                                        /* Methode de redimensionnement demandee pour l'eventuelle image numerisee...                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     CALS(IGfin_de_diffusion_ou_de_numerisation_d_une_sequence_video(NUMERISER_UNE_IMAGE_D_UNE_SEQUENCE_VIDEO_TEMPS_REEL
                                                                    ,composante_numerisee_ROUGE
                                                                    ,composante_numerisee_VERTE
                                                                    ,composante_numerisee_BLEUE
                                                                    ,methode_de_redimensionnement
                                                                     )
          );

     RETU_ERROR;
     Eblock

EFonctionI

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_01
#              undef     DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y
#              undef     DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
#              undef     DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y
#              undef     DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
#              undef     PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_X
#              undef     PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_Y
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_01

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              undef     DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y

#              if        (nSYSTEM_RELEASE < 503000000)
#                   undef     DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
#              Aif       (nSYSTEM_RELEASE < 503000000)
#              Eif       (nSYSTEM_RELEASE < 503000000)

#              if        (nSYSTEM_RELEASE >= 503000000)
#                   undef     DECALAGE_2_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
#              Aif       (nSYSTEM_RELEASE >= 503000000)
#              Eif       (nSYSTEM_RELEASE >= 503000000)

#              undef     DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_Y
#              undef     DECALAGE_1_VIDEO_DANS_LA_FENETRE_X_WINDOW_X
#              undef     PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_X
#              undef     PASSAGE_FORMAT_VIDEO_FORMAT_X_WINDOW_Y
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#         ifdef     GESTION_DE_L_OPTION_GALILEO_VERSION_02
#              undef     VL_FILTER
#              undef     VL_PREFILTER
#              undef     VL_QUALITY
#              undef     VL_TBCMODE

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
#                   undef     VL_MUXSWITCH_COMPOSITE_DE_REPOS
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_VLDESTROYPATH_ENTREE_VIDEO_TEMPS_REEL))                                \
                          )

#              undef     VL_MUXSWITCH_COMPOSITE
#              undef     VL_MUXSWITCH_Y_RmY_BmY_2
#              undef     VL_MUXSWITCH_Y_RmY_BmY_1
#              undef     VL_MUXSWITCH_COMPOSITE_3
#              undef     VL_MUXSWITCH_COMPOSITE_2
#              undef     VL_MUXSWITCH_COMPOSITE_1
#              undef     VL_MUXSWITCH_YsC_3
#              undef     VL_MUXSWITCH_YsC_2
#              undef     VL_MUXSWITCH_YsC_1
#              undef     VL_DEFAULT_SOURCE_DIGITAL_2
#              undef     VL_DEFAULT_SOURCE_DIGITAL_1
#              undef     VL_DEFAULT_SOURCE_ANALOG

#              if        (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
#                   undef     SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO
#              Aif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )
#                   undef     SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE_EN_ENTREE_VIDEO
#              Eif       (         (defined(BUG_SYSTEME_SGIND_VL_ENTREE_VIDEO_TEMPS_REEL_NON_GENLOCKEE))                                \
                          )

#              undef     VL_SYNC_SOURCE_COMPOSITE
#              undef     VL_SYNC_SOURCE_COMPOSITE_3
#              undef     VL_SYNC_SOURCE_COMPOSITE_2
#              undef     VL_SYNC_SOURCE_COMPOSITE_1
#              undef     CHOIX_DE_LA_SOURCE_DE_SYNCHRONISATION_EXTERNE
#         Aifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02
#         Eifdef    GESTION_DE_L_OPTION_GALILEO_VERSION_02

#         undef     VISUALISER_UNE_IMAGE_RASTER
#         undef     VISUALISER_LE_CONTENU_DE_L_ECRAN_DE_LA_STATION_DE_TRAVAIL

#         undef     SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE
#         undef     SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE
#         undef     NE_PAS_SYNCHRONISER_LA_CARTE_GALILEO_SUR_UNE_SOURCE_EXTERNE

#         if        (nSYSTEM_RELEASE < 503000000)
#              undef     DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT
#              undef     LISTE_DES_EVENEMENTS_A_DETECTER
#         Aif       (nSYSTEM_RELEASE < 503000000)
#         Eif       (nSYSTEM_RELEASE < 503000000)

#         if        (nSYSTEM_RELEASE >= 503000000)
#              undef     DETECTION_DES_DEFAUTS_EN_COURS_DE_TRANSFERT
#              undef     TEMPORISATION_DE_BLOCAGE_SUR_DEFAUT_EN_COURS_DE_TRANSFERT
#              undef     TEMPORISATION_AVANT_DE_TESTER_LES_EVENEMENTS
#              undef     LISTE_DES_EVENEMENTS_A_DETECTER
#         Aif       (nSYSTEM_RELEASE >= 503000000)
#         Eif       (nSYSTEM_RELEASE >= 503000000)

#    Aifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */
#    Eifdef    __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : VidAnal.  */

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     nPARAMETRAGE_NOEUD_1
#         undef     nPARAMETRAGE_NOEUD_2
#         undef     PARAMETRAGE_NOEUD_2
#         undef     ERREUR_DE_PARAMETRAGE
#         undef     PARAMETRAGE_NOEUD_1
#         undef     NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
#         undef     EDITER_LES_MESSAGES_D_ERREUR_DE_VLSETCONTROL
#         undef     UNE_ERREUR_ICI_NE_DOIT_PAS_FORCER_L_ITERATION
#         undef     UNE_ERREUR_ICI_DOIT_FORCER_L_ITERATION
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     REINITIALISATION_DE_LA_CARTE_GALILEO

#         if        (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )
#              undef     VLSETUPPATHS
#              undef     VLSETCONTROL
#              undef     VLSELECTEVENTS
#              undef     VLRESTORESYSTEMDEFAULTS
#              undef     VLRESTOREFACTORYDEFAULTS
#              undef     VLREGISTERBUFFER
#              undef     VLPUTVALID
#              undef     VLPUTFREE
#              undef     VLPERROR
#              undef     VLPENDING
#              undef     VLOPENVIDEO
#              undef     VLNEXTEVENT
#              undef     VLGETTRANSFERSIZE
#              undef     VLGETNODE
#              undef     VLGETNEXTVALID
#              undef     VLGETNEXTFREE
#              undef     VLGETDEVICELIST
#              undef     VLGETDEVICE
#              undef     VLGETCONTROL
#              undef     VLGETACTIVEREGION
#              undef     VLENDTRANSFER
#              undef     VLDESTROYPATH
#              undef     VLDESTROYBUFFER
#              undef     VLDEREGISTERBUFFER
#              undef     VLCREATEPATH
#              undef     VLCREATEBUFFER
#              undef     VLCLOSEVIDEO
#              undef     VLBUFFERDONE
#              undef     VLBEGINTRANSFER
#              undef     VLADDNODE
#         Aif       (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )
#         Eif       (         (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_01))                                                         \
                    ||        (defined(GESTION_DE_L_OPTION_GALILEO_VERSION_02))                                                         \
                     )

#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#         undef     SE_SYNCHRONISER_SUR_UNE_SOURCE_EXTERNE
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_GENLOCK_DU_GRAPHIQUE_SILICON_GRAPHICS))                                  \
                )

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         undef     FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         undef     APPEL_D_UNE_FONCTION_X_WINDOW_POUR_OpenGL
#         undef     FENETRE_PAS_OUVERTE_OU_PROBLEMES_A_L_OUVERTURE
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     NOM_DU_DEVICE_ATTENDU
#         undef     DEMANDE_D_UN_DEVICE_INDIFFERENT
#         undef     POINTEUR_SUR_UN_OBJET_GALILEO_INEXISTANT
#         undef     NOM_DU_SERVEUR_VIDEO_DE_L_OPTION_GALILEO

#         if        (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )
#              undef     NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO
#         Aif       (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )
#              undef     NOMBRE_DE_TENTATIVES_DE_CONNEXION_VIDEO
#         Eif       (         (defined(BUG_SYSTEME_SGIND_VL_PREMIERE_CONNEXION_VIDEO))                                                  \
                     )

#         undef     TAILLE_REELLE_DES_IMAGES_EN_OCTETS

#         undef     TEMPORISATION_DES_Tant_ATTENTE_DE_BUFFER
#         undef     TEMPORISATION_DES_Tant_D_ETABLISSEMENT_DE_CONNEXION

#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#         undef     dimYG_d_une_fenetre_HAUTE_DEFINITION
#         undef     dimXG_d_une_fenetre_HAUTE_DEFINITION
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_GL

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         undef     dimYG_d_une_fenetre_HAUTE_DEFINITION
#         undef     dimXG_d_une_fenetre_HAUTE_DEFINITION
#         undef     REDUIRE_dimXYG
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    if        (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#         undef     Cast_G_VLPathList
#    Aif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )
#    Eif       (         (defined(__VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS))                         \
                )

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : compiler sur 'SiliG'.    */
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_SILICON_GRAPHICS                     /* Common,DEFV(Fonction,) : compiler sur 'SiliG'.    */

_______________________________________________________________________________________________________________________________________



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.