_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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 O U S   ' X - W I N D O W '   ( O U   ' X 1 1 ' )  :                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les fonctions                                                                       */
/*                  de base d'edition des images raster sous 'X-Window',                                                             */
/*                  quelle que soit la definition.                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Les fichiers de '$xiidX' peuvent demander                                                                      */
/*                  un "parametrage" specifique lie aux serveurs                                                                     */
/*                  utilises. Cela peut se manifester dans le                                                                        */
/*                  fichier '$xiidX/fonct$vv$FON' avec la                                                                            */
/*                  definition des couples de procedures suivants :                                                                  */
/*                                                                                                                                   */
/*                                      ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                    */
/*                                      ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                    */
/*                                      ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03                                                    */
/*                                                                                                                                   */
/*                  (ce mode a ete etudie grace a 'v $xtc/Xwindow.43$c')                                                             */
/*                                                                                                                                   */
/*                  et :                                                                                                             */
/*                                                                                                                                   */
/*                                      LAISSER_LES_NIVEAUX_DE_L_IMAGE_EN_L_ETAT                                                     */
/*                                      INVERSER_LES_NIVEAUX_DE_L_IMAGE                                                              */
/*                                                                                                                                   */
/*                  dans lesquels, les identites des serveurs sont testees                                                           */
/*                  physiquement par 'LE_SERVEUR_X_WINDOW_EST_CELUI_DE(...)'                                                         */
/*                  en faisant ensuite donc des tests sur leurs caracteristiques                                                     */
/*                  physiques (ce qui n'est pas tres elegant...).                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    Je me permets de rappeler le scandale                                                                          */
/*                  de 'X-Window' : l'axe 'OY' descend, alors                                                                        */
/*                  que partout ailleurs, logiquement, il                                                                            */
/*                  monte...                                                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiidX/fonct$vv$FON' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19910000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_X_WINDOW                             /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW));
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW                             /* Common,DEFV(Fonction,) : indicateur de VERSION.   */
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW                             /* Common,DEFV(Fonction,) : indicateur de VERSION.   */

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW         /* Common,DEFV(Fonction,) : sous X-Window compiler la bibliotheque.      */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_X_WINDOW_IMAGE_2                                     /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_X_WINDOW_IMAGE_2));
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2                                     /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2                                     /* Common,DEFV(Fonction,) : bug...                   */

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

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

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

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

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

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

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

#    ifdef     BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1              /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1));
                                        /* Introduit le 20170619162745...                                                            */
#    Aifdef    BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1              /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1              /* Common,DEFV(Fonction,) : bug...                   */

#    ifdef     BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2              /* Common,DEFV(Fonction,) : bug...                   */
DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2));
                                        /* Introduit le 20170619162745...                                                            */
#    Aifdef    BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2              /* Common,DEFV(Fonction,) : bug...                   */
#    Eifdef    BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2              /* Common,DEFV(Fonction,) : bug...                   */

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

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

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

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

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

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

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

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C I T E   D E S   L I G N E S   D E S   " B I T M A P " S  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES                                                                                   \
                         MUL2(INTE(SCAL(dimX,NBITOC,MULTIPLICITE_DES_LIGNES_DES_BITMAPS))                                               \
                             ,COND(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)                                     \
                                  ,UN                                                                                                   \
                                  ,NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                                   \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Nombre d'octets occupes par une ligne d'image.                                            */
#    define    MULTIPLICITE_DES_LIGNES_DES_BITMAPS                                                                                      \
                         NOMBRE_DE_BITS_POUR_LE_BLANC(size_p)                                                                           \
                                        /* L'Argument dit 'bitmap_pad' de 'XCreateImage(...)' ne peut valoir que 8, 16 ou 32...      */

#    if        (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )
#         define    BYTES_PER_LINE_XCreateImage(longueur_en_octets_des_lignes_d_images)                                                 \
                              ZERO                                                                                                      \
                                        /* Introduit le 20071127112910. En effet, sur ce SYSTEME, le dernier argument de la fonction */ \
                                        /* 'XCreateImage(...)' (soit "bytes_per_line") ne signifie pas exactement ce que je crois.   */ \
                                        /* Il est donc suggere de lui donner une valeur nulle, ce qui permettra son calcul correct   */ \
                                        /* a l'interieur de 'XCreateImage(...)' et evitera le message :                              */ \
                                        /*                                                                                           */ \
                                        /*                  Segmentation fault (core dumped)                                         */ \
                                        /*                                                                                           */ \
                                        /* bien rare fort heureusement...                                                            */
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )
#         define    BYTES_PER_LINE_XCreateImage(longueur_en_octets_des_lignes_d_images)                                                 \
                              longueur_en_octets_des_lignes_d_images
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )

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

#    if        (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )
#         define    AMELIORATION_XCreateImage_3                                                                                         \
                              Bblock                                                                                                    \
                              CALS(XSync(description_du_serveur_et_de_l_ecran,False));                                                  \
                                        /* N'importe quoi (meme un simple 'fprintf(...)' fait l'affaire et fait disparaitre le       */ \
                                        /* probleme suivant :                                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  Sud                                                                      */ \
                                        /*                  $xci/sequence$X     A=... premiere=1 derniere=128                     \  */ \
                                        /*                                      p=$xiP/masque                                     \  */ \
                                        /*                                      D=-1                                              \  */ \
                                        /*                                      editer=VRAI                                       \  */ \
                                        /*                                                                              $formatI     */ \
                                        /*                                                                                           */ \
                                        /* les images {17,18,19,29,34,45,46,47,96,111} au lieu d'etre blanc sur fond noir etaient    */ \
                                        /* plutot jaune sur une fond melange de noir et de structures bleues.                        */ \
                              Eblock                                                                                                    \
                                        /* Amelioration de la fonction 'XCreateImage(...)' (introduit le 20120226073832).            */
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )
#         define    AMELIORATION_XCreateImage_3                                                                                         \
                              Bblock                                                                                                    \
                              BLOC(VIDE;);                                                                                              \
                              Eblock                                                                                                    \
                                        /* Amelioration de la fonction 'XCreateImage(...)' (introduit le 20120226073832).            */
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )

#    if        (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )
DEFV(Local,DEFV(CHAR,INIT(POINTERc(sauvegarde_de_la_memoire_pointee_par__XCreateImage),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* Introduit le 20071128111702...                                                            */
DEFV(Local,DEFV(CHAR,INIT(POINTERc(memoire_allouee_pour__XCreateImage),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* Introduit le 20170722112507...                                                            */

#         define    CALS_XCreateImage(_ximage,_display,_visual,_depth,_format,_offset,_data,_width,_height,_bitmap_pad,_bytes_per_line) \
                              Bblock                                                                                                    \
                              AMELIORATION_XCreateImage_3;                                                                              \
                                                                                                                                        \
                              EGAL(_ximage                                                                                              \
                                  ,XCreateImage(_display                                                                                \
                                               ,_visual                                                                                 \
                                               ,_depth                                                                                  \
                                               ,_format                                                                                 \
                                               ,_offset                                                                                 \
                                               ,_data                                                                                   \
                                               ,_width                                                                                  \
                                               ,_height                                                                                 \
                                               ,_bitmap_pad                                                                             \
                                               ,BYTES_PER_LINE_XCreateImage(_bytes_per_line)                                            \
                                                )                                                                                       \
                                   );                                                                                                   \
                                        /* Rappelons le 20170722112507 que 'XCreateImage(...)' n'alloue pas la memoire necessaire    */ \
                                        /* a l'image '_data'...                                                                      */ \
                                                                                                                                        \
                              EGAL(sauvegarde_de_la_memoire_pointee_par__XCreateImage,ASI1(_ximage,data));                              \
                              EGAL(memoire_allouee_pour__XCreateImage                                                                   \
                                  ,kMalo(MUL2(MAX2(SIZP(KONC(_long,_int)),NOMBRE_DE_COMPOSANTES_CHROMATIQUES),dimXY))                   \
                                   );                                                                                                   \
                              EGAL(ASI1(_ximage,data),memoire_allouee_pour__XCreateImage);                                              \
                                        /* Introduit le 20071127134734. En effet, sur ce SYSTEME, la fonction 'XPutPixel(...)' ne    */ \
                                        /* fonctionne pas bien en ce qui concerne la coordonnee 'Y' et ce lorsqu'elle s'approche     */ \
                                        /* de 'Ymax'. A titre d'exemple, lors de l'affichage d'une image 'Std', il manque environ    */ \
                                        /* le quart inferieur de cette image ; d'autre part, le reaffichage d'une image suite a un   */ \
                                        /* evenement ('v $xiidX/fonct$vv$FON REAFFICHAGE_D_UNE_IMAGE_PAR_IXdisplay') provoque alors  */ \
                                        /* le message :                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  Segmentation fault (core dumped)                                         */ \
                                        /*                                                                                           */ \
                                        /* Il semble que l'espace alloue a l'image ('ASI1(imageR,data)') soit insuffisant, d'ou      */ \
                                        /* cette reallocation...                                                                     */ \
                                        /*                                                                                           */ \
                                        /* On notera le 'SIZP(KONC(_long,_int))' car, en effet, 'LongInt' est le type des niveaux    */ \
                                        /* des points qui sont traites par 'XPutPixel(...)'.                                         */ \
                              Eblock                                                                                                    \
                                        /* Acces a la fonction 'XCreateImage(...)' (introduit le 20071128111702).                    */
#         define    CALS_XDestroyImage(_ximage)                                                                                         \
                              Bblock                                                                                                    \
                              Test(IFEQ(ptCARA(ASI1(_ximage,data)),memoire_allouee_pour__XCreateImage))                                 \
                                        /* Test mis en place le 20170722112507 pour eviter un :                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Segmentation fault                                                       */ \
                                        /*                                                                                           */ \
                                        /* dans le 'XDestroyImage(...)' qui suit...                                                  */ \
                                   Bblock                                                                                               \
                                   EGAL(ASI1(_ximage,data),sauvegarde_de_la_memoire_pointee_par__XCreateImage);                         \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                        /* Restauration de l'allocation memoire faite par 'XCreateImage(...)'...                     */ \
                                                                                                                                        \
                              CALS(XDestroyImage(_ximage));                                                                             \
                                                                                                                                        \
                              CALZ_FreSS(memoire_allouee_pour__XCreateImage);                                                           \
                              Eblock                                                                                                    \
                                        /* Acces a la fonction 'XDestroyImage(...)' (introduit le 20071128111702).                   */
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )
#         define    CALS_XCreateImage(_ximage,_display,_visual,_depth,_format,_offset,_data,_width,_height,_bitmap_pad,_bytes_per_line) \
                              Bblock                                                                                                    \
                              EGAL(_ximage                                                                                              \
                                  ,XCreateImage(_display                                                                                \
                                               ,_visual                                                                                 \
                                               ,_depth                                                                                  \
                                               ,_format                                                                                 \
                                               ,_offset                                                                                 \
                                               ,_data                                                                                   \
                                               ,_width                                                                                  \
                                               ,_height                                                                                 \
                                               ,_bitmap_pad                                                                             \
                                               ,_bytes_per_line                                                                         \
                                                )                                                                                       \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                                        /* Acces a la fonction 'XCreateImage(...)' (introduit le 20071128111702).                    */
#         define    CALS_XDestroyImage(_ximage)                                                                                         \
                              Bblock                                                                                                    \
                              CALS(XDestroyImage(_ximage));                                                                             \
                              Eblock                                                                                                    \
                                        /* Acces a la fonction 'XDestroyImage(...)' (introduit le 20071128111702).                   */
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N V E R S I O N   D ' U N E   I M A G E   E N   U N   E N S E M B L E                                                  */
/*        D E   " B I T M A P " S   P A R A L L E L E S   S A N S   I N V E R S I O N   D E   L ' A X E   ' O Y '  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP                                                                                     \
                         IFNE(NOMBRE_DE_BITS_PAR_POINT,Bsize_p)                                                                         \
                                        /* Test permettant de savoir si une conversion en un bit-map est necessaire...               */
#    define    REDUCTION_HORIZONTALE(longueur,pas_horizontal)                                                                           \
                         QUOD(longueur,pas_horizontal)                                                                                  \
                                        /* Reduction d'une longueur horizontale.                                                     */
#    define    REDUCTION_VERTICALE(hauteur,pas_vertical)                                                                                \
                         QUOD(hauteur,pas_vertical)                                                                                     \
                                        /* Reduction d'une longueur verticale.                                                       */
#    define    DIMENSION_HORIZONTALE_DU_BIT_MAP(pas_horizontal)                                                                         \
                         MULE(REDUCTION_HORIZONTALE(dimX,pas_horizontal),MULTIPLICITE_DES_LIGNES_DES_BITMAPS)                           \
                                        /* Bien que le "bit-map" soit un vecteur, on definit une pseudo-dimension horizontale ; on   */ \
                                        /* notera que l'on utilise 'pasX_global' et non pas 'pasX' a cause de la boucle effectuee    */ \
                                        /* dans 'IXanimation()' : 'begin_ligneQ(DoIn,Xmin,Xmax,dimX_des_trames)' et qui redefinit    */ \
                                        /* le pas horizontal...                                                                      */
#    define    DIMENSION_VERTICALE_DU_BIT_MAP(pas_vertical)                                                                             \
                         REDUCTION_VERTICALE(dimY,pas_vertical)                                                                         \
                                        /* Bien que le "bit-map" soit un vecteur, on definit une pseudo-dimension verticale ; on     */ \
                                        /* notera que l'on utilise 'pasY_global' et non pas 'pasY' a cause de la boucle effectuee    */ \
                                        /* dans 'IXanimation()' : 'begin_colonneQ(DoIn,Ymin,Ymax,dimY_des_trames)' et qui redefinit  */ \
                                        /* le pas vertical...                                                                        */
#    define    DIMENSION_DU_BIT_MAP                                                                                                     \
                         INTE(SCAL(MUL2(DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX)                                                          \
                                       ,DIMENSION_VERTICALE_DU_BIT_MAP(pasY)                                                            \
                                        )                                                                                               \
                                  ,NBITOC                                                                                               \
                                  ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS                                                                  \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Nombre d'octets necessaires pour memoriser le "bit-map" etant donne le fait que les       */ \
                                        /* lignes doivent debuter a des multiples de 'MULTIPLICITE_DES_LIGNES_DES_BITMAPS'...        */

BFonctionC

#    define    PREMIER_ELEMENT_DU_BIT_MAP                                                                                               \
                         INDEX0                                                                                                         \
                                        /* Indice du premier element du "bit-map".                                                   */

DEFV(Local,DEFV(FonctionC,POINTERc(Igeneration_d_un_bitmap(bitmapR,imageA))))
DEFV(Argument,DEFV(CHAR,DTb0(bitmapR)));
                                        /* Vecteur Resultat, telle que : au debut de bitmapR[i] on trouve les poids faibles de       */
                                        /* imageA[X][Y], et a la fin, les poids forts.                                               */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument.                                                                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIT(element_courant_du_bit_map,CARA(ZERO)));
                                        /* Element courant du "bit-map" (en cours de construction).                                  */
     DEFV(Int,INIT(old_X,Xmin));
     DEFV(Int,INIT(old_Y,Ymin));
                                        /* Coordonnees courantes dans 'imageA'.                                                      */
     DEFV(Int,INIT(extracteur_de_bits,SOUS(NOMBRE_DE_BITS_POUR_LE_BLANC(size_p),LBIT)));
                                        /* Extracteur des bits de 'imageA' des poids les plus forts vers les poids les               */
                                        /* plus faibles...                                                                           */
     /*..............................................................................................................................*/
     IDoIn(index_du_bit_map,PREMIER_ELEMENT_DU_BIT_MAP,LSTX(PREMIER_ELEMENT_DU_BIT_MAP,DIMENSION_DU_BIT_MAP),I)
                                        /* Le 20060603174608, 'IDoIn(...)' a remplace 'DoIn(...)'...                                 */
          Bblock
          EGAL(element_courant_du_bit_map,CARA(ZERO));
                                        /* Initialisation de l'element courant du "bitmap"...                                        */
          Komp(compteur_des_bits_d_un_point,NBITOC)
               Bblock
               EGAL(element_courant_du_bit_map
                   ,OUIN(SLLS(element_courant_du_bit_map,LBIT)
                        ,ETLO(SLRS(load_point_valide(imageA,old_X,old_Y)
                                  ,extracteur_de_bits
                                   )
                             ,BIT
                              )
                         )
                    );
                                        /* Recuperation des bits de meme poids dans des points successifs de 'imageA', et            */
                                        /* concatenation dans 'bitmapR'. Mais ATTENTION, on ne peut optimiser d'avantage, par        */
                                        /* exemple en ne decalant qu'apres la boucle 'Komp(...)' 'element_courant_du_bit_map', car   */
                                        /* en effet, en toute generalite, 'extracteur_de_bits' peut changer a l'interieur de cette   */
                                        /* meme boucle...                                                                            */
               INCR(old_X,pasX);
                                        /* Parcours horizontal de 'imageA'.                                                          */
               Test(IFGT(old_X,XYZmax(Xmin,MULE(dimX,MULTIPLICITE_DES_LIGNES_DES_BITMAPS))))
                                        /* Nota important : c'est la conjonction du 'load_point_valide(...)' ci-dessus, et du        */
                                        /* test de 'old_X' par rapport a 'Xmax' (ramene a 'MULTIPLICITE_DES_LIGNES_DES_BITMAPS'      */
                                        /* par exces), qui permet de gerer correctement le cas ou le nombre de points par ligne      */
                                        /* n'est pas un multiple de 'MULTIPLICITE_DES_LIGNES_DES_BITMAPS'. Ainsi, on complete les    */
                                        /* lignes eventuellement avec des points qui n'existent pas.                                 */
                    Bblock
                    EGAL(old_X,Xmin);
                    INCR(old_Y,pasY);
                                        /* Lorsqu'on est en bout de ligne, on passe au debut (Xmin) de la ligne suivante...          */
                    Test(IFGT(old_Y,Ymax))
                         Bblock
                         EGAL(old_Y,Ymin);
                                        /* Lorsqu'on est en bas de l'image, on revient en haut (Xmin,Ymin), et ce pour le poids      */
                                        /* precedent des bits extraits...                                                            */
                         Test(IZLT(extracteur_de_bits))
                              Bblock
                              PRINT_ERREUR("le poids des bits extraits est trop faible");
                              Eblock
                         ATes
                              Bblock
                              DECR(extracteur_de_bits,LBIT);
                                        /* Lorsqu'on est en bas de l'image, on revient en haut (Xmin,Ymin), et ce pour le poids      */
                                        /* precedent des bits extraits...                                                            */
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          EKom

          EGAL(ITb0(bitmapR,INDX(index_du_bit_map,PREMIER_ELEMENT_DU_BIT_MAP)),element_courant_du_bit_map);
                                        /* Mise en place de l'element courant du "bitmap" apres sa construction...                   */
          Eblock
     EIDoI

     RETI(bitmapR);
     Eblock

#    undef     PREMIER_ELEMENT_DU_BIT_MAP

EFonctionC

#    define    DIMENSION_HORIZONTALE_DE_L_IMAGE(pas_horizontal)                                                                         \
                         dimX                                                                                                           \
                                        /* Dimension horizontale du "bit-map" vu comme une image "standard"...                       */
#    define    DIMENSION_VERTICALE_DE_L_IMAGE(pas_vertical)                                                                             \
                         dimY                                                                                                           \
                                        /* Dimension verticale du "bit-map" vu comme une image "standard"...                         */

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

#    ifdef     BUG_SYSTEME_X_WINDOW_STRUCTURES_1
Dstruct00(_XRegion
         ,NOM_VIDE
          );
                                        /* Pour :           INCLUDE :           REFERENCES :                                         */
                                        /*                                                                                           */
                                        /*                  <X11/Xutil.h>       "typedef struct _XRegion *Region;"                   */
Dstruct00(_XrmHashBucketRec
         ,NOM_VIDE
          );
                                        /* Pour :           INCLUDE :           REFERENCES :                                         */
                                        /*                                                                                           */
                                        /*                  <X11/Xlib.h>        "struct _XrmHashBucketRec *db;"                      */
                                        /*                  <X11/Xresource.h>   "typedef struct _XrmHashBucketRec *XrmHashBucket;"   */
                                        /*                                      "typedef struct _XrmHashBucketRec *XrmDatabase;"     */
Dstruct00(XKeytrans
         ,NOM_VIDE
          );
                                        /* Pour :           INCLUDE :           REFERENCES :                                         */
                                        /*                                                                                           */
                                        /*                  <X11/Xlib.h>        "struct XKeytrans *key_bindings;"                    */
#    Aifdef    BUG_SYSTEME_X_WINDOW_STRUCTURES_1
#    Eifdef    BUG_SYSTEME_X_WINDOW_STRUCTURES_1

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N C L U D E S   S P E C I F I Q U E S   D E   ' X - W I N D O W S '  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, il y avait ici autrefois (ce qui etait plus logique) :                         */
                                        /*                                                                                           */
                                        /*                  @    include   <X11/X.h>                                                 */
                                        /*                                                                                           */
                                        /* Mais, depuis que l'on trouve dans 'v $xiidX/fonct$vv$FON' :                               */
                                        /*                                                                                           */
                                        /*                  DEFV(Common,DEFV(X_Window,X11_____fenetre_courante));                    */
                                        /*                                                                                           */
                                        /* sur toute machine sur laquelle on compile 'X-Window' cette directive se retrouve donc     */
                                        /* dans 'v $xiidX/fonct$vv$EXT', et demande donc que le type 'Window' soit defini avant,     */
                                        /* ce qui est fait maintenant dans 'v $xiidX/fonct$vv$DEF'...                                */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
@         include   <GL/glx.h>
                                        /* Dans ce fichier se trouvent la liste des fichiers utiles...                               */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
@         include   <X11/Xlib.h>
                                        /* Dans ce fichier se trouvent la plupart des structures (defines en tant que 'typedef'),    */
                                        /* ainsi que des defines du type 'RootWindow()'...                                           */
@         include   <X11/Xutil.h>
                                        /* Dans ce fichier se trouvent des choses diverses et variees, et par exemple des            */
                                        /* defines du type 'XGetPixel()', ainsi que des "objets" relatifs aux 'hints'.               */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   E T   I N T E R N E S  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefS(X_Void,Void)
                                        /* Structure definissant un type "vide". Son introduction a ete faite le 19970214093401      */
                                        /* lors de la mise en route de '$LACT29', certaines fonction ayant change de type (voir      */
                                        /* le type 'X_Int_Void' qui est defini ci-apres...).                                         */
                                        /*                                                                                           */
                                        /* ATTENTION, le 19990226161158, lors du passage a la version '702010000' de '$Cc', il       */
                                        /* a fallu revenir au type 'Int' pour les suivantes qui etaient donc passees a 'Void' :      */
                                        /*                                                                                           */
                                        /*                  XChangeWindowAttributes                                                  */
                                        /*                  XDestroyWindow                                                           */
                                        /*                  XFree                                                                    */
                                        /*                  XFreeColormap                                                            */
                                        /*                  XFreeGC                                                                  */
                                        /*                  XInstallColormap                                                         */
                                        /*                  XMapWindow                                                               */
                                        /*                  XSelectInput                                                             */
                                        /*                  XSetCloseDownMode                                                        */
                                        /*                  XSetWindowBackground                                                     */
                                        /*                  XSetWindowBorder                                                         */
                                        /*                  XSetWindowColormap                                                       */
                                        /*                  XStoreColors                                                             */
                                        /*                  XSync                                                                    */
                                        /*                  XUnmapWindow                                                             */
                                        /*                                                                                           */
                                        /* Amusant, non ?                                                                            */

#    if        (         ((defined(SYSTEME_SGO200A1_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
                )
TypedefS(X_Int_Void,X_Void)
#    Aif       (         ((defined(SYSTEME_SGO200A1_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
                )
TypedefS(X_Int_Void,X_Int)
#    Eif       (         ((defined(SYSTEME_SGO200A1_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && ((nC_RELEASE >= 701000000) && (nC_RELEASE < 702010000)))               \
                )

                                        /* Structure definissant un entier de base...                                                */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefS(X_Int,vrai_Int_de_base)                                         */
                                        /*                  TypedefS(A___X_Int,X_Int)                                                */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#         TestADef  BUG_SYSTEME_X_WINDOW_X_Positive                                                                                     \
                                        /* Ce type, a cause des verifications des types des fonctions doit etre obligatoirement      */ \
                                        /* de type 'unsigned long int'...                                                            */
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )

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

#    if        (         (! defined(BUG_SYSTEME_X_WINDOW_X_Positive))                                                                   \
                )
TypedefS(X_Positive,CONC(Unsigned,vrai_Int_de_base))
                                        /* Structure definissant un entier non signe de base...                                      */
#    Aif       (         (! defined(BUG_SYSTEME_X_WINDOW_X_Positive))                                                                   \
                )
TypedefS(X_Positive,CONC(Unsigned,LongInt))
                                        /* Structure definissant un entier non signe de base...                                      */
#    Eif       (         (! defined(BUG_SYSTEME_X_WINDOW_X_Positive))                                                                   \
                )

                                        /* Structure definissant un "display" (voir <X11/lib.h>).                                    */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_Display,Display)                                              */
                                        /*                  TypedefS(A___X_Display,X_Display)                                        */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */
TypedefP(X_Status,Status)
                                        /* Structure definissant un etat au retour d'une fonction (voir <X11/Xlib.h>).               */

                                        /* Structure definissant le format descriptif d'une image raster (voir <X11/Xlib.h>).        */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_XImage,XImage)                                                */
                                        /*                  TypedefS(A___X_XImage,X_XImage)                                          */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */

                                        /* Structure definissant un contexte graphique (voir <X11/Xlib.h>).                          */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_GC,GC)                                                        */
                                        /*                  TypedefS(A___X_GC,X_GC)                                                  */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */
TypedefP(X_XEvent,XEvent)
                                        /* Structure definissant la liste des evenements en attente (voir <X11/Xlib.h>).             */

                                        /* Structure definissant les attributs d'une fenetre, et par exemple la gravite, ainsi       */
                                        /* que la palette de couleurs associee (voir <X11/Xlib.h>).                                  */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_XSetWindowAttributes,XSetWindowAttributes)                    */
                                        /*                  TypedefS(A___X_XSetWindowAttributes,X_XSetWindowAttributes)              */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */
TypedefP(X_XSizeHints,XSizeHints)
                                        /* Structure definissant les parametres geometriques d'une fenetre, et en particulier        */
                                        /* ses dimensions et sa position (voir <X11/Xutil.h>).                                       */

                                        /* Structure definissant un visual, c'est-a-dire le nombre de couleurs disponibles,          */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_Visual,Visual)                                                */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */
                                        /* ainsi que la nature 'pseudo' ou 'vraies' couleurs (voir <X11/Xlib.h>).                    */

                                        /* Structure definissant les parametres de recherche d'un "visual" correspondant             */
                                        /* a un type donne (voir <X11/Xutil.h>).                                                     */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_XVisualInfo,XVisualInfo)                                      */
                                        /*                  TypedefS(A___X_XVisualInfo,X_XVisualInfo)                                */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */

                                        /* Structure definissant un identificateur de palette de couleurs (voir <X11/X.h>).          */
                                        /*                                                                                           */
                                        /* A cause de 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', il a ete        */
                                        /* necessaire le 20040617181037 de mettre dans le fichier '$DEF' associe le definitions      */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                  TypedefP(X_Colormap,Colormap)                                            */
                                        /*                  TypedefS(A___X_Colormap,X_Colormap)                                      */
                                        /*                                                                                           */
                                        /* car, en effet, avec cette nouvelle VERSION, les fichiers de type '$EXT' contiendront      */
                                        /* en general des 'Argument's et il est donc necessaire que les 'A___...' correspondant      */
                                        /* soient disponibles avant ces declarations 'Argument's...                                  */
TypedefP(X_XColor,XColor)
                                        /* Structure definissant le format d'une entree de palette de couleurs (voir <X11/Xlib.h>).  */
TypedefP(X_XGCValues,XGCValues)
                                        /* Structure definissant les valeurs d'un contexte graphique, et par exemple la              */
                                        /* fonction d'ecriture des points des images (voir <X11/Xlib.h>).                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E F E R E N C E S   E X T E R N E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(X_Display,POINTERs(XOpenDisplay())));
                                        /* Fonction permettant d'etablir la connexion entre un client (le programme courant)         */
                                        /* et le serveur 'X-Window' argument.                                                        */

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
                                        /* Cette conditionnalite a ete introduite le 20050707100152 suite a un "upgrade"             */
                                        /* de '$LACT17'...                                                                           */
DEFV(Extern,DEFV(X_Int,XCloseDisplay()));
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
DEFV(Extern,DEFV(X_Display,POINTERs(XCloseDisplay())));
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )

                                        /* Fonction permettant de rompre la connexion entre un client (le programme courant)         */
                                        /* et le serveur 'X-Window' argument.                                                        */
                                        /* ATTENTION, avant l'introduction de la 'PASSE 6', cette 'Extern' etait encadre par :       */
                                        /*                                                                                           */
                                        /*                  #    if        (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN3_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN4_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                  DEFV(Extern,DEFV(X_Display,POINTERs(XCloseDisplay())));                  */
                                        /*                  #    Aif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN3_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN4_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                  #    Eif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN3_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SUN4_SUNOS))              \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                                                                                           */
DEFV(Extern,DEFV(X_Int_Void,XSetCloseDownMode()));
                                        /* Fonction permettant de rendre permanent ou temporaire (ce qui signifie qu'elles sont      */
                                        /* detruites lors du 'IXclose(...)') tout ce que l'on cree (et les palettes de couleurs      */
                                        /* en particulier...                                                                         */
DEFV(Extern,DEFV(X_Window,XCreateWindow()));
                                        /* Fonction creant une fenetre et mettant en place certains de ses attributs, mais           */
                                        /* sans la faire apparaitre (voir l'operation 'map').                                        */
DEFV(Extern,DEFV(X_Int_Void,XDestroyWindow()));
                                        /* Fonction fermant une fenetre.                                                             */
DEFV(Extern,DEFV(X_Int_Void,XSelectInput()));
                                        /* Fonction indiquant quels sont les evenements qui seront transmis a la fenetre.            */
DEFV(Extern,DEFV(X_Int,XNextEvent()));
                                        /* Fonction renvoyant l'evenement "interessant" suivant relatif a la fenetre.                */
DEFV(Extern,DEFV(X_Int_Void,XSync()));
                                        /* Fonction "purgeant" la liste des evenements en attente...                                 */
DEFV(Extern,DEFV(X_Int,XSetStandardProperties()));
                                        /* Fonction fixant les proprietes standards de la fenetre.                                   */
DEFV(Extern,DEFV(X_Status,XGetWindowAttributes()));
                                        /* Fonction recuperant les proprietes effectives d'une fenetre...                            */
DEFV(Extern,DEFV(X_Int_Void,XSetWindowBackground()));
                                        /* Fonction fixant le niveau du fond de la fenetre.                                          */
DEFV(Extern,DEFV(X_Int_Void,XSetWindowBorder()));
                                        /* Fonction fixant le niveau de la bordure de la fenetre.                                    */
DEFV(Extern,DEFV(X_Int_Void,XChangeWindowAttributes()));
                                        /* Fonction permettant de changer les attributs d'une fenetre.                               */

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
DEFV(Extern,DEFV(X_XVisualInfo,POINTERs(XGetVisualInfo())));
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
DEFV(Extern,DEFV(X_XVisualInfo,POINTERbp(XGetVisualInfo())));
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )

                                        /* Fonction permettant de recuperer les differents types de visuels supportes physiquement,  */
                                        /* et correspondant a certaines specifications donnees en argument.                          */
                                        /* ATTENTION, avant l'introduction de la 'PASSE 6', cette 'Extern' etait encadre par :       */
                                        /*                                                                                           */
                                        /*                  #    if        (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_ES9000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                  DEFV(Extern,DEFV(X_XVisualInfo,POINTERbp(XGetVisualInfo())));            */
                                        /*                  #    Aif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_ES9000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                  #    Eif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_ES9000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_FX2800_CONCENTRIX))       \  */
                                        /*                                 &&        (! defined(SYSTEME_FX40_CONCENTRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_HP705_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP710_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP720_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP750_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP755_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_HP819_HPUX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_NWS3000_NEWSOS))          \  */
                                        /*                                 &&        (! defined(SYSTEME_RS6000_AIX))              \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D20G_IRIX))            \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D25TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D310VGX_IRIX))         \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D35TG_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SG4D85GT_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND308_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND324_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND3GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND408_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND424_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND4GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND508_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND524_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND5GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND808_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND824_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGIND8GA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA08_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDA24_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGINDAGA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A1_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A2_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO200A4_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO25224_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VA_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGO252VN_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCM801_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_SGPCMA01_IRIX))           \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX8600_ULTRIX))          \  */
                                        /*                                 &&        (! defined(SYSTEME_VAX9000_ULTRIX))          \  */
                                        /*                                  )                                                        */
                                        /*                                                                                           */
DEFV(Extern,DEFV(X_Colormap,XCreateColormap()));
                                        /* Fonction permettant de creer une palette de couleurs.                                     */
DEFV(Extern,DEFV(X_Int_Void,XInstallColormap()));
                                        /* Fonction d'installation physique (au niveau hardware) d'une palette de couleur.           */
DEFV(Extern,DEFV(X_Int_Void,XFreeColormap()));
                                        /* Fonction de desinstallation physique (au niveau hardware) d'une palette de couleur et     */
                                        /* de liberation des ressources correspondantes (elle inclue 'XUninstallColormap(...)')...   */
DEFV(Extern,DEFV(X_Status,XAllocColorCells()));
                                        /* Fonction d'allocation de plusieurs entrees d'une palette de couleurs en mode              */
                                        /* 'read-write', c'est-a-dire que l'on peut faire des mises a jour...                        */
DEFV(Extern,DEFV(X_Int_Void,XStoreColors()));
                                        /* Fonction de positionnement de plusieurs entrees d'une palette de couleurs en mode         */
                                        /* 'read-write', c'est-a-dire que l'on peut faire des mises a jour...                        */
DEFV(Extern,DEFV(X_Int_Void,XSetWindowColormap()));
                                        /* Fonction de "connexion" d'une fenetre a la fenetre a laquelle elle est destinee.          */
DEFV(Extern,DEFV(X_Int_Void,XMapWindow()));
                                        /* Fonction de visualisation d'une fenetre.                                                  */
DEFV(Extern,DEFV(X_Int_Void,XUnmapWindow()));
                                        /* Fonction faisant disparaitre une fenetre ("de-visualisation").                            */
DEFV(Extern,DEFV(X_XImage,POINTERs(XCreateImage())));
                                        /* Fonction permettant de definir une image au sens 'X-Window' a partir d'une                */
                                        /* image raster.                                                                             */

                                        /* ATTENTION : 'XDestroyImage()' (fonction faisant disparaitre la structure d'une image      */
                                        /* raster), n'est pas une fonction, mais un '#define'...                                     */

DEFV(Extern,DEFV(X_GC,XCreateGC()));
                                        /* Fonction de creation d'un contexte graphique.                                             */
DEFV(Extern,DEFV(X_Int_Void,XFreeGC()));
                                        /* Fonction de liberation d'un contexte graphique.                                           */
DEFV(Extern,DEFV(X_Int,XPutImage()));
                                        /* Fonction d'envoi d'une image raster (ou d'une sous-image) dans une fenetre (ou une        */
                                        /* partie d'une fenetre).                                                                    */
DEFV(Extern,DEFV(X_Int_Void,XFree()));
                                        /* Fonction de liberation d'a peu pres n'importe quoi...                                     */
                                        /* ATTENTION, avant l'introduction de la 'PASSE 6', cette 'Extern' etait encadre par :       */
                                        /*                                                                                           */
                                        /*                  #    if        (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                  )                                                        */
                                        /*                  DEFV(Extern,DEFV(X_Int,XFree()));                                        */
                                        /*                  #    Aif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                  )                                                        */
                                        /*                  #    Eif       (         (! defined(SYSTEME_CRAYYMP1_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP2_UNICOS))         \  */
                                        /*                                 &&        (! defined(SYSTEME_CRAYYMP4_UNICOS))         \  */
                                        /*                                  )                                                        */
                                        /*                                                                                           */
#    define    Xliberation(pointeur)                                                                                                    \
                         XFree(Cara(pointeur))                                                                                          \
                                        /* Numero de l'ecran utilise sur le serveur courant.                                         */

                                        /* Le 20170711170134 je note l'absence apparente des declarations suivantes :                */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*   :Debut_listMN_FauxExterns_11:                                                           */
                                        /*                                                                                           */
                                        /*                  DEFV(Extern,DEFV(X_Window,RootWindow()));                                */
                                        /*                  DEFV(Extern,DEFV(X_Int,ScreenCount()));                                  */
                                        /*                  DEFV(Extern,DEFV(X_Int,VendorRelease()));                                */
                                        /*                  DEFV(Extern,DEFV(X_UnsignedLongInt,WhitePixel()));                       */
                                        /*                  DEFV(Extern,DEFV(X_Int_Void,XDefaultScreenOfDisplay()));                 */
                                        /*                  DEFV(Extern,DEFV(X_Int,XDestroyImage()));                                */
                                        /*                  DEFV(Extern,DEFV(X_Int,XPutPixel()));                                    */
                                        /*                  DEFV(Extern,DEFV(X_Int,BitmapBitOrder()));                               */
                                        /*                  DEFV(Extern,DEFV(X_UnsignedLongInt,BlackPixel()));                       */
                                        /*                  DEFV(Extern,DEFV(X_Colormap,DefaultColormap()));                         */
                                        /*                  DEFV(Extern,DEFV(X_Int,DefaultDepth()));                                 */
                                        /*                  DEFV(Extern,DEFV(X_Int,DefaultScreen()));                                */
                                        /*                  DEFV(Extern,DEFV(X_Int,DisplayHeight()));                                */
                                        /*                  DEFV(Extern,DEFV(X_Int,DisplayWidth()));                                 */
                                        /*                  DEFV(Extern,DEFV(X_Int,DoesBackingStore()));                             */
                                        /*                  DEFV(Extern,DEFV(X_Bool,DoesSaveUnders()));                              */
                                        /*                  DEFV(Extern,DEFV(X_Visual,POINTERs(DefaultVisual())));                   */
                                        /*                                                                                           */
                                        /*   :Fin_listMN_FauxExterns_11:                                                             */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* Mais en fait, elles ne manquent pas : ce sont des macro-procedures qui sont definies      */
                                        /* dans 'v /usr/include/Xlib$h RootWindow'...                                                */
                                        /*                                                                                           */
                                        /* Cela s'est vu a cette date lors de tests de 'v $xcc/LFonctions$vv$Z CaTaLoGuE_FS'...      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H O I X   D E   L A   F A C O N   D ' A C C E D E R   A U X   P A L E T T E S   D E   C O U L E U R S  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(IXopen_____X_Window_accepter_le_serveur_sans_verification,VRAI)));
                                        /* Introduit le 20100109111637 afin de faciliter le serveur 'Xming' sur MACHINE sous         */
                                        /* Windows Vista. Le 20100109113931 cet indicateur est passe de 'FAUX' a 'VRAI' de facon     */
                                        /* a se faciliter la vie...                                                                  */

DEFV(Common,DEFV(Logical,ZINT(IXopen_____mettre_X_Window_en_mode_fausses_couleurs,VRAI)));
DEFV(Local,DEFV(Logical,INIT(IXopen_____tenter_X_Window_en_mode_fausses_couleurs,LUNDEF)));
                                        /* Afin de forcer (si possible...) le mode de coloriage de 'IXopen(...)' (introduit le       */
                                        /* 20021231091605). L'indicateur "Local" a ete introduit le 20030109154236 lors de           */
                                        /* problemes rencontres en essayant de visualiser des images vraies couleurs sur les         */
                                        /* MACHINEs '$LACT12' et '$LACT27' depuis '$LACT15'...                                       */
DEFV(Common,DEFV(Logical,INIT(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs,VRAI)));
                                        /* Nombre d'octets par point (introduit le 20021228133142 en vue d'une utilisation future    */
                                        /* de 'TrueColor' et modifie le 20021228182439 afin de donner un indicateur logique de       */
                                        /* l'utilisation qui est faite...). Le 20030101233411, cet indicateur est passe de           */
                                        /* 'Local' a 'Common' de facon a pouvoir etre teste au retour de 'IXopen(...)', par          */
                                        /* exemple dans 'v $xci/display$K IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs'.   */

%    define    ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                                                \
                         IFET(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)                                          \
                             ,NOTL(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02_TEST_DU_SERVEUR_X_WINDOW)                                  \
                              )
                                        /* Cette facon d'acceder aux palettes de couleurs utilise la palette de couleur definie      */
                                        /* par defaut, et definie par 'DefaultColormap(...)'.                                        */

#    define    LE_SERVEUR_X_WINDOW_EST(nom_presume_du_serveur_et_de_l_ecran)                                                            \
                         LE_SERVEUR_X_WINDOW_EST_CELUI_DE(nom_presume_du_serveur_et_de_l_ecran)                                         \
                                        /* Pour raccourcir les lignes qui suivent...                                                 */

%    define    ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02_TEST_DU_SERVEUR_X_WINDOW                                                       \
                         IFOU(EST_VRAI(IXopen_____X_Window_accepter_le_serveur_sans_verification)                                       \
                             ,IFET(EST_FAUX(IXopen_____X_Window_accepter_le_serveur_sans_verification)                                  \
                                  ,I10OU(LE_SERVEUR_X_WINDOW_EST("X_LACT14")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT15")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT16")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT17")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT18")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT19")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT1A")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_LACT1B")                                                            \
                                        ,LE_SERVEUR_X_WINDOW_EST("X_SHM")                                                               \
                                        ,TOUJOURS_FAUX                                                                                  \
                                         )                                                                                              \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* L'operateur 'I9OU(...)' a ete introduit le 20170612114514 afin de simplifier...           */

#    undef     LE_SERVEUR_X_WINDOW_EST

%    define    ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                                                \
                         IFET(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)                                          \
                             ,NEUL(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02_TEST_DU_SERVEUR_X_WINDOW)                                  \
                              )
                                        /* Cette facon d'acceder aux palettes de couleurs utilise une palette specifique, allouee    */
                                        /* a l'aide de 'XCreateColormap(...)'. On notera que le test de 'X_SHM' a ete ajoute le      */
                                        /* 1995111400 afin de tenter de contourner le fameux probleme du 'vswap' (voir l'appel       */
                                        /* 30628 dans le fichier d'anomalie 'v $Dbugs/SGIND4GA$D/IRIX$D/$Fnota'). On notera que l'on */
                                        /* teste 'X_SHM' et non pas 'X_LOCAL' afin de bien etre sur que l'on est sur un SYSTEME qui  */
                                        /* connait 'X_SHM' (et donc de type 'SYSTEME_SG...') ; en effet, 'X_LOCAL' est defini        */
                                        /* sur tous les SYSTEMEs, ce qui n'est pas le cas de 'X_SHM' (voir '$Fmachines').            */
                                        /*                                                                                           */
                                        /* ATTENTION, j'ai note le 20001016112859 qu'il ne fallait pas mettre '$LACT14' dans cette   */
                                        /* liste...                                                                                  */
                                        /*                                                                                           */
                                        /* Le 20030328115912, '$LACT14' etant passe en vraies couleurs, j'ai pu l'introduire dans    */
                                        /* cette liste...                                                                            */
                                        /*                                                                                           */
                                        /* On notera que les MACHINEs ayant acces a 'X-Window' en vraies couleurs (a savoir          */
                                        /* {$LACT14,$LACT15,$LACT16}) doivent etre declarees aussi dans 'v $Falias_v 20021231104914' */
                                        /* et dans 'v $xE/.divers$D/anim3$vv$Y 20030102123734'. La MACHINE '$LACT16' a ete           */
                                        /* introduite le 20031020161556.                                                             */
%    define    ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03                                                                                \
                         EST_FAUX(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)
                                        /* Ceci a ete introduit "preventivement" le 20021228182439...                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   L O C A L E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    ECRAN_UTILISE                                                                                                            \
                         DefaultScreen(description_du_serveur_et_de_l_ecran)                                                            \
                                        /* Numero de l'ecran utilise sur le serveur courant.                                         */

#    define    NOMBRE_DE_BITS_PAR_POINT                                                                                                 \
                         DefaultDepth(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                               \
                                        /* Nombre de bits utilises pour coder un point.                                              */
#    define    NOMBRE_EFFECTIF_DE_BITS_PAR_POINT(X_Window_est_en_mode_fausses_couleurs)                                                 \
                         MUL2(COND(EST_VRAI(X_Window_est_en_mode_fausses_couleurs)                                                      \
                                  ,UN                                                                                                   \
                                  ,NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                                   \
                                   )                                                                                                    \
                             ,NBITOC                                                                                                    \
                              )                                                                                                         \
                                        /* Nombre effectif de bits utilises pour coder un point.                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20030110092548, j'ai ajoute l'argument 'X_Window_est_en_mode_fausses_couleurs' qui     */ \
                                        /* permet d'utiliser 'IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs' lors de        */ \
                                        /* l'appel de cette procedure apres un 'IXopen(...)', ce qui permet alors de vraiment        */ \
                                        /* connaitre le nombre effectif de bits...                                                   */

#    define    MASQUE_D_UN_POINT                                                                                                        \
                         gMASQUE(NOMBRE_DE_BITS_PAR_POINT)                                                                              \
                                        /* Masque binaire du niveau d'un point.                                                      */
#    define    NIVEAU_DU_NOIR_DE_L_ECRAN                                                                                                \
                         BlackPixel(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                                 \
                                        /* Niveau de gris definissant le noir de l'ecran utilise.                                    */
#    define    NIVEAU_DU_BLANC_DE_L_ECRAN                                                                                               \
                         WhitePixel(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                                 \
                                        /* Niveau de gris definissant le blanc de l'ecran utilise.                                   */
#    define    VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN                                                                                           \
                         NOIR                                                                                                           \
                                        /* Niveau de gris servant de reference aux autres niveaux.                                   */
#    define    VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN                                                                                          \
                         MASQUE_D_UN_POINT                                                                                              \
                                        /* Niveau de gris definissant le niveau maximal des niveaux.                                 */

#    define    EPAISSEUR_DES_BORDURES_DE_FENETRES                                                                                       \
                         GvalDefaut("BorderWidth",DEUX)                                                                                 \
                                        /* Epaisseur des bordures de toutes les fenetres. Son utilisation se fera en general via     */ \
                                        /* un DOUB(...)' du evidemment au fait qu'il y a deux bordures : une en bas et une en haut,  */ \
                                        /* et, une a gauche et une a droite respectivement...                                        */ \
                                        /*                                                                                           */ \
                                        /* Le 20121121091543, la valeur par defaut est passee de 'CINQ' a 'DEUX' a cause de          */ \
                                        /* l'utilisation qui en est faite dans 'CENTRAGE_EVENTUEL_DE_LA_FENETRE(...)' et etre        */ \
                                        /* aussi compatible avec 'v $FXWindow BorderWidth'...                                        */
#    define    HAUTEUR_DE_L_ECRAN                                                                                                       \
                         SOUS(DisplayHeight(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                         \
                             ,DOUB(EPAISSEUR_DES_BORDURES_DE_FENETRES)                                                                  \
                              )                                                                                                         \
                                        /* Hauteur (en pixels) de l'ecran utilise.                                                   */
#    define    LARGEUR_DE_L_ECRAN                                                                                                       \
                         SOUS(DisplayWidth(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                          \
                             ,DOUB(EPAISSEUR_DES_BORDURES_DE_FENETRES)                                                                  \
                              )                                                                                                         \
                                        /* Largeur (en pixels) de l'ecran utilise.                                                   */

#    define    RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES                                                                               \
                         RootWindow(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                                 \
                                        /* Apparence visuelle de l'ecran, c'est-a-dire facon de passer des valeurs des pixels a      */ \
                                        /* une representation visuelle en couleurs sur l'ecran.                                      */

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#         define    APPARENCE_VISUELLE_DE_LA_FENETRE                                                                                    \
                              COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                            \
                                  ,DefaultVisual(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                    \
                                  ,COND(IFOU(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                  \
                                            ,ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03                                                  \
                                             )                                                                                          \
                                       ,ASI1(liste_des_visuals_supportes_et_satisfaisants                                               \
                                            ,visual                                                                                     \
                                             )                                                                                          \
                                       ,ASI1(liste_des_visuals_supportes_et_satisfaisants                                               \
                                            ,visual                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                                        /* Apparence visuelle de l'ecran, c'est-a-dire facon de passer des valeurs des pixels a      */ \
                                        /* une representation visuelle en couleurs sur l'ecran. ATTENTION : cette subtilite est      */ \
                                        /* due au traitement particulier de la fonction 'XGetVisualInfo(...)' sur ce SYSTEME : en    */ \
                                        /* effet, c'est la definition de '@    include   <X11/Xutil.h>' que l'on utilise, et qui     */ \
                                        /* paradoxalement ne declare par correctement cette fonction, alors qu'elle devrait etre     */ \
                                        /* declaree 'DEFV(X_XVisualInfo,POINTERbp(...))'...                                          */
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#         define    APPARENCE_VISUELLE_DE_LA_FENETRE                                                                                    \
                              COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                            \
                                  ,DefaultVisual(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                    \
                                  ,COND(IFOU(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                  \
                                            ,ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03                                                  \
                                             )                                                                                          \
                                       ,ASD1(ITbp(liste_des_visuals_supportes_et_satisfaisants                                          \
                                                 ,VISUAL_SATISFAISANT_A_UTILISER                                                        \
                                                  )                                                                                     \
                                            ,visual                                                                                     \
                                             )                                                                                          \
                                       ,ASD1(ITbp(liste_des_visuals_supportes_et_satisfaisants                                          \
                                                 ,VISUAL_SATISFAISANT_A_UTILISER                                                        \
                                                  )                                                                                     \
                                            ,visual                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                                        /* Apparence visuelle de l'ecran, c'est-a-dire facon de passer des valeurs des pixels a      */ \
                                        /* une representation visuelle en couleurs sur l'ecran.                                      */
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )

#    define    TYPE_DU_COLORIAGE_COURANT                                                                                                \
                         ASI1(APPARENCE_VISUELLE_DE_LA_FENETRE,class)                                                                   \
                                        /* Type du mode de coloriage accessible ('PseudoColor',...).                                 */
#    define    NOMBRE_MAXIMAL_DE_COULEURS_ACCESSIBLES                                                                                   \
                         ASI1(APPARENCE_VISUELLE_DE_LA_FENETRE,map_entries)                                                             \
                                        /* Nombre maximal de couleurs accessibles.                                                   */
#    define    PALETTE_DE_COULEURS_PAR_DEFAUT                                                                                           \
                         DefaultColormap(description_du_serveur_et_de_l_ecran,ECRAN_UTILISE)                                            \
                                        /* Palette de couleur par defaut...                                                          */
#    define    PALETTE_DE_COULEURS_UTILISEE                                                                                             \
                         COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                                 \
                             ,PALETTE_DE_COULEURS_PAR_DEFAUT                                                                            \
                             ,COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                            \
                                  ,palette_de_couleurs_creee                                                                            \
                                  ,palette_de_couleurs_creee                                                                            \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Palette de couleurs utilisee pour ranger la palette argument de visualisation.            */
#    define    VISUAL_SATISFAISANT_A_UTILISER                                                                                           \
                         INDEX0                                                                                                         \
                                        /* Lorsque plusieurs "visual"s correspondent aux besoins exprimes, c'est le premier          */ \
                                        /* renvoye qui est utilise...                                                                */

#    if        (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )
#         define    EPAISSEUR_DU_BORD_DES_FENETRES                                                                                      \
                              ZERO                                                                                                      \
                                        /* Sur 'SYSTEME_SG...._IRIX', un bug tout a fait etonnant est apparu. Lors des appels        */ \
                                        /* a 'XPutImage(...)', l'image est visualisee decoupee en environ quatre bandes separees     */ \
                                        /* par une bande noire de largeur proportionnelle a 'EPAISSEUR_DU_BORD_DES_FENETRES'.        */ \
                                        /* La solution est donc de faire que la bordure des fenetres soit de largeur nulle. Mais     */ \
                                        /* ATTENTION : etant donne que l'on peut, par exemple, faire executer un programme sur       */ \
                                        /* 'SYSTEME_DPX5000_SPIX' tout en utilisant le serveur 'X-Window' de la machine              */ \
                                        /* 'SYSTEME_SG...._IRIX', 'BUG_SYSTEME_SG...._IRIX_X_WINDOW_BORDER_1' ne peut                */ \
                                        /* etre conditionnel et soumis a '#         ifdef     SYSTEME_SG...._IRIX'...                */
#    Aif       (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )
#         define    EPAISSEUR_DU_BORD_DES_FENETRES                                                                                      \
                              UN                                                                                                        \
                                        /* Epaisseur (en points) de la bordure des fenetres.                                         */
#    Eif       (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )

#    define    DECALAGE_DES_POINTS_SUR_LES_LIGNES                                                                                       \
                         ZERO                                                                                                           \
                                        /* Ainsi, le premier point visualisable est le premier point de chaque ligne...              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   T R E S   P A R T I C U L I E R   D E S   E R R E U R S   ' X - W I N D O W S '  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    X_IL_Y_A_ERREUR(f)                                                                                                       \
                         IZEQ(f)                                                                                                        \
                                        /* Test d'un retour en erreur d'une fonction 'f' ; on notera les conventions inversees       */ \
                                        /* pour 'X-Window', puisqu'on teste la nullite (et non pas la non-nullite)...                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   ( D E B U T )  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(deltaI_2D,dimension_non_normalisee_de_la_fenetre));
                                        /* Dimensions de la fenetre non normalisee.                                                  */
DEFV(Local,DEFV(vrai_Int_de_base,INIT(X_position_centree_de_l_image_dans_la_fenetre,UNDEF)));
DEFV(Local,DEFV(vrai_Int_de_base,INIT(Y_position_centree_de_l_image_dans_la_fenetre,UNDEF)));
                                        /* Position de l'image dans la fenetre de facon a ce qu'elle soit centree. Cela a ete        */
                                        /* introduit le 20030401161443 pour 'v $xci/display$K 20030401153145'.                       */

                                        /* Les definitions {L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX,...,INVERSION_AXE_OY} ont ete     */
                                        /* deplacees le 20000323104448.                                                              */

#    define    L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX                                                                                   \
                         UN                                                                                                             \
                                        /* Afin de faire la distinction entre 'IXdisplay(...)' et 'IXanimation(...)' pour lequel     */ \
                                        /* l'image est decoupee en morceaux (leur nombre etant un carre...).                         */
#    define    LIMITATION_HORIZONTALE(x,nombre_de_morceaux)                                                                             \
                         SOUS(x,REST(dimX,nombre_de_morceaux))                                                                          \
                                        /* Afin de limiter l'axe 'OX' a un nombre de points multiple de quelque chose...             */
#    define    LIMITATION_VERTICALE(y,nombre_de_morceaux)                                                                               \
                         SOUS(y,REST(dimY,nombre_de_morceaux))                                                                          \
                                        /* Afin de limiter l'axe 'OY' a un nombre de points multiple de quelque chose...             */

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_2
#         define    _INVERSION_AXE_OY(y,hauteur,nombre_de_morceaux,dimension)                                                           \
                              COYA(SOUS(SOUS(dimension                                                                                  \
                                            ,COYR(y)                                                                                    \
                                             )                                                                                          \
                                       ,hauteur                                                                                         \
                                        )                                                                                               \
                                   )                                                                                                    \
                                        /* Fonction inversant les coordonnees 'y' pour tenir compte du fait que l'axe 'OY' de        */ \
                                        /* 'X-Window' descend. On notera l'introduction de 'nombre_de_morceaux' destine a prendre    */ \
                                        /* compte les cas ou 'dimY' n'est pas un multiple de 'nombre_de_morceaux' ; c'est le cas,    */ \
                                        /* par exemple, ou l'on est en mode 'Pal' avec 'IXanimation(...)' (575 n'est pas divisible   */ \
                                        /* par 8...).                                                                                */
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2
#         define    _INVERSION_AXE_OY(y,hauteur,nombre_de_morceaux,dimension)                                                           \
                              NEUT(y)                                                                                                   \
                                        /* Fonction neutre laissant 'y' inchange le jour ou l'axe 'OY' de  'X-Window' montera...     */
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2

#    define    fINVERSION_AXE_OY(y,hauteur,nombre_de_morceaux)                                                                          \
                         _INVERSION_AXE_OY(y,hauteur,nombre_de_morceaux,ASD1(dimension_non_normalisee_de_la_fenetre,dy))
#    define    iINVERSION_AXE_OY(y,hauteur,nombre_de_morceaux)                                                                          \
                         _INVERSION_AXE_OY(y,hauteur,nombre_de_morceaux,dimY)
                                        /* Fonctions inversant si besoin est l'axe 'OY' des images et des fenetres respectivement... */
                                        /*                                                                                           */
                                        /* Ceci a ete introduit le 20030401162836 et modifie le 20030402091740 en faisant alors la   */
                                        /* difference entre les images et les fenetres qui n'ont pas necessairement la meme          */
                                        /* dimension...                                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F I N   D E   P E R M E T T R E   D E S  R E F E R E N C E S   " E N   A V A N T "   D E   ' IXdisplay(...) '  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(vrai_Int_de_base
               ,INIT(fPOINTEUR(pointeur_de_IXdisplay)(DEFV(Argument,DEFV(image,imageA))
                                                     ,DEFV(Argument,DEFV(image,imageA_ROUGE))
                                                     ,DEFV(Argument,DEFV(image,imageA_VERTE))
                                                     ,DEFV(Argument,DEFV(image,imageA_BLEUE))
                                                     ,DEFV(Argument,DEFV(Int,increment_des_niveaux))
                                                     ,DEFV(Argument,DEFV(Logical,translater_le_NOIR))
                                                      )
                    ,ADRESSE_NON_ENCORE_DEFINIE
                     )
                )
     );
                                        /* La fonction 'IXdisplay(...)' est referencee "en avant" ce qui n'est pas tres correct.     */
                                        /* Etant donne qu'il est pratiquement impossible de la deplacer, la seule solution semble    */
                                        /* etre de creer un pointeur initialise tout la fin. Ceci a ete introduit le 20160815105000. */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   T R E S   S I M P L I F I E E   D E S   E V E N E M E N T S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(IXdisplay_____on_peut_revisualiser_l_imageA_courante,VRAI)));
                                        /* Indicateur logique precisant si l'on doit ('VRAI') ou pas ('FAUX') revisualiser l'image   */
                                        /* courante 'imageA' sur certains evenements. ATTENTION, la methode ici utilisee est tres    */
                                        /* simpliste car, en effet, l'attente des evenements est faite de facon synchrone ; cela     */
                                        /* signifie en particulier que lorsque l'on fait autre chose (par exemple changer les        */
                                        /* tables de coloriage) les evenements ne sont pas attendus et donc l'image courante         */
                                        /* 'imageA' ne peut pas etre revisualisee. Ainsi, elle ne peut etre revisualisee que si      */
                                        /* l'on est dans une fonction du type 'IXattente_d_un_evenement_quelconque(...)'.            */

#pragma   xcc__cpp_Z__liste_utiles      $xiidX/fonct$vv$EXT           IXdisplay_____imageA_courante           $xbidX/fonction
DEFV(Common,DEFV(Statique,DEFV(image,IXdisplay_____imageA_courante)));
#pragma   xcc__cpp_Z__liste_utiles      $xiidX/fonct$vv$EXT           IXdisplay_____imageA_ROUGE_courante     $xbidX/fonction
DEFV(Common,DEFV(Statique,DEFV(image,IXdisplay_____imageA_ROUGE_courante)));
#pragma   xcc__cpp_Z__liste_utiles      $xiidX/fonct$vv$EXT           IXdisplay_____imageA_VERTE_courante     $xbidX/fonction
DEFV(Common,DEFV(Statique,DEFV(image,IXdisplay_____imageA_VERTE_courante)));
#pragma   xcc__cpp_Z__liste_utiles      $xiidX/fonct$vv$EXT           IXdisplay_____imageA_BLEUE_courante     $xbidX/fonction
DEFV(Common,DEFV(Statique,DEFV(image,IXdisplay_____imageA_BLEUE_courante)));
                                        /* Afin de pouvoir memoriser la derniere image visualisee par 'IXdisplay(...)'. L'image      */
                                        /* en vraies couleurs {ROUGE,VERTE,BLEUE} a ete introduite le 20030102101041.                */
                                        /*                                                                                           */
                                        /* ATTENTION, l'image 'IXdisplay_____imageA_courante' est referencee dans la commande        */
                                        /* 'v $xcc/cpp$Z IXdisplay_____imageA_courante'. Le 20040521091345, le '#pragma' relatif     */
                                        /* a 'xcc__cpp_Z__liste_utiles' a ete introduit pour supprimer cette dependance...           */

DEFV(Local,DEFV(Logical,INIT(IXdisplay_____imageA_courante_revisualisable,FAUX)));
                                        /* Indicateur logique controlant l'opportunite de revisualiser la derniere image visualise   */
                                        /* par 'IXdisplay(...)'. En effet, ceci se fait via les evenements, et ceux-ci surviennent   */
                                        /* avant que la chose ne soit possible, et apres lorsqu'elle ne l'est plus...                */
                                        /*                                                                                           */
                                        /* Le 20101011113943 le nom 'IXdisplay_____imageA_courante_visualisable' a ete remplace      */
                                        /* par 'IXdisplay_____imageA_courante_revisualisable' plus logique et passe de 'Local'       */
                                        /* a 'Common' pour 'v $xci/album$K IXdisplay_____imageA_courante_revisualisable'...          */
                                        /*                                                                                           */
                                        /* Avec l'introduction de 'IXdisplay_avec_reinitialisation_du_reaffichage(....)' le          */
                                        /* 20101118092254, cet indicateur est redevenu un 'Local' ce qui est plus logique...         */

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
DEFV(Common,DEFV(Logical,ZINT(IGdisplay_____on_peut_revisualiser_l_imageA_courante,VRAI)));
                                        /* Indicateur logique precisant si l'on doit ('VRAI') ou pas ('FAUX') revisualiser l'image   */
                                        /* courante 'imageA' sur certains evenements. ATTENTION, la methode ici utilisee est tres    */
                                        /* simpliste car, en effet, l'attente des evenements est faite de facon synchrone ; cela     */
                                        /* signifie en particulier que lorsque l'on fait autre chose (par exemple changer les        */
                                        /* tables de coloriage) les evenements ne sont pas attendus et donc l'image courante         */
                                        /* 'imageA' ne peut pas etre revisualisee. Ainsi, elle ne peut etre revisualisee que si      */
                                        /* l'on est dans une fonction du type 'IGattente_de_l_evenement_ButtonPress(...)'.           */

#         pragma    xcc__cpp_Z__liste_utiles      $xiidG/fonction.1$EXT         IGdisplay_____imageA_courante $xbidX/fonction
DEFV(Common,DEFV(Statique,DEFV(imageU,IGdisplay_____imageA_courante)));
                                        /* Afin de pouvoir memoriser la derniere image visualisee par 'IGdisplay(...)'.              */
                                        /* ATTENTION, l'image 'IGdisplay_____imageA_courante' est referencee dans la commande        */
                                        /* 'v $xcc/cpp$Z IGdisplay_____imageA_courante'. Le 20040521092046, le '#pragma' relatif     */
                                        /* a 'xcc__cpp_Z__liste_utiles' a ete introduit pour supprimer cette dependance. On notera   */
                                        /* que le 20040521131426, il a ete deplace dans '$xiidG/fonction.1$FON 20040521130935' car,  */
                                        /* en effet, c'est la qu'il est utile ('v $xcc/cpp$Z SiliG_EXT'). Le 20040523111109, grace   */
                                        /* au dispositif 'v $xcc/cpp$Z 20040522102819', ce '#pragma' a pu etre remis ici...          */
DEFV(Common,DEFV(Logical,INIT(IGdisplay_____imageA_courante_visualisable,FAUX)));
                                        /* Indicateur logique controlant l'opportunite de revisualiser la derniere image visualise   */
                                        /* par 'IGdisplay(...)'. En effet, ceci se fait via les evenements, et ceux-ci surviennent   */
                                        /* avant que la chose ne soit possible, et apres lorsqu'elle ne l'est plus...                */
DEFV(Common,DEFV(Logical,INIT(IGdisplay_____imageA_courante_premiere_fois,VRAI)));
                                        /* Indicateur logique permet de faire la difference entre la premiere fois que l'on passe    */
                                        /* 'REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay' et les fois suivantes...                          */
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */

#    ifdef     BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
#         define    LISTE_DES_EVENEMENTS_A_ATTENDRE                                                                                     \
                              OUI07(ExposureMask                                                                                        \
                                   ,StructureNotifyMask                                                                                 \
                                   ,VisibilityChangeMask                                                                                \
                                   ,PropertyChangeMask                                                                                  \
                                   ,ColormapChangeMask                                                                                  \
                                   ,ButtonPressMask                                                                                     \
                                   ,KeyPressMask                                                                                        \
                                    )                                                                                                   \
                                        /* Liste des evenements qu'il est utile d'attendre. L'evenement 'KeyPressMask' a ete         */ \
                                        /* ajoute le 20000323104448.                                                                 */
#    Aifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
#         define    LISTE_DES_EVENEMENTS_A_ATTENDRE                                                                                     \
                              OUI07(ExposureMask                                                                                        \
                                   ,StructureNotifyMask                                                                                 \
                                   ,VisibilityChangeMask                                                                                \
                                   ,PropertyChangeMask                                                                                  \
                                   ,ColormapChangeMask                                                                                  \
                                   ,ButtonPressMask                                                                                     \
                                   ,KeyPressMask                                                                                        \
                                    )                                                                                                   \
                                        /* Liste des evenements qu'il est utile d'attendre. L'evenement 'KeyPressMask' a ete         */ \
                                        /* ajoute le 20000323104448.                                                                 */
#    Eifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2

DEFV(Common,DEFV(Logical,ZINT(X11_____signaler_les_evenements_inattendus
                             ,NE_PAS_SIGNALER_LES_EVENEMENTS_INATTENDUS_DE_X_WINDOW
                              )
                 )
     );
                                        /* Cet indicateur logique permet de savoir s'il faut signaler (par un message) les           */
                                        /* les evenements inattendus, qui rappelons-le dependent fortement du SYSTEME...             */

#    define    ATTENTE_DE_N_IMPORTE_LEQUEL_DES_EVENEMENTS_POSSIBLES(evenement_arrive)                                                   \
                         Bblock                                                                                                         \
                         DEFV(X_XEvent,bloc_d_attente_des_evenements);                                                                  \
                                        /* Pour attendre les evenements, et se synchroniser...                                       */ \
                         EGAL(ASD1(bloc_d_attente_des_evenements,type),LASTEvent);                                                      \
                                        /* On initialise le bloc d'attente sur un evenement inexistant,                              */ \
                                                                                                                                        \
                         CALS(XNextEvent(description_du_serveur_et_de_l_ecran,ADRESSE(bloc_d_attente_des_evenements)));                 \
                                        /* Ainsi, on n'attend n'importe quel evenement...                                            */ \
                                                                                                                                        \
                         EGAL(evenement_arrive,ASD1(bloc_d_attente_des_evenements,type));                                               \
                                        /* Et on renvoie le type d'evenement qui est arrive...                                       */ \
                         Eblock                                                                                                         \
                                        /* Ainsi, on n'attend n'importe quel evenement...                                            */
#    define    TRAITEMENT_D_UN_EVENEMENT_ARRIVE(evenement_arrive,action_de_traitement_de_l_evenement_arrive)                            \
                         Ca1e(evenement_arrive)                                                                                         \
                              Bblock                                                                                                    \
                              BLOC(action_de_traitement_de_l_evenement_arrive);                                                         \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                        /* Traitement d'un evenement arrive...                                                       */

#    define    RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu,evenement_inattendu)                                       \
                                        /* ATTENTION, il est impossible d'encadrer ce qui suit par :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  Bblock                                                                   */ \
                                        /*                  TRAITEMENT_D_UN_EVENEMENT_ARRIVE(...);                                   */ \
                                        /*                  Eblock                                                                   */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, 'TRAITEMENT_D_UN_EVENEMENT_ARRIVE(...)' est en fait un 'Ca1e(...)', et     */ \
                                        /* dans ces conditions, cela perturberait le compilateur...                                  */ \
                         TRAITEMENT_D_UN_EVENEMENT_ARRIVE(evenement_inattendu                                                           \
                                                         ,BLOC(CAL1(Prer1("[ATTENDU : %s --> INATTENDU : evenement_inattendu]\n"        \
                                                                         ,nom_de_l_evenement_attendu                                    \
                                                                          )                                                             \
                                                                    );                                                                  \
                                                               )                                                                        \
                                                          );                                                                            \
                                        /* Edition d'un evenement inattendu...                                                       */

#    define    ATTENTE_D_UN_EVENEMENT_CONNU(evenement_attendu_connu,action_a_la_reception)                                              \
                         Bblock                                                                                                         \
                         DEFV(Schar,INIS(DTb0(nom_de_l_evenement_attendu_connu),"evenement_attendu_connu"));                            \
                                        /* Nom de l'evenement attendu et connu. ATTENTION : autrefois, il y avait :                  */ \
                                        /*                                                                                           */ \
                                        /*   DEFV(CHAR,INIT(POINTERc(nom_de_l_evenement_attendu_connu),"evenement_attendu_connu"));  */ \
                                        /*                                                                                           */ \
                                        /* mais cela ne plaisait pas a 'SYSTEME_FX2800_CONCENTRIX_SCC', d'ou cette nouvelle forme.   */ \
                         ATTENTE_D_UN_EVENEMENT_INCONNU(nom_de_l_evenement_attendu_connu                                                \
                                                       ,evenement_attendu_connu                                                         \
                                                       ,BLOC(action_a_la_reception)                                                     \
                                                        );                                                                              \
                                        /* Et on attend...                                                                           */ \
                         Eblock                                                                                                         \
                                        /* Ainsi, on n'attend que l'evenement attendu et connu...                                    */

#    define    NE_PAS_SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE                                                         \
                         Bblock                                                                                                         \
                         EGAL(boucler_sur_l_attente_des_evenements,FAUX);                                                               \
                         Eblock                                                                                                         \
                                        /* Ainsi, on va attendre de nouveau l'evenement attendu et connu...                          */
#    define    SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE                                                                \
                         Bblock                                                                                                         \
                         EGAL(boucler_sur_l_attente_des_evenements,VRAI);                                                               \
                         Eblock                                                                                                         \
                                        /* Ainsi, on va attendre de nouveau l'evenement attendu et connu...                          */

DEFV(Local,DEFV(Int,INIT(IXdisplay_____increment_des_niveaux,INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay)));
DEFV(Local,DEFV(Logical,INIT(IXdisplay_____translater_le_NOIR,TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay)));
                                        /* Dispositif introduit le 20070713103714 (et donc avec quelques annees de retard) afin de   */
                                        /* permettre de rafraichir correctement une image lorsqu'elle a ete masque par quelque chose */
                                        /* et que son affichage avait ete demande avec incrementation des niveaux de la palette...   */

#    define    REAFFICHAGE_D_UNE_IMAGE_PAR_IXdisplay                                                                                    \
                         Bblock                                                                                                         \
                         Test(EST_VRAI(IXdisplay_____imageA_courante_revisualisable))                                                   \
                              Bblock                                                                                                    \
                              CALS(fPOINTEUR(pointeur_de_IXdisplay)(IXdisplay_____imageA_courante                                       \
                                                                   ,IXdisplay_____imageA_ROUGE_courante                                 \
                                                                   ,IXdisplay_____imageA_VERTE_courante                                 \
                                                                   ,IXdisplay_____imageA_BLEUE_courante                                 \
                                                                   ,IXdisplay_____increment_des_niveaux                                 \
                                                                   ,IXdisplay_____translater_le_NOIR                                    \
                                                                    )                                                                   \
                                   );                                                                                                   \
                                        /* Si il existe une derniere image visualisee, on la reaffiche a priori. On notera que       */ \
                                        /* le 20030101172647 j'ai ajoute un triplet necessaire a la visualisation en vraies          */ \
                                        /* couleurs et qui est fait de trois images identiques (ce qui fera du noir et blanc...)     */ \
                                        /* car, en effet, je ne sais pas quoi faire d'autre...                                       */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
DEFV(Local,DEFV(Float,INIT(instant_du_dernier_REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay,FZERO)));
                                        /* Memorisation de l'instant precis du dernier 'REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay'       */
                                        /* sous la forme {secondes,micro-secondes} depuis le 01/01/1970 a 00:00:00.                  */
DEFV(Common,DEFV(Float,ZINT(X11_____duree_minimale_entre_deux_REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay,FDU)));
                                        /* Memorisation de l'instant precis du dernier 'REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay' qui   */
                                        /* fut effectif...                                                                           */

#         define    CENTRER_L_IMAGE_DANS_LA_FENETRE_LORS_DU_REAFFICHAGE                                                                 \
                              VRAI
#         define    REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay                                                                               \
                              Bblock                                                                                                    \
                              Test(EST_FAUX(IGdisplay_____imageA_courante_premiere_fois))                                               \
                                   Bblock                                                                                               \
                                   Test(EST_VRAI(IGdisplay_____imageA_courante_visualisable))                                           \
                                        Bblock                                                                                          \
                                        DEFV(Positive,INIT(Secondes,UNDEF));                                                            \
                                        DEFV(Positive,INIT(MicroSecondes,UNDEF));                                                       \
                                        DEFV(Float,INIT(instant_courant,FLOT__UNDEF));                                                  \
                                        /* Duree en {secondes,micro-secondes} ecoulee depuis le 19700101000000.                      */ \
                                                                                                                                        \
                                        DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Secondes,MicroSecondes);                          \
                                        EGAL(instant_courant,ADD2(FLOT(Secondes),DIVI(FLOT(MicroSecondes),FLOT(MILLION))));             \
                                        /* Calcul de la duree en {secondes,micro-secondes} ecoulee depuis le 19700101000000.         */ \
                                                                                                                                        \
                                        Test(IFGE(SOUS(instant_courant,instant_du_dernier_REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay)        \
                                                 ,X11_____duree_minimale_entre_deux_REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay               \
                                                  )                                                                                     \
                                             )                                                                                          \
                                             Bblock                                                                                     \
                                             DEFV(deltaF_2D,translation_inutile_de_IGdisplay_____imageA_courante);                      \
                                                                                                                                        \
                                             EGAL(ASD1(translation_inutile_de_IGdisplay_____imageA_courante,dx),FLOT__UNDEF);           \
                                             EGAL(ASD1(translation_inutile_de_IGdisplay_____imageA_courante,dy),FLOT__UNDEF);           \
                                        /* La translation est inutile puisque l'on centre, mais on ne sait jamais...                 */ \
                                                                                                                                        \
                                             CALS(IGclear());                                                                           \
                                        /* Nettoyage peralable de la fenetre...                                                      */ \
                                                                                                                                        \
                                             CALS(IGdisplay(IGdisplay_____imageA_courante                                               \
                                                           ,RAPPORT_DE_ZOOM_STANDARD_DE_rectzoom                                        \
                                                           ,CENTRER_L_IMAGE_DANS_LA_FENETRE_LORS_DU_REAFFICHAGE                         \
                                                           ,ADRESSE(translation_inutile_de_IGdisplay_____imageA_courante)               \
                                                            )                                                                           \
                                                  );                                                                                    \
                                        /* Si il existe une derniere image visualisee, on la reaffiche a priori en centrant a priori */ \
                                        /* ce qui signifie que l'on ignore les parametres lors du premier appel de 'IGdisplay(...)'. */ \
                                                                                                                                        \
                                             EGAL(instant_du_dernier_REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay,instant_courant);            \
                                        /* Memorisation de l'instant precis du dernier 'REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay' qui   */ \
                                        /* fut effectif...                                                                           */ \
                                             Eblock                                                                                     \
                                        ATes                                                                                            \
                                             Bblock                                                                                     \
                                             Eblock                                                                                     \
                                        ETes                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(IGdisplay_____imageA_courante_premiere_fois,FAUX);                                              \
                                        /* Ce test et cet indicateur ont ete ajoute le 19990310141501 a la suite de l'introduction   */ \
                                        /* de la fonction 'IGclear(...)' destinee a assurer le nettoyage du fond d'une fenetre apres */ \
                                        /* son retour au premier-plan. Or il semblerait que l'on passerait ici, aussi, au moment de  */ \
                                        /* l'ouverture de la fenetre. D'ou ce traitement particulier (on ne fait rien...) du premier */ \
                                        /* passage ici...                                                                            */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         define    REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay                                                                               \
                              Bblock                                                                                                    \
                              BLOC(VIDE;);                                                                                              \
                              Eblock
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

DEFV(Common,DEFV(Logical,ZINT(X11_____KeyPress_____editer_XY_curseur,FAUX)));
                                        /* Indicateur logique precisant si l'on doit ('VRAI') ou pas ('FAUX') editer les coordonnees */
                                        /* {X,Y} du curseur (la souris) lors de l'appui sur une touche quelconque du clavier. Ceci   */
                                        /* a ete introduit le 20000323104448. Un test de bon fonctionnement consistera a faire :     */
                                        /*                                                                                           */
                                        /*                  Std                                                                      */
                                        /*                                                                                           */
                                        /*                  $xci/S_point$X      A=$xiio/NOIR x=XXXX y=YYYY    $formatI        |   \  */
                                        /*                  $xci/display$X      p=$xiP/cercle.35 XY=VRAI      $formatI               */
                                        /*                                                                                           */
                                        /* et verifier que cela donne bien :                                                         */
                                        /*                                                                                           */
                                        /*                  curseur=(+XXXX,+YYYY)                                                    */
                                        /*                                                                                           */
                                        /* en mettant la pointe de la fleche du curseur sur le point de coordonnees {XXXX,YYYY}      */
                                        /* marque.                                                                                   */
DEFV(Common,DEFV(Logical,ZINT(X11_____KeyPress_____editer_XY_curseur_message_fenetre_incompatible,VRAI)));
                                        /* Indicateur logique precisant si le message indiquant que la taille de l'image est         */
                                        /* incompatible avec l'edition du curseur (introduit le 20091212212950)...                   */
DEFV(Common,DEFV(Logical,ZINT(X11_____KeyPress_____norm_XY_curseur,FAUX)));
                                        /* Faut-il normaliser ('VRAI') ou pas ('FAUX') les coordonnees {X,Y} du curseur. ATTENTION,  */
                                        /* cette "renormalisation" n'utilise pas les procedures '_____?NORMALISE_OX11(...)' et       */
                                        /* '_____?NORMALISE_OY11(...)' afin d'etre quelconque, c'est-a-dire d'etre capable de        */
                                        /* fournir des resultats dans [0,1] comme dans [a,b]...                                      */
DEFV(Common,DEFV(Logical,ZINT(X11_____KeyPress_____norm_XY_avec_origine_et_extremite_curseur,VRAI)));
                                        /* Lorsque 'IL_FAUT(X11_____KeyPress_____norm_XY_curseur)' doit-on utiliser les origine et   */
                                        /* extremite des axes 'OX' et 'OY' ('VRAI') ou bien les origine et longueur ('FAUX') ? Ceci  */
                                        /* fut introduit le 20091123093212 afin de faciliter la definition des zooms sur les objets  */
                                        /* fractals produits dans '$xrc' (par exemple 'v $xrc/mandel.01$K'). Alors, on choisira :    */
                                        /*                                                                                           */
                                        /*                  OX_curseur = X_COIN_BAS_GAUCHE                                           */
                                        /*                  EX_curseur = X_COIN_HAUT_DROITE                                          */
                                        /*                                                                                           */
                                        /*                  OY_curseur = Y_COIN_BAS_GAUCHE                                           */
                                        /*                  EY_curseur = Y_COIN_HAUT_DROITE                                          */
                                        /*                                                                                           */
                                        /* tels qu'ils sont edites par 'v $ximcf/iterations$FON VALIDATION_DE_LA_FENETRE_DE_CAL...', */
                                        /* c'est-a-dire apres prise en compte du format de l'image.                                  */
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____OX_curseur,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____EX_curseur,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____LX_curseur,AMPLITUDE_DES_COORDONNEES_BARYCENTRIQUES)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____DX_curseur,COORDONNEE_BARYCENTRIQUE_CENTRALE)));

DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____OY_curseur,COORDONNEE_BARYCENTRIQUE_MINIMALE)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____EY_curseur,COORDONNEE_BARYCENTRIQUE_MAXIMALE)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____LY_curseur,AMPLITUDE_DES_COORDONNEES_BARYCENTRIQUES)));
DEFV(Common,DEFV(Float,ZINT(X11_____KeyPress_____DY_curseur,COORDONNEE_BARYCENTRIQUE_CENTRALE)));

#    define    OX_curseur_KeyPress                                                                                                      \
                         NEUT(X11_____KeyPress_____OX_curseur)
#    define    EX_curseur_KeyPress                                                                                                      \
                         COND(IL_FAUT(X11_____KeyPress_____norm_XY_avec_origine_et_extremite_curseur)                                   \
                             ,X11_____KeyPress_____EX_curseur                                                                           \
                             ,ADD2(X11_____KeyPress_____OX_curseur,X11_____KeyPress_____LX_curseur)                                     \
                              )

#    define    OY_curseur_KeyPress                                                                                                      \
                         NEUT(X11_____KeyPress_____OY_curseur)
#    define    EY_curseur_KeyPress                                                                                                      \
                         COND(IL_FAUT(X11_____KeyPress_____norm_XY_avec_origine_et_extremite_curseur)                                   \
                             ,X11_____KeyPress_____EY_curseur                                                                           \
                             ,ADD2(X11_____KeyPress_____OY_curseur,X11_____KeyPress_____LY_curseur)                                     \
                              )
                                        /* {Origine,Longueur} des axes 'OX' et 'OY' respectivement lorsque la "renormalisation"      */
                                        /* des axes est demandees par 'IL_FAUT(X11_____KeyPress_____norm_XY_curseur)'. On            */
                                        /* notera qu'il serait possible d'utiliser {Origine,Extremite} mais la solution choisie est  */
                                        /* certainement plus simple d'emploi, par exemple, lorsque l'on choisit une fenetre de       */
                                        /* de calcul (dite a l'Arrivee) dans un objet fractal (Mandelbrot ou iteration sur           */
                                        /* 'zeta'...).                                                                               */
                                        /*                                                                                           */
                                        /* ATTENTION, les definitions de 'X11_____KeyPress_____LX_curseur' et de                     */
                                        /* 'X11_____KeyPress_____LY_curseur' doivent imperativement etre sur plusieurs lignes a      */
                                        /* cause de '$xcg/gen.ext$Z' qui dans le cas ou tout est sur une meme ligne n'arrive pas a   */
                                        /* se debarasser de 'SOUS(...)'.                                                             */
                                        /*                                                                                           */
                                        /* Le 20100116103147 furent intrdouits {DX_curseur,DY_curseur} qui definissent les demi      */
                                        /* dimensions en 'X' et en 'Y' d'une fenetre centree sur le curseur. Cela est destine a      */
                                        /* faciliter l'usage de programmes tel 'v $xrc/mandel.41$K xbg=' lors de la recherche de     */
                                        /* zones interessantes sur lesquelles zoomer...                                              */

DEFV(Common,DEFV(Int,ZINT(fenetre_X_Window_____deplacement_horizontal_en_haut_a_gauche_d_une_image,ZERO)));
DEFV(Common,DEFV(Int,ZINT(fenetre_X_Window_____deplacement_vertical_en_haut_a_gauche_d_une_image,ZERO)));
                                        /* 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. Le 20000327093959 ces deplacements     */
                                        /* sont devenus inutiles, mais pour assurer la coherence de certains commentaires            */
                                        /* '(v $xiidG/fonction.1$FON en_haut_a_gauche_d_une_image_dans_une_fenetre_X_Window') il     */
                                        /* plus simple de les conserver en leur donnant une valeur "neutre"...                       */

#    define    TrX_CURSEUR_KeyPress                                                                                                     \
                         NEUT(UN)
#    define    TrY_CURSEUR_KeyPress                                                                                                     \
                         NEUT(UN)
                                        /* Pour obtenir des {X,Y} compatibles avec mes propres definitions.                          */

#    define    X_CURSEUR_KeyPress                                                                                                       \
                         COXA(SOUS(SOUS(ASD2(bloc_d_attente_des_evenements,xkey,x)                                                      \
                                       ,TrX_CURSEUR_KeyPress                                                                            \
                                        )                                                                                               \
                                  ,fenetre_X_Window_____deplacement_horizontal_en_haut_a_gauche_d_une_image                             \
                                   )                                                                                                    \
                              )
#    define    Y_CURSEUR_KeyPress                                                                                                       \
                         COYA(fINVERSION_AXE_OY(SOUS(SOUS(ASD2(bloc_d_attente_des_evenements,xkey,y)                                    \
                                                         ,TrY_CURSEUR_KeyPress                                                          \
                                                          )                                                                             \
                                                    ,fenetre_X_Window_____deplacement_vertical_en_haut_a_gauche_d_une_image             \
                                                     )                                                                                  \
                                               ,ZERO                                                                                    \
                                               ,L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX                                                  \
                                                )                                                                                       \
                              )
                                        /* Coordonnees {X,Y} du curseur apres les translations necessaires. ATTENTION, ces formules  */
                                        /* n'ont de sens que si la taille de la fenetre est egale excatement a celle de l'image. De  */
                                        /* plus cette fenetre ne doit pas deborder de l'ecran. Ces contraintes expliquent les tests  */
                                        /* effectues dans 'VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE'. J'ai reussi a      */
                                        /* a utiliser ce dispositif avec des images 'OPenGL' dans des fenetres plus grandes ; mais   */
                                        /* cela n'a pas marche avec 'X-Window' ; pour simplifier donc, j'ai impose les memes         */
                                        /* contraintes partout le 20000327093959. ATTENTION, a compter du 20030402091740 avec        */
                                        /* la "differenciation" de 'fINVERSION_AXE_OY(...)' et de 'iINVERSION_AXE_OY(...)' le        */
                                        /* probleme precedent est resolu...                                                          */

#    define    ATTENTE_D_UN_EVENEMENT_INCONNU(nom_de_l_evenement_attendu_inconnu,evenement_attendu_inconnu,action_a_la_reception)       \
                         Bblock                                                                                                         \
                         DEFV(X_XEvent,bloc_d_attente_des_evenements);                                                                  \
                                        /* Pour attendre les evenements, et se synchroniser...                                       */ \
                         DEFV(Logical,INIT(boucler_sur_l_attente_des_evenements,LUNDEF));                                               \
                                        /* Cet indicateur 'VRAI' a priori, est mis a 'FAUX' des que l'evenement attendu est arrive.  */ \
                                        /* Il peut alors etre immediatement mis a 'VRAI' par la sequence de code specifique de nom   */ \
                                        /* 'action_a_la_reception', ce qui lui permet apres le traitement specifique, de se remettre */ \
                                        /* alors en attente...                                                                       */ \
                                                                                                                                        \
                         SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE;                                                     \
                                        /* Afin de boucler au moins une fois...                                                      */ \
                         EGAL(ASD1(bloc_d_attente_des_evenements,type),LASTEvent);                                                      \
                                        /* On initialise le bloc d'attente sur un evenement inexistant,                              */ \
                                                                                                                                        \
                         Tant(IL_FAUT(boucler_sur_l_attente_des_evenements))                                                            \
                                        /* Boucle sur plusieurs evenements de meme type...                                           */ \
                              Bblock                                                                                                    \
                              Tant(IFNE(ASD1(bloc_d_attente_des_evenements,type),evenement_attendu_inconnu))                            \
                                        /* Boucle d'attente d'un certain evenement...                                                */ \
                                   Bblock                                                                                               \
                                   CALS(XNextEvent(description_du_serveur_et_de_l_ecran,ADRESSE(bloc_d_attente_des_evenements)));       \
                                        /* Ainsi, on n'attend que l'evenement attendu...                                             */ \
                                                                                                                                        \
                                   Test(IFET(IFNE(ASD1(bloc_d_attente_des_evenements,type),evenement_attendu_inconnu)                   \
                                            ,IL_FAUT(X11_____signaler_les_evenements_inattendus)                                        \
                                             )                                                                                          \
                                        )                                                                                               \
                                        Bblock                                                                                          \
                                        PRINT_ATTENTION("un evenement inattendu est arrive");                                           \
                                                                                                                                        \
                                        Choi(ASD1(bloc_d_attente_des_evenements,type))                                                  \
                                             Bblock                                                                                     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,KeyPress);           \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,KeyRelease);         \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ButtonPress);        \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ButtonRelease);      \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,MotionNotify);       \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,EnterNotify);        \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,LeaveNotify);        \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,FocusIn);            \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,FocusOut);           \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,KeymapNotify);       \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,Expose);             \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,GraphicsExpose);     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,NoExpose);           \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,VisibilityNotify);   \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,CreateNotify);       \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,DestroyNotify);      \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,UnmapNotify);        \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,MapNotify);          \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,MapRequest);         \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ReparentNotify);     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ConfigureNotify);    \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ConfigureRequest);   \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,GravityNotify);      \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ResizeRequest);      \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,CirculateNotify);    \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,CirculateRequest);   \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,PropertyNotify);     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,SelectionClear);     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,SelectionRequest);   \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,SelectionNotify);    \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ColormapNotify);     \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,ClientMessage);      \
                                             RECEPTION_D_UN_EVENEMENT_INATTENDU(nom_de_l_evenement_attendu_inconnu,MappingNotify);      \
                                             Defo                                                                                       \
                                                  Bblock                                                                                \
                                                  PRINT_ATTENTION("un evenement non reconnu est arrive (1)");                           \
                                                  CAL1(Prer1("(numero=%d)\n",ASD1(bloc_d_attente_des_evenements,type)));                \
                                                  Eblock                                                                                \
                                             EDef                                                                                       \
                                             Eblock                                                                                     \
                                        ECho                                                                                            \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Choi(ASD1(bloc_d_attente_des_evenements,type))                                                       \
                                        Bblock                                                                                          \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(KeyPress                                                       \
                                                                        ,BLOC(Bblock                                                    \
                                                                              Test(IL_FAUT(X11_____KeyPress_____editer_XY_curseur))     \
                                                                                   Bblock                                               \
                                                                                   DEFV(Float,INIT(X_curseur_KeyPress                   \
                                                                                                  ,FLOT(X_CURSEUR_KeyPress)             \
                                                                                                   )                                    \
                                                                                        );                                              \
                                                                                   DEFV(Float,INIT(Y_curseur_KeyPress                   \
                                                                                                  ,FLOT(Y_CURSEUR_KeyPress)             \
                                                                                                   )                                    \
                                                                                        );                                              \
                                        /* Coordonnees {X,Y} exprimee en "entier" du curseur courant...                              */ \
                                                                                                                                        \
                                                                                   Test(IL_FAUT(X11_____KeyPress_____norm_XY_curseur))  \
                                                                                        Bblock                                          \
                                                                                        CAL3(Prme2(" curseur=(%+.^^^,%+.^^^)\n"         \
                                                                                                  ,HOMO(X_curseur_KeyPress              \
                                                                                                       ,FLOT(Xmin)                      \
                                                                                                       ,FLOT(Xmax)                      \
                                                                                                       ,OX_curseur_KeyPress             \
                                                                                                       ,EX_curseur_KeyPress             \
                                                                                                        )                               \
                                                                                                  ,HOMO(Y_curseur_KeyPress              \
                                                                                                       ,FLOT(Ymin)                      \
                                                                                                       ,FLOT(Ymax)                      \
                                                                                                       ,OY_curseur_KeyPress             \
                                                                                                       ,EY_curseur_KeyPress             \
                                                                                                        )                               \
                                                                                                   )                                    \
                                                                                             );                                         \
                                        /* Edition flottante des coordonnees {X,Y} (introduite sous cette forme le 20240402095711).  */ \
                                                                                        Eblock                                          \
                                                                                   ATes                                                 \
                                                                                        Bblock                                          \
                                                                                        CAL3(Prme2(" curseur=(%d,%d)\n"                 \
                                                                                                  ,INTE(X_curseur_KeyPress)             \
                                                                                                  ,INTE(Y_curseur_KeyPress)             \
                                                                                                   )                                    \
                                                                                             );                                         \
                                                                                        Eblock                                          \
                                                                                   ETes                                                 \
                                        /* Edition entiere des coordonnees {X,Y} (introduite sous cette forme le 20240402095711).    */ \
                                        /*                                                                                           */ \
                                        /* Le 20060105090907, le format "16g" est passe a "^^g" pour plus de souplesse...            */ \
                                        /*                                                                                           */ \
                                        /* Le 20091123122916, le format "^^g" est passe a "^^^" pour plus de souplesse...            */ \
                                                                                                                                        \
                                                                                   Test(IL_FAUT(X11_____KeyPress_____norm_XY_curseur))  \
                                                                                        Bblock                                          \
                                                                                        CAL3(Prme2("xbg=%+.^^^ ybg=%+.^^^ "             \
                                                                                                  ,SOUS(X_curseur_KeyPress              \
                                                                                                       ,X11_____KeyPress_____DX_curseur \
                                                                                                        )                               \
                                                                                                  ,SOUS(Y_curseur_KeyPress              \
                                                                                                       ,X11_____KeyPress_____DY_curseur \
                                                                                                        )                               \
                                                                                                   )                                    \
                                                                                             );                                         \
                                                                                        CAL3(Prme2("xhd=%+.^^^ yhd=%+.^^^\n"            \
                                                                                                  ,ADD2(X_curseur_KeyPress              \
                                                                                                       ,X11_____KeyPress_____DX_curseur \
                                                                                                        )                               \
                                                                                                  ,ADD2(Y_curseur_KeyPress              \
                                                                                                       ,X11_____KeyPress_____DY_curseur \
                                                                                                        )                               \
                                                                                                   )                                    \
                                                                                             );                                         \
                                                                                        CALS(Fsauts_de_lignes(UN));                     \
                                        /* Edition introduite le 20100116103147...                                                   */ \
                                                                                        Eblock                                          \
                                                                                   ATes                                                 \
                                                                                        Bblock                                          \
                                                                                        Eblock                                          \
                                                                                   ETes                                                 \
                                                                                   Eblock                                               \
                                                                              ATes                                                      \
                                                                                   Bblock                                               \
                                                                                   Eblock                                               \
                                                                              ETes                                                      \
                                                                              Eblock                                                    \
                                                                              )                                                         \
                                                                         );                                                             \
                                        /* Cette edition a ete introduite le 20000323104448...                                       */ \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(KeyRelease,BLOC(VIDE;));                                       \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ButtonPress,BLOC(VIDE;));                                      \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ButtonRelease,BLOC(VIDE;));                                    \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(MotionNotify,BLOC(VIDE;));                                     \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(EnterNotify,BLOC(VIDE;));                                      \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(LeaveNotify,BLOC(VIDE;));                                      \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(FocusIn,BLOC(VIDE;));                                          \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(FocusOut,BLOC(VIDE;));                                         \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(KeymapNotify,BLOC(VIDE;));                                     \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(Expose                                                         \
                                        /* Le 1996061400, a l'evenement 'VisibilityNotify' j'ai ete oblige de substituer 'Expose'    */ \
                                        /* car dans certaines circonstances (par exemple deux telles fenetres simultanees et se      */ \
                                        /* se recouvrant) l'une d'elles (ici, celle du dessous) n'etait pas rafraichie lorsqu'une    */ \
                                        /* troisieme leur venait devant, puis repartait derriere...                                  */ \
                                                                        ,BLOC(REAFFICHAGE_D_UNE_IMAGE_PAR_IXdisplay;                    \
                                                                              REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay;                    \
                                                                              )                                                         \
                                                                         );                                                             \
                                        /* Le 19991110171631, j'ai identifie un probleme avec 'Expose'. Soit 'FD' deux fenetres      */ \
                                        /* initialement au-dessus d'une fenetre de type "image" qui a ete affichee precedemmment     */ \
                                        /* par 'v $xci/Sdisplay_RVB$K'. Lorsque le retour de l'image 'Im' au premier plan est        */ \
                                        /* demande (en cliquant dessus), on distingue deux cas, suivant que les deux fenetres 'FD'   */ \
                                        /* sont jointives ou pas ('FD' signifiant "Fenetre Dessus") ; d'une part :                   */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                 --------------------                                                      */ \
                                        /*                |FD                  |                                                     */ \
                                        /*                |      ..........    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                 --------------------                                                      */ \
                                        /*                 --------------------                                                      */ \
                                        /*                |FD    .        .    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                 --------------------                                                      */ \
                                        /*                       |////////|                                                          */ \
                                        /*                       |// Im //|     'FD' jointives     : 1 evenement 'Expose'.           */ \
                                        /*                       |////////|                                                          */ \
                                        /*                        --------                                                           */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* et d'autre part :                                                                         */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                 --------------------                                                      */ \
                                        /*                |FD                  |                                                     */ \
                                        /*                |      ..........    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                |      .        .    |                                                     */ \
                                        /*                 --------------------                                                      */ \
                                        /*                       |////////|                                                          */ \
                                        /*                       |// Im //|     'FD' non jointives : 2 evenements 'Expose',          */ \
                                        /*                       |////////|                                                          */ \
                                        /*                 --------------------                                                      */ \
                                        /*                |FD    .        .    |                                                     */ \
                                        /*                |      ..........    |                                                     */ \
                                        /*                |                    |                                                     */ \
                                        /*                |                    |                                                     */ \
                                        /*                 --------------------                                                      */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* Comment expliquer ce mystere et eviter donc le double re-affichage de l'image 'Im'        */ \
                                        /* dans le premier cas ? Au passage, il s'ecoule un peu plus de 0.3 seconde entre les        */ \
                                        /* 2 evenements 'Expose'. Le 19991112090000, j'ai donc applique une solution "heuristique"   */ \
                                        /* consistant a ne pas faire 'REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay' suite a un 'Expose'     */ \
                                        /* si ce dernier apparait trop proche du precedent 'Expose' (la duree actuellement           */ \
                                        /* utilisee est de 0.5 seconde, ce qui est un peu trop, mais soyons prudents...).            */ \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(GraphicsExpose,BLOC(VIDE;));                                   \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(NoExpose,BLOC(VIDE;));                                         \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(VisibilityNotify,BLOC(VIDE;));                                 \
                                        /* Le 1996061400, a l'evenement 'VisibilityNotify' j'ai ete oblige de substituer 'Expose'    */ \
                                        /* car dans certaines circonstances (par exemple deux telles fenetres simultanees et se      */ \
                                        /* se recouvrant) l'une d'elles (ici, celle du dessous) n'etait pas rafraichie lorsqu'une    */ \
                                        /* troisieme leur venait devant, puis repartait derriere...                                  */ \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(CreateNotify,BLOC(VIDE;));                                     \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(DestroyNotify,BLOC(VIDE;));                                    \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(UnmapNotify,BLOC(VIDE;));                                      \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(MapNotify,BLOC(VIDE;));                                        \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(MapRequest,BLOC(VIDE;));                                       \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ReparentNotify,BLOC(VIDE;));                                   \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ConfigureNotify,BLOC(VIDE;));                                  \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ConfigureRequest,BLOC(VIDE;));                                 \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(GravityNotify,BLOC(VIDE;));                                    \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ResizeRequest,BLOC(VIDE;));                                    \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(CirculateNotify,BLOC(VIDE;));                                  \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(CirculateRequest,BLOC(VIDE;));                                 \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(PropertyNotify,BLOC(VIDE;));                                   \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(SelectionClear,BLOC(VIDE;));                                   \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(SelectionRequest,BLOC(VIDE;));                                 \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(SelectionNotify,BLOC(VIDE;));                                  \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ColormapNotify,BLOC(VIDE;));                                   \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(ClientMessage,BLOC(VIDE;));                                    \
                                        TRAITEMENT_D_UN_EVENEMENT_ARRIVE(MappingNotify,BLOC(VIDE;));                                    \
                                        Defo                                                                                            \
                                             Bblock                                                                                     \
                                             PRINT_ATTENTION("un evenement non reconnu est arrive (2)");                                \
                                             CAL1(Prer1("(numero=%d)\n",ASD1(bloc_d_attente_des_evenements,type)));                     \
                                             Eblock                                                                                     \
                                        EDef                                                                                            \
                                        Eblock                                                                                          \
                                   ECho                                                                                                 \
                                   Eblock                                                                                               \
                              ETan                                                                                                      \
                                                                                                                                        \
                              Test(IFEQ(ASD1(bloc_d_attente_des_evenements,type),evenement_attendu_inconnu))                            \
                                        /* Ce test en apparence inutile (a cause du 'Tant(...)' qui precede), est mis ici malgre     */ \
                                        /* tout afin de valider finement tout cette programmation...                                 */ \
                                   Bblock                                                                                               \
                                   NE_PAS_SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE;                                    \
                                        /* Afin de ne pas se remettre en attente, sauf avis contraire ci-dessous...                  */ \
                                   BLOC(action_a_la_reception);                                                                         \
                                        /* Apres l'arrivee de l'evenement attendu, on effectue eventuellement quelque chose de       */ \
                                        /* specifique. Rappelons que l'on peut trouver ici le code suivant :                         */ \
                                        /*                                                                                           */ \
                                        /*                  EGAL(boucler_sur_l_attente_des_evenements,VRAI);                         */ \
                                        /*                                                                                           */ \
                                        /* qui permettra de se remettre en attente d'un nouvel evenement de meme type ; ceci se      */ \
                                        /* fera grace a la procedure 'SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE'.    */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("incoherence dans l'evenement arrive");                                                 \
                                        /* En effet, l'instruction :                                                                 */ \
                                        /*                                                                                           */ \
                                        /*        Tant(IFNE(ASD1(bloc_d_attente_des_evenements,type),evenement_attendu_inconnu))     */ \
                                        /*                                                                                           */ \
                                        /* qui figure ci-dessus, a du detecter l'evenement attendu...                                */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                                                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Ainsi, on n'attend que l'evenement attendu et inconnu...                                  */

#    define    ATTENTE_DE_L_EVENEMENT_ColormapNotify                                                                                    \
                         Bblock                                                                                                         \
                         Test(IFNE(PALETTE_DE_COULEURS_UTILISEE,PALETTE_DE_COULEURS_PAR_DEFAUT))                                        \
                              Bblock                                                                                                    \
                              ATTENTE_D_UN_EVENEMENT_CONNU(ColormapNotify,BLOC(VIDE;));                                                 \
                                        /* Attente de notification...                                                                */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Ainsi, on attend l'evenement 'ColormapNotify' uniquement si l'on n'est pas sur la         */ \
                                        /* palette par defaut...                                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(CHAR,POINTERc(X11_____nom_du_serveur_et_de_l_ecran)));
                                        /* Nom du serveur et de l'ecran, ce qui correspond en fait a la variable 'DISPLAY'           */
                                        /* du shell...                                                                               */
DEFV(Common,DEFV(Logical,INIT(X11_____liaison_avec_le_serveur,INACTIF)));
                                        /* Indicateur logique precisant si la liaison est active (entre un 'open' et un 'close'),    */
                                        /* ou inactive (pas encore ouverte, ou fermee). ATTENTION, il s'agit d'une variable externe. */
DEFV(Local,DEFV(X_Display,POINTERs(description_du_serveur_et_de_l_ecran)));
                                        /* Structure definissant les caracteristiques du serveur 'X-Window' et de l'ecran            */
                                        /* utilise pour la visualisation presente.                                                   */
DEFV(Local,DEFV(X_Int,INIT(nombre_de_visuals_satisfaisants_recuperes,UNDEF)));
                                        /* Nombre de "visual"s recuperes, et que l'on trouve dans la liste qui suit,                 */
DEFV(Local,DEFV(X_Int,INIT(POINTERi(Anombre_de_visuals_satisfaisants_recuperes)
                          ,ADRESSE(nombre_de_visuals_satisfaisants_recuperes)
                           )
                )
     );
                                        /* Et son pointeur justifie uniquement pour les SYSTEMEs du type 'SYSTEME_CRAYYMP...' et qui */
                                        /* valident les arguments de 'XGetVisualInfo(...)'...                                        */

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
DEFV(Local,DEFV(X_XVisualInfo,POINTERs(liste_des_visuals_supportes_et_satisfaisants)));
                                        /* Liste des differents types de "visual"s supportes physiquement par le systeme, et         */
                                        /* correspondant aux specifications exprimees dans 'type_de_visual_recherche'.               */
                                        /* ATTENTION : cette subtilite est due au traitement particulier de la fonction              */
                                        /* 'XGetVisualInfo(...)' sur ce SYSTEME, et qui renvoie un pointeur sur la structure         */
                                        /* 'X_XVisualInfo' et non pas un pointeur sur un tableau de telles structures...             */
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
DEFV(Local,DEFV(X_XVisualInfo,DTbp(liste_des_visuals_supportes_et_satisfaisants)));
                                        /* Liste des differents types de "visual"s supportes physiquement par le systeme, et         */
                                        /* correspondant aux specifications exprimees dans 'type_de_visual_recherche'.               */
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )

DEFV(Common,DEFV(X_Window,X11_____fenetre_courante));
                                        /* Structure definissant la fenetre courante, c'est-a-dire celle que l'on ouvre, et          */
                                        /* dans laquelle on visualise. ATTENTION, il s'agit d'une variable externe.                  */
DEFV(Local,DEFV(X_XSetWindowAttributes,attributs_de_la_fenetre));
                                        /* Parametre definissant les attributs de la fenetre.                                        */
DEFV(Local,DEFV(X_GC,contexte_graphique_de_visualisation));
                                        /* Definition du contexte graphique par lequel visualiser l'image, et qui precise par        */
                                        /* exemple la facon d'ecrire les points...                                                   */
DEFV(Local,DEFV(Logical,INIT(utiliser_L_SUBSTITUTION_X_WINDOW,FAUX)));
                                        /* Indicateur logique precisant si 'L_SUBSTITUTION_X_WINDOW' est necessaire ('VRAI') ou      */
                                        /* pas ('FAUX'), ce qui se produit lorsqu'il y a correspondance un pour un des niveaux (cas  */
                                        /* sur 'SYSTEME_SG4D..._IRIX' lorsque l'on demande la liste de substitution                  */
                                        /* 'L_SUBSTITUTION_NEUTRE'...).                                                              */
DEFV(Local,DEFV(Logical,INIT(creer_une_palette,VRAI)));
                                        /* Indicateur logique precisant si la palette a ete deja ete creee ou pas...                 */
DEFV(Local,DEFV(X_Colormap,palette_de_couleurs_creee));
                                        /* Identificateur de la palette creee specifiquement pour la visualisation...                */
DEFV(Local,DEFV(Logical,INIT(c_est_le_premier_XInstallColormap,VRAI)));
                                        /* Indicateur logique precisant si le premier 'XInstallColormap(...)' a ete fait ou pas,     */
                                        /* car en effet, pour le premier il faut un 'ColormapNotify', alors que pour les eventuels   */
                                        /* suivants, il n'en faut pas...                                                             */
DEFV(Local,DEFV(Logical,INIT(contenu_de_la_palette,INVALIDE)));
                                        /* Indicateur logique precisant si la palette a ete initialisee (dans un 'open'), ou pas     */
                                        /* encore (ou fermee apres un 'close').                                                      */

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

BFonctionI

#    define    NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS                                                                                  \
                         UN                                                                                                             \
                                        /* Nombre d'entrees allouees a chaque appel de 'XAllocColorCells()', et nombre d'entrees     */ \
                                        /* initialisees a chaque appel de 'XStoreColors()'.                                          */
#    define    COULEUR_UNIQUE_ALLOUEE                                                                                                   \
                         INDEX0                                                                                                         \
                                        /* Donne l'index de l'entree allouee par 'XAllocColorCells()' dans le vecteur                */ \
                                        /* 'entree_courante_de_la_palette'.                                                          */
#    define    NOMBRE_DE_PLANS_MASQUES_ALLOUES_EN_UNE_FOIS                                                                              \
                         ZERO                                                                                                           \
                                        /* Nombre de plans "masque" alloues a chaque appel de 'XAllocColorCells()'.                  */
#    define    CONTIGUITE_DES_ENTREES                                                                                                   \
                         False                                                                                                          \
                                        /* Indique si les plans alloues doivent etre contigus ('True') ou pas ('False').             */

#    define    NIVEAU_DE_L_entree_courante_de_la_palette                                                                                \
                         ASD1(ITb1(entree_courante_de_la_palette,INDX(COULEUR_UNIQUE_ALLOUEE,COULEUR_UNIQUE_ALLOUEE)),pixel)            \
                                        /* Pour alleger l'ecriture...                                                                */

#    define    ACCES_LA_PALETTE_ET_TRANSLATION(substitution,composante)                                                                 \
                         Bblock                                                                                                         \
                         SUBSTITUTION(L_SUBSTITUTION`substitution);                                                                     \
                         EGAL(ASD1(ITb1(entree_courante_de_la_palette,INDX(COULEUR_UNIQUE_ALLOUEE,COULEUR_UNIQUE_ALLOUEE))              \
                                  ,composante                                                                                           \
                                   )                                                                                                    \
                             ,POURCENTAGE_DES_COULEURS(Nsubstitution(ROTATION_NIVEAU(niveau                                             \
                                                                                    ,increment_des_niveaux                              \
                                                                                    ,translater_le_NOIR                                 \
                                                                                     )                                                  \
                                                                     )                                                                  \
                                                       )                                                                                \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                                        /* Acces a une entree d'une liste de substitution et translation...                          */
#    define    X_FACTEUR_MULTIPLICATIF_DES_NIVEAUX                                                                                      \
                         FLOT(TRMU(EXP2(COULEURS)))                                                                                     \
                                        /* Facteur par lequel il faut multiplier des niveaux normalises (dans [0,1]) pour            */ \
                                        /* obtenir des niveaux de gris compatible avec 'X-Window'...                                 */
#    define    POURCENTAGE_DES_COULEURS(niveau)                                                                                         \
                         INTE(MUL2(______NORMALISE_NIVEAU(niveau)                                                                       \
                                  ,X_FACTEUR_MULTIPLICATIF_DES_NIVEAUX                                                                  \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Pour convertir un niveau dans [NOIR,BLANC] en un pourcentage.                             */

#    define    PAS_D_ENTREE_PRECEDENTE_DE_LA_PALETTE                                                                                    \
                         UNDEF                                                                                                          \
                                        /* Pour initialiser 'entree_precedente_de_la_palette'...                                     */
#    define    PAS_D_ENTREE_ALLOUEE_DE_LA_PALETTE                                                                                       \
                         UNDEF                                                                                                          \
                                        /* Pour initialiser 'entree_allouee_de_la_palette'...                                        */

DEFV(Common,DEFV(FonctionI,IXpalette(increment_des_niveaux,translater_le_NOIR)))
DEFV(Argument,DEFV(Int,increment_des_niveaux));
                                        /* Increment du niveau courant dans [NOIR,BLANC] afin de pouvoir decaler la palette (ce      */
                                        /* qui signifie aussi la faire "tourner").                                                   */
DEFV(Argument,DEFV(Logical,translater_le_NOIR));
                                        /* Indique si le niveau 'NOIR' est translatable ('LE_NOIR_EST_TRANSLATABLE') dans            */
                                        /* 'ACCES_LA_PALETTE_ET_TRANSLATION(...)' ou pas ('LE_NOIR_N_EST_PAS_TRANSLATABLE')...       */
                                        /*                                                                                           */
                                        /* ATTENTION, cet Argument n'a de sens que pour 'ALLOCATION_DES_COULEURS_VERSION_02', mais   */
                                        /* vu que l'appel a la procedure 'ACCES_LA_PALETTE_ET_TRANSLATION(...)' n'est pas soumis     */
                                        /* a cette condition, cet Argument est toujours present. Enfin, cela simplifie les choses    */
                                        /* puisque l'on valide le nombre d'arguments des fonctions...                                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(Positive,INIT(nombre_d_entrees_utilisees,ZERO));
     DEFV(X_XColor,DTb1(entree_courante_de_la_palette,NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS));
                                        /* Donnees necessaires a definir l'entree courante de la palette lors de son initialisation. */
     DEFV(X_Positive,DTb1(entrees_allouees_dans_la_palette,NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS));
                                        /* Donne l'entree courante allouee dans la palette de couleurs,                              */
     DEFV(X_Positive,INIT(POINTERi(Aentrees_allouees_dans_la_palette),ATb1(entrees_allouees_dans_la_palette)));
                                        /* Et son pointeur pour faire plaisir a 'XAllocColorCells(...)' sur les SYSTEMEs qui         */
                                        /* valident les arguments...                                                                 */
     DEFV(X_Positive,DTb1(masques_alloues_dans_la_palette,NOMBRE_DE_PLANS_MASQUES_ALLOUES_EN_UNE_FOIS));
                                        /* Donne le plan de masque alloue dans la palette de couleur, mais ceci est inutilise,       */
     DEFV(X_Positive,INIT(POINTERi(Amasques_alloues_dans_la_palette),ATb1(masques_alloues_dans_la_palette)));
                                        /* Et son pointeur pour faire plaisir a 'XAllocColorCells(...)' sur les SYSTEMEs qui         */
                                        /* valident les arguments...                                                                 */
     DEFV(Positive,INIT(entree_precedente_de_la_palette,PAS_D_ENTREE_PRECEDENTE_DE_LA_PALETTE));
                                        /* Donnees necessaires a eviter d'allouer deux fois de suite la meme entree...               */
     DEFV(Positive,INIT(entree_allouee_de_la_palette,PAS_D_ENTREE_ALLOUEE_DE_LA_PALETTE));
                                        /* Entree reellement allouee lors d'un 'XallocColor()'.                                      */
     DEFV(Logical,INIT(faire_le_XStoreColors,VRAI));
                                        /* Indicateur permettant, en cas d'erreur, d'inhiber les 'XStoreColors()'.                   */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
               Bblock
               Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02)
                    Bblock
                    Test(IL_FAUT(creer_une_palette))
                         Bblock
                         Test(IZGT(nombre_de_visuals_satisfaisants_recuperes))
                              Bblock
                              EGAL(palette_de_couleurs_creee
                                  ,XCreateColormap(description_du_serveur_et_de_l_ecran
                                                  ,X11_____fenetre_courante
                                                  ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                                  ,AllocNone
                                                   )
                                   );
                                        /* Creation de la palette en utilisant le premier "visual" satisfaisant...                   */
                                        /* ATTENTION : on devrait, par raison d'homogeneite, ecrire :                                */
                                        /*                                                                                           */
                                        /*                  EGAL(PALETTE_DE_COULEURS_UTILISEE                                        */
                                        /*                      ,...                                                                 */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* mais malheureusement, le compilateur des SYSTEMEs 'SYSTEME_SG4D..._IRIX_CC' n'accepte     */
                                        /* pas cette syntaxe audacieuse...                                                           */
                              EGAL(creer_une_palette,FAUX);
                                        /* Ainsi, l'on sait pour les eventuels appels suivants de 'IXpalette(...)' que la palette    */
                                        /* a deja ete creee (jusqu'a 'IXclose(...)').                                                */
                              Eblock
                         ATes
                              Bblock
                                        /* ATTENTION : 'creer_une_palette' conserve sa valeur 'VRAI', et ainsi, on saura par la      */
                                        /* suite que rien de satisfaisant n'a ete trouve...                                          */
                              EGAL(palette_de_couleurs_creee
                                  ,PALETTE_DE_COULEURS_PAR_DEFAUT
                                   );
                                        /* Et on prend la palette par defaut...                                                      */
                                        /* ATTENTION : on devrait, par raison d'homogeneite, ecrire :                                */
                                        /*                                                                                           */
                                        /*                  EGAL(PALETTE_DE_COULEURS_UTILISEE                                        */
                                        /*                      ,...                                                                 */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* mais malheureusement, le compilateur des SYSTEMEs 'SYSTEME_SG4D..._IRIX_CC' n'accepte     */
                                        /* pas cette syntaxe audacieuse...                                                           */
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IFOU(IFET(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01
                             ,IFNE(TYPE_DU_COLORIAGE_COURANT,PseudoColor)
                              )
                        ,IFET(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02
                             ,IL_FAUT(creer_une_palette)
                              )
                         )
                    )
                    Bblock
                    PRINT_ERREUR("le mode demande n'est pas disponible");

#    define    GENERE_ACCES_AUX_PALETTES_DE_COULEURS_VERSION_XX(numero)                                                                 \
                         COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION`numero,"numero",C_VIDE)

                    begin_nouveau_block
                         Bblock
                         DEFV(CHAR,INIC(POINTERc(format_EGAq____IXpalette)
                                       ,chain_Aconcaten2(GENERE_ACCES_AUX_PALETTES_DE_COULEURS_VERSION_XX(01)
                                                        ,GENERE_ACCES_AUX_PALETTES_DE_COULEURS_VERSION_XX(02)
                                                         )
                                        )
                              );

                         CAL1(Prer1("(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_%s)\n",format_EGAq____IXpalette));

                         CALZ_FreCC(format_EGAq____IXpalette);
                         Eblock
                    end_nouveau_block

#    undef     GENERE_ACCES_AUX_PALETTES_DE_COULEURS_VERSION_XX

                    CODE_ERROR(ERREUR28);
                                        /* Introduit le 20021223104745 pour '$LACT15'...                                             */
                    Eblock
               ATes
                    Bblock
                    EGAL(utiliser_L_SUBSTITUTION_X_WINDOW,FAUX);
                                        /* Indicateur logique precisant si 'L_SUBSTITUTION_X_WINDOW' est necessaire ('VRAI') ou      */
                                        /* pas ('FAUX'), ce qui se produit lorsqu'il y a correspondance un pour un des niveaux (cas  */
                                        /* sur 'SYSTEME_SG4D..._IRIX' lorsque l'on demande la liste de substitution                  */
                                        /* 'L_SUBSTITUTION_NEUTRE'...). A l'etat initial cette liste n'est pas utile a priori.       */
                    EGAL(ASD1(ITb1(entree_courante_de_la_palette,INDX(COULEUR_UNIQUE_ALLOUEE,COULEUR_UNIQUE_ALLOUEE)),flags)
                        ,OUI03(DoRed
                              ,DoGreen
                              ,DoBlue
                               )
                         );
                                        /* Afin de positionner les trois composantes chromatiques...                                 */
                    BoIn(niveau,NOIR,BLANC,PAS_COULEURS)
                         Bblock
                         Test(EST_INVALIDE(contenu_de_la_palette))
                              Bblock
                                        /* Lorsque le contenu de la palette est 'INVALIDE', cela signifie qu'elle n'a pas encore     */
                                        /* ete allouee, il convient donc de le faire...                                              */
                              Test(EST_INACTIF_FILTRAGE)
                                   Bblock
                                   EGAL(NIVEAU_DE_L_entree_courante_de_la_palette
                                       ,ADD2(VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN,NIVR(niveau))
                                        );
                                        /* Afin de selectionner le niveau de gris de l'entree courante ; lorsqu'il n'y a pas de      */
                                        /* substitution active, on le prend tel quel...                                              */
                                   Eblock
                              ATes
                                   Bblock
                                   EGAL(NIVEAU_DE_L_entree_courante_de_la_palette
                                       ,ADD2(VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN,NIVR(Nsubstitution(niveau)))
                                        );
                                        /* Afin de selectionner le niveau de gris de l'entree courante ; lorsqu'une substitution     */
                                        /* est active, ce niveau de gris (qui est aussi rappelons-le l'index d'acces a la            */
                                        /* palette de la fenetre) passe dans cette substitution courante, ce qui permet de faire     */
                                        /* des "tassements" de palettes, afin qu'elles occupent moins de 'COULEURS' entrees...       */
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                                        /* Lorsque le contenu de la palette est 'VALIDE', cela signifie qu'elle a deja ete           */
                                        /* allouee, il convient donc de recuperer les allocations deja faites...                     */
                              PUSH_FILTRAGE;
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */
                              SET_FILTRAGE(ACTIF);
                                        /* On autorise tous les filtrages afin d'avoir la 'SUBSTITUTION'.                            */
                              PUSH_SUBSTITUTION;
                                        /* Sauvegarde de la substitution courante.                                                   */
                              SUBSTITUTION(L_SUBSTITUTION_X_WINDOW);
                              EGAL(NIVEAU_DE_L_entree_courante_de_la_palette
                                  ,ADD2(VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN,NIVR(Nsubstitution(niveau)))
                                   );
                                        /* Afin de recuperer l'entree deja allouee dans la palette de couleurs...                    */
                              PULL_SUBSTITUTION;
                              PULL_FILTRAGE;
                                        /* Et restauration des conditions initiales...                                               */
                              Eblock
                         ETes

                         Test(IFEQ(NIVEAU_DE_L_entree_courante_de_la_palette
                                  ,PAS_D_ENTREE_PRECEDENTE_DE_LA_PALETTE
                                   )
                              )
                              Bblock
                              PRINT_ATTENTION("la detection de la reallocation ne fonctionne pas correctement");
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(IFNE(NIVEAU_DE_L_entree_courante_de_la_palette
                                  ,entree_precedente_de_la_palette
                                   )
                              )
                              Bblock
                              PUSH_FILTRAGE;
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */
                              SET_FILTRAGE(ACTIF);
                                        /* On autorise tous les filtrages afin d'avoir la 'SUBSTITUTION'.                            */
                              PUSH_SUBSTITUTION;
                                        /* Sauvegarde de la substitution courante.                                                   */
                              ACCES_LA_PALETTE_ET_TRANSLATION(ROUGE,red);
                                        /* Recuperation de la composante 'ROUGE',                                                    */
                              ACCES_LA_PALETTE_ET_TRANSLATION(VERTE,green);
                                        /* Recuperation de la composante 'VERTE',                                                    */
                              ACCES_LA_PALETTE_ET_TRANSLATION(BLEUE,blue);
                                        /* Recuperation de la composante 'BLEUE',                                                    */
                              PULL_SUBSTITUTION;
                              PULL_FILTRAGE;
                                        /* Et restauration des conditions initiales...                                               */

                              EGAL(faire_le_XStoreColors,VRAI);
                                        /* A priori, le 'XStoreColors()' doit etre effectue...                                       */
                              EGAL(entree_precedente_de_la_palette
                                  ,NIVEAU_DE_L_entree_courante_de_la_palette
                                   );
                                        /* Ainsi, on se souvient de la derniere entree initialisee, afin d'eviter les                */
                                        /* re-allocations, que la palette soit 'VALIDE' ou 'INVALIDE'...                             */

                              Test(IFINff(niveau,NIVA(VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN),NIVA(VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN)))
                                        /* ATTENTION, on notera que l'on n'ecrit pas :                                               */
                                        /*                                                                                           */
                                        /*   Test(IFINff(niveau,NIVA(NIVEAU_DU_NOIR_DE_L_ECRAN),NIVA(NIVEAU_DU_BLANC_DE_L_ECRAN)))   */
                                        /*                                                                                           */
                                        /* car, en effet, 'NIVEAU_DU_BLANC_DE_L_ECRAN' ne designe pas, sur certains SYSTEMEs le      */
                                        /* niveau maximal. Ainsi, sur 'SYSTEME_SG4D...', on trouve :                                 */
                                        /*                                                                                           */
                                        /*   preallocated pixels:    black 0, white 7                                                */
                                        /*                                                                                           */
                                        /* et donc 'NIVEAU_DU_BLANC_DE_L_ECRAN' vaut 7 (et non pas 255...). De meme, sur             */
                                        /* 'SYSTEME_NWS3000_NEWSOS', on trouve :                                                     */
                                        /*                                                                                           */
                                        /*   preallocated pixels:    black 1, white 0                                                */
                                        /*                                                                                           */
                                        /* toutes ces informations etant obtenues par 'xdpyinfo'.                                    */
                                   Bblock
                                   Test(EST_INVALIDE(contenu_de_la_palette))
                                        Bblock
                                        Test(X_IL_Y_A_ERREUR(CODE_ERROR(XAllocColorCells
                                                                            (description_du_serveur_et_de_l_ecran
                                                                            ,PALETTE_DE_COULEURS_UTILISEE
                                                                            ,CONTIGUITE_DES_ENTREES
                                                                            ,Amasques_alloues_dans_la_palette
                                                                            ,POSI(NOMBRE_DE_PLANS_MASQUES_ALLOUES_EN_UNE_FOIS)
                                                                            ,Aentrees_allouees_dans_la_palette
                                                                            ,POSI(NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS)
                                                                             )
                                                                        )
                                                             )
                                             )
                                        /* Et allocation de l'entree de rang 'niveau', cette entree etant en mode 'read-write'...    */
                                             Bblock
                                             PRINT_ERREUR("l'allocation d'un registre de coloriage est impossible");
                                             CAL1(Prer1("son niveau est %d\n",niveau));
                                             EGAL(faire_le_XStoreColors,FAUX);
                                        /* Puisqu'il y a eu erreur, il faut inhiber le 'XStoreColors()'...                           */
                                             Eblock
                                        ATes
                                             Bblock
                                             EGAL(entree_allouee_de_la_palette
                                                 ,ITb1(entrees_allouees_dans_la_palette
                                                      ,INDX(COULEUR_UNIQUE_ALLOUEE,COULEUR_UNIQUE_ALLOUEE)
                                                       )
                                                  );
                                        /* Ainsi, on se souvient de la derniere entree allouee pour calculer la liste de             */
                                        /* substitution 'L_SUBSTITUTION_X_WINDOW'.                                                   */
                                             EGAL(NIVEAU_DE_L_entree_courante_de_la_palette
                                                 ,entree_allouee_de_la_palette
                                                  );
                                        /* Mise en place de l'entree allouee...                                                      */
                                             INCR(nombre_d_entrees_utilisees,I);
                                        /* Comptage des entrees reellement utilises dans la palette de couleurs.                     */
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   Test(IL_FAUT(faire_le_XStoreColors))
                                        Bblock
                                        CALS(XStoreColors(description_du_serveur_et_de_l_ecran
                                                         ,PALETTE_DE_COULEURS_UTILISEE
                                                         ,entree_courante_de_la_palette
                                                         ,NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS
                                                          )
                                             );
                                        /* Enfin, on initialise (ou re-initialise) l'entree courante de la palette lorsqu'il         */
                                        /* n'y a pas eu d'erreur dans 'XAllocColorCells()'...                                        */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   PRINT_ERREUR("la palette du serveur ne supporte pas assez de couleurs");
                                   CAL1(Prer3("le niveau %d est ignore car en dehors de [%d,%d]\n"
                                             ,niveau
                                             ,NIVA(VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN)
                                             ,NIVA(VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN)
                                              )
                                        );
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(EST_INVALIDE(contenu_de_la_palette))
                              Bblock
                              MODIFICATION_LISTE_DE_COLORIAGE_X_WINDOW(niveau
                                                                      ,NIVA(SOUS(entree_allouee_de_la_palette
                                                                                ,VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN
                                                                                 )
                                                                            )
                                                                       );
                                        /* Ainsi, on memorise les niveaux de gris qui sont reellement alloues par 'X-Window'         */
                                        /* pour cette palette afin que l'affichage des images puisse l'utiliser...                   */
                              Test(IFNE(niveau
                                       ,NIVA(SOUS(entree_allouee_de_la_palette,VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN))
                                        )
                                   )
                                   Bblock
                                   EGAL(utiliser_L_SUBSTITUTION_X_WINDOW,VRAI);
                                        /* On sait ici que 'L_SUBSTITUTION_X_WINDOW' est necessaire puisqu'on a decouvert au moins   */
                                        /* une correspondance qui n'est pas un pour un...                                            */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    EBoI

                    Test(EST_INVALIDE(contenu_de_la_palette))
                         Bblock
                         CALS(XSetWindowColormap(description_du_serveur_et_de_l_ecran
                                                ,X11_____fenetre_courante
                                                ,PALETTE_DE_COULEURS_UTILISEE
                                                 )
                              );
                                        /* Et affectation de cette palette a la fenetre courante...                                  */

#    ifdef     BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
                    ATTENTE_DE_L_EVENEMENT_ColormapNotify;
#    Aifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
                    ATTENTE_D_UN_EVENEMENT_CONNU(ColormapNotify,BLOC(VIDE;));
                                        /* Et attente de notification...                                                             */
#    Eifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2

                         Test(IFLT(NOMBRE_MAXIMAL_DE_COULEURS_ACCESSIBLES,nombre_d_entrees_utilisees))
                              Bblock
                              PRINT_ERREUR("en mode 'pseudo-couleurs', le nombre de couleurs disponibles est insuffisant");
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         EGAL(contenu_de_la_palette,VALIDE);
                                        /* Ainsi, on sait que le contenu de la palette est 'VALIDE' ; l'invalidation se fera dans    */
                                        /* le 'IXclose()'.                                                                           */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02)
                         Bblock
                         Test(IFNE(PALETTE_DE_COULEURS_UTILISEE,PALETTE_DE_COULEURS_PAR_DEFAUT))
                              Bblock
                              EGAL(ASD1(attributs_de_la_fenetre,colormap),PALETTE_DE_COULEURS_UTILISEE);
                              CALS(XChangeWindowAttributes(description_du_serveur_et_de_l_ecran
                                                          ,X11_____fenetre_courante
                                                          ,CWColormap
                                                          ,ADRESSE(attributs_de_la_fenetre)
                                                           )
                                   );
                                        /* Changement des attributs de la fenetre, au cas ou la palette utilisee ne serait pas       */
                                        /* la palette par defaut...                                                                  */

#    ifdef     BUG_SYSTEME_X_WINDOW_EVENEMENTS_3
#    Aifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_3
                         ATTENTE_DE_L_EVENEMENT_ColormapNotify;
#    Eifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_3

                              CALS(XInstallColormap(description_du_serveur_et_de_l_ecran
                                                   ,PALETTE_DE_COULEURS_UTILISEE
                                                    )
                                   );
                                        /* Installation physique (au niveau hardware) de la palette. On notera que cette appel       */
                                        /* est fait apres chaque modification de la palette ; cela est rendu obligatoire par         */
                                        /* 'SYSTEME_SG4D..._IRIX' qui sans lui, laisse la palette inchangee a l'ecran, alors que     */
                                        /* pour 'SYSTEME_DPX5000_SPIX', tout se passe bien. Mais encore une fois, le fait que l'on   */
                                        /* soit sur 'SYSTEME_DPX5000_SPIX' n'empeche pas d'utiliser le serveur distant de            */
                                        /* 'SYSTEME_SG4D..._IRIX', d'ou cet appel inconditionnel...                                  */
                              Test(EST_VRAI(c_est_le_premier_XInstallColormap))
                                   Bblock
                                   ATTENTE_DE_L_EVENEMENT_ColormapNotify;
                                        /* Dans le cas du premier 'XInstallColormap(...)' apres le 'IXopen(...)', il faut faire      */
                                        /* le 'ATTENTE_DE_L_EVENEMENT_ColormapNotify', alors que pour les eventuels suivants, il     */
                                        /* n'y en aura pas...                                                                        */
                                   EGAL(c_est_le_premier_XInstallColormap,FAUX);
                                        /* Indiquons ainsi que le premier 'XInstallColormap(...)' a ete fait, et ce jusqu'a ce que   */
                                        /* l'on fasse le 'IXclose(...)'...                                                           */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ETes

               Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03)
                    Bblock
                    PRINT_ERREUR("le changement de couleurs ne peut avoir lieu en vraies couleurs (1)");
                                        /* En fait, evidemment on ne passe jamais par ici (par definition du mode                    */
                                        /* 'ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03'), mais c'est plus "symetrique"...             */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
                                        /* Cas des vraies couleurs :                                                                 */
               PRINT_ERREUR("le changement de couleurs ne peut avoir lieu en vraies couleurs (2)");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("le chargement des couleurs ne peut avoir lieu car la liaison avec le serveur 'X-Window' est inactive");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    undef     PAS_D_ENTREE_ALLOUEE_DE_LA_PALETTE
#    undef     PAS_D_ENTREE_PRECEDENTE_DE_LA_PALETTE
#    undef     POURCENTAGE_DES_COULEURS
#    undef     ACCES_LA_PALETTE_ET_TRANSLATION
#    undef     NIVEAU_DE_L_entree_courante_de_la_palette
#    undef     X_FACTEUR_MULTIPLICATIF_DES_NIVEAUX
#    undef     CONTIGUITE_DES_ENTREES
#    undef     NOMBRE_DE_PLANS_MASQUES_ALLOUES_EN_UNE_FOIS
#    undef     COULEUR_UNIQUE_ALLOUEE
#    undef     NOMBRE_DE_COULEURS_ALLOUEES_EN_UNE_FOIS

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H O I X   E N T R E   N E   P A S   I N V E R S E R   L ' I M A G E   E T   L ' I N V E R S E R  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    LAISSER_LES_NIVEAUX_DE_L_IMAGE_EN_L_ETAT                                                                                 \
                         NOTL(INVERSER_LES_NIVEAUX_DE_L_IMAGE)                                                                          \
                                        /* L'image a visualiser l'est en mode 'GXcopy', c'est-a-dire qu'elle n'est pas inversee...   */
#    define    INVERSER_LES_NIVEAUX_DE_L_IMAGE                                                                                          \
                         IFOU(LE_SERVEUR_X_WINDOW_EST_CELUI_DE("X_LACT23")                                                              \
                             ,TOUJOURS_FAUX                                                                                             \
                              )                                                                                                         \
                                        /* L'image a visualiser l'est en mode 'GXcopyInverted', c'est-a-dire qu'elle est inversee... */

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

#    if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
DEFV(Local,DEFV(Int,INIT(EnTete_de_sauvegardM ## Xmin_avant_IXopen,UNDEF)));
DEFV(Local,DEFV(Int,INIT(EnTete_de_sauvegardM ## Xmax_avant_IXopen,UNDEF)));
DEFV(Local,DEFV(Int,INIT(EnTete_de_sauvegardM ## Ymin_avant_IXopen,UNDEF)));
DEFV(Local,DEFV(Int,INIT(EnTete_de_sauvegardM ## Ymax_avant_IXopen,UNDEF)));
                                        /* Sauvegarde de {{Xmin,Xmax},{Ymin,Ymax}} avant 'IXopen(...)'. Ce dispositif a ete          */
                                        /* introduit le 20010222172555 car, en effet, j'ai decouvert a cette date que l'affichage    */
                                        /* etait incorrect (incomplet...) lorsque 'Xmin' ou 'Ymin' etaient non nuls...               */
#    Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
#    Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O U V E R T U R E   D ' U N E   F E N E T R E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    NOMBRE_D_ARGUMENTS_ARGV                                                                                                  \
                         UN                                                                                                             \
                                        /* Nombre maximal d'arguments 'argc' et 'argv' de 'XSetStandardProperties()' ; ces           */ \
                                        /* arguments vont etre provoirement inutilises...                                            */
#    define    NOMBRE_MAXIMAL_DE_COULEURS_AUTORISEES                                                                                    \
                         COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01                                                                 \
                             ,MOIT(COULEURS)                                                                                            \
                             ,COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02                                                            \
                                  ,NEUT(COULEURS)                                                                                       \
                                  ,COND(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03                                                       \
                                       ,NEUT(COULEURS)                                                                                  \
                                       ,NEUT(COULEURS)                                                                                  \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Nombre maximal de couleurs que l'on autorise pour une image...                            */
#    define    ABSENCE_DE_TRANSLATION_DE_LA_PALETTE                                                                                     \
                         ZERO                                                                                                           \
                                        /* Afin que la palette soit transmise telle qu'elle...                                       */
#    define    NOM_DE_LA_FENETRE                                                                                                        \
                         nom_de_la_fenetreA                                                                                             \
                                        /* Nom a donner a la fenetre courante,                                                       */
#    define    NOM_DE_SON_ICONE                                                                                                         \
                         nom_de_la_fenetreA                                                                                             \
                                        /* Et nom a donner a son icone associee...                                                   */

#    define    EDITION_DES_MESSAGES_DE_CONNEXION_IMPOSSIBLE_AVEC_LE_SERVEUR                                                             \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("la liaison avec le serveur 'X-Window' n'a pu se faire");                                         \
                         CAL1(Prer0("Les causes possibles sont :\n"));                                                                  \
                         CAL1(Prer0(" 1-l'ordinateur demande n'existe pas dans '$Fhosts',\n"));                                         \
                         CAL1(Prer0(" 2-l'eventuel accelerateur de '$Fhosts' n'est pas a jour"));                                       \
                         CAL1(Prer0(" (voir 'mkhosts' sur 'SYSTEME_NWS3000_NEWSOS'),\n"));                                              \
                         CAL1(Prer0(" 3-il n'y a pas les autorisations necessaires sur l'ordinateur demande"));                         \
                         CAL1(Prer0(" (voir '$FXhosts'),\n"));                                                                          \
                         CAL1(Prer0(" 4-le serveur 'X-Window' n'est pas actif,\n"));                                                    \
                         CAL1(Prer0(" 5-il n'y a pas d'utilisateurs 'logue'.\n"));                                                      \
                         Eblock                                                                                                         \
                                        /* Messages a envoyer apres un echec de la fonction 'XOpenDisplay(...)'.                     */

#    define    TEST_DE_LA_RELEASE_DU_SERVEUR(description_du_serveur_et_de_l_ecran)                                                      \
                         Bblock                                                                                                         \
                         Test(IFNE(VendorRelease(description_du_serveur_et_de_l_ecran),X_WINDOW_RELEASE))                               \
                              Bblock                                                                                                    \
                                        /* ATTENTION : la fonction 'VendorRelease(...)' renvoie le numero de release du serveur, qui */ \
                                        /* s'il est distant a de forte chance d'etre different de celui des bibliotheques locales ;  */ \
                                        /* ce test n'est donc pas forcement le signe d'un bug quelconque, a moins que les valeurs    */ \
                                        /* editees ci-dessous ne soient completement farfelues...                                    */ \
                              PRINT_ATTENTION("le numero de release du serveur n'est pas celui des bibliotheques locales");             \
                              CAL1(Prer1("release a la compilation = %d\n",X_WINDOW_RELEASE));                                          \
                              CAL1(Prer1("release du serveur       = %d\n",VendorRelease(description_du_serveur_et_de_l_ecran)));       \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Test du numero de la release du serveur 'X-Window'.                                       */

#    define    TEST_DE_L_EXISTENCE_DU_BACKINGSTORE(description_du_serveur_et_de_l_ecran)                                                \
                         Bblock                                                                                                         \
                         Test(IFEQ(DoesBackingStore(XDefaultScreenOfDisplay(description_du_serveur_et_de_l_ecran)),NotUseful))          \
                              Bblock                                                                                                    \
                              PRINT_ATTENTION("le mode 'backing-store' n'est pas supporte par le serveur utilise");                     \
                                        /* On verra a ce propos le fichier '$FxSGINeWS_cmd', et les commentaires qui lui sont        */ \
                                        /* associes dans le fichier '$Ffiles'...                                                     */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Test(IFEQ(DoesSaveUnders(XDefaultScreenOfDisplay(description_du_serveur_et_de_l_ecran)),False))                \
                              Bblock                                                                                                    \
                              PRINT_ATTENTION("le mode 'save-under' n'est pas supporte par le serveur utilise");                        \
                                        /* On verra a ce propos le fichier '$FxSGINeWS_cmd', et les commentaires qui lui sont        */ \
                                        /* associes dans le fichier '$Ffiles'...                                                     */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Test de l'exisence du 'BackingStore' et du 'SaveUnder'.                                   */

#    define    TESTS_DE_L_ECRAN_DU_SERVEUR(description_du_serveur_et_de_l_ecran)                                                        \
                         Bblock                                                                                                         \
                         Test(IZLE(ScreenCount(description_du_serveur_et_de_l_ecran)))                                                  \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("il n'y a pas d'ecrans sur ce serveur 'X-Window'");                                          \
                              EGAL(l_ouverture_de_la_fenetre_est_tentable,FAUX);                                                        \
                                        /* Et l'ouverture de la fenetre est refusee...                                               */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IL_NE_FAUT_PAS(X11_____tenter_l_ouverture_des_fenetres_trop_grandes_par_rapport_a_l_ecran))               \
                              Bblock                                                                                                    \
                              Test(IFLT(LARGEUR_DE_L_ECRAN,dimX))                                                                       \
                                   Bblock                                                                                               \
                                   PRINT_ATTENTION("les images sont trop larges pour l'ecran");                                         \
                                   CAL1(Prer2("une largeur de %d est demandee, alors que %d est la valeur maximale\n"                   \
                                             ,dimX                                                                                      \
                                             ,LARGEUR_DE_L_ECRAN                                                                        \
                                              )                                                                                         \
                                        );                                                                                              \
                                                                                                                                        \
                                   EGAL(l_ouverture_de_la_fenetre_est_tentable,FAUX);                                                   \
                                        /* Et l'ouverture de la fenetre est refusee...                                               */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              Test(IFLT(HAUTEUR_DE_L_ECRAN,dimY))                                                                       \
                                   Bblock                                                                                               \
                                   PRINT_ATTENTION("les images sont trop hautes pour l'ecran");                                         \
                                   CAL1(Prer2("une hauteur de %d est demandee, alors que %d est la valeur maximale\n"                   \
                                             ,dimY                                                                                      \
                                             ,HAUTEUR_DE_L_ECRAN                                                                        \
                                              )                                                                                         \
                                        );                                                                                              \
                                                                                                                                        \
                                   EGAL(l_ouverture_de_la_fenetre_est_tentable,FAUX);                                                   \
                                        /* Et l'ouverture de la fenetre est refusee...                                               */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Test du nombre d'ecrans du serveur et des dimensions correspondantes.                     */

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_3
#         define    QUE_FAIRE_DU_BACKING_STORE                                                                                          \
                              NotUseful                                                                                                 \
                                        /* Peut-on faire du "backinstore" ?                                                          */
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_3
#         define    QUE_FAIRE_DU_BACKING_STORE                                                                                          \
                              Always                                                                                                    \
                                        /* Peut-on faire du "backingstore" ?                                                         */
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_3

DEFV(Common,DEFV(Logical,ZINT(VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE_____compatibilite_20240331,FAUX)));
                                        /* Indicateur permettant d'assurer la compatibilite anterieure, si besoin est. Il fut        */
                                        /* introduit le 20240331074206v...                                                           */

#    define    VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE                                                                     \
                         Bblock                                                                                                         \
                         Test(IFET(IL_FAUT(X11_____KeyPress_____editer_XY_curseur)                                                      \
                                  ,IFOU(IFOU(IFGT(ASI1(dimension_de_la_fenetre,dx),_____lNORMALISE_OX11(LONGUEUR(LARGEUR_DE_L_ECRAN)))  \
                                            ,IFGT(ASI1(dimension_de_la_fenetre,dy),_____lNORMALISE_OY11(LONGUEUR(HAUTEUR_DE_L_ECRAN)))  \
                                             )                                                                                          \
                                       ,IFOU(IFNE(ASI1(dimension_de_la_fenetre,dx),_____lNORMALISE_OX11(dimX))                          \
                                            ,IFNE(ASI1(dimension_de_la_fenetre,dy),_____lNORMALISE_OY11(dimY))                          \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Test(IL_FAUT(X11_____KeyPress_____editer_XY_curseur_message_fenetre_incompatible))                        \
                                        /* Test introduit le 20091212212950...                                                       */ \
                                   Bblock                                                                                               \
                                   PRINT_ATTENTION("la taille de la fenetre est incompatible avec l'edition des coordonnees [X,Y]");    \
                                   PRINT_ATTENTION("cette possibilite est donc inhibee");                                               \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              EGAL(X11_____KeyPress_____editer_XY_curseur                                                               \
                                  ,COND(IL_NE_FAUT_PAS(VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE_____compatibilite_20240331) \
                                       ,VRAI                                                                                            \
                                       ,FAUX                                                                                            \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Et le dispositif 'X11_____KeyPress_____editer_XY_curseur' est inhibe...                   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Validation preliminaire des dimensions d'une fenetre. Ceci a ete introduit le             */ \
                                        /* 20000324142904 a cause de 'X11_____KeyPress_____editer_XY_curseur' car en effet, pour des */ \
                                        /* fenetres debordant de l'ecran le resultat de l'evaluation des coordonnees {X,Y} etait en  */ \
                                        /* general faux en ce qui concerne 'Y'. Cela semble venir du fait que bien que la fenetre    */ \
                                        /* semble correctement reduite de facon a tenir dans l'ecran, ses dimensions {width,height}  */ \
                                        /* semblent etre toujours celles qui ont ete demandees lors du 'IXopen...(...)'.             */ \
                                        /* 'dimension_de_la_fenetre' car il s'agit d'un argument d'appel (accede par 'ASI1(...)'     */ \
                                        /* et cela ne serait pas tres correct d'agir ainsi sur l'appelant...                         */ \
                                        /*                                                                                           */ \
                                        /* Le 20000327083012, pour simplifier davantage, l'edition des coordonnees {X,Y} ne sera     */ \
                                        /* possible que si la taille de le fenetre est strictement egale a celle de l'image, et ne   */ \
                                        /* deborde pas de l'ecran de plus...                                                         */

DEFV(Common,DEFV(Logical,ZINT(CENTRAGE_EVENTUEL_DE_LA_FENETRE_____compatibilite_20121121,FAUX)));
                                        /* Indicateur permettant d'assurer la compatibilite anterieure, si besoin est. Cette         */
                                        /* compatibilite permettra, par exemple, d'accoler ou de superposer deux images 'Sud'        */
                                        /* et une image 'Std'...                                                                     */

#    define    CENTRAGE_EVENTUEL_DE_LA_FENETRE(centrer_la_fenetre)                                                                      \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(centrer_la_fenetre))                                                                              \
                              Bblock                                                                                                    \
                              INITIALISATION_POINT_2D(veritable_coin_bas_gauche                                                         \
                                                     ,ADD2(_____cNORMALISE_OX11(Xmin11)                                                 \
                                                          ,SOUS(MOIT(_____lNORMALISE_OX11(LONGUEUR(LARGEUR_DE_L_ECRAN)))                \
                                                               ,MOIT(ASI1(dimension_de_la_fenetre,dx))                                  \
                                                                )                                                                       \
                                                           )                                                                            \
                                                     ,ADD2(_____cNORMALISE_OY11(Ymin11)                                                 \
                                                          ,SOUS(MOIT(_____lNORMALISE_OY11(LONGUEUR(HAUTEUR_DE_L_ECRAN)))                \
                                                               ,MOIT(ASI1(dimension_de_la_fenetre,dy))                                  \
                                                                )                                                                       \
                                                           )                                                                            \
                                                      );                                                                                \
                                        /* Cas ou le centrage est demande : l'argument 'coin_bas_gauche' est ignore...               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, jusqu'au 20000324143439 'LARGEUR_DE_L_ECRAN' et 'HAUTEUR_DE_L_ECRAN' etaient   */ \
                                        /* utilises sans 'LONGUEUR(...)'.                                                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              TRANSFERT_POINT_2D(veritable_coin_bas_gauche,PINDIRECT(coin_bas_gauche));                                 \
                                        /* Cas ou le centrage n'est pas demande : c'est l'argument 'coin_bas_gauche' qui donne la    */ \
                                        /* position de la fenetre...                                                                 */ \
                                                                                                                                        \
                              Test(IL_NE_FAUT_PAS(CENTRAGE_EVENTUEL_DE_LA_FENETRE_____compatibilite_20121121))                          \
                                   Bblock                                                                                               \
                                   INITIALISATION_POINT_2D(veritable_coin_bas_gauche                                                    \
                                                          ,ADD2(ASD1(veritable_coin_bas_gauche,x)                                       \
                                                               ,MUL2(NEUT(_____lNORMALISE_OX11(EPAISSEUR_DES_BORDURES_DE_FENETRES))     \
                                                                    ,ASD1(veritable_coin_bas_gauche,x)                                  \
                                                                     )                                                                  \
                                                                )                                                                       \
                                                          ,ADD2(ASD1(veritable_coin_bas_gauche,y)                                       \
                                                               ,MUL2(NEUT(_____lNORMALISE_OY11(EPAISSEUR_DES_BORDURES_DE_FENETRES))     \
                                                                    ,ASD1(veritable_coin_bas_gauche,y)                                  \
                                                                     )                                                                  \
                                                                )                                                                       \
                                                           );                                                                           \
                                        /* Le 20121121091543, 'veritable_coin_bas_gauche' a ete translate de facon a prendre en      */ \
                                        /* compte l'epaisseur des bordures afin qu'elles ne risquent pas de couvrir d'autres images  */ \
                                        /* adjacentes, mais qu'elles se superposent exactement (d'ou les 'NEUT(...)'s et non pas     */ \
                                        /* des 'DOUB(...)'s ci-dessus).                                                              */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Choix de l'emplacement de la fenetre sur l'ecran...                                       */

                                        /* Avant le 20030401164348, 'dimension_non_normalisee_de_la_fenetre' etait ici...            */

#    define    GEOMETRIE_D_UNE_FENETRE(suggestions_au_window_manager,veritable_coin_bas_gauche,dimension_de_la_fenetre)                 \
                                        /* Le 20121121091153, 'veritable_coin_bas_gauche' a remplace 'coin_bas_gauche' qui evitera   */ \
                                        /* des erreurs d'interpretation...                                                           */ \
                         Bblock                                                                                                         \
                         EGAL(ASD1(suggestions_au_window_manager,x)                                                                     \
                             ,_cDENORMALISE_OX11(ASI1(veritable_coin_bas_gauche,x))                                                     \
                              );                                                                                                        \
                         EGAL(ASD1(suggestions_au_window_manager,y)                                                                     \
                             ,C11YA(SOUS(SOUS(SOUS(HAUTEUR_DE_L_ECRAN                                                                   \
                                                  ,C11YR(_cDENORMALISE_OY11(ASI1(veritable_coin_bas_gauche,y)))                         \
                                                   )                                                                                    \
                                             ,_lDENORMALISE_OY11(ASI1(dimension_de_la_fenetre,dy))                                      \
                                              )                                                                                         \
                                        ,DOUB(EPAISSEUR_DU_BORD_DES_FENETRES)                                                           \
                                         )                                                                                              \
                                    )                                                                                                   \
                              );                                                                                                        \
                                        /* Definition du coin bas gauche de la fenetre, mais attention a l'inversion de l'axe 'Y'.   */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on notera qu'il ne serait pas logique d'ecrire :                               */ \
                                        /*                                                                                           */ \
                                        /*                  INITIALISATION_POINT_2D(suggestions_au_window_manager                    */ \
                                        /*                                         ,...                                              */ \
                                        /*                                         ,...                                              */ \
                                        /*                                          );                                               */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, la structure {x,y} de 'X-Window' n'a en toute generalite rien a voir       */ \
                                        /* avec la structure {x,y} definie par 'point?_2D'...                                        */ \
                                        /*                                                                                           */ \
                                        /* On notera d'autre part l'utilisation de :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  _lDENORMALISE_OY11(ASI1(dimension_de_la_fenetre,dy))                     */ \
                                        /*                                                                                           */ \
                                        /* ce que l'on pourrait remplacer par :                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  ASD1(suggestions_au_window_manager,height)                               */ \
                                        /*                                                                                           */ \
                                        /* (a condition de calculer cette derniere quantite -height- au debut de la procedure        */ \
                                        /* 'GEOMETRIE_D_UNE_FENETRE(...)') ; mais on ne procede pas ainsi afin de rendre les         */ \
                                        /* differentes parties independantes les unes des autres...                                  */ \
                                                                                                                                        \
                         EGAL(ASD1(suggestions_au_window_manager,width)                                                                 \
                             ,_lDENORMALISE_OX11(ASI1(dimension_de_la_fenetre,dx))                                                      \
                              );                                                                                                        \
                         EGAL(ASD1(suggestions_au_window_manager,height)                                                                \
                             ,_lDENORMALISE_OY11(ASI1(dimension_de_la_fenetre,dy))                                                      \
                              );                                                                                                        \
                                        /* Definition des dimensions de la fenetre.                                                  */ \
                                                                                                                                        \
                         INITIALISATION_ACCROISSEMENT_2D(dimension_non_normalisee_de_la_fenetre                                         \
                                                        ,ASD1(suggestions_au_window_manager,width)                                      \
                                                        ,ASD1(suggestions_au_window_manager,height)                                     \
                                                         );                                                                             \
                                        /* Memorisation de la taille non normalisee de la fenetre...                                 */ \
                                                                                                                                        \
                        EGAL(X_position_centree_de_l_image_dans_la_fenetre                                                              \
                            ,COXA(MOYS(ASD1(dimension_non_normalisee_de_la_fenetre,dx),dimX))                                           \
                             );                                                                                                         \
                        EGAL(Y_position_centree_de_l_image_dans_la_fenetre                                                              \
                            ,COYA(MOYS(ASD1(dimension_non_normalisee_de_la_fenetre,dy),dimY))                                           \
                             );                                                                                                         \
                                        /* Position de l'image dans la fenetre de facon a ce qu'elle soit centree. Cela a ete        */ \
                                        /* introduit le 20030401161443 pour 'v $xci/display$K 20030401153145'.                       */ \
                                                                                                                                        \
                         EGAL(ASD1(suggestions_au_window_manager,flags),OUIN(USPosition,USSize));                                       \
                                        /* Afin de preciser ce que l'on donne dans la definition de la geometrie de la fenetre.      */ \
                         Eblock                                                                                                         \
                                        /* Dimensionnement et localisation d'une fenetre...                                          */

#    define    VALIDATION_D_UNE_FENETRE(fenetre_courante)                                                                               \
                         Bblock                                                                                                         \
                         DEFV(X_XWindowAttributes,attributs_effectifs_de_la_fenetre_ouverte);                                           \
                                        /* Afin de stocker les attributs effectifs de la fenetre apres ouverture...                  */ \
                                                                                                                                        \
                         CALS(XGetWindowAttributes(description_du_serveur_et_de_l_ecran                                                 \
                                                  ,fenetre_courante                                                                     \
                                                  ,ADRESSE(attributs_effectifs_de_la_fenetre_ouverte)                                   \
                                                   )                                                                                    \
                              );                                                                                                        \
                                        /* Afin de voir ce que l'on a reellement obtenu. A la date du 20000324161142, on ne          */ \
                                        /* valide rien...                                                                            */ \
                         Eblock                                                                                                         \
                                        /* Validation d'une fenetre...                                                               */

#    define    CREATION_D_UNE_FENETRE(fenetre_courante,apparence_visuelle_de_la_fenetre)                                                \
                         Bblock                                                                                                         \
                         EGAL(fenetre_courante                                                                                          \
                             ,XCreateWindow(description_du_serveur_et_de_l_ecran                                                        \
                                           ,RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES                                                  \
                                           ,ASD1(suggestions_au_window_manager,x),ASD1(suggestions_au_window_manager,y)                 \
                                           ,ASD1(suggestions_au_window_manager,width),ASD1(suggestions_au_window_manager,height)        \
                                           ,EPAISSEUR_DU_BORD_DES_FENETRES                                                              \
                                           ,NOMBRE_DE_BITS_PAR_POINT                                                                    \
                                           ,InputOutput                                                                                 \
                                           ,apparence_visuelle_de_la_fenetre                                                            \
                                           ,OUI08(CWBackingStore                                                                        \
                                                 ,CWBackingPlanes                                                                       \
                                                 ,CWBackingPixel                                                                        \
                                                 ,CWBitGravity                                                                          \
                                                 ,CWSaveUnder                                                                           \
                                                 ,CWEventMask                                                                           \
                                                 ,CWOverrideRedirect                                                                    \
                                                 ,CWColormap                                                                            \
                                                  )                                                                                     \
                                           ,ADRESSE(attributs_de_la_fenetre)                                                            \
                                            )                                                                                           \
                              );                                                                                                        \
                                        /* Ouverture de la fenetre demandee...                                                       */ \
                                                                                                                                        \
                         VALIDATION_D_UNE_FENETRE(fenetre_courante);                                                                    \
                                        /* Afin de valider la taille de la fenetre ouverte...                                        */ \
                         Eblock                                                                                                         \
                                        /* Creation d'une fenetre...                                                                 */

#    define    MISE_EN_PLACE_DES_PROPRIETES_STANDARDS_D_UNE_FENETRE(description_du_serveur_et_de_l_ecran,fenetre,suggestions)           \
                         Bblock                                                                                                         \
                         CALS(XSelectInput(description_du_serveur_et_de_l_ecran                                                         \
                                          ,fenetre                                                                                      \
                                          ,LISTE_DES_EVENEMENTS_A_ATTENDRE                                                              \
                                           )                                                                                            \
                              );                                                                                                        \
                                        /* Enfin, on se prepare a repondre aux evenements...                                         */ \
                         CALS(XSetStandardProperties(description_du_serveur_et_de_l_ecran                                               \
                                                    ,fenetre                                                                            \
                                                    ,Cara(NOM_DE_LA_FENETRE),Cara(NOM_DE_SON_ICONE)                                     \
                                                    ,None                                                                               \
                                                    ,arguments,nombre_d_arguments                                                       \
                                                    ,ADRESSE(suggestions)                                                               \
                                                     )                                                                                  \
                              );                                                                                                        \
                                        /* Mise en place des proprietes standards,                                                   */ \
                         ATTENTE_D_UN_EVENEMENT_CONNU(PropertyNotify,BLOC(VIDE;));                                                      \
                                        /* Et attente de notification...                                                             */ \
                         Eblock                                                                                                         \
                                        /* Mise en place des propietes standards d'une fenetre...                                    */

BFonctionI

DEFV(Common,DEFV(Logical,SINT(X11_____tenter_l_ouverture_des_fenetres_trop_grandes_par_rapport_a_l_ecran,VRAI)));
                                        /* Indicateur logique precisant si l'on doit ('VRAI') ou pas ('FAUX') tenter d'ouvrir malgre */
                                        /* tout les fenetres trop grandes par rapport a l'ecran. Cela a du etre introduit le         */
                                        /* 20001123113014 pour permettre de visualiser des images de type 'Sdu' ; cela n'avait pas   */
                                        /* ete vu plus tot faute de test, mais doit venir d'une modification des definitions de      */
                                        /* 'LARGEUR_DE_L_ECRAN' et 'HAUTEUR_DE_L_ECRAN' qui integrent le double de l'epaisseur des   */
                                        /* bordures des fenetres 'EPAISSEUR_DES_BORDURES_DE_FENETRES' (on verra avec profit a ce     */
                                        /* propos 'v $Darchives/20000323104006/fonct$vv$FON HAUTEUR_DE_L_ECRAN').                    */
                                        /*                                                                                           */
                                        /* Le 20120319175037, cet indicateur est passe de 'FAUX' a 'VRAI', ce qui est quand meme     */
                                        /* beaucoup plus pratique...                                                                 */

DEFV(Local,DEFV(Logical,editer_les_PRINT_ATTENTION_ulterieurs));
                                        /* Memorisation de 'editer_les_PRINT_ATTENTION_initiaux' utilisable, par exemple, dans       */
                                        /* la fonction 'IXanimation(...)' (indicateur introduit le 20030101180335)...                */
DEFV(Local,DEFV(X_XVisualInfo,type_de_visual_recherche));
                                        /* Description du "visual" necessaire presentement.                                          */

DEFV(Common,DEFV(FonctionI,IXopen(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran
                                 ,nom_de_la_fenetreA
                                 ,ARGUMENT_POINTERs(dimension_de_la_fenetre)
                                 ,centrer_la_fenetre
                                 ,ARGUMENT_POINTERs(coin_bas_gauche)
                                 ,editer_les_PRINT_ATTENTION_initiaux
                                  )
                 )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_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(deltaF_2D,POINTERs(dimension_de_la_fenetre)));
                                        /* Dimension horizontale de la fenetre,                                                      */
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,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...                                                           */
     DEFV(Positive,INIT(nombre_de_couleurs_necessaires,UNDEF));
                                        /* Nombre de couleurs necessaires pour visualiser l'image.                                   */
     DEFV(Logical,DTb1(utilisation_des_substitutions,COULEURS));
                                        /* Cette liste est destinee a voir comment est utiliser la susbstitution courante...         */
     DEFV(X_XSizeHints,suggestions_au_window_manager);
                                        /* Parametre communiquant au 'Window-Manager' un certain nombre de suggestions (qu'il n'est  */
                                        /* pas oblige d'honorer), et en particulier relatives a la geometrie de la fenetre...        */
     DEFV(pointF_2D,veritable_coin_bas_gauche);
                                        /* Abscisse du point de reference reellement utilise...                                      */
     DEFV(X_Visual,apparence_visuelle_de_la_fenetre);
                                        /* Apparence visuelle de la fenetre.                                                         */
     DEFV(X_XVisualInfo,INIT(POINTERs(Atype_de_visual_recherche),ADRESSE(type_de_visual_recherche)));
                                        /* Et son pointeur pour faire plaisir aus SYSTEMEs du type 'SYSTEME_CRAYYMP...' qui          */
                                        /* valident les arguments dans 'XGetVisualInfo(...)'...                                      */
     DEFV(X_Visual,apparence_visuelle_de_la_fenetre_par_defaut);
                                        /* Apparence visuelle de la fenetre lorsqu'aucun "visual" satisfaisant n'a ete trouve.       */
     DEFV(Int,INIT(nombre_d_arguments,ZERO));

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )
     DEFV(Char,INIT(POINTERc(POINTERc(arguments)),ADRESSE_NON_ENCORE_DEFINIE));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()'.                                           */
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )
     DEFV(CHAR,POINTERc(DTb1(arguments,NOMBRE_D_ARGUMENTS_ARGV)));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()' ; mais ATTENTION, il y avait autrefois     */
                                        /*                                                                                           */
                                        /*                  DEFV(CHAR,POINTERc(POINTERc(DTb0(arguments))));                          */
                                        /*                                                                                           */
                                        /* qui m'a pose des problemes considerables en passant sur le CRAY2, je suis donc revenu     */
                                        /* a une version plus orthodoxe...                                                           */
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )

     DEFV(X_XGCValues,parametres_du_contexte_graphique_de_visualisation);
                                        /* Definition des parametres du contexte graphique. L'element 'function' permet de           */
                                        /* definir la nature de l'operation effectuee entre l'ancien niveau ("ancien") et le         */
                                        /* nouveau ("nouveau") ; les fonctions disponibles sont les suivantes :                      */
                                        /*                                                                                           */
                                        /*                  GXclear             NOIR                                                 */
                                        /*                  GXand               ETLO(nouveau,ancien)                                 */
                                        /*                  GXandReverse        ETLO(nouveau,COMK(ancien))                           */
                                        /*                  GXcopy              nouveau                                              */
                                        /*                  GXandInverted       ETLO(COMK(nouveau),ancien)                           */
                                        /*                  GXnoop              ancien                                               */
                                        /*                  GXxor               OUEX(nouveau,ancien)                                 */
                                        /*                  GXor                OUIN(nouveau,ancien)                                 */
                                        /*                  GXnor               ETLO(COMK(nouveau),COMK(ancien))                     */
                                        /*                  GXequiv             OUEX(COMK(nouveau),ancien)                           */
                                        /*                  GXinvert            COMK(ancien)                                         */
                                        /*                  GXorReverse         OUIN(nouveau,COMK(ancien))                           */
                                        /*                  GXcopyInverted      COMK(nouveau)                                        */
                                        /*                  GXorInverted        OUIN(COMK(nouveau),ancien)                           */
                                        /*                  GXnand              OUIN(COMK(nouveau),COMK(ancien))                     */
                                        /*                  GXset               BLANC                                                */
                                        /*                                                                                           */
     /*..............................................................................................................................*/
     Test(I3ET(IFNE(MULTIPLICITE_DES_LIGNES_DES_BITMAPS,HUIT)
              ,IFNE(MULTIPLICITE_DES_LIGNES_DES_BITMAPS,SEIZE)
              ,IFNE(MULTIPLICITE_DES_LIGNES_DES_BITMAPS,TRENTE_DEUX)
               )
          )
          Bblock
          PRINT_ERREUR("la fonction 'XCreateImage(...)' exige que son Argument 'bitmap_pad' vaille 8, 16 ou 32");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFET(IFNE(pointeur_de_IXdisplay,ADRESSE_NON_ENCORE_DEFINIE)
              ,EST_INACTIF(X11_____liaison_avec_le_serveur)
               )
          )
                                        /* ATTENTION, il serait stupide d'ecrire :                                                   */
                                        /*                                                                                           */
                                        /*                  Test(IFET(EST_INACTIF(X11_____liaison_avec_le_serveur)                   */
                                        /*                           ,IFNE(Gvar("X_WINDOW"),VALEUR_D_UNE_VARIABLE_UNDEF)             */
                                        /*                            )                                                              */
                                        /*                       )                                                                   */
                                        /*                                                                                           */
                                        /* car, en effet, la variable '$X_WINDOW' concerne le serveur local, et non pas un eventuel  */
                                        /* serveur distant...                                                                        */
          Bblock
          EGAL(editer_les_PRINT_ATTENTION_ulterieurs,editer_les_PRINT_ATTENTION_initiaux);
                                        /* Memorisation de 'editer_les_PRINT_ATTENTION_initiaux' utilisable, par exemple, dans       */
                                        /* la fonction 'IXanimation(...)' (indicateur introduit le 20030101180335)...                */
          EGAL(IXopen_____tenter_X_Window_en_mode_fausses_couleurs,IXopen_____mettre_X_Window_en_mode_fausses_couleurs);
                                        /* A priori (introduit le 20030109154236).                                                   */
          EGAL(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs,VRAI);
                                        /* A priori (introduit le 20021229105731).                                                   */

#    if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
          EGAL(EnTete_de_sauvegardM ## Xmin_avant_IXopen,Xmin);
          EGAL(EnTete_de_sauvegardM ## Xmax_avant_IXopen,Xmax);
          EGAL(EnTete_de_sauvegardM ## Ymin_avant_IXopen,Ymin);
          EGAL(EnTete_de_sauvegardM ## Ymax_avant_IXopen,Ymax);
                                        /* Sauvegarde de {{Xmin,Xmax},{Ymin,Ymax}} avant 'IXopen(...)'. Ce dispositif a ete          */
                                        /* introduit le 20010222172555 car, en effet, j'ai decouvert a cette date que l'affichage    */
                                        /* etait incorrect (incomplet...) lorsque 'Xmin' ou 'Ymin' etaient non nuls...               */
          SET_DIMENSIONS_2D_SANS_VALIDATION(Xmin11,Xmax11
                                           ,Ymin11,Ymax11
                                            );
                                        /* D'ou cette mise a jour de {{Xmin,Xmax},{Ymin,Ymax}}...                                    */
                                        /*                                                                                           */
                                        /* Le 20010224190211 j'ai mofifie 'v $xiii/Images$DEF SET_DIMENSIONS_DE_L_AXE_OX' et         */
                                        /* 'v $xiii/Images$DEF SET_DIMENSIONS_DE_L_AXE_OY' (et aussi pour l'axe 'OY') ayant oublie   */
                                        /* que les definitions de {{Xmin11,Xmax11},{Ymin11,Ymax11}} utilisaient                      */
                                        /* 'v $xiidX/fonct$vv$DEF COXR.Xmin.' et  'v $xiidX/fonct$vv$DEF COYR.Ymin.' ; il est        */
                                        /* donc impossible de mettre simultanement a jour {Xmin,Ymin} et de les utiliser...          */

#    Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
#    Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )

          EGAL(IXdisplay_____imageA_courante_revisualisable,FAUX);
                                        /* A priori...                                                                               */

          EGAL(X11_____nom_du_serveur_et_de_l_ecran,Gvar(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran));
                                        /* Recuperation du nom du serveur 'X-Window' ainsi que du numero de l'ecran utilise.         */

          Test(EST_FAUX(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02_TEST_DU_SERVEUR_X_WINDOW))
               Bblock
               PRINT_ERREUR("aucun serveur 'X-Window' n'a ete reconnu (l'environnement 'en' est peut-etre tres incomplet)");
               CAL1(Prer1("(la variable '$DISPLAY' vaut '%s')\n"
                         ,X11_____nom_du_serveur_et_de_l_ecran
                          )
                    );
                                        /* Ceci a ete introduit le 20051028101739, alors que je faisais des essais infructueux       */
                                        /* du type :                                                                                 */
                                        /*                                                                                           */
                                        /*        $RSH      $CMAP28   "csh -c '$xci/display.x A=$xiio/GRILLE_16x16 p=cercle.35'"     */
                                        /*                                                                                           */
                                        /* etant sur '$CMAP28' avec 'XLACT16' actif. Le probleme venait du fait que 'csh -c' ne      */
                                        /* met pas en place mon environnement et ainsi la variable '$DISPLAY' vaut "localhost:12.0"  */
                                        /* et mes variables du type '$X_LACT16' n'existent alors pas. Cela signifie donc que '$CSH'  */
                                        /* appele via '$RSH' n'interprete pas '$FCshrc' : pourquoi ?                                 */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          EGAL(description_du_serveur_et_de_l_ecran,XOpenDisplay(Cara(X11_____nom_du_serveur_et_de_l_ecran)));
                                        /* Etablissement de la liaison avec le serveur 'X-Window' demande...                         */
          Test(X_IL_Y_A_ERREUR(description_du_serveur_et_de_l_ecran))
               Bblock
               EDITION_DES_MESSAGES_DE_CONNEXION_IMPOSSIBLE_AVEC_LE_SERVEUR;
               Eblock
          ATes
               Bblock
               VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE;
                                        /* Afin d'inhiber eventuellement l'edition des coordonnees {X,Y} du curseur...               */

               Test(IL_FAUT(editer_les_PRINT_ATTENTION_initiaux))
                    Bblock
                    TEST_DE_LA_RELEASE_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du numero de la release du serveur 'X-Window'.                                       */

                    TEST_DE_L_EXISTENCE_DU_BACKINGSTORE(description_du_serveur_et_de_l_ecran);
                                        /* Test de l'exisence du 'BackingStore' et du 'SaveUnder'.                                   */

                    Test(IFNE(Xsize_p,size_p))
                                        /* Nota : ce test est fait a l'execution, et non pas au pre-processing, a cause de la        */
                                        /* facon de definir les constantes du type 'size_p' ; le pre-processeur ne peut pas les      */
                                        /* comparer...                                                                               */
                         Bblock
                         PRINT_ATTENTION("incoherence dans la taille des pixels, mais 'IXopen(...)' aura quand meme lieu");
                                        /* Pourquoi ? et bien tout simplement pour m'eviter de rajouter un nouveau niveau de         */
                                        /* 'Test(...)' dans ce qui suit...                                                           */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IFNE(NOIR,VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN))
                         Bblock
                         PRINT_ATTENTION("probleme avec le niveau de NOIR, mais 'IXopen(...)' aura quand meme lieu");
                         CAL1(Prer2("(%08X # %08X)\n",NOIR,VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IFNE(BLANC,VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN))
                         Bblock
                         PRINT_ATTENTION("probleme avec le niveau de BLANC, mais 'IXopen(...)' aura quand meme lieu");
                         CAL1(Prer2("(%08X # %08X)\n",BLANC,VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(EST_INACTIF_FILTRAGE)
                                        /* On notera que ce cas se rencontre, par exemple, lorsque le mode vraies couleurs est       */
                                        /* demande ('v $xci/animation$K IXopen_____mettre_X_Window_en_mode_fausses_couleurs') ;      */
                                        /* alors, le filtrage n'est pas active (il est dans son etat par defaut 'INACTIF') et        */
                                        /* donc ainsi, 'nombre_de_couleurs_necessaires' est fixe a 'COULEURS'. Si l'on est de        */
                                        /* plus en mode 'ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01' (cas de '$LACT14' par exemple),  */
                                        /* 'Test(IFLE(nombre_de_couleurs_necessaires,NOMBRE_MAXIMAL_DE_COULEURS_AUTORISEES))' est    */
                                        /* alors FAUX ci-apres et l'ouverture de la fenetre est refusee. Ceci a ete mis en           */
                                        /* evidence le 20030101181317...                                                             */
                    Bblock
                    EGAL(nombre_de_couleurs_necessaires,COULEURS);
                                        /* Lorsque le filtrage est 'INACTIF', il faut toutes les couleurs...                         */
                    Eblock
               ATes
                    Bblock
                    BoIn(index,NOIR,BLANC,PAS_COULEURS)
                         Bblock
                         EGAL(ITb1(utilisation_des_substitutions,INDX(index,NOIR)),INACTIF);
                                        /* A priori, on considere qu'aucun niveau substitue n'est atteint (ce qui en fait voudrait   */
                                        /* dire que tous les niveaux -de NOIR a BLANC- sont substitues a un 'NIVEAU_UNDEF').         */
                         Eblock
                    EBoI

                    BoIn(index,NOIR,BLANC,PAS_COULEURS)
                         Bblock
                         EGAL(ITb1(utilisation_des_substitutions,INDX(Nsubstitution(GENP(index)),NOIR)),ACTIF);
                                        /* Puis on regarde en fait quels niveaux substitues sont atteints.                           */
                         Eblock
                    EBoI

                    CLIR(nombre_de_couleurs_necessaires);
                                        /* Puis, on va compter les niveaux substitues atteints...                                    */

                    BoIn(index,NOIR,BLANC,PAS_COULEURS)
                         Bblock
                         Test(EST_ACTIF(ITb1(utilisation_des_substitutions,INDX(index,NOIR))))
                              Bblock
                              INCR(nombre_de_couleurs_necessaires,I);
                                        /* Et maintenant on va compter les niveaux susbstitues qui sont utilises.                    */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    EBoI
                    Eblock
               ETes

               Test(IFLE(nombre_de_couleurs_necessaires,NOMBRE_MAXIMAL_DE_COULEURS_AUTORISEES))
                    Bblock
                    DEFV(Logical,INIT(l_ouverture_de_la_fenetre_est_tentable,VRAI));
                                        /* A priori, on va tenter d'ouvrir la fenetre...                                             */

                    TESTS_DE_L_ECRAN_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du nombre d'ecrans du serveur et des dimensions correspondantes.                     */

                    Test(EST_VRAI(l_ouverture_de_la_fenetre_est_tentable))
                         Bblock
                         CENTRAGE_EVENTUEL_DE_LA_FENETRE(centrer_la_fenetre);
                                        /* Positionnement de la fenetre...                                                           */

                         GEOMETRIE_D_UNE_FENETRE(suggestions_au_window_manager
                                                ,ADRESSE(veritable_coin_bas_gauche)
                                                ,dimension_de_la_fenetre
                                                 );
                                        /* Dimensionnement et localisation d'une fenetre...                                          */

                         EGAL(ASD1(attributs_de_la_fenetre,override_redirect),False);
                                        /* ATTENTION : il y a avait autrefois :                                                      */
                                        /*                                                                                           */
                                        /*                  EGAL(ASD1(suggestions_au_window_manager,flags),OUIN(PPosition,PSize));   */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*                  EGAL(ASD1(attributs_de_la_fenetre,override_redirect),True);              */
                                        /*                                                                                           */
                                        /* mais si l'on veut que d'une part les coordonnees de la fenetre soient fixees et imposees  */
                                        /* par le programme, et que d'autre part le 'window-manager' gere cette fenetre (et soit     */
                                        /* capable, par exemple, de la ramener au premier plan), il faut utiliser 'USPosition',      */
                                        /* 'USSize' et 'False' respectivement...                                                     */
                         EGAL(ASD1(attributs_de_la_fenetre,colormap),CopyFromParent);
                         EGAL(ASD1(attributs_de_la_fenetre,event_mask),LISTE_DES_EVENEMENTS_A_ATTENDRE);
                                        /* Definition des attributs de la fenetre, et en particulier, les evenements auxquels        */
                                        /* elle doit reagir ('StructureNotifyMask' pour l'evenement de fin d'affichage).             */

                         EGAL(ASD1(attributs_de_la_fenetre,backing_store),QUE_FAIRE_DU_BACKING_STORE);
                                        /* Activation eventuelle du "backingstore"...                                                */

                         Test(IL_FAUT(editer_les_PRINT_ATTENTION_initiaux))
                              Bblock
                              Test(IFNE(NIVEAU_DU_BLANC_DE_L_ECRAN,VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN))
                                   Bblock
                                   PRINT_ATTENTION("le niveau de BLANC de l'ecran et le masque des points sont differents");
                                   CAL1(Prer2("(%08X # %08X)\n",NIVEAU_DU_BLANC_DE_L_ECRAN,VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN));
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         EGAL(ASD1(attributs_de_la_fenetre,backing_planes),MASQUE_D_UN_POINT);
                         EGAL(ASD1(attributs_de_la_fenetre,backing_pixel),NIVEAU_DU_BLANC_DE_L_ECRAN);
                         EGAL(ASD1(attributs_de_la_fenetre,bit_gravity),StaticGravity);
                         EGAL(ASD1(attributs_de_la_fenetre,save_under),True);
                                        /* Definition du comportement de la fenetre lorsqu'elle est masquee par une autre fenetre,   */
                                        /* puis demasquee : on souhaite ainsi qu'elle soit regeneree completement et correctement... */

                         Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01)
                              Bblock
                              EGAL(ASD1(apparence_visuelle_de_la_fenetre,visualid),CopyFromParent);
                              EGAL(ASD1(apparence_visuelle_de_la_fenetre,class),PseudoColor);
                              EGAL(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs,VRAI);
                              EGAL(ASD1(apparence_visuelle_de_la_fenetre,map_entries),COULEURS);
                                        /* Definition de l'apparence visuelle de la fenetre.                                         */
                              CREATION_D_UNE_FENETRE(X11_____fenetre_courante,ADRESSE(apparence_visuelle_de_la_fenetre));
                                        /* Tentative de creation de la fenetre...                                                    */
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02)
                              Bblock
                              Test(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs))
                                   Bblock
                                        /* Cas ou les fausses couleurs sont demandees...                                             */
                                   Eblock
                              ATes
                                   Bblock
                                        /* Cas ou les vraies couleurs sont demandees...                                              */
                                   Test(IFGT(NOMBRE_EFFECTIF_DE_BITS_PAR_POINT(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                            ,NOMBRE_DE_BITS_PAR_POINT
                                             )
                                        )
                                        Bblock
                                        PRINT_ERREUR("une fenetre 'fille' ne peut avoir plus de couleurs que son 'parent'");
                                        PRINT_ERREUR("la mise en 'FAUSSES COULEURS' est donc forcee");
                                        PRINT_ERREUR("la visualisation va certainement avoir lieu en NOIR et BLANC");
                                        /* Voir en effet 'v $xci/display$K Iluminance' et 'v $xci/animation$K Iluminance'...         */

                                        CAL1(Prer2("(%d bits sont demandes, alors que seulement %d sont possibles)\n"
                                                  ,NOMBRE_EFFECTIF_DE_BITS_PAR_POINT
                                                       (IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                                  ,NOMBRE_DE_BITS_PAR_POINT
                                                   )
                                             );

                                        EGAL(IXopen_____tenter_X_Window_en_mode_fausses_couleurs
                                            ,NOTL(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                             );
                                        /* Et le mode de coloriage est inverse...                                                    */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              ETes

                              EGAL(ASD1(type_de_visual_recherche,class)
                                  ,COND(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                       ,PseudoColor
                                       ,TrueColor
                                        )
                                   );
                              EGAL(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs
                                  ,COND(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                       ,VRAI
                                       ,FAUX
                                        )
                                   );
                              EGAL(ASD1(type_de_visual_recherche,screen),ECRAN_UTILISE);
                              EGAL(ASD1(type_de_visual_recherche,depth),NOMBRE_DE_BITS_PAR_POINT);
                                        /* Definition des specifications du "visual" necessaire : il faut qu'il fonctionne en        */
                                        /* pseudo-couleur ('PseudoColor') ; de plus, on notera que :                                 */
                                        /*                                                                                           */
                                        /* 1 - on ignore 'colormap_size', un test etant fait ulterieurement afin de savoir si        */
                                        /*     il y a suffisamment ('COULEURS') de couleurs (voir a ce propos la definition et       */
                                        /*     l'utilisation de 'NOMBRE_MAXIMAL_DE_COULEURS_ACCESSIBLES'),                           */
                                        /* 2 - on ignore 'bits_per_rgb' dont la valeur est en fait sans grande importance...         */
                                        /*                                                                                           */
                              EGAL(liste_des_visuals_supportes_et_satisfaisants
                                  ,XGetVisualInfo(description_du_serveur_et_de_l_ecran
                                                 ,OUI03(VisualClassMask
                                                       ,VisualScreenMask
                                                       ,VisualDepthMask
                                                        )
                                                 ,Atype_de_visual_recherche
                                                 ,Anombre_de_visuals_satisfaisants_recuperes
                                                  )
                                   );
                                        /* Recuperation de la liste des differents types de "visual"s supportes physiquement         */
                                        /* par le systeme, et qui correspondent aux specifications de 'type_de_visual_recherche'.    */

                              Test(IZGT(nombre_de_visuals_satisfaisants_recuperes))
                                   Bblock
                                   CREATION_D_UNE_FENETRE(X11_____fenetre_courante,APPARENCE_VISUELLE_DE_LA_FENETRE);
                                        /* Tentative de creation de la fenetre...                                                    */
                                   Eblock
                              ATes
                                   Bblock
                                   EGAL(ASD1(type_de_visual_recherche,class)
                                       ,COND(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                            ,TrueColor
                                            ,PseudoColor
                                             )
                                        );
                                   EGAL(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs
                                       ,COND(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)
                                            ,FAUX
                                            ,VRAI
                                             )
                                        );
                                   EGAL(ASD1(type_de_visual_recherche,depth),NOMBRE_DE_BITS_PAR_POINT);

                                   EGAL(liste_des_visuals_supportes_et_satisfaisants
                                       ,XGetVisualInfo(description_du_serveur_et_de_l_ecran
                                                      ,OUI03(VisualClassMask
                                                            ,VisualScreenMask
                                                            ,VisualDepthMask
                                                             )
                                                      ,Atype_de_visual_recherche
                                                      ,Anombre_de_visuals_satisfaisants_recuperes
                                                       )
                                        );
                                        /* Recuperation de la liste des differents types de "visual"s supportes physiquement         */
                                        /* par le systeme, et qui correspondent aux specifications de 'type_de_visual_recherche'.    */

                                   Test(IZGT(nombre_de_visuals_satisfaisants_recuperes))
                                        Bblock
                                        CREATION_D_UNE_FENETRE(X11_____fenetre_courante,APPARENCE_VISUELLE_DE_LA_FENETRE);
                                        /* Tentative de creation de la fenetre...                                                    */
                                        Eblock
                                   ATes
                                        Bblock
                                        PRINT_ERREUR("aucun 'visual' satisfaisant n'a ete trouve");

                                        EGAL(ASD1(apparence_visuelle_de_la_fenetre_par_defaut,visualid),CopyFromParent);
                                        EGAL(ASD1(apparence_visuelle_de_la_fenetre_par_defaut,class),PseudoColor);
                                        EGAL(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs,VRAI);
                                        EGAL(ASD1(apparence_visuelle_de_la_fenetre_par_defaut,map_entries),COULEURS);
                                        /* Definition de l'apparence visuelle de la fenetre, lorsqu'aucun "visual" satisfaisant      */
                                        /* n'a ete trouve...                                                                         */
                                        CREATION_D_UNE_FENETRE(X11_____fenetre_courante
                                                              ,ADRESSE(apparence_visuelle_de_la_fenetre_par_defaut)
                                                               );
                                        /* Tentative de creation de la fenetre lorsqu'aucun "visual" satisfaisant n'a ete trouve...  */
                                        Eblock
                                   ETes
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

#    ifdef     BUG_SYSTEME_X_WINDOW_EVENEMENTS_1
#    Aifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_1
                         ATTENTE_D_UN_EVENEMENT_CONNU(CreateNotify,BLOC(VIDE;));
                                        /* Et attente de notification...                                                             */
#    Eifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_1

                         Test(IFNE(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs
                                  ,IXopen_____tenter_X_Window_en_mode_fausses_couleurs
                                   )
                              )
                              Bblock
                              Test(IL_FAUT(editer_les_PRINT_ATTENTION_initiaux))
                                   Bblock
                                   PRINT_ATTENTION("l'ouverture de la fenetre n'a pu se faire dans le mode de couleurs demande");
                                   PRINT_ATTENTION("la visualisation sera donc faite en NOIR et BLANC");

                                   Test(EST_VRAI(IXopen_____mettre_X_Window_en_mode_fausses_couleurs))
                                        Bblock
                                        CAL1(Prer0("Le mode 'FAUSSES COULEURS' avait ete demande et "));
                                        Eblock
                                   ATes
                                        Bblock
                                        CAL1(Prer0("Le mode 'VRAIES COULEURS' avait ete demande et "));
                                        Eblock
                                   ETes

                                   Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        Bblock
                                        CAL1(Prer0("le mode 'FAUSSES COULEURS' a ete utilise,\n"));
                                        Eblock
                                   ATes
                                        Bblock
                                        CAL1(Prer0("le mode 'VRAIES COULEURS' a ete utilise.\n"));
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         Test(X_IL_Y_A_ERREUR(X11_____fenetre_courante))
                              Bblock
                              PRINT_ERREUR("l'ouverture de la fenetre est impossible");
                              Eblock
                         ATes
                              Bblock
                              MISE_EN_PLACE_DES_PROPRIETES_STANDARDS_D_UNE_FENETRE(description_du_serveur_et_de_l_ecran
                                                                                  ,X11_____fenetre_courante
                                                                                  ,suggestions_au_window_manager
                                                                                   );
                                        /* Mise en place des propietes standards d'une fenetre...                                    */

                              CALS(XSetWindowBackground(description_du_serveur_et_de_l_ecran
                                                       ,X11_____fenetre_courante
                                                       ,NIVEAU_DU_NOIR_DE_L_ECRAN
                                                        )
                                   );
                                        /* Ainsi que du niveau du fond,                                                              */
                              ATTENTE_D_UN_EVENEMENT_CONNU(PropertyNotify,BLOC(VIDE;));
                                        /* Et attente de notification...                                                             */

                              CALS(XSetWindowBorder(description_du_serveur_et_de_l_ecran
                                                   ,X11_____fenetre_courante
                                                   ,SE33(NEUT(NEUT(NIVEAU_DU_BLANC_DE_L_ECRAN))
                                                        ,NEUT(PRED(NIVEAU_DU_BLANC_DE_L_ECRAN))
                                                        ,PRED(PRED(NIVEAU_DU_BLANC_DE_L_ECRAN))
                                                         )
                                                    )
                                   );
                                        /* Ainsi que du niveau du bord ; on notera les trois possibilites qui sont offertes suivant  */
                                        /* la position de la souris par rapport a la fenetre :                                       */
                                        /*                                                                                           */
                                        /* CHOIX :  Souris dans la fenetre :                Souris hors de la fenetre :              */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /* SE13 :   Border=NIVEAU_DU_BLANC_DE_L_ECRAN       Border=NIVEAU_DU_BLANC_DE_L_ECRAN        */
                                        /*                                                         __________________________        */
                                        /* SE23 :   Border=NIVEAU_DU_BLANC_DE_L_ECRAN       Border=NIVEAU_DU_BLANC_DE_L_ECRAN        */
                                        /*                 __________________________                                                */
                                        /* SE33 :   Border=NIVEAU_DU_BLANC_DE_L_ECRAN       Border=NIVEAU_DU_MARQUEUR_DE_LA_SOURIS   */
                                        /*                                                                                           */
                                        /* On notera que 'SE23' correspond a la gestion habituelle des fenetres, alors que 'SE33'    */
                                        /* propose une gestion inverse, mais plus logique pour l'affichage des images : le cadre     */
                                        /* est mis lorsque la souris est hors du cadre...                                            */
                              ATTENTE_D_UN_EVENEMENT_CONNU(PropertyNotify,BLOC(VIDE;));
                                        /* Et attente de notification...                                                             */

                              CALS(XMapWindow(description_du_serveur_et_de_l_ecran
                                             ,X11_____fenetre_courante
                                              )
                                   );
                                        /* Maintenant que tout est pret, on fait apparaitre la fenetre a l'ecran, cette operation    */
                                        /* s'appelant "mapping" sous 'X-Window'. On notera que sur 'SYSTEME_SG4D..._IRIX' et sur     */
                                        /* 'SYSTEME_DPX5000_SPIX', le 'CALS(XMapWindow(...))' devrait etre suivi de :                */
                                        /*                                                                                           */
                                        /*                  ATTENTE_D_UN_EVENEMENT_CONNU(PropertyNotify,BLOC(VIDE;));                */
                                        /*                                                                                           */
                                        /* mais que pour eviter des problemes lors de redirections eventuelles de ces deux SYSTEMEs  */
                                        /* vers d'autres systemes 'X-Window', cette attente n'est pas implementee...                 */
                              ATTENTE_D_UN_EVENEMENT_CONNU(MapNotify,BLOC(VIDE;));
                              ATTENTE_D_UN_EVENEMENT_CONNU(VisibilityNotify,BLOC(VIDE;));
                              ATTENTE_D_UN_EVENEMENT_CONNU(Expose,BLOC(VIDE;));
                                        /* Ainsi, on attend la fin de l'affichage (ou "mapping").                                    */

                              Test(IL_FAUT(LAISSER_LES_NIVEAUX_DE_L_IMAGE_EN_L_ETAT))
                                        /* ATTENTION, il y a eu ici pendant longtemps le test suivant :                              */
                                        /*                                                                                           */
                                        /*                  Test(IFLE(NIVEAU_DU_NOIR_DE_L_ECRAN,NIVEAU_DU_BLANC_DE_L_ECRAN))         */
                                        /*                                                                                           */
                                        /* qui permettait de pendre en compte la machine '$LACT23' ('SYSTEME_NWS3000_NEWSOS').       */
                                        /* Malheureusement, l'arrivee de la machine '$LACT26' (qui est un 'MacIntosh PowerBook 180c' */
                                        /* sous 'MacOS' avec serveur 'X-Window') est venu compliquer la situation. En effet, pour    */
                                        /* '$LACT26' comme pour '$LACT23', il y a inversion de 'NIVEAU_DU_NOIR_DE_L_ECRAN' et de     */
                                        /* 'NIVEAU_DU_BLANC_DE_L_ECRAN', mais pour '$LACT26' il faut malgre tout utiliser le mode    */
                                        /* 'GXcopy'... Il n'y a apparemment pas d'autres solutions que de tester explicitement le    */
                                        /* serveur utilise, d'ou ce nouveau test...                                                  */
                                   Bblock
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,function)
                                       ,GXcopy
                                        );
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,background)
                                       ,NIVEAU_DU_NOIR_DE_L_ECRAN
                                        );
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,foreground)
                                       ,NIVEAU_DU_BLANC_DE_L_ECRAN
                                        );
                                        /* Initialisation du NOIR et du  BLANC :                                                     */
                                        /*                                                                                           */
                                        /*                  'background' designe le fond (et donc le NOIR),                          */
                                        /*                  'foreground' designe les points (et donc le BLANC).                      */
                                        /*                                                                                           */
                                   Test(IFEQ(NIVEAU_DU_NOIR_DE_L_ECRAN,NIVEAU_DU_BLANC_DE_L_ECRAN))
                                        Bblock
                                        PRINT_ATTENTION("les niveaux de NOIR et de BLANC de l'ecran sont identiques");
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,function)
                                       ,GXcopyInverted
                                        );
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,background)
                                       ,NIVEAU_DU_BLANC_DE_L_ECRAN
                                        );
                                   EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,foreground)
                                       ,NIVEAU_DU_NOIR_DE_L_ECRAN
                                        );
                                        /* Ces initialisations sont surtout destinees a 'SYSTEME_NWS3000_NEWSOS' lorsqu'il est       */
                                        /* utilise en Noir & Blanc (en mode 'XYPixmap) ; on notera que les definitions standards     */
                                        /* sont inversees :                                                                          */
                                        /*                                                                                           */
                                        /*                  'background' designe le fond (qui est le BLANC...),                      */
                                        /*                  'foreground' designe les points (qui est le NOIR...).                    */
                                        /*                                                                                           */
                                   Eblock
                              ETes

                              EGAL(contexte_graphique_de_visualisation
                                  ,XCreateGC(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                            ,OUI03(GCFunction
                                                  ,GCBackground
                                                  ,GCForeground
                                                   )
                                            ,ADRESSE(parametres_du_contexte_graphique_de_visualisation)
                                             )
                                   );
                                        /* Initialisation du contexte graphique de visualisation. Autrefois, on forcait les points   */
                                        /* a l'aide de la fonction 'GXset' grace a l'instruction :                                   */
                                        /*                                                                                           */
                                        /*        EGAL(ASD1(parametres_du_contexte_graphique_de_visualisation,function),GXset);      */
                                        /*        EGAL(contexte_graphique_de_visualisation                                           */
                                        /*            ,XCreateGC(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante       */
                                        /*                      ,GCFunction                                                          */
                                        /*                      ,ADRESSE(parametres_du_contexte_graphique_de_visualisation)          */
                                        /*                       )                                                                   */
                                        /*             );                                                                            */
                                        /*                                                                                           */
                                        /* Or, 'SYSTEME_SG4D..._IRIX' ne le supportait pas, et par definition de 'X-Window', il      */
                                        /* faut qu'un programme tournant sur une machine ('SYSTEME_DPX5000_SPIX' par exemple)        */
                                        /* puisse utiliser le serveur d'une autre ('SYSTEME_SG4D..._IRIX' par exemple). Donc j'ai    */
                                        /* renonce a 'GXset', et j'ai ecrit :                                                        */
                                        /*                                                                                           */
                                        /*        EGAL(contexte_graphique_de_visualisation                                           */
                                        /*            ,XCreateGC(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante       */
                                        /*                      ,None                                                                */
                                        /*                      ,ADRESSE(parametres_du_contexte_graphique_de_visualisation)          */
                                        /*                       )                                                                   */
                                        /*             );                                                                            */
                                        /*                                                                                           */
                                        /* auquel j'ai du renoncer aussi a cause de 'SYSTEME_NWS3000_NEWSOS' (en Noir & Blanc).      */

                              EGAL(X11_____liaison_avec_le_serveur,ACTIF);
                                        /* Ainsi, on sait que la liaison est active...                                               */

                              Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
                                   Bblock
                                   Test(IFNE(IXpalette(ABSENCE_DE_TRANSLATION_DE_LA_PALETTE,LE_NOIR_N_EST_PAS_TRANSLATABLE),ERREUR28))
                                        /* Et envoi des listes de COLORIAGE courante maintenant que la liaison est active. Le        */
                                        /* test a ete introduit le 20021223104745 pour '$LACT15'. ATTENTION : il est impossible      */
                                        /* d'utiliser ici simplement 'PAS_D_ERREUR(...)' car, en effet, 'IXpalette(...)' peut        */
                                        /* renvoyer d'autres erreurs que 'ERREUR28' et qui ne doivent pas provoquer l'etat 'INACTIF' */
                                        /* de la liaison...                                                                          */
                                        Bblock
                                        Eblock
                                   ATes
                                        Bblock
                                        EGAL(X11_____liaison_avec_le_serveur,INACTIF);
                                        /* Et on annule la liaison (introduit le 20021223104745).                                    */
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                        /* Cas des vraies couleurs :                                                                 */
                                   Eblock
                              ETes
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("l'ouverture de la fenetre est donc refusee sur ce serveur 'X-Window'");
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                                        /* Pour justifier ce cas 'v $xiidX/fonct$vv$FON 20030101181317'...                           */
                    PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu car trop de couleurs sont demandees");
                    CAL1(Prer2("%d couleurs sont demandees, alors que seulement %d sont possibles\n"
                              ,nombre_de_couleurs_necessaires
                              ,NOMBRE_MAXIMAL_DE_COULEURS_AUTORISEES
                               )
                         );
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test(IFEQ(pointeur_de_IXdisplay,ADRESSE_NON_ENCORE_DEFINIE))
               Bblock
               PRINT_ERREUR("la fonction 'IXinitialisation(...)' n'a pas ete referencee");
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
               Bblock
               PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' est deja active");
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionI

#    undef     CREATION_D_UNE_FENETRE
#    undef     ABSENCE_DE_TRANSLATION_DE_LA_PALETTE
#    undef     NOMBRE_MAXIMAL_DE_COULEURS_AUTORISEES
#    undef     INVERSER_LES_NIVEAUX_DE_L_IMAGE
#    undef     LAISSER_LES_NIVEAUX_DE_L_IMAGE_EN_L_ETAT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A T T E N T E   D ' U N   E V E N E M E N T   Q U E L C O N Q U E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    ATTENTE_D_UN_EVENEMENT_QUELCONQUE(evenement)                                                                             \
                         Bblock                                                                                                         \
                         CALS(IXattente_d_un_evenement_quelconque("evenement",evenement));                                              \
                         Eblock                                                                                                         \
                                        /* Attente d'un evenement quelconque dont on se donne le type 'evenement'.                   */

BFonctionI

DEFV(Common,DEFV(FonctionI,IXattente_d_un_evenement_quelconque(nom_de_l_evenement,evenement)))
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_l_evenement)));
                                        /* Nom de l'evenement attendu.                                                               */
DEFV(Argument,DEFV(Int,evenement));
                                        /* Type de l'evenement attendu parmi la liste suivante :                                     */
                                        /*                                                                                           */
                                        /*                  KeyPress,                                                                */
                                        /*                  KeyRelease,                                                              */
                                        /*                  ButtonPress,                                                             */
                                        /*                  ButtonRelease,                                                           */
                                        /*                  MotionNotify,                                                            */
                                        /*                  EnterNotify,                                                             */
                                        /*                  LeaveNotify,                                                             */
                                        /*                  FocusIn,                                                                 */
                                        /*                  FocusOut,                                                                */
                                        /*                  KeymapNotify,                                                            */
                                        /*                  Expose,                                                                  */
                                        /*                  GraphicsExpose,                                                          */
                                        /*                  NoExpose,                                                                */
                                        /*                  VisibilityNotify,                                                        */
                                        /*                  CreateNotify,                                                            */
                                        /*                  DestroyNotify,                                                           */
                                        /*                  UnmapNotify,                                                             */
                                        /*                  MapNotify,                                                               */
                                        /*                  MapRequest,                                                              */
                                        /*                  ReparentNotify,                                                          */
                                        /*                  ConfigureNotify,                                                         */
                                        /*                  ConfigureRequest,                                                        */
                                        /*                  GravityNotify,                                                           */
                                        /*                  ResizeRequest,                                                           */
                                        /*                  CirculateNotify,                                                         */
                                        /*                  CirculateRequest,                                                        */
                                        /*                  PropertyNotify,                                                          */
                                        /*                  SelectionClear,                                                          */
                                        /*                  SelectionRequest,                                                        */
                                        /*                  SelectionNotify,                                                         */
                                        /*                  ColormapNotify,                                                          */
                                        /*                  ClientMessage,                                                           */
                                        /*                  MappingNotify.                                                           */
                                        /*                                                                                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          ATTENTE_D_UN_EVENEMENT_INCONNU(nom_de_l_evenement,evenement,BLOC(VIDE;));
                                        /* Ainsi, on attend l'evenement argument...                                                  */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("une attente d'evenement ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

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,IXattente_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...                                                           */
     /*..............................................................................................................................*/
     ATTENTE_D_UN_EVENEMENT_QUELCONQUE(ButtonPress);
                                        /* Attente de l'evenement 'ButtonPress' correspondant au fait que l'on appuie sur l'un       */
                                        /* des trois boutons de la souris. On notera que l'on est oblige de creer une fonction       */
                                        /* au sens 'C' du terme, et non une macro-procedure, et ce afin de cacher aux programmes     */
                                        /* utilisateurs (par exemple '$xci/display$K') les definitions de 'X-Window' (et ici par     */
                                        /* exemple 'ButtonPress'), et donc tous leurs fichiers d'includes...                         */

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A T T E N T E   D E   L ' E V E N E M E N T   ' E x p o s e '  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IXattente_de_l_evenement_Expose()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     ATTENTE_D_UN_EVENEMENT_QUELCONQUE(Expose);
                                        /* Attente de l'evenement 'Expose' correspondant au fait que la fenetre d'affichage          */
                                        /* courante vient d'etre ramenee au premier plan. On notera que l'on est oblige de creer     */
                                        /* une fonction au sens 'C' du terme, et non une macro-procedure, et ce afin de cacher aux   */
                                        /* programmes utilisateurs (par exemple '$xci/display$K') les definitions de 'X-Window' (et  */
                                        /* ici par exemple 'Expose'), et donc tous leurs fichiers d'includes...                      */

     RETU_ERROR;
     Eblock

EFonctionI

#    undef     ATTENTE_D_UN_EVENEMENT_QUELCONQUE

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

BFonctionI

DEFV(Common,DEFV(FonctionI,IXclose()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          EGAL(IXdisplay_____imageA_courante_revisualisable,FAUX);
                                        /* A partir de maintenant, 'imageA' n'est plus "revisualisable"...                           */

          CALS(XSetCloseDownMode(description_du_serveur_et_de_l_ecran
                                ,DestroyAll
                                 )
               );
                                        /* Et ce afin que tout ce qui fut cree ne soit pas rendu permanent...                        */
          EGAL(contenu_de_la_palette,INVALIDE);
                                        /* Ainsi, on sait que le contenu de la palette est maintenant 'INVALIDE'...                  */

          CALS(XFreeGC(description_du_serveur_et_de_l_ecran,contexte_graphique_de_visualisation));
                                        /* Liberation du contexte graphique...                                                       */

          Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01)
               Bblock
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02)
               Bblock
               CALS(XFreeColormap(description_du_serveur_et_de_l_ecran
                                 ,PALETTE_DE_COULEURS_UTILISEE
                                  )
                    );
                                        /* Desinstallation physique (au niveau hardware) de la palette. On notera que cette          */
                                        /* operation 'XFreeColormap(...)' est faite avant 'XUnmapWindow(...)', alors qu'il aurait    */
                                        /* ete plus logique de la faire apres, et ce afin que l'image visualisee n'apparaisse pas,   */
                                        /* pour quelques instants, avec de mauvaises couleurs. Malheureusement, au niveau de la      */
                                        /* gestion de l'evenement 'ColormapNotify', cela pose un probleme...                         */
               ATTENTE_DE_L_EVENEMENT_ColormapNotify;

               EGAL(c_est_le_premier_XInstallColormap,VRAI);
                                        /* Reinitialisation de l'indicateur logique precisant que le premier 'XInstallColormap(...)' */
                                        /* n'a pas encore ete fait...                                                                */
               EGAL(creer_une_palette,VRAI);
                                        /* Et que la palette doit etre recree...                                                     */
               CALS(Xliberation(liste_des_visuals_supportes_et_satisfaisants));
                                        /* Ainsi on libere le "visual" utilise...                                                    */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03)
               Bblock
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          EGAL(X11_____liaison_avec_le_serveur,INACTIF);
                                        /* Ainsi, on sait que la liaison n'est plus active...                                        */
          CALS(XUnmapWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de "de-visualisation" de la fenetre,                                            */
          ATTENTE_D_UN_EVENEMENT_CONNU(UnmapNotify,BLOC(VIDE;));
                                        /* Ainsi, on attend la fin du "desaffichage". On notera le phenomene interessant suivant ;   */
                                        /* avant l'evenement 'UnmapNotify', on peut rencontrer, suivant les cas :                    */
                                        /*                                                                                           */
                                        /* 'SYSTEME_DPX5000_SPIX'     --> 'SYSTEME_DPX5000_SPIX'    : rien,                          */
                                        /*                                                                                           */
                                        /* 'SYSTEME_SG4D20G_IRIX'     --> 'SYSTEME_DPX5000_SPIX'    : 1 evenement 'ColormapNotify'   */
                                        /*                                                            apparait avant,                */
                                        /*                                                                                           */
                                        /* 'SYSTEME_SG4D20G_IRIX'     --> 'SYSTEME_SG4D20G_IRIX'    : 2 evenements 'ColormapNotify'  */
                                        /*                                                            apparaissent avant.            */
                                        /*                                                                                           */
                                        /* 'SYSTEME_SG4D25TG_IRIX'    --> 'SYSTEME_DPX5000_SPIX'    : 1 evenement 'ColormapNotify'   */
                                        /*                                                            apparait avant,                */
                                        /*                                                                                           */
                                        /* 'SYSTEME_SG4D25TG_IRIX'    --> 'SYSTEME_SG4D25TG_IRIX'   : 2 evenements 'ColormapNotify'  */
                                        /*                                                            apparaissent avant.            */
                                        /*                                                                                           */
                                        /* Alors pourquoi ? puisqu'on a fait avant 'ATTENTE_DE_L_EVENEMENT_ColormapNotify'. Mais     */
                                        /* ces differences font qu'il est impossible de faire d'une maniere tout a fait generale     */
                                        /* des 'ATTENTE_D_UN_EVENEMENT_CONNU(ColormapNotify,BLOC(VIDE;))' qui resoudraient tous les  */
                                        /* cas, et donc, je m'abstiens...                                                            */

          CALS(XDestroyWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de destruction de la fenetre,                                                   */
          ATTENTE_D_UN_EVENEMENT_CONNU(DestroyNotify,BLOC(VIDE;));
                                        /* Ainsi, on attend la fin de la destruction...                                              */

          CALS(XSync(description_du_serveur_et_de_l_ecran,True));
                                        /* Ainsi, on purge tous les evenements en attente...                                         */
          CALS(XCloseDisplay(description_du_serveur_et_de_l_ecran));
                                        /* Et enfin, on rompt la liaison avec le serveur 'X-Windoiws'.                               */

#    if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
          SET_DIMENSIONS_2D_SANS_VALIDATION(EnTete_de_sauvegardM ## Xmin_avant_IXopen,EnTete_de_sauvegardM ## Xmax_avant_IXopen
                                           ,EnTete_de_sauvegardM ## Ymin_avant_IXopen,EnTete_de_sauvegardM ## Ymax_avant_IXopen
                                            );
                                        /* Restauration de {{Xmin,Xmax},{Ymin,Ymax}} apres 'IXclose(...)'. Ce dispositif a ete       */
                                        /* introduit le 20010222172555 car, en effet, j'ai decouvert a cette date que l'affichage    */
                                        /* etait incorrect (incomplet...) lorsque 'Xmin' ou 'Ymin' etaient non nuls...               */
#    Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
#    Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                             \
               ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )

          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fermeture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionI

#    undef     ATTENTE_DE_L_EVENEMENT_ColormapNotify

#    ifdef     BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
#         undef     LISTE_DES_EVENEMENTS_A_ATTENDRE
#    Aifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2
#         undef     LISTE_DES_EVENEMENTS_A_ATTENDRE
#    Eifdef    BUG_SYSTEME_X_WINDOW_EVENEMENTS_2

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

#    ifdef     __VERSION__COMPILER_L_OPTION_VIDEO_ANALOGIQUE_DU_GRAPHIQUE_SILICON_GRAPHICS     /* Common,DEFV(Fonction,) : Galileo.  */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O U V E R T U R E   D ' U N E   F E N E T R E   P O U R   L ' E N T R E E   V I D E O   T E M P S   R E E L  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#         define    LISTE_DES_EVENEMENTS_A_ATTENDRE                                                                                     \
                              OUIN(PropertyChangeMask                                                                                   \
                                  ,ButtonPressMask                                                                                      \
                                   )                                                                                                    \
                                        /* Liste des evenements qu'il est utile d'attendre...                                        */

BFonctionL

#         define    CREATION_D_UNE_FENETRE(fenetre_courante)                                                                            \
                              Bblock                                                                                                    \
                              EGAL(ASD1(attributs_de_la_fenetre,save_under),True);                                                      \
                              EGAL(ASD1(attributs_de_la_fenetre,backing_store),QUE_FAIRE_DU_BACKING_STORE);                             \
                                        /* Activation eventuelle du "backingstore" et du "save-under"...                             */ \
                                                                                                                                        \
                              EGAL(ASD1(attributs_de_la_fenetre,event_mask),LISTE_DES_EVENEMENTS_A_ATTENDRE);                           \
                                                                                                                                        \
                              EGAL(fenetre_courante                                                                                     \
                                  ,XCreateWindow(description_du_serveur_et_de_l_ecran                                                   \
                                                ,RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES                                             \
                                                ,ASD1(suggestions_au_window_manager,x),ASD1(suggestions_au_window_manager,y)            \
                                                ,ASD1(suggestions_au_window_manager,width),ASD1(suggestions_au_window_manager,height)   \
                                                ,EPAISSEUR_DU_BORD_DES_FENETRES                                                         \
                                                ,CopyFromParent                                                                         \
                                                ,CopyFromParent                                                                         \
                                                ,CopyFromParent                                                                         \
                                                ,OUI03(CWBackingStore                                                                   \
                                                      ,CWSaveUnder                                                                      \
                                                      ,CWEventMask                                                                      \
                                                       )                                                                                \
                                                ,ADRESSE(attributs_de_la_fenetre)                                                       \
                                                 )                                                                                      \
                                   );                                                                                                   \
                                        /* Ouverture de la fenetre demandee...                                                       */ \
                                                                                                                                        \
                              VALIDATION_D_UNE_FENETRE(fenetre_courante);                                                               \
                                        /* Afin de valider la taille de la fenetre ouverte...                                        */ \
                              Eblock                                                                                                    \
                                        /* Creation d'une fenetre...                                                                 */

DEFV(Common,DEFV(FonctionL,IXopen_pour_l_entree_video_temps_reel(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran
                                                                ,nom_de_la_fenetreA
                                                                ,ARGUMENT_POINTERs(dimension_de_la_fenetre)
                                                                ,centrer_la_fenetre_video_temps_reel
                                                                ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                ,editer_les_PRINT_ATTENTION_initiaux
                                                                 )
                 )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_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(deltaF_2D,POINTERs(dimension_de_la_fenetre)));
                                        /* Dimension horizontale de la fenetre,                                                      */
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 dans le cas ou l'on ne centre pas...                       */
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
     DEFV(X_XSizeHints,suggestions_au_window_manager);
                                        /* Parametre communiquant au 'Window-Manager' un certain nombre de suggestions (qu'il n'est  */
                                        /* pas oblige d'honorer), et en particulier relatives a la geometrie de la fenetre...        */
     DEFV(pointF_2D,veritable_coin_bas_gauche);
                                        /* Abscisse du point de reference reellement utilise...                                      */

     DEFV(Int,INIT(nombre_d_arguments,ZERO));

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )
     DEFV(Char,INIT(POINTERc(POINTERc(arguments)),ADRESSE_NON_ENCORE_DEFINIE));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()'.                                           */
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )
     DEFV(CHAR,POINTERc(DTb1(arguments,NOMBRE_D_ARGUMENTS_ARGV)));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()' ; mais ATTENTION, il y avait autrefois     */
                                        /*                                                                                           */
                                        /*                  DEFV(CHAR,POINTERc(POINTERc(DTb0(arguments))));                          */
                                        /*                                                                                           */
                                        /* qui m'a pose des problemes considerables en passant sur le CRAY2, je suis donc revenu     */
                                        /* a une version plus orthodoxe...                                                           */
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
               ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                             \
               ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
               ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                             \
                )

     /*..............................................................................................................................*/
     Test(EST_INACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          EGAL(X11_____nom_du_serveur_et_de_l_ecran,Gvar(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran));
                                        /* Recuperation du nom du serveur 'X-Window' ainsi que du numero de l'ecran utilise.         */
          Test(IFEQ_chaine(X11_____nom_du_serveur_et_de_l_ecran,Gvar("X_LOCAL")))
               Bblock
               EGAL(description_du_serveur_et_de_l_ecran,XOpenDisplay(Cara(X11_____nom_du_serveur_et_de_l_ecran)));
                                        /* Etablissement de la liaison avec le serveur 'X-Window' demande...                         */

               Test(X_IL_Y_A_ERREUR(description_du_serveur_et_de_l_ecran))
                    Bblock
                    EDITION_DES_MESSAGES_DE_CONNEXION_IMPOSSIBLE_AVEC_LE_SERVEUR;
                    Eblock
               ATes
                    Bblock
                    DEFV(Logical,INIT(l_ouverture_de_la_fenetre_est_tentable,VRAI));
                                        /* A priori, on va tenter d'ouvrir la fenetre...                                             */

                    VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE;
                                        /* Afin d'inhiber eventuellement l'edition des coordonnees {X,Y} du curseur...               */

                    Test(IL_FAUT(editer_les_PRINT_ATTENTION_initiaux))
                         Bblock
                         TEST_DE_LA_RELEASE_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du numero de la release du serveur 'X-Window'.                                       */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    TESTS_DE_L_ECRAN_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du nombre d'ecrans du serveur et des dimensions correspondantes.                     */

                    Test(EST_VRAI(l_ouverture_de_la_fenetre_est_tentable))
                         Bblock
                         CENTRAGE_EVENTUEL_DE_LA_FENETRE(centrer_la_fenetre_video_temps_reel);
                                        /* Positionnement de la fenetre video temps reel...                                          */

                         GEOMETRIE_D_UNE_FENETRE(suggestions_au_window_manager
                                                ,ADRESSE(veritable_coin_bas_gauche)
                                                ,dimension_de_la_fenetre
                                                 );
                                        /* Dimensionnement et localisation d'une fenetre...                                          */
                         CREATION_D_UNE_FENETRE(X11_____fenetre_courante);
                                        /* Tentative de creation de la fenetre...                                                    */

                         Test(X_IL_Y_A_ERREUR(X11_____fenetre_courante))
                              Bblock
                              PRINT_ERREUR("l'ouverture de la fenetre est impossible");
                              Eblock
                         ATes
                              Bblock
                              MISE_EN_PLACE_DES_PROPRIETES_STANDARDS_D_UNE_FENETRE(description_du_serveur_et_de_l_ecran
                                                                                  ,X11_____fenetre_courante
                                                                                  ,suggestions_au_window_manager
                                                                                   );
                                        /* Mise en place des propietes standards d'une fenetre...                                    */

                              EGAL(X11_____liaison_avec_le_serveur,ACTIF);
                                        /* Ainsi, on sait que la liaison est active...                                               */
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("l'ouverture de la fenetre est donc refusee sur ce serveur 'X-Window'");
                         Eblock
                    ETes
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu car le serveur 'X-Window' n'est pas local");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' est deja active");
          Eblock
     ETes

     RETU(X11_____liaison_avec_le_serveur);
     Eblock

#         undef     CREATION_D_UNE_FENETRE

EFonctionL

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

BFonctionI

TypedefS(X_Bool,vrai_Int_de_base)
                                        /* Structure definissant un "booleen"...                                                     */
DEFV(Extern,DEFV(X_Bool,XTranslateCoordinates()));
                                        /* Fonction permettant de translater les coordonnees dans la fenetre...                      */

DEFV(Common,DEFV(FonctionI,IXmapping_pour_l_entree_video_temps_reel(Adecalage_en_X
                                                                   ,Adecalage_en_Y
                                                                   ,ARGUMENT_POINTEUR(Rdecalage_en_X)
                                                                   ,ARGUMENT_POINTEUR(Rdecalage_en_Y)
                                                                    )
                 )
     )
DEFV(Argument,DEFV(Int,Adecalage_en_X));
DEFV(Argument,DEFV(Int,Adecalage_en_Y));
                                        /* Decalage en {X,Y} Argument de la video dans la fenetre...                                 */
DEFV(Argument,DEFV(X_Int,POINTEUR(Rdecalage_en_X)));
DEFV(Argument,DEFV(X_Int,POINTEUR(Rdecalage_en_Y)));
                                        /* Decalage en {X,Y} Resultat de la video dans la fenetre...                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(X_Window,fenetre_de_manoeuvre);
                                        /* Fenetre rendue necessaire par 'XTranslateCoordinates(...)'...                             */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          CALS(XMapWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Maintenant que tout est pret, on fait apparaitre la fenetre a l'ecran...                  */
          CALS(XSync(description_du_serveur_et_de_l_ecran,False));
                                        /* Ainsi, on purge tout, sauf les evenements en attente...                                   */
          CALS(XTranslateCoordinates(description_du_serveur_et_de_l_ecran
                                    ,X11_____fenetre_courante
                                    ,RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES
                                    ,Adecalage_en_X,Adecalage_en_Y
                                    ,Rdecalage_en_X,Rdecalage_en_Y
                                    ,ADRESSE(fenetre_de_manoeuvre)
                                     )
               );
                                        /* Positionnement de la video dans la fenetre 'X-Window'...                                  */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("le mapping de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          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   P O U R   L ' E N T R E E   V I D E O   T E M P S   R E E L  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IXclose_pour_l_entree_video_temps_reel()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          CALS(XSetCloseDownMode(description_du_serveur_et_de_l_ecran
                                ,DestroyAll
                                 )
               );
                                        /* Et ce afin que tout ce qui fut cree ne soit pas rendu permanent...                        */

          EGAL(X11_____liaison_avec_le_serveur,INACTIF);
                                        /* Ainsi, on sait que la liaison n'est plus active...                                        */
          CALS(XUnmapWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de "de-visualisation" de la fenetre,                                            */
          CALS(XDestroyWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de destruction de la fenetre,                                                   */
          CALS(XSync(description_du_serveur_et_de_l_ecran,True));
                                        /* Ainsi, on purge tous les evenements en attente...                                         */
          CALS(XCloseDisplay(description_du_serveur_et_de_l_ecran));
                                        /* Et enfin, on rompt la liaison avec le serveur 'X-Windoiws'.                               */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fermeture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionI

#         undef     LISTE_DES_EVENEMENTS_A_ATTENDRE

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

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

#    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'...             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A   L ' U T I L I S A T I O N   D E   ' O p e n G L '  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL                       /* Common,DEFV(Fonction,) : avec 'OpenGL'...         */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefP(G_GLXContext,GLXContext)
                                        /* Structure definissant le contexte de connexion de 'OpenGL' a 'X-Window'.                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O U V E R T U R E   D ' U N E   F E N E T R E   P O U R   U T I L I S E R   ' O p e n G L '  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(X_XVisualInfo,POINTERs(informations_relatives_au_visuel_utilise)));
                                        /* Informations relatives au visuel.                                                         */

#         define    APPARENCE_VISUELLE_DE_LA_FENETRE_POUR_OpenGL                                                                        \
                              ASI1(informations_relatives_au_visuel_utilise,visual)                                                     \
                                        /* Apparence visuelle de la fenetre. On notera qu'au lieu de definir :                       */ \
                                        /*                                                                                           */ \
                                        /*                  APPARENCE_VISUELLE_DE_LA_FENETRE                                         */ \
                                        /*                                                                                           */ \
                                        /* on definit :                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  APPARENCE_VISUELLE_DE_LA_FENETRE_POUR_OpenGL                             */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, le definition 'APPARENCE_VISUELLE_DE_LA_FENETRE' servira encore apres      */ \
                                        /* la definition des fonctions utiles a 'OpenGL'...                                          */

#         define    LISTE_DES_EVENEMENTS_A_ATTENDRE                                                                                     \
                              OUI06(PropertyChangeMask                                                                                  \
                                   ,ButtonPressMask                                                                                     \
                                   ,KeyPressMask                                                                                        \
                                   ,StructureNotifyMask                                                                                 \
                                   ,ExposureMask                                                                                        \
                                   ,VisibilityChangeMask                                                                                \
                                    )                                                                                                   \
                                        /* Liste des evenements qu'il est utile d'attendre. L'evenement 'KeyPressMask' a ete         */ \
                                        /* ajoute le 20000323104448.                                                                 */

BFonctionL

#         define    CREATION_D_UNE_FENETRE(fenetre_courante)                                                                            \
                              Bblock                                                                                                    \
                              DEFV(vrai_Int_de_base,INIS(DTb0(liste_des_caracteristiques_necessaires_a_OPenGL)                          \
                                                        ,IstructL08(GLX_RGBA                                                            \
                                                                   ,GLX_RED_SIZE,Bsize_p                                                \
                                                                   ,GLX_GREEN_SIZE,Bsize_p                                              \
                                                                   ,GLX_BLUE_SIZE,Bsize_p                                               \
                                                                   ,None                                                                \
                                                                    )                                                                   \
                                                         )                                                                              \
                                   );                                                                                                   \
                                        /* Description des caracteristiques du visuel necessaires a 'OpenGL' ; on notera donc que    */ \
                                        /* l'on recherche un visuel vraies couleurs (le code 'None' indique la fin de la liste des   */ \
                                        /* des carcateristiques recherchees). On notera le 'vrai_Int_de_base' pour eviter des        */ \
                                        /* problemes de type de pointeur dans l'appel 'glXChooseVisual(...)' qui suit...             */ \
                              DEFV(X_Colormap,palette_necessaire);                                                                      \
                                        /* Palette necessaire (dont je ne vois pas en fait l'utilite, mais elle est indispensable).  */ \
                                                                                                                                        \
                              EGAL(informations_relatives_au_visuel_utilise                                                             \
                                  ,glXChooseVisual(description_du_serveur_et_de_l_ecran                                                 \
                                                  ,ECRAN_UTILISE                                                                        \
                                                  ,liste_des_caracteristiques_necessaires_a_OPenGL                                      \
                                                   )                                                                                    \
                                   );                                                                                                   \
                                                                                                                                        \
                              EGAL(palette_necessaire                                                                                   \
                                  ,XCreateColormap(description_du_serveur_et_de_l_ecran                                                 \
                                                  ,RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES                                           \
                                                  ,APPARENCE_VISUELLE_DE_LA_FENETRE_POUR_OpenGL                                         \
                                                  ,AllocNone                                                                            \
                                                   )                                                                                    \
                                   );                                                                                                   \
                                                                                                                                        \
                              EGAL(ASD1(attributs_de_la_fenetre,save_under),True);                                                      \
                              EGAL(ASD1(attributs_de_la_fenetre,backing_store),QUE_FAIRE_DU_BACKING_STORE);                             \
                                        /* Activation eventuelle du "backingstore" et du "save-under"...                             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, a la date du 1995032700, il apparait que les options 'save_under' et           */ \
                                        /* 'backing_store' sont ineffectives ; il s'agit d'un probleme repertorie (voir l'appel      */ \
                                        /* '30325' dans 'v $Dbugs/SGIND4GA$D/IRIX$D/$Fnota 30325').                                  */ \
                                                                                                                                        \
                              EGAL(ASD1(attributs_de_la_fenetre,event_mask),LISTE_DES_EVENEMENTS_A_ATTENDRE);                           \
                              EGAL(ASD1(attributs_de_la_fenetre,border_pixel),NOIR);                                                    \
                              EGAL(ASD1(attributs_de_la_fenetre,colormap),palette_necessaire);                                          \
                                        /* Mise en place des attributs obligatoires (voir 'v $xtc/OpenGL.16$c').                     */ \
                                                                                                                                        \
                              EGAL(fenetre_courante                                                                                     \
                                  ,XCreateWindow(description_du_serveur_et_de_l_ecran                                                   \
                                                ,RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES                                             \
                                                ,ASD1(suggestions_au_window_manager,x),ASD1(suggestions_au_window_manager,y)            \
                                                ,ASD1(suggestions_au_window_manager,width),ASD1(suggestions_au_window_manager,height)   \
                                                ,EPAISSEUR_DU_BORD_DES_FENETRES                                                         \
                                                ,ASI1(informations_relatives_au_visuel_utilise,depth)                                   \
                                                ,InputOutput                                                                            \
                                                ,APPARENCE_VISUELLE_DE_LA_FENETRE_POUR_OpenGL                                           \
                                                ,OUI05(CWBackingStore                                                                   \
                                                      ,CWSaveUnder                                                                      \
                                                      ,CWEventMask                                                                      \
                                                      ,CWBorderPixel                                                                    \
                                                      ,CWColormap                                                                       \
                                                       )                                                                                \
                                                ,ADRESSE(attributs_de_la_fenetre)                                                       \
                                                 )                                                                                      \
                                   );                                                                                                   \
                                        /* Ouverture de la fenetre demandee...                                                       */ \
                                                                                                                                        \
                              VALIDATION_D_UNE_FENETRE(fenetre_courante);                                                               \
                                        /* Afin de valider la taille de la fenetre ouverte...                                        */ \
                              Eblock                                                                                                    \
                                        /* Creation d'une fenetre...                                                                 */

DEFV(Common,DEFV(FonctionL,IXopen_pour_utiliser_OpenGL(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran
                                                      ,nom_de_la_fenetreA
                                                      ,ARGUMENT_POINTERs(dimension_de_la_fenetre)
                                                      ,centrer_la_fenetre_pour_OpenGL
                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                      ,editer_les_PRINT_ATTENTION_initiaux
                                                       )
                 )
     )
DEFV(Argument,DEFV(CHAR,DTb0(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_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(deltaF_2D,POINTERs(dimension_de_la_fenetre)));
                                        /* Dimension horizontale de la fenetre,                                                      */
DEFV(Argument,DEFV(Logical,centrer_la_fenetre_pour_OpenGL));
                                        /* 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 dans le cas ou l'on ne centre pas...                       */
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
     DEFV(X_XSizeHints,suggestions_au_window_manager);
                                        /* Parametre communiquant au 'Window-Manager' un certain nombre de suggestions (qu'il n'est  */
                                        /* pas oblige d'honorer), et en particulier relatives a la geometrie de la fenetre...        */
     DEFV(pointF_2D,veritable_coin_bas_gauche);
                                        /* Abscisse du point de reference reellement utilise...                                      */

     DEFV(Int,INIT(nombre_d_arguments,ZERO));

#         if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                  \
                    ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                    \
                    ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                         \
                    ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                    ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                     )
     DEFV(Char,INIT(POINTERc(POINTERc(arguments)),ADRESSE_NON_ENCORE_DEFINIE));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()'.                                           */
#         Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                  \
                    ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                    \
                    ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                         \
                    ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                    ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                     )
     DEFV(CHAR,POINTERc(DTb1(arguments,NOMBRE_D_ARGUMENTS_ARGV)));
                                        /* Ces arguments vont etre provoirement inutilises, mais correspondent aux arguments         */
                                        /* 'argc' et 'argv' de 'XSetStandardProperties()' ; mais ATTENTION, il y avait autrefois     */
                                        /*                                                                                           */
                                        /*                  DEFV(CHAR,POINTERc(POINTERc(DTb0(arguments))));                          */
                                        /*                                                                                           */
                                        /* qui m'a pose des problemes considerables en passant sur le CRAY2, je suis donc revenu     */
                                        /* a une version plus orthodoxe...                                                           */
#         Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                  \
                    ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                    \
                    ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                    \
                    ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                         \
                    ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nC_RELEASE >= 701000000))                                        \
                    ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                    ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nC_RELEASE >= 600020000))                                        \
                     )

     /*..............................................................................................................................*/
     Test(EST_INACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          EGAL(IGdisplay_____imageA_courante_visualisable,FAUX);
                                        /* A priori...                                                                               */

          EGAL(X11_____nom_du_serveur_et_de_l_ecran,Gvar(nom_de_la_variable_shell_d_acces_au_serveur_et_a_l_ecran));
                                        /* Recuperation du nom du serveur 'X-Window' ainsi que du numero de l'ecran utilise.         */
          EGAL(description_du_serveur_et_de_l_ecran,XOpenDisplay(Cara(X11_____nom_du_serveur_et_de_l_ecran)));
                                        /* Etablissement de la liaison avec le serveur 'X-Window' demande...                         */
          Test(X_IL_Y_A_ERREUR(description_du_serveur_et_de_l_ecran))
               Bblock
               EDITION_DES_MESSAGES_DE_CONNEXION_IMPOSSIBLE_AVEC_LE_SERVEUR;
               Eblock
          ATes
               Bblock
               DEFV(Logical,INIT(l_ouverture_de_la_fenetre_est_tentable,VRAI));
                                        /* A priori, on va tenter d'ouvrir la fenetre...                                             */

               VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE;
                                        /* Afin d'inhiber eventuellement l'edition des coordonnees {X,Y} du curseur...               */

               Test(IL_FAUT(editer_les_PRINT_ATTENTION_initiaux))
                    Bblock
                    TEST_DE_LA_RELEASE_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du numero de la release du serveur 'X-Window'.                                       */

                    TEST_DE_L_EXISTENCE_DU_BACKINGSTORE(description_du_serveur_et_de_l_ecran);
                                        /* Test de l'exisence du 'BackingStore' et du 'SaveUnder'.                                   */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               TESTS_DE_L_ECRAN_DU_SERVEUR(description_du_serveur_et_de_l_ecran);
                                        /* Test du nombre d'ecrans du serveur et des dimensions correspondantes.                     */

               Test(EST_VRAI(l_ouverture_de_la_fenetre_est_tentable))
                    Bblock
                    CENTRAGE_EVENTUEL_DE_LA_FENETRE(centrer_la_fenetre_pour_OpenGL);
                                        /* Positionnement de la fenetre video temps reel...                                          */

                    GEOMETRIE_D_UNE_FENETRE(suggestions_au_window_manager
                                           ,ADRESSE(veritable_coin_bas_gauche)
                                           ,dimension_de_la_fenetre
                                            );
                                        /* Dimensionnement et localisation d'une fenetre...                                          */
                    CREATION_D_UNE_FENETRE(X11_____fenetre_courante);
                                        /* Tentative de creation de la fenetre...                                                    */

                    Test(X_IL_Y_A_ERREUR(X11_____fenetre_courante))
                         Bblock
                         PRINT_ERREUR("l'ouverture de la fenetre est impossible");
                         Eblock
                    ATes
                         Bblock
                         MISE_EN_PLACE_DES_PROPRIETES_STANDARDS_D_UNE_FENETRE(description_du_serveur_et_de_l_ecran
                                                                             ,X11_____fenetre_courante
                                                                             ,suggestions_au_window_manager
                                                                              );
                                        /* Mise en place des propietes standards d'une fenetre...                                    */
                         CALS(XMapWindow(description_du_serveur_et_de_l_ecran
                                        ,X11_____fenetre_courante
                                         )
                              );
                                        /* Maintenant que tout est pret, on fait apparaitre la fenetre a l'ecran, cette operation    */
                                        /* s'appelant "mapping" sous 'X-Window'.                                                     */
                         ATTENTE_D_UN_EVENEMENT_CONNU(MapNotify,BLOC(VIDE;));
                                        /* Ne pas faire cette attente donne un phenomene de "fantome" qui a ete l'objet de l'appel   */
                                        /* 32747 de 'v $Dbugs/SGIND4GA$D/IRIX$D/$Fnota 32747'.                                       */

                         EGAL(X11_____liaison_avec_le_serveur,ACTIF);
                                        /* Ainsi, on sait que la liaison est active...                                               */
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    PRINT_ERREUR("l'ouverture de la fenetre est donc refusee sur ce serveur 'X-Window'");
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("l'ouverture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' est deja active");
          Eblock
     ETes

     RETU(X11_____liaison_avec_le_serveur);
     Eblock

#         undef     CREATION_D_UNE_FENETRE

EFonctionL

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N N E X I O N   E N T R E   ' X - W I N D O W '   E T   ' O p e n G L '  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

                                        /* ATTENTION : la fonction 'IXconnexion_avec_OpenGL(...)' utilisent deux fonctions           */
                                        /* 'glXCreateContext(...)' et 'glXMakeCurrent(...)' qui sont malheureusement des fonctions   */
                                        /* de 'OpenGL' alors qu'on est ici dans '$xiidX' (soit 'X-Window'). Malgre cela, il est      */
                                        /* plus logique de la mettre ici a cause de l'utilisation des elements :                     */
                                        /*                                                                                           */
                                        /*                  X11_____liaison_avec_le_serveur                                          */
                                        /*                  description_du_serveur_et_de_l_ecran                                     */
                                        /*                  informations_relatives_au_visuel_utilise                                 */
                                        /*                                                                                           */
                                        /* qui font partie de '$xiidX'...                                                            */

DEFV(Local,DEFV(G_GLXContext,contexte_de_OpenGL));
                                        /* Contexte necessaire a la connexion entre 'X-Window' et 'OpenGL'. Il est imperatif de      */
                                        /* le declarer 'Local' afin que sa duree de vie soit au moins suffisante pour attendre       */
                                        /* l'appel a 'IXclose_pour_utiliser_OpenGL(...)'...                                          */

DEFV(Common,DEFV(FonctionI,IXconnexion_avec_OpenGL()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          EGAL(IGdisplay_____imageA_courante_visualisable,FAUX);
                                        /* A partir de maintenant, 'imageA' n'est plus "revisualisable"...                           */

          EGAL(contexte_de_OpenGL
              ,glXCreateContext(description_du_serveur_et_de_l_ecran,informations_relatives_au_visuel_utilise,NULL,GL_FALSE)
               );
                                        /* Creation du contexte necessaire a 'OpenGL'...                                             */
          CALS(glXMakeCurrent(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante,contexte_de_OpenGL));
                                        /* Maintenant que tout est pret, on connecte 'X-Window' et 'OpenGL', ce qui signifie qu'a    */
                                        /* partir de ce moment, des elements de 'OpenGL' peuvent etre visualises a l'interieur de    */
                                        /* cette fenetre 'X-Window'...                                                               */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("pas de connexion de 'X-Window' et de 'OpenGL' car la liaison avec le serveur 'X-Window' n'est pas active");
          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   P O U R   U T I L I S E R   ' O p e n G L '  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

                                        /* ATTENTION : la fonction 'IXclose_pour_utiliser_OpenGL(...)' utilisent deux fonctions      */
                                        /* 'glXMakeCurrent(...)' et 'glXDestroyContext(...)' qui sont malheureusement des fonctions  */
                                        /* de 'OpenGL' alors qu'on est ici dans '$xiidX' (soit 'X-Window'). Malgre cela, il est      */
                                        /* plus logique de la mettre ici a cause de l'utilisation des elements :                     */
                                        /*                                                                                           */
                                        /*                  X11_____liaison_avec_le_serveur                                          */
                                        /*                  description_du_serveur_et_de_l_ecran                                     */
                                        /*                                                                                           */
                                        /* qui font partie de '$xiidX'...                                                            */

DEFV(Common,DEFV(FonctionI,IXclose_pour_utiliser_OpenGL()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          CALS(XSetCloseDownMode(description_du_serveur_et_de_l_ecran
                                ,DestroyAll
                                 )
               );
                                        /* Et ce afin que tout ce qui fut cree ne soit pas rendu permanent...                        */

          CALS(glXMakeCurrent(description_du_serveur_et_de_l_ecran,None,NULL));
                                        /* Liberation du contexte graphique,                                                         */
          CALS(glXDestroyContext(description_du_serveur_et_de_l_ecran,contexte_de_OpenGL));
                                        /* Et enfin destruction...                                                                   */

          EGAL(X11_____liaison_avec_le_serveur,INACTIF);
                                        /* Ainsi, on sait que la liaison n'est plus active...                                        */
          CALS(XUnmapWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de "de-visualisation" de la fenetre,                                            */
          CALS(XDestroyWindow(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante));
                                        /* Tentative de destruction de la fenetre,                                                   */
          CALS(XSync(description_du_serveur_et_de_l_ecran,True));
                                        /* Ainsi, on purge tous les evenements en attente...                                         */
          CALS(XCloseDisplay(description_du_serveur_et_de_l_ecran));
                                        /* Et enfin, on rompt la liaison avec le serveur 'X-Windoiws'.                               */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la fermeture de la fenetre ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionI

#         undef     LISTE_DES_EVENEMENTS_A_ATTENDRE
#         undef     APPARENCE_VISUELLE_DE_LA_FENETRE_POUR_OpenGL

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

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_3
#         undef     QUE_FAIRE_DU_BACKING_STORE
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_3
#         undef     QUE_FAIRE_DU_BACKING_STORE
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_3

#    undef     VALIDATION_D_UNE_FENETRE

#    undef     GEOMETRIE_D_UNE_FENETRE
#    undef     CENTRAGE_EVENTUEL_DE_LA_FENETRE

#    undef     VALIDATION_PRELIMINAIRE_DES_DIMENSIONS_D_UNE_FENETRE

#    undef     MISE_EN_PLACE_DES_PROPRIETES_STANDARDS_D_UNE_FENETRE
#    undef     TESTS_DE_L_ECRAN_DU_SERVEUR
#    undef     TEST_DE_L_EXISTENCE_DU_BACKINGSTORE
#    undef     TEST_DE_LA_RELEASE_DU_SERVEUR
#    undef     EDITION_DES_MESSAGES_DE_CONNEXION_IMPOSSIBLE_AVEC_LE_SERVEUR
#    undef     NOMBRE_D_ARGUMENTS_ARGV
#    undef     NOM_DE_SON_ICONE
#    undef     NOM_DE_LA_FENETRE
#    undef     ATTENTE_D_UN_EVENEMENT_INCONNU

#    undef     Y_CURSEUR_KeyPress
#    undef     X_CURSEUR_KeyPress

#    undef     TrY_CURSEUR_KeyPress
#    undef     TrX_CURSEUR_KeyPress

#    undef     EY_curseur_KeyPress
#    undef     EX_curseur_KeyPress

#    undef     OY_curseur_KeyPress
#    undef     OX_curseur_KeyPress

#    ifdef     __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         undef     REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay
#         undef     CENTRER_L_IMAGE_DANS_LA_FENETRE_LORS_DU_REAFFICHAGE
#    Aifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL
#         undef     REAFFICHAGE_D_UNE_IMAGE_PAR_IGdisplay
#    Eifdef    __VERSION__UTILISER_LA_BIBLIOTHEQUE_OpenGL

#    undef     REAFFICHAGE_D_UNE_IMAGE_PAR_IXdisplay

#    undef     SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE
#    undef     NE_PAS_SE_REMETTRE_EN_ATTENTE_D_UN_NOUVEL_EVENEMENT_DE_MEME_TYPE
#    undef     ATTENTE_D_UN_EVENEMENT_CONNU
#    undef     RECEPTION_D_UN_EVENEMENT_INATTENDU
#    undef     TRAITEMENT_D_UN_EVENEMENT_ARRIVE
#    undef     ATTENTE_DE_N_IMPORTE_LEQUEL_DES_EVENEMENTS_POSSIBLES

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' I M A G E   C O U R A N T E  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(X_XImage,INIT(POINTERs(descripteur_de_l_image),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* Descripteur permettant de definir au serveur l'image raster que l'on veut afficher. Ce    */
                                        /* descripteur est commun a 'IXdisplay(...)' et a 'IXanimation(...)' a cause de la fonction  */
                                        /* 'Iconversion_d_une_image_en_fausses_couleurs_en_une_image_en_vraies_couleurs(...)' qui    */
                                        /* l'utilise...                                                                              */

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

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_2
#         define    MISE_EN_FORME_DE_L_IMAGE(image_symetrisee_par_rapport_a_OX,image)                                                   \
                                        /* L'argument 'image_symetrisee_par_rapport_a_OX' a ete introduit le 20021230114120 par      */ \
                                        /* soucis de generalite...                                                                   */ \
                              Bblock                                                                                                    \
                              NETTOYAGE_DE_L_image_symetrisee_par_rapport_a_OX;                                                         \
                              Test(IL_FAUT(utiliser_L_SUBSTITUTION_X_WINDOW))                                                           \
                                        /* ATTENTION : on ne peut pas programmer autrement cette sequence : il faut imperativement   */ \
                                        /* que les couples (PUSH_FILTRAGE,PULL_FILTRAGE) et (PUSH_SUBSTITUTION,PULL_SUBSTITUTION)    */ \
                                        /* soient a l'interieur d'un meme couple (Bblock,Eblock) etant donnee leur programmation.    */ \
                                   Bblock                                                                                               \
                                   PUSH_FILTRAGE;                                                                                       \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                                   SET_FILTRAGE(ACTIF);                                                                                 \
                                        /* On autorise tous les filtrages afin d'avoir la 'SUBSTITUTION'.                            */ \
                                   PUSH_SUBSTITUTION;                                                                                   \
                                        /* Sauvegarde de la substitution courante.                                                   */ \
                                   SUBSTITUTION(L_SUBSTITUTION_X_WINDOW);                                                               \
                                        /* Mise en place de la substitution specifique liee a la palette courante...                 */ \
                                   CALS(Ix_symetrie(image_symetrisee_par_rapport_a_OX,image));                                          \
                                        /* Simultanement, on fait la symetrie horizontale, et l'adaptation a la palette...           */ \
                                   PULL_SUBSTITUTION;                                                                                   \
                                   PULL_FILTRAGE;                                                                                       \
                                        /* Et restauration des conditions initiales...                                               */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PUSH_FILTRAGE;                                                                                       \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                                   SET_FILTRAGE(INACTIF);                                                                               \
                                        /* On inhibe tous les filtrages (y compris la 'SUBSTITUTION')...                             */ \
                                   CALS(Ix_symetrie(image_symetrisee_par_rapport_a_OX,image));                                          \
                                        /* Simultanement, on fait la symetrie horizontale, et l'adaptation a la palette...           */ \
                                   PULL_FILTRAGE;                                                                                       \
                                        /* Et restauration des conditions initiales...                                               */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* L'image argument est mise en forme pour 'X-Window', ce qui signifie que d'une part        */ \
                                        /* on lui fait subir une symetrie d'axe 'OX' (puisque l'axe 'OY' de 'X-Window' descend),     */ \
                                        /* et d'autre part, on lui fait subir une substitution adaptee a la palette courante         */ \
                                        /* des couleurs...                                                                           */
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2
#         define    MISE_EN_FORME_DE_L_IMAGE(image_symetrisee_par_rapport_a_OX,image)                                                   \
                                        /* L'argument 'image_symetrisee_par_rapport_a_OX' a ete introduit le 20021230114120 par      */ \
                                        /* soucis de generalite...                                                                   */ \
                              Bblock                                                                                                    \
                              NETTOYAGE_DE_L_image_symetrisee_par_rapport_a_OX;                                                         \
                              Test(IL_FAUT(utiliser_L_SUBSTITUTION_X_WINDOW))                                                           \
                                        /* ATTENTION : on ne peut pas programmer autrement cette sequence : il faut imperativement   */ \
                                        /* que les couples (PUSH_FILTRAGE,PULL_FILTRAGE) et (PUSH_SUBSTITUTION,PULL_SUBSTITUTION)    */ \
                                        /* soient a l'interieur d'un meme couple (Bblock,Eblock) etant donnee leur programmation.    */ \
                                   Bblock                                                                                               \
                                   PUSH_FILTRAGE;                                                                                       \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                                   SET_FILTRAGE(ACTIF);                                                                                 \
                                        /* On autorise tous les filtrages afin d'avoir la 'SUBSTITUTION'.                            */ \
                                   PUSH_SUBSTITUTION;                                                                                   \
                                        /* Sauvegarde de la substitution courante.                                                   */ \
                                   SUBSTITUTION(L_SUBSTITUTION_X_WINDOW);                                                               \
                                        /* Mise en place de la substitution specifique liee a la palette courante...                 */ \
                                   CALS(Imove(image_symetrisee_par_rapport_a_OX,image));                                                \
                                        /* Adaptation a la palette...                                                                */ \
                                   PULL_SUBSTITUTION;                                                                                   \
                                   PULL_FILTRAGE;                                                                                       \
                                        /* Et restauration des conditions initiales...                                               */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PUSH_FILTRAGE;                                                                                       \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                                   SET_FILTRAGE(INACTIF);                                                                               \
                                        /* On inhibe tous les filtrages (y compris la 'SUBSTITUTION')...                             */ \
                                   CALS(Imove(image_symetrisee_par_rapport_a_OX,image));                                                \
                                        /* Adaptation a la palette...                                                                */ \
                                   PULL_FILTRAGE;                                                                                       \
                                        /* Et restauration des conditions initiales...                                               */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                                        /* L'image argument est mise en forme pour 'X-Window', ce qui signifie qu'on lui fait        */ \
                                        /* subir une substitution adaptee a la palette courante des couleurs...                      */
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2

#    define    CONVERSION_D_UNE_IMAGE_EN_UN_BITMAP(bitmap)                                                                              \
                         Bblock                                                                                                         \
                         TesV(IL_FAUT(convertir_l_image_en_un_bit_map))                                                                 \
                                        /* Nota : ce 'TesV(...)' est destine a permettre la mise en place d'une eventuelle option    */ \
                                        /* permettant de visualiser des images deja mises sous la forme de bit-maps ; alors il       */ \
                                        /* conviendrait de definir la variable logique 'convertir_l_image_en_un_bit_map'. Mais       */ \
                                        /* actuellement, la conversion est systematique...                                           */ \
                              Bblock                                                                                                    \
                              PUSH_FILTRAGE;                                                                                            \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                              SET_FILTRAGE(INACTIF);                                                                                    \
                                        /* Et ce afin de ne pas perturber le processus de 'IXpalette()'...                           */ \
                              CALS(Igeneration_d_un_bitmap(bitmap,image_symetrisee_par_rapport_a_OX));                                  \
                                        /* Tant que 'X-Window' ne reconnaitra pas les matrices de points, mais uniquement les        */ \
                                        /* bit-maps en parallele, il faudra cette image intermediaire...                             */ \
                              PULL_FILTRAGE;                                                                                            \
                                        /* Et restauration des conditions initiales...                                               */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Conversion d'une image "standard" en un ensemble de bit-maps "paralleles"...              */
#    define    NETTOYAGE_DE_L_image_symetrisee_par_rapport_a_OX                                                                         \
                         Bblock                                                                                                         \
                         Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)                                                                     \
                              Bblock                                                                                                    \
                                        /* Le nettoyage n'est pas utile ici, puisqu'ensuite, on passe par un bit-map intermediaire.  */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                                        /* Le nettoyage est utile ici, afin que si (pasX,pasY) est different de  (PasX,PasY),        */ \
                                        /* l'image apparaisse propre a l'ecran (bien que clairsemee).                                */ \
                              Test(IFET(IFEQ(pasX,PasX),IFEQ(pasY,PasY)))                                                               \
                                   Bblock                                                                                               \
                                        /* Je n'aime pas cela, mais j'ai quand-meme fait cette petite optimisation...                */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PUSH_ECHANTILLONNAGE;                                                                                \
                                        /* Sauvegarde du sous-echantillonnage courant...                                             */ \
                                   SET_ECHANTILLONNAGE(PasX,PasY);                                                                      \
                                        /* Et mise en place d'un sous-echantillonnage de base...                                     */ \
                                   PUSH_FILTRAGE;                                                                                       \
                                        /* Sauvegarde de l'etat courant du filtrage des niveaux.                                     */ \
                                   SET_FILTRAGE(INACTIF);                                                                               \
                                        /* On inhibe le filtrage afin de mettre vraiment a 'NOIR' (et de gagner du temps aussi...    */ \
                                   CALS(Inoir(image_symetrisee_par_rapport_a_OX));                                                      \
                                        /* Nettoyage parfait de 'image_symetrisee_par_rapport_a_OX'...                               */ \
                                   PULL_FILTRAGE;                                                                                       \
                                   PULL_ECHANTILLONNAGE;                                                                                \
                                        /* Et restauration des conditions initiales...                                               */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Nettoyage eventuelle de 'image_symetrisee_par_rapport_a_OX'...                            */

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

BFonctionI

DEFV(Local,DEFV(FonctionI,Iconversion_d_une_image_en_fausses_couleurs_en_une_image_en_vraies_couleurs(imageR
                                                                                                     ,imageA
                                                                                                     ,imageA_ROUGE
                                                                                                     ,imageA_VERTE
                                                                                                     ,imageA_BLEUE
                                                                                                     ,increment_des_niveaux
                                                                                                     ,translater_le_NOIR
                                                                                                      )
                )
     )
                                        /* Fonction introduite le 20021230102551 pour 'ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03'.   */
DEFV(Argument,DEFV(X_XImage,POINTERs(imageR)));
                                        /* Structure image Resultat.                                                                 */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument en mode 'EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Image Argument en mode 'EST_FAUX(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(Int,increment_des_niveaux));
                                        /* Increment du niveau courant dans [NOIR,BLANC] afin de pouvoir decaler la palette (ce      */
                                        /* qui signifie aussi la faire "tourner").                                                   */
DEFV(Argument,DEFV(Logical,translater_le_NOIR));
                                        /* Indique si le niveau 'NOIR' est translatable ('LE_NOIR_EST_TRANSLATABLE') dans            */
                                        /* 'ACCES_LA_PALETTE_ET_TRANSLATION(...)' ou pas ('LE_NOIR_N_EST_PAS_TRANSLATABLE')...       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */

     BDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image ; on notera que       */
                                        /* meme si 'BUG_SYSTEME_X_WINDOW_IMAGE_2' n'existe plus, cette image subsiste afin de faire  */
                                        /* une adaptation a la palette, c'est pourquoi elle est toujours la...                       */

     BDEFV(image,image_ROUGE);
     BDEFV(image,image_VERTE);
     BDEFV(image,image_BLEUE);
                                        /* Composantes chromatiques donnant 'imageA' en vraies couleurs.                             */

     DEFV(Int,INIT(masque_ROUGE,UNDEF));
     DEFV(Int,INIT(masque_VERTE,UNDEF));
     DEFV(Int,INIT(masque_BLEUE,UNDEF));
                                        /* Masque de multiplexage des trois niveaux {ROUGE,VERTE,BLEUE}.                             */
     DEFV(Int,INIT(decalage_du_masque_ROUGE,UNDEF));
     DEFV(Int,INIT(decalage_du_masque_VERTE,UNDEF));
     DEFV(Int,INIT(decalage_du_masque_BLEUE,UNDEF));
                                        /* Decalages respectifs des trois niveaux {ROUGE,VERTE,BLEUE}.                               */
     /*..............................................................................................................................*/
     Test(X_IL_Y_A_ERREUR(descripteur_de_l_image))
          Bblock
          PRINT_ERREUR("le descripteur de l'image n'est pas valide");
          PRINT_ERREUR("la commande est donc brutalement abortee afin d'eviter la propagation de cette anomalie");

          Abort(ERREUR34);
                                        /* Abort introduit le 20170620094632...                                                      */
          Eblock
     ATes
          Bblock
          EGAL(masque_ROUGE,ASI1(descripteur_de_l_image,red_mask));
          EGAL(masque_VERTE,ASI1(descripteur_de_l_image,green_mask));
          EGAL(masque_BLEUE,ASI1(descripteur_de_l_image,blue_mask));
                                        /* Masque de multiplexage des trois niveaux {ROUGE,VERTE,BLEUE} mis ici le 20170619121634    */
                                        /* suite a des problemes sur les MACHINEs de type '$CMAP28' a cette date...                  */
          Eblock
     ETes

     EGAL(ASI1(descripteur_de_l_image,bits_per_pixel),ASD1(type_de_visual_recherche,depth));
                                        /* Mise en place du nombre de bits par point...                                              */

     Test(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs))
                                        /* Test introduit le 20021231091605.                                                         */
          Bblock
          MISE_EN_FORME_DE_L_IMAGE(image_symetrisee_par_rapport_a_OX,imageA);
                                        /* Symetrie eventuelle par rapport a l'axe 'OY'.                                             */

          PUSH_OPTIMISATION;
          SET_OPTIMISATION(VRAI);
                                        /* Afin de ne passer que par les listes de substitution...                                   */
          CALS(Ivraies_couleurs(image_ROUGE,image_VERTE,image_BLEUE
                               ,image_symetrisee_par_rapport_a_OX
                               ,VRAI,VRAI,VRAI
                               ,increment_des_niveaux
                               ,translater_le_NOIR
                                )
               );
                                        /* Passage des fausses aux vraies couleurs via la palette courante.                          */
          PULL_OPTIMISATION;
          Eblock
     ATes
          Bblock
          MISE_EN_FORME_DE_L_IMAGE(image_ROUGE,imageA_ROUGE);
          MISE_EN_FORME_DE_L_IMAGE(image_VERTE,imageA_VERTE);
          MISE_EN_FORME_DE_L_IMAGE(image_BLEUE,imageA_BLEUE);
                                        /* Symetrie eventuelle par rapport a l'axe 'OY'.                                             */
          Eblock
     ETes

     Test(I3OU(IZNE(ETLO(masque_ROUGE,masque_VERTE))
              ,IZNE(ETLO(masque_VERTE,masque_BLEUE))
              ,IZNE(ETLO(masque_BLEUE,masque_ROUGE))
               )
          )
          Bblock
          PRINT_ERREUR("au moins deux des trois masques de couleurs se recouvrent");

          CAL1(Prer2("masque ROUGE=%0*x\n",NCHXMO,masque_ROUGE));
          CAL1(Prer2("masque VERTE=%0*x\n",NCHXMO,masque_VERTE));
          CAL1(Prer2("masque BLEUE=%0*x\n",NCHXMO,masque_BLEUE));
                                        /* La constante 'NCHXMO' (=DIVI(NBITMO,NBITHX)' fut introduite le 20051210175559...          */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     EGAL(decalage_du_masque_ROUGE,AMPLITUDE_DE_CADRAGE_A_DROITE_D_UN_MASQUE(masque_ROUGE));
     EGAL(decalage_du_masque_VERTE,AMPLITUDE_DE_CADRAGE_A_DROITE_D_UN_MASQUE(masque_VERTE));
     EGAL(decalage_du_masque_BLEUE,AMPLITUDE_DE_CADRAGE_A_DROITE_D_UN_MASQUE(masque_BLEUE));
                                        /* Decalages respectifs des trois niveaux {ROUGE,VERTE,BLEUE}.                               */

     Test(I3OU(NON_DIVISIBLE(decalage_du_masque_ROUGE,NBITOC)
              ,NON_DIVISIBLE(decalage_du_masque_VERTE,NBITOC)
              ,NON_DIVISIBLE(decalage_du_masque_BLEUE,NBITOC)
               )
          )
          Bblock
          PRINT_ERREUR("au moins un des decalages des masques de couleurs est incorrect");

          CAL1(Prer1("decalage ROUGE=%d\n",decalage_du_masque_ROUGE));
          CAL1(Prer1("decalage VERTE=%d\n",decalage_du_masque_BLEUE));
          CAL1(Prer1("decalage ROUGE=%d\n",decalage_du_masque_ROUGE));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_image
          Bblock
          CALS(XPutPixel(imageR
                        ,X,Y
                        ,OUI03(SLLS(INTE(load_point(image_ROUGE,NEUT(X),NEUT(Y))),decalage_du_masque_ROUGE)
                              ,SLLS(INTE(load_point(image_VERTE,NEUT(X),NEUT(Y))),decalage_du_masque_VERTE)
                              ,SLLS(INTE(load_point(image_BLEUE,NEUT(X),NEUT(Y))),decalage_du_masque_BLEUE)
                               )
                         )
               );
                                        /* Generation de l'image en vraies couleurs au format 'X-Window'. Avant le 20030105103030    */
                                        /* le niveau du point etait genere par :                                                     */
                                        /*                                                                                           */
                                        /*                  HORNER_1_02(COULEURS                                                     */
                                        /*                             ,INTE(load_point(image_ROUGE,NEUT(X),NEUT(Y)))                */
                                        /*                             ,INTE(load_point(image_VERTE,NEUT(X),NEUT(Y)))                */
                                        /*                             ,INTE(load_point(image_BLEUE,NEUT(X),NEUT(Y)))                */
                                        /*                              )                                                            */
                                        /*                                                                                           */
                                        /* en verifiant au prealable que 'IFNE(PUIX(DEUX,LO2X(COULEURS)),COULEURS)' etait fausse.    */
                                        /* En effet, cette methode faisait l'hypothese de l'ordre implicite {R,V,B}...               */
                                        /*                                                                                           */
                                        /* Une experience effectuee le 20071127135008 en forcant :                                   */
                                        /*                                                                                           */
                                        /*                  niveau_courant = 0x12345678                                              */
                                        /*                                     ..BBVVRR   (soit dans l'ordre {B,V,R}}                */
                                        /*                                                                                           */
                                        /* ont montre que la structure 'ASI1(imageR,data)' contenait la suite d'octets :             */
                                        /*                                                                                           */
                                        /*                  {0x78,0x56,0x34,0x78,0x56,0x34,...}                                      */
                                        /*                                                                                           */
                                        /* (sur '$LACT16') soit dans l'ordre {R,V,B}...                                              */
          Eblock
     end_image

     EDEFV(image,image_BLEUE);
     EDEFV(image,image_VERTE);
     EDEFV(image,image_ROUGE);
                                        /* Composantes chromatiques donnant 'imageA' en vraies couleurs.                             */

     EDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image ; on notera que       */
                                        /* meme si 'BUG_SYSTEME_X_WINDOW_IMAGE_2' n'existe plus, cette image subsiste afin de faire  */
                                        /* une adaptation a la palette, c'est pourquoi elle est toujours la...                       */

     RETU_ERROR;
     Eblock

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   ( F I N )  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionIB

                                        /* Les definitions {L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX,...,INVERSION_AXE_OY} ont ete     */
                                        /* deplacees le 20000323104448.                                                              */

DEFV(Common,DEFV(FonctionIB,IXdisplay(imageA
                                     ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                     ,increment_des_niveaux
                                     ,translater_le_NOIR
                                      )
                 )
     )
                                        /* L'argument {imageA_ROUGE,imageA_VERTE,imageA_BLEUE} ont ete introduits le 20030101114234. */
                                        /*                                                                                           */
                                        /* Le 20100317152727, le type est passe de 'FonctionI' a 'FonctionIB' a cause des            */
                                        /* "references en avant" dont 'IXdisplay(...)' est l'objet via les procedures                */
                                        /* 'REAFFICHAGE_D_UNE_IMAGE_PAR_IXdisplay(...)' dans 'ATTENTE_D_UN_EVENEMENT_INCONNU(...)'.  */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument en mode 'EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Image Argument en mode 'EST_FAUX(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(Int,increment_des_niveaux));
                                        /* Increment du niveau courant dans [NOIR,BLANC] afin de pouvoir decaler la palette (ce      */
                                        /* qui signifie aussi la faire "tourner").                                                   */
                                        /* Cet argument a ete introduit le 20030101233411 afin de permettre la rotation des          */
                                        /* couleurs meme en "passant" par le mode 'TrueColor'...                                     */
DEFV(Argument,DEFV(Logical,translater_le_NOIR));
                                        /* Indique si le niveau 'NOIR' est translatable ('LE_NOIR_EST_TRANSLATABLE') dans            */
                                        /* 'ACCES_LA_PALETTE_ET_TRANSLATION(...)' ou pas ('LE_NOIR_N_EST_PAS_TRANSLATABLE')...       */
                                        /* Cet argument a ete introduit le 20030101233411 afin de permettre la rotation des          */
                                        /* couleurs meme en "passant" par le mode 'TrueColor'...                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          BDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image...                    */

          EGAL(IXdisplay_____increment_des_niveaux,increment_des_niveaux);
          EGAL(IXdisplay_____translater_le_NOIR,translater_le_NOIR);
                                        /* Dispositif introduit le 20070713103714 (et donc avec quelques annees de retard) afin de   */
                                        /* permettre de rafraichir correctement une image lorsqu'elle a ete masque par quelque chose */
                                        /* et que son affichage avait ete demande avec incrementation des niveaux de la palette...   */

          Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
               Bblock
               DEFV(CHAR,INIT(POINTERc(bit_map_equivalent),CHAINE_UNDEF));
                                        /* Tant que 'X-Window' ne reconnaitra pas les matrices de points, mais uniquement les        */
                                        /* bit-maps en parallele, il faudra cette image intermediaire...                             */

               MISE_EN_FORME_DE_L_IMAGE(image_symetrisee_par_rapport_a_OX,imageA);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette symetrie par rapport        */
                                        /* a l'axe 'OX' ; l'operation prend en compte la 'SUBSTITUTION' courante, et ce afin         */
                                        /* de permettre le fonctionnement correct de 'IXpalette()'...                                */

               Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)
                    Bblock
                    EGAL(bit_map_equivalent,kMalo(DIMENSION_DU_BIT_MAP));
                                        /* Allocation d'un vecteur intermediaire pour la generation des bit-maps en parallele.       */
                    CONVERSION_D_UNE_IMAGE_EN_UN_BITMAP(bit_map_equivalent);
                                        /* Conversion d'une image "standard" en un ensemble de bit-maps "paralleles"...              */
                    CALS_XCreateImage(descripteur_de_l_image
                                     ,description_du_serveur_et_de_l_ecran
                                     ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                     ,NOMBRE_DE_BITS_PAR_POINT
                                     ,XYPixmap
                                     ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                     ,Cara(bit_map_equivalent)
                                     ,DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX),DIMENSION_VERTICALE_DU_BIT_MAP(pasY)
                                     ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                     ,BYTES_PER_LINE_XCreateImage(DIVI(DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX),NBITOC))
                                      );
                                        /* Tant que 'X-Window' ne reconnaitra pas les matrices de points, mais uniquement les        */
                                        /* bit-maps en parallele, il faudra cette image intermediaire...                             */

                    EGAL(BitmapBitOrder(description_du_serveur_et_de_l_ecran),MSBFirst);
                                        /* Et ce afin que les bits soient presentes dans le bon ordre...                             */
                                        /*                                                                                           */
                                        /* Des experiences effectuees le 20030109154236 montrent que cette variable semble etre      */
                                        /* correctement positionnee et vaut implicitement :                                          */
                                        /*                                                                                           */
                                        /*                  LSBFirst (=0)       sur '$LACT15'                                        */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*                  MSBFirst (=1)       sur '$LACT27'                                        */
                                        /*                                                                                           */
                                        /* ce qui est correct. Malgre tout, je ne supprime pas cette sequence car, en effet, nous    */
                                        /* sommes a l'interieur du test 'Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)' qui ne doit     */
                                        /* plus etre utile depuis belle lurette...                                                   */

                    CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                  ,contexte_graphique_de_visualisation
                                  ,descripteur_de_l_image
                                  ,Xmin
                                  ,Ymin
                                        /* Coordonnees de la sous-image (ici l'image entiere) a extraire, dans l'image entiere,      */
                                  ,X_position_centree_de_l_image_dans_la_fenetre
                                  ,fINVERSION_AXE_OY(Y_position_centree_de_l_image_dans_la_fenetre
                                                    ,DIMENSION_VERTICALE_DU_BIT_MAP(pasY)
                                                    ,L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX
                                                     )
                                        /* Position de la sous-image (ici l'image entiere) a extraire, dans la fenetre,              */
                                  ,DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX),DIMENSION_VERTICALE_DU_BIT_MAP(pasY)
                                        /* Dimension de la sous-image (ici l'image entiere) a extraire.                              */
                                   )
                         );
                                        /* Et affichage de l'image...                                                                */
                    Eblock
               ATes
                    Bblock
                    CALS_XCreateImage(descripteur_de_l_image
                                     ,description_du_serveur_et_de_l_ecran
                                     ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                     ,NOMBRE_DE_BITS_PAR_POINT
                                     ,ZPixmap
                                     ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                     ,Cara(image_symetrisee_par_rapport_a_OX)
                                     ,dimX,dimY
                                     ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                     ,BYTES_PER_LINE_XCreateImage(LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES)
                                      );
                                        /* Ca y est, 'X-Window' connait les matrices de points...                                    */

                    CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                  ,contexte_graphique_de_visualisation
                                  ,descripteur_de_l_image
                                  ,Xmin
                                  ,Ymin
                                        /* Coordonnees de la sous-image (ici l'image entiere) a extraire, dans l'image entiere,      */
                                  ,X_position_centree_de_l_image_dans_la_fenetre
                                  ,fINVERSION_AXE_OY(Y_position_centree_de_l_image_dans_la_fenetre
                                                    ,DIMENSION_VERTICALE_DE_L_IMAGE(pasY)
                                                    ,L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX
                                                     )
                                        /* Position de la sous-image (ici l'image entiere) a extraire, dans la fenetre,              */
                                  ,DIMENSION_HORIZONTALE_DE_L_IMAGE(pasX),DIMENSION_VERTICALE_DE_L_IMAGE(pasY)
                                        /* Dimension de la sous-image (ici l'image entiere) a extraire.                              */
                                   )
                         );
                                        /* Et affichage de l'image...                                                                */
                    Eblock
               ETes

               EGAL(ASI1(descripteur_de_l_image,data),None);
                                        /* Ceci est destine a 'XDestroyImage(...)' afin qu'il ne detruise pas l'espace memoire       */
                                        /* occupe par l'image (au cas ou ce dernier aurait ete alloue dynamiquement, ce qui est      */
                                        /* en fait extremement frequent...).                                                         */
               CALS_XDestroyImage(descripteur_de_l_image);
                                        /* Enfin, on libere la structure descriptive de l'image visualisee...                        */

               Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)
                    Bblock
                    CALZ_FreSS(bit_map_equivalent);
                                        /* Liberation du vecteur intermediaire utilise pour la generation des bit-maps en parallele. */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
                                        /* Cas des vraies couleurs :                                                                 */
               DEFV(CHAR,INIT(POINTERc(image_en_vraies_couleurs),CHAINE_UNDEF));
               EGAL(image_en_vraies_couleurs,kMalo(MUL2(dimXY,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)));
                                        /* Allocation d'un vecteur intermediaire pour la generation de l'image en vraies couleurs.   */

               CALS_XCreateImage(descripteur_de_l_image
                                ,description_du_serveur_et_de_l_ecran
                                ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                ,NOMBRE_DE_BITS_PAR_POINT
                                ,ZPixmap
                                ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                ,Cara(image_en_vraies_couleurs)
                                ,dimX,dimY
                                ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                ,BYTES_PER_LINE_XCreateImage(LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES)
                                 );

               CALS(Iconversion_d_une_image_en_fausses_couleurs_en_une_image_en_vraies_couleurs(descripteur_de_l_image
                                                                                               ,imageA
                                                                                               ,imageA_ROUGE
                                                                                               ,imageA_VERTE
                                                                                               ,imageA_BLEUE
                                                                                               ,increment_des_niveaux
                                                                                               ,translater_le_NOIR
                                                                                                )
                    );
                                        /* Conversion de l'image en vraies couleurs.                                                 */

               CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                             ,contexte_graphique_de_visualisation
                             ,descripteur_de_l_image
                             ,Xmin
                             ,Ymin
                                        /* Coordonnees de la sous-image (ici l'image entiere) a extraire, dans l'image entiere,      */
                             ,X_position_centree_de_l_image_dans_la_fenetre
                             ,fINVERSION_AXE_OY(Y_position_centree_de_l_image_dans_la_fenetre
                                               ,DIMENSION_VERTICALE_DE_L_IMAGE(pasY)
                                               ,L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX
                                                )
                                        /* Position de la sous-image (ici l'image entiere) a extraire, dans la fenetre,              */
                             ,DIMENSION_HORIZONTALE_DE_L_IMAGE(pasX),DIMENSION_VERTICALE_DE_L_IMAGE(pasY)
                                        /* Dimension de la sous-image (ici l'image entiere) a extraire.                              */
                              )
                    );
                                        /* Et affichage de l'image...                                                                */

               CALZ_FreSS(image_en_vraies_couleurs);
                                        /* Liberation du vecteur intermediaire pour la generation de l'image en vraies couleurs.     */

               EGAL(ASI1(descripteur_de_l_image,data),None);
                                        /* Afin d'eviter un :                                                                        */
                                        /*                                                                                           */
                                        /*                  Segmentation fault                                                       */
                                        /*                                                                                           */
                                        /* dans le 'XDestroyImage...)' a suivre...                                                   */
               CALS_XDestroyImage(descripteur_de_l_image);
                                        /* Enfin, on libere la structure descriptive de l'image visualisee. Ceci a ete introduit     */
                                        /* le 20170722113356 car, en effet, il manquait...                                           */
               Eblock
          ETes

          Test(EST_VRAI(IXdisplay_____on_peut_revisualiser_l_imageA_courante))
               Bblock
               Test(EST_FAUX(IXdisplay_____imageA_courante_revisualisable))
                                        /* Ce qui suit ne doit etre fait qu'apres le "premier" appel a 'IXdisplay(...)'.             */
                    Bblock
                    PUSH_FILTRAGE;
                    SET_FILTRAGE(INACTIF);
                                        /* Inhition du filtrage et sauvegarde des conditions initiales...                            */

                    Test(EST_VRAI(IXopen_____mettre_X_Window_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs (jusqu'au 20030116181304, c'etait, par erreur, l'indicateur      */
                                        /* 'IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs' qui etait teste ici) :           */
                         Bblock
                         CALi(Imove(IXdisplay_____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...).    */
                         Eblock
                    ATes
                         Bblock
                                        /* Cas des vraies couleurs :                                                                 */
                         CALi(Imove(IXdisplay_____imageA_ROUGE_courante,imageA_ROUGE));
                         CALi(Imove(IXdisplay_____imageA_VERTE_courante,imageA_VERTE));
                         CALi(Imove(IXdisplay_____imageA_BLEUE_courante,imageA_BLEUE));
                                        /* La sauvegarde de l'image en vraies couleurs {ROUGE,VERTE,BLEUE} a ete introduite le       */
                                        /* 20030102101041.                                                                           */
                         Eblock
                    ETes

                    PULL_FILTRAGE;
                                        /* Et restauration des conditions initiales...                                               */

                    EGAL(IXdisplay_____imageA_courante_revisualisable,VRAI);
                                        /* A partir de maintenant, 'imageA' est "revisualisable", mais a condition d'aller ensuite   */
                                        /* dans une fonction du type 'IXattente_d_un_evenement_quelconque(...)'.                     */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               EGAL(IXdisplay_____imageA_courante_revisualisable,FAUX);
                                        /* On ne sait jamais...                                                                      */
               Eblock
          ETes

          EDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image...                    */
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la visualisation de l'image ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

EFonctionIB

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   A V E C   R E I N I T I A L I S A T I O N                      */
/*        A   P R I O R I   D U   D I S P O S T I F   D E   R E A F F I C H A G E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IXdisplay_avec_reinitialisation_du_reaffichage(imageA
                                                                         ,imageA_ROUGE,imageA_VERTE,imageA_BLEUE
                                                                         ,increment_des_niveaux
                                                                         ,translater_le_NOIR
                                                                          )
                 )
     )
                                        /* Fonction introduite le 20101118092254...                                                  */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument en mode 'EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Image Argument en mode 'EST_FAUX(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(Int,increment_des_niveaux));
                                        /* Increment du niveau courant dans [NOIR,BLANC] afin de pouvoir decaler la palette (ce      */
                                        /* qui signifie aussi la faire "tourner").                                                   */
DEFV(Argument,DEFV(Logical,translater_le_NOIR));
                                        /* Indique si le niveau 'NOIR' est translatable ('LE_NOIR_EST_TRANSLATABLE') dans            */
                                        /* 'ACCES_LA_PALETTE_ET_TRANSLATION(...)' ou pas ('LE_NOIR_N_EST_PAS_TRANSLATABLE')...       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     EGAL(IXdisplay_____imageA_courante_revisualisable,FAUX);
                                        /* Afin de forcer la reinitialisation du dispositif de reaffichage...                        */
                                        /*                                                                                           */
                                        /* ATTENTION : il ne faut pas ecrire :                                                       */
                                        /*                                                                                           */
                                        /*                  BSaveModifyVariable(Logical                                              */
                                        /*                                     ,IXdisplay_____imageA_courante_revisualisable         */
                                        /*                                     ,FAUX                                                 */
                                        /*                                      );                                                   */
                                        /*                                                                                           */
                                        /* car sinon, ensuite le 'ESaveModifyVariable' redonnerait la valeur anterieure de           */
                                        /* 'IXdisplay_____imageA_courante_revisualisable' alors qu'il faut que celle-ci reste        */
                                        /* imperativement a 'FAUX' puisque d'autres fonctions peuvent tester cet indicateur au       */
                                        /* retour de 'IXdisplay_avec_reinitialisation_du_reaffichage(...)'.                          */

     CALS(IXdisplay(imageA,imageA_ROUGE,imageA_VERTE,imageA_BLEUE,increment_des_niveaux,translater_le_NOIR));
                                        /* Et affichage de l'image Argument...                                                       */

                                        /* ATTENTION : il ne faut pas ecrire :                                                       */
                                        /*                                                                                           */
                                        /*                  ESaveModifyVariable(Logical                                              */
                                        /*                                     ,IXdisplay_____imageA_courante_revisualisable         */
                                        /*                                      );                                                   */
                                        /*                                                                                           */
                                        /* car sinon, cela a 'IXdisplay_____imageA_courante_revisualisable' sa valeur anterieure     */
                                        /* alors qu'il faut que celle-ci reste imperativement a 'FAUX', d'autres fonctions pouvant   */
                                        /* tester cet indicateur au retour de 'IXdisplay_avec_reinitialisation_du_reaffichage(...)'. */

     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A N I M A T I O N   G R A P H I Q U E   D ' U N E   I M A G E  :                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Fonction :                                                                                                                 */
/*                                                                                                                                   */
/*                    Il est possible de multiplexer                                                                                 */
/*                  matriciellement plusieurs images                                                                                 */
/*                  (et non pas a l'aide de (pasX,pasY))                                                                             */
/*                  sous la forme d'un tableau carre                                                                                 */
/*                  de sous-images. La fonction ci-dessous                                                                           */
/*                  permet de visualiser l'animation                                                                                 */
/*                  correspondante.                                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple 2x2 :                                                                                                              */
/*                                                                                                                                   */
/*                    Supposons un tableau carre                                                                                     */
/*                  de 2x2=4 (carre) images ; celles-ci                                                                              */
/*                  seront disposees ainsi (les numeros                                                                              */
/*                  de 01 a 04 donnant l'ordre d'appa-                                                                               */
/*                  rition temporelle des images) :                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                Y ^                                                                                                                */
/*                  |                                                                                                                */
/*             Ymax |---------                                                                                                       */
/*                  | 03 | 04 |                                                                                                      */
/*                  |----+----|                                                                                                      */
/*                  | 01 | 02 |                                                                                                      */
/*             Ymin o------------->                                                                                                  */
/*                 Xmin     Xmax  X                                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple 4x4 :                                                                                                              */
/*                                                                                                                                   */
/*                    Supposons un tableau carre                                                                                     */
/*                  de 4x4=16 (carre) images ; celles-ci                                                                             */
/*                  seront disposees ainsi (les numeros                                                                              */
/*                  de 01 a 16 donnant l'ordre d'appa-                                                                               */
/*                  rition temporelle des images) :                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                Y ^                                                                                                                */
/*                  |                                                                                                                */
/*             Ymax |-------------------                                                                                             */
/*                  | 13 | 14 | 15 | 16 |                                                                                            */
/*                  |----+----+----+----|                                                                                            */
/*                  | 09 | 10 | 11 | 12 |                                                                                            */
/*                  |----+----+----+----|                                                                                            */
/*                  | 05 | 06 | 07 | 08 |                                                                                            */
/*                  |----+----+----+----|                                                                                            */
/*                  | 01 | 02 | 03 | 04 |                                                                                            */
/*             Ymin o----------------------->                                                                                        */
/*                 Xmin               Xmax  X                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple 8x8 :                                                                                                              */
/*                                                                                                                                   */
/*                    Supposons un tableau carre                                                                                     */
/*                  de 8x8=64 (carre) images ; celles-ci                                                                             */
/*                  seront disposees ainsi (les numeros                                                                              */
/*                  de 01 a 64 donnant l'ordre d'appa-                                                                               */
/*                  rition temporelle des images) :                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                Y ^                                                                                                                */
/*                  |                                                                                                                */
/*             Ymax |---------------------------------------                                                                         */
/*                  | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |                                                                        */
/*                  |----+----+----+----+----+----+----+----|                                                                        */
/*                  | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 |                                                                        */
/*             Ymin o------------------------------------------->                                                                    */
/*                 Xmin                                   Xmax  X                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Enfin, si l'animation est periodique                                                                           */
/*                  il est possible de la diffuser plusieurs                                                                         */
/*                  fois de suite, la derniere image etant                                                                           */
/*                  immediatement suivie de la premiere...                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#    define    PLUS_PETITE_TEMPORISATION_INTER_ANIMATIONS                                                                               \
                         UN                                                                                                             \
                                        /* Plus petite temporisation inter-animations non nulle...                                   */

#    define    Xcentre_TRANSLATE                                                                                                        \
                         ADD2(COXA(MOIT(ASD1(dimension_non_normalisee_de_la_fenetre,dx)))                                               \
                             ,_lDENORMALISE_OX(ASD1(translation_spatiale_courante_des_trames,dx))                                       \
                              )
#    define    Ycentre_TRANSLATE                                                                                                        \
                         ADD2(COYA(MOIT(ASD1(dimension_non_normalisee_de_la_fenetre,dy)))                                               \
                             ,_lDENORMALISE_OY(ASD1(translation_spatiale_courante_des_trames,dy))                                       \
                              )
                                        /* Definition de {Xcentre,Ycentre} apres translation, et ceci lorsque 'centrer_l_animation'. */
                                        /* ATTENTION, on notera que l'on utilise la fonction 'ADD2(...)' et non pas la fonction      */
                                        /* 'SOUS(...)' ce qui fait que si l'on souhaite que la derniere trame affichee apparaisse    */
                                        /* en bas et a gauche, et au premier plan, il faut des translations negatives. Cette         */
                                        /* contrainte influence l'initialisation de 'translation_spatiale_courante_des_trames'...    */
                                        /*                                                                                           */
                                        /* ATTENTION, avant le 20030401183123 c'etait {Xcentre,Ycentre} qui etait utilise alors que  */
                                        /* depuis que les fenetres peuvent etre de taille differente des images, cette solution      */
                                        /* n'est plus correcte...                                                                    */

DEFV(Common,DEFV(FonctionI,IXanimation(imageA
                                      ,imageA_ROUGE
                                      ,imageA_VERTE
                                      ,imageA_BLEUE
                                      ,nombre_de_trames
                                      ,temporisation_inter_trames
                                      ,facteur_de_ralentissement
                                      ,temporisation_inter_animations
                                      ,nombre_de_repetitions
                                      ,centrer_l_animation
                                      ,ARGUMENT_POINTERs(translation_spatiale_entre_deux_trames)
                                      ,mettre_un_fond,ARGUMENT_FACULTATIF(fond_de_la_fenetre)
                                       )
                 )
     )
                                        /* L'argument {imageA_ROUGE,imageA_VERTE,imageA_BLEUE} ont ete introduits le 20030101114234. */

                                        /* Image Argument que l'on veut visualiser sur le bit-map couleur ; celle-ci                 */
                                        /* contient matriciellement un certain nombre de sous-images encore                          */
                                        /* appelees "trames" (elles sont rangees de gauche a droite, puis de haut en                 */
                                        /* bas) :                                                                                    */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument en mode 'EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(image,imageA_ROUGE));
DEFV(Argument,DEFV(image,imageA_VERTE));
DEFV(Argument,DEFV(image,imageA_BLEUE));
                                        /* Image Argument en mode 'EST_FAUX(IXopen_____tenter_X_Window_en_mode_fausses_couleurs)'.   */
DEFV(Argument,DEFV(Positive,nombre_de_trames));
                                        /* Nombre de trames composant l'animation ; cette valeur, pour faciliter                     */
                                        /* les choses doit etre un carre...                                                          */
DEFV(Argument,DEFV(Positive,temporisation_inter_trames));
                                        /* Donne la temporisation entre chaque trame de l'animation ; si celle-ci est                */
                                        /* nulle, il n'y pas d'attente...                                                            */
DEFV(Argument,DEFV(Positive,facteur_de_ralentissement));
                                        /* Donne le nombre de fois que chaque trame sera repetee, ce qui permet de ralentir (dans    */
                                        /* rapport entier) la diffusion des animations...                                            */
DEFV(Argument,DEFV(Positive,temporisation_inter_animations));
                                        /* Donne la temporisation entre chaque animation ; si celle-ci est                           */
                                        /* nulle, il n'y pas d'attente...                                                            */
DEFV(Argument,DEFV(Positive,nombre_de_repetitions));
                                        /* Nombre de fois que l'animation sera repetee.                                              */
DEFV(Argument,DEFV(Logical,centrer_l_animation));
                                        /* Indique s'il faut centrer ('VRAI') ou mettre dans le coin inferieur gauche ('FAUX')       */
                                        /* les images de l'animation...                                                              */
DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_spatiale_entre_deux_trames)));
                                        /* Translation horizontale ('dx') et verticale ('dy') separant deux trames consecutives      */
                                        /* de l'animation. Lorsque celles-ci ne sont pas nulles, cela permet de visualiser l'axe     */
                                        /* du temps comme une troisieme dimension spatiale. On notera un petit defaut contre lequel  */
                                        /* je ne peux rien : en general 'nombre_de_trames' est un nombre pair (4,16,64), ce qui      */
                                        /* fait qu'il n'y a pas de trame "du milieu", et qu'ainsi donc l'ensemble des trames n'est   */
                                        /* pas parfaitement centree par rapport au centre de la fenetre... Enfin, cette possibilite  */
                                        /* n'est offerte que si 'centrer_l_animation' est demandee...                                */
DEFV(Argument,DEFV(Logical,mettre_un_fond));
                                        /* Indique s'il faut mettre ('VRAI') ou pas ('FAUX') un fond derriere l'animation.           */
DEFV(Argument,DEFV(image,fond_de_la_fenetre));
                                        /* Image de Fond mise en arriere plan de l'animation.                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     Test(EST_ACTIF(X11_____liaison_avec_le_serveur))
          Bblock
          DEFV(Positive,INIT(dimension_lineaire,INTE(RACX(nombre_de_trames))));
                                        /* Definition de la dimension lineaire, c'est-a-dire du nombre de sous-                      */
                                        /* images contenues dans 'imageA'.                                                           */

          Test(IFNE(nombre_de_trames,EXP2(dimension_lineaire)))
               Bblock
               PRINT_ERREUR("le nombre de trames n'est pas un carre");
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IZEQ(facteur_de_ralentissement))
               Bblock
               PRINT_ERREUR("le facteur de ralentissment est nul, l'animation ne sera pas visible");
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IFET(IFEQ(pasX,PasX),IFEQ(pasY,PasY)))
               Bblock
               BDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image ; on notera que       */
                                        /* meme si 'BUG_SYSTEME_X_WINDOW_IMAGE_2' n'existe plus, cette image subsiste afin de faire  */
                                        /* une adaptation a la palette, c'est pourquoi elle est toujours la...                       */

               DEFV(Positive,INIT(dimX_des_trames,UNDEF));
                                        /* Dimension horizontale des sous-images (ou trames),                                        */
               DEFV(Positive,INIT(dimY_des_trames,UNDEF));
                                        /* Dimension verticale des sous-images (ou trames),                                          */
               DEFV(deltaF_2D,translation_spatiale_courante_des_trames);
                                        /* Translation horizontale ('dx') et verticale ('dy') courante des trames par rapport au     */
                                        /* centre de la fenetre lorsque 'centrer_l_animation' est demande...                         */

               DEFV(CHAR,INIT(POINTERc(bit_map_equivalent),CHAINE_UNDEF));
                                        /* Tant que 'X-Window' ne reconnaitra pas les matrices de points, mais uniquement les        */
                                        /* bit-maps en parallele, il faudra cette image intermediaire, utile uniquement si           */
                                        /* 'EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)'.                       */
               DEFV(CHAR,INIT(POINTERc(animation_en_vraies_couleurs),CHAINE_UNDEF));
                                        /* Definition d'un vecteur intermediaire pour la generation de l'image en vraies couleurs    */
                                        /* utile uniquement si 'EST_FAUX(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs)'.   */

               Test(IL_FAUT(mettre_un_fond))
                    Bblock
                    Test(IL_FAUT(editer_les_PRINT_ATTENTION_ulterieurs))
                         Bblock
                         Test(EST_VRAI(IXopen_____tenter_X_Window_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
                              Bblock
                              Eblock
                         ATes
                                        /* Cas des vraies couleurs :                                                                 */
                              Bblock
                              PRINT_ATTENTION("en mode 'VRAIES COULEURS' la mise d'un fond se fait en NOIR et BLANC");
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    CALS(IXdisplay(fond_de_la_fenetre
                                  ,fond_de_la_fenetre
                                  ,fond_de_la_fenetre
                                  ,fond_de_la_fenetre
                                  ,INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay
                                  ,TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay
                                   )
                         );
                                        /* Mise en place du decor. On notera que le 20030101172647 j'ai ajoute un triplet            */
                                        /* necessaire a la visualisation en vraies couleurs et qui est fait de trois images          */
                                        /* identiques (ce qui fera du noir et blanc...) car, en effet, je ne sais pas quoi           */
                                        /* faire d'autre...                                                                          */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
                    Bblock
                    MISE_EN_FORME_DE_L_IMAGE(image_symetrisee_par_rapport_a_OX,imageA);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette symetrie par rapport        */
                                        /* a l'axe 'OX' ; l'operation prend en compte la 'SUBSTITUTION' courante, et ce afin         */
                                        /* de permettre le fonctionnement correct de 'IXpalette()'...                                */

                    Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)
                         Bblock
                         EGAL(bit_map_equivalent,kMalo(DIMENSION_DU_BIT_MAP));
                                        /* Allocation d'un vecteur intermediaire pour la generation des bit-maps en parallele.       */
                         CONVERSION_D_UNE_IMAGE_EN_UN_BITMAP(bit_map_equivalent);
                                        /* Conversion d'une image "standard" en un ensemble de bit-maps "paralleles"...              */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                                        /* Cas des vraies couleurs :                                                                 */
                    EGAL(animation_en_vraies_couleurs,kMalo(MUL2(dimXY,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)));
                                        /* Allocation d'un vecteur intermediaire pour la generation de l'image en vraies couleurs.   */

                    CALS_XCreateImage(descripteur_de_l_image
                                     ,description_du_serveur_et_de_l_ecran
                                     ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                     ,NOMBRE_DE_BITS_PAR_POINT
                                     ,ZPixmap
                                     ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                     ,Cara(animation_en_vraies_couleurs)
                                     ,dimX,dimY
                                     ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                     ,BYTES_PER_LINE_XCreateImage(LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES)
                                      );

#    define    INCREMENT_DES_NIVEAUX_PAR_DEFAUT                                                                                         \
                         INCREMENT_DES_NIVEAUX_PAR_DEFAUT_DE_IXdisplay
#    define    TRANSLATER_LE_NOIR_PAR_DEFAUT                                                                                            \
                         TRANSLATER_LE_NOIR_PAR_DEFAUT_DE_IXdisplay
                                        /* Pour raccourcir les lignes qui suivent...                                                 */

                    CALS(Iconversion_d_une_image_en_fausses_couleurs_en_une_image_en_vraies_couleurs(descripteur_de_l_image
                                                                                                    ,imageA
                                                                                                    ,imageA_ROUGE
                                                                                                    ,imageA_VERTE
                                                                                                    ,imageA_BLEUE
                                                                                                    ,INCREMENT_DES_NIVEAUX_PAR_DEFAUT
                                                                                                    ,TRANSLATER_LE_NOIR_PAR_DEFAUT
                                                                                                     )
                         );
                                        /* Conversion de l'image en vraies couleurs.                                                 */

#    undef     TRANSLATER_LE_NOIR_PAR_DEFAUT
#    undef     INCREMENT_DES_NIVEAUX_PAR_DEFAUT

                    Eblock
               ETes

               EGAL(dimX_des_trames,QUOD(dimX,dimension_lineaire));
                                        /* Dimension horizontale des sous-images (ou trames),                                        */
               EGAL(dimY_des_trames,QUOD(dimY,dimension_lineaire));
                                        /* Dimension verticale des sous-images (ou trames),                                          */

               Repe(nombre_de_repetitions)
                    Bblock
                    INITIALISATION_ACCROISSEMENT_2D(translation_spatiale_courante_des_trames
                                                   ,NEGA(MUL2(MOIT(nombre_de_trames)
                                                             ,ASI1(translation_spatiale_entre_deux_trames,dx)
                                                              )
                                                         )
                                                   ,NEGA(MUL2(MOIT(nombre_de_trames)
                                                             ,ASI1(translation_spatiale_entre_deux_trames,dy)
                                                              )
                                                         )
                                                    );
                                        /* Initialisation du decalage spatial des trames entre-elles... ATTENTION, on notera que     */
                                        /* l'on utilise la fonction 'NEGA(...)' et non pas la fonction 'NEUT(...)'. Dans ces         */
                                        /* conditions, si l'on souhaite que la derniere trame affichee apparaisse en bas et a        */
                                        /* gauche, et au premier plan, il faut des translations negatives. Cette contrainte          */
                                        /* influence la definition de 'Xcentre_TRANSLATE' et de 'Ycentre_TRANSLATE'...               */

                    begin_colonneQ(DoIn,Ymin,LIMITATION_VERTICALE(Ymax,dimension_lineaire),dimY_des_trames)
                         Bblock
                         begin_ligneQ(DoIn,Xmin,LIMITATION_HORIZONTALE(Xmax,dimension_lineaire),dimX_des_trames)
                              Bblock
                              Repe(facteur_de_ralentissement)
                                   Bblock

                                   Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
                                        Bblock
                                        Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)
                                             Bblock
                                             CALS_XCreateImage(descripteur_de_l_image
                                                              ,description_du_serveur_et_de_l_ecran
                                                              ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                                              ,NOMBRE_DE_BITS_PAR_POINT
                                                              ,XYPixmap
                                                              ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                                              ,Cara(bit_map_equivalent)
                                                              ,DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX_global)
                                                              ,DIMENSION_VERTICALE_DU_BIT_MAP(pasY_global)
                                                              ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                                              ,BYTES_PER_LINE_XCreateImage
                                                                   (DIVI(DIMENSION_HORIZONTALE_DU_BIT_MAP(pasX_global)
                                                                        ,NBITOC
                                                                         )
                                                                    )
                                                               );
                                        /* Allocation d'une image intermediaire pour la generation des bit-maps en parallele.        */

#    define    X_position_centree_de_l_image                                                                                            \
                         X_position_centree_de_l_image_dans_la_fenetre
#    define    Y_position_centree_de_l_image                                                                                            \
                         Y_position_centree_de_l_image_dans_la_fenetre
                                        /* Pour reduire la longueur des lignes suivantes...                                          */

                                             CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                                           ,contexte_graphique_de_visualisation
                                                           ,descripteur_de_l_image
                                                           ,COXA(REDUCTION_HORIZONTALE(COXR(X)
                                                                                      ,pasX_global
                                                                                       )
                                                                 )
                                                           ,COYA(REDUCTION_VERTICALE(COYR(iINVERSION_AXE_OY(Y
                                                                                                           ,dimY_des_trames
                                                                                                           ,dimension_lineaire
                                                                                                            )
                                                                                          )
                                                                                    ,pasY_global
                                                                                     )
                                                                 )
                                        /* Coordonnees de la sous-image a extraire, dans l'image entiere,                            */
                                                           ,COXA(REDUCTION_HORIZONTALE(COXR(COND(IL_FAUT(centrer_l_animation)
                                                                                                ,SOUS(Xcentre_TRANSLATE
                                                                                                     ,MOIT(dimX_des_trames)
                                                                                                      )
                                                                                                ,X_position_centree_de_l_image
                                                                                                 )
                                                                                            )
                                                                                      ,pasX_global
                                                                                       )
                                                                 )
                                                           ,fINVERSION_AXE_OY
                                                                (COYA(REDUCTION_VERTICALE(COYR(COND(IL_FAUT(centrer_l_animation)
                                                                                                   ,SOUS(Ycentre_TRANSLATE
                                                                                                        ,MOIT(dimY_des_trames)
                                                                                                         )
                                                                                                   ,Y_position_centree_de_l_image
                                                                                                    )
                                                                                               )
                                                                                         ,pasY_global
                                                                                          )
                                                                      )
                                                                ,REDUCTION_VERTICALE(dimY_des_trames
                                                                                    ,pasY_global
                                                                                     )
                                                                ,dimension_lineaire
                                                                 )
                                        /* Position de la sous-image a extraire, dans la fenetre,                                    */
                                                           ,REDUCTION_HORIZONTALE(dimX_des_trames,pasX_global)
                                                           ,REDUCTION_VERTICALE(dimY_des_trames,pasY_global)
                                        /* Dimension de la sous-image a extraire.                                                    */
                                                            )
                                                  );
                                        /* Et affichage de la sous-image, mais on notera bien l'inversion de l'axe 'OY' fait         */
                                        /* avec 'COYA(SOUS(SOUS(dimY,COYR(Y)),dimY_des_trames))'...                                  */

#    undef     Y_position_centree_de_l_image
#    undef     X_position_centree_de_l_image

                                             CALS_XDestroyImage(descripteur_de_l_image);
                                        /* Enfin, on libere la structure descriptive de l'image visualisee. Ceci a ete introduit     */
                                        /* le 20170722133825 car, en effet, cela semblait manquer...                                 */
                                             Eblock
                                        ATes
                                             Bblock
                                             CALS_XCreateImage(descripteur_de_l_image
                                                              ,description_du_serveur_et_de_l_ecran
                                                              ,APPARENCE_VISUELLE_DE_LA_FENETRE
                                                              ,NOMBRE_DE_BITS_PAR_POINT
                                                              ,ZPixmap
                                                              ,DECALAGE_DES_POINTS_SUR_LES_LIGNES
                                                              ,Cara(image_symetrisee_par_rapport_a_OX)
                                                              ,dimX
                                                              ,dimY
                                                              ,MULTIPLICITE_DES_LIGNES_DES_BITMAPS
                                                              ,BYTES_PER_LINE_XCreateImage(LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES)
                                                               );
                                        /* Ca y est, 'X-Window' connait les matrices de points...                                    */
                                             CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                                           ,contexte_graphique_de_visualisation
                                                           ,descripteur_de_l_image
                                                           ,X
                                                           ,iINVERSION_AXE_OY(Y,dimY_des_trames,dimension_lineaire)
                                        /* Coordonnees de la sous-image a extraire, dans l'image entiere,                            */
                                                           ,COND(IL_FAUT(centrer_l_animation)
                                                                ,SOUS(Xcentre_TRANSLATE
                                                                     ,MOIT(dimX_des_trames)
                                                                      )
                                                                ,X_position_centree_de_l_image_dans_la_fenetre
                                                                 )
                                                           ,fINVERSION_AXE_OY(COND(IL_FAUT(centrer_l_animation)
                                                                                  ,SOUS(Ycentre_TRANSLATE
                                                                                       ,MOIT(dimY_des_trames)
                                                                                        )
                                                                                  ,Y_position_centree_de_l_image_dans_la_fenetre
                                                                                   )
                                                                             ,dimY_des_trames
                                                                             ,dimension_lineaire
                                                                              )
                                        /* Position de la sous-image a extraire, dans la fenetre,                                    */
                                                           ,dimX_des_trames
                                                           ,dimY_des_trames
                                        /* Dimension de la sous-image a extraire.                                                    */
                                                            )
                                                  );
                                        /* Et affichage de la sous-image, mais on notera bien l'inversion de l'axe 'OY' fait         */
                                        /* avec 'COYA(SOUS(SOUS(dimY,COYR(Y)),dimY_des_trames))'...                                  */

                                             EGAL(ASI1(descripteur_de_l_image,data),None);
                                        /* Ceci est destine a 'XDestroyImage(...)' afin qu'il ne detruise pas l'espace memoire       */
                                        /* occupe par l'image (au cas ou ce dernier aurait ete alloue dynamiquement, ce qui est      */
                                        /* en fait extremement frequent...).                                                         */
                                             CALS_XDestroyImage(descripteur_de_l_image);
                                        /* Enfin, on libere la structure descriptive de l'image visualisee...                        */
                                             Eblock
                                        ETes
                                        Eblock
                                   ATes
                                        Bblock
                                        /* Cas des vraies couleurs :                                                                 */
                                        CALS(XPutImage(description_du_serveur_et_de_l_ecran,X11_____fenetre_courante
                                                      ,contexte_graphique_de_visualisation
                                                      ,descripteur_de_l_image
                                                      ,X
                                                      ,iINVERSION_AXE_OY(Y,dimY_des_trames,dimension_lineaire)
                                        /* Coordonnees de la sous-image a extraire, dans l'image entiere,                            */
                                                      ,COND(IL_FAUT(centrer_l_animation)
                                                           ,SOUS(Xcentre_TRANSLATE
                                                                ,MOIT(dimX_des_trames)
                                                                 )
                                                           ,X_position_centree_de_l_image_dans_la_fenetre
                                                            )
                                                      ,fINVERSION_AXE_OY(COND(IL_FAUT(centrer_l_animation)
                                                                             ,SOUS(Ycentre_TRANSLATE
                                                                                  ,MOIT(dimY_des_trames)
                                                                                   )
                                                                             ,Y_position_centree_de_l_image_dans_la_fenetre
                                                                              )
                                                                        ,dimY_des_trames
                                                                        ,dimension_lineaire
                                                                         )
                                        /* Position de la sous-image a extraire, dans la fenetre,                                    */
                                                      ,dimX_des_trames
                                                      ,dimY_des_trames
                                        /* Dimension de la sous-image a extraire.                                                    */
                                                       )
                                             );
                                        /* Et affichage de la sous-image, mais on notera bien l'inversion de l'axe 'OY' fait         */
                                        /* avec 'COYA(SOUS(SOUS(dimY,COYR(Y)),dimY_des_trames))'...                                  */
                                        Eblock
                                   ETes

                                   Test(IFET(IFEQ(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
                                            ,IFET(IFEQ(X,Xmin),IFEQ(Y,Ymin))
                                             )
                                        )
                                        Bblock
                                        DODO(temporisation_inter_animations);
                                        /* Attente eventuelle apres la premiere image de chaque animation, et ce afin d'avoir        */
                                        /* le temps de la regarder ; le controle de ce 'DODO' est fait par la meme variable          */
                                        /* ('temporisation_inter_animations') que le 'DODO' apres chaque animation... Enfin, on      */
                                        /* notera qu'autrefois il y avait :                                                          */
                                        /*                                                                                           */
                                        /*                  DODO(COND(IFLE(temporisation_inter_animations                            */
                                        /*                                ,MUL2(facteur_de_ralentissement                            */
                                        /*                                     ,PLUS_PETITE_TEMPORISATION_INTER_ANIMATIONS           */
                                        /*                                      )                                                    */
                                        /*                                 )                                                         */
                                        /*                           ,MIN2(temporisation_inter_animations                            */
                                        /*                                ,PLUS_PETITE_TEMPORISATION_INTER_ANIMATIONS                */
                                        /*                                 )                                                         */
                                        /*                           ,DIVI(temporisation_inter_animations,facteur_de_ralentissement) */
                                        /*                            )                                                              */
                                        /*                       );                                                                  */
                                        /*                                                                                           */
                                        /* mais qu'etant a l'interieur d'un 'Repe(...)', ce 'DODO(...)' etait lui aussi repete...    */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes

                                   DODO(temporisation_inter_trames);
                                        /* Attente eventuelle apres chaque trame de l'animation ; on notera que pour la premiere     */
                                        /* image (Xmin,Ymin), on peut donc attendre deux fois de suite (on procede ainsi pour ne     */
                                        /* avoir a compliquer inutilement le test ci-dessus, et prendre en compte tous les cas).     */
                                   Eblock
                              ERep

                              INITIALISATION_ACCROISSEMENT_2D(translation_spatiale_courante_des_trames
                                                             ,ADD2(ASD1(translation_spatiale_courante_des_trames,dx)
                                                                  ,ASI1(translation_spatiale_entre_deux_trames,dx)
                                                                   )
                                                             ,ADD2(ASD1(translation_spatiale_courante_des_trames,dy)
                                                                  ,ASI1(translation_spatiale_entre_deux_trames,dy)
                                                                   )
                                                              );
                                        /* Mise a jour du decalage spatial des trames entre-elles...                                 */
                              Eblock
                         end_ligneQ(EDoI)
                         Eblock
                    end_colonneQ(EDoI)

                    DODO(temporisation_inter_animations);
                                        /* Attente eventuelle apres chaque animation...                                              */
                    Eblock
               ERep

               Test(EST_VRAI(IXopen_____X_Window_a_ete_mis_en_mode_fausses_couleurs))
                                        /* Cas des fausses couleurs :                                                                */
                    Bblock
                    Test(IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP)
                         Bblock
                         CALZ_FreSS(bit_map_equivalent);
                                        /* Liberation du vecteur intermediaire utilise pour la generation des bit-maps en parallele. */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                                        /* Cas des vraies couleurs :                                                                 */
                    EGAL(ASI1(descripteur_de_l_image,data),None);
                                        /* Ceci est destine a 'XDestroyImage(...)' afin qu'il ne detruise pas l'espace memoire       */
                                        /* occupe par l'image (au cas ou ce dernier aurait ete alloue dynamiquement, ce qui est      */
                                        /* en fait extremement frequent...).                                                         */

                    CALS_XDestroyImage(descripteur_de_l_image);
                                        /* Enfin, on libere la structure descriptive de l'image visualisee...                        */
                    CALZ_FreSS(animation_en_vraies_couleurs);
                                        /* Liberation du vecteur intermediaire pour la generation de l'image en vraies couleurs.     */
                    Eblock
               ETes

               EDEFV(image,image_symetrisee_par_rapport_a_OX);
                                        /* Malheureusement, l'axe 'OY' de 'X-Window' descend, d'ou cette image ; on notera que       */
                                        /* meme si 'BUG_SYSTEME_X_WINDOW_IMAGE_2' n'existe plus, cette image subsiste afin de faire  */
                                        /* une adaptation a la palette, c'est pourquoi elle est toujours la...                       */
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("l'animation de sequences demande les pas de base (PasX,PasY)");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("la visualisation de l'image ne peut avoir lieu car la liaison avec le serveur 'X-Window' n'est pas active");
          Eblock
     ETes

     RETU_ERROR;
     Eblock

#    undef     Xcentre_TRANSLATE
#    undef     Ycentre_TRANSLATE

#    undef     PLUS_PETITE_TEMPORISATION_INTER_ANIMATIONS

EFonctionI

#    undef     iINVERSION_AXE_OY
#    undef     fINVERSION_AXE_OY

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_2
#         undef     _INVERSION_AXE_OY
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2
#         undef     _INVERSION_AXE_OY
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2

#    undef     LIMITATION_VERTICALE
#    undef     LIMITATION_HORIZONTALE
#    undef     L_IMAGE_N_EST_PAS_DECOUPEE_EN_MORCEAUX
#    undef     CONVERSION_D_UNE_IMAGE_EN_UN_BITMAP
#    undef     NETTOYAGE_DE_L_image_symetrisee_par_rapport_a_OX

#    ifdef     BUG_SYSTEME_X_WINDOW_IMAGE_2
#         undef     MISE_EN_FORME_DE_L_IMAGE
#    Aifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2
#         undef     MISE_EN_FORME_DE_L_IMAGE
#    Eifdef    BUG_SYSTEME_X_WINDOW_IMAGE_2

#    undef     X_IL_Y_A_ERREUR
#    undef     DECALAGE_DES_POINTS_SUR_LES_LIGNES

#    if        (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )
#         undef     EPAISSEUR_DU_BORD_DES_FENETRES
#    Aif       (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )
#         undef     EPAISSEUR_DU_BORD_DES_FENETRES
#    Eif       (         (defined(BUG_SYSTEME_SG_X_WINDOW_BORDER_1))                                                                    \
                )

#    undef     PALETTE_DE_COULEURS_UTILISEE
#    undef     VISUAL_SATISFAISANT_A_UTILISER
#    undef     PALETTE_DE_COULEURS_PAR_DEFAUT
#    undef     NOMBRE_MAXIMAL_DE_COULEURS_ACCESSIBLES
#    undef     TYPE_DU_COLORIAGE_COURANT

#    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#         undef     APPARENCE_VISUELLE_DE_LA_FENETRE
#    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )
#         undef     APPARENCE_VISUELLE_DE_LA_FENETRE
#    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
               ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                              \
               ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                             \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                             \
               ||        (defined(SYSTEME_DECALPHA340_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA350_OSF1))                                                                            \
               ||        (defined(SYSTEME_DECALPHA464_OSF1))                                                                            \
               ||        (defined(SYSTEME_ES9000_AIX))                                                                                  \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX))                                                                           \
               ||        (defined(SYSTEME_FX40_CONCENTRIX))                                                                             \
               ||        (defined(SYSTEME_NWS3000_NEWSOS))                                                                              \
               ||        (defined(SYSTEME_RS6000_AIX))                                                                                  \
               ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                \
               ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                             \
               ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                               \
               ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND308_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND324_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND408_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND424_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND508_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND524_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND808_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND824_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO25224_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                               \
               ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                               \
               ||        (defined(SYSTEME_SUN3_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4_SUNOS))                                                                                  \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS))                                                                           \
               ||        (defined(SYSTEME_VAX8600_ULTRIX))                                                                              \
               ||        (defined(SYSTEME_VAX9000_ULTRIX))                                                                              \
                )

#    undef     RACINE_DU_SYSTEME_HIERARCHIQUE_DE_FENETRES

#    undef     LARGEUR_DE_L_ECRAN
#    undef     HAUTEUR_DE_L_ECRAN
#    undef     EPAISSEUR_DES_BORDURES_DE_FENETRES

#    undef     VRAI_NIVEAU_DE_NOIR_DE_L_ECRAN
#    undef     VRAI_NIVEAU_DE_BLANC_DE_L_ECRAN
#    undef     NIVEAU_DU_BLANC_DE_L_ECRAN
#    undef     NIVEAU_DU_NOIR_DE_L_ECRAN
#    undef     MASQUE_D_UN_POINT
#    undef     NOMBRE_EFFECTIF_DE_BITS_PAR_POINT
#    undef     NOMBRE_DE_BITS_PAR_POINT
#    undef     ECRAN_UTILISE
%    undef     ACCES_AUX_PALETTES_DE_COULEURS_VERSION_03
%    undef     ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02
%    undef     ACCES_AUX_PALETTES_DE_COULEURS_VERSION_02_TEST_DU_SERVEUR_X_WINDOW
%    undef     ACCES_AUX_PALETTES_DE_COULEURS_VERSION_01
#    undef     Xliberation
#    undef     DIMENSION_VERTICALE_DE_L_IMAGE
#    undef     DIMENSION_HORIZONTALE_DE_L_IMAGE
#    undef     DIMENSION_DU_BIT_MAP
#    undef     DIMENSION_VERTICALE_DU_BIT_MAP
#    undef     DIMENSION_HORIZONTALE_DU_BIT_MAP
#    undef     REDUCTION_VERTICALE
#    undef     REDUCTION_HORIZONTALE
#    undef     IL_FAUT_UNE_CONVERSION_EN_UN_BIT_MAP

#    if        (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )
                                        /* Introduit le 20120226083215...                                                            */
#         undef     BYTES_PER_LINE_XCreateImage
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )
#         undef     BYTES_PER_LINE_XCreateImage
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_1))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_1))                                                 \
                )

#    if        (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )
                                        /* Introduit le 20120226083215...                                                            */
#         undef     AMELIORATION_XCreateImage_3
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )
#         undef     AMELIORATION_XCreateImage_3
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_3))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_3))                                                 \
                )

#    if        (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )
                                        /* Introduit le 20120226083215...                                                            */
#         undef     CALS_XCreateImage
#         undef     CALS_XDestroyImage
#    Aif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )
#         undef     CALS_XCreateImage
#         undef     CALS_XDestroyImage
#    Eif       (         (defined(BUG_SYSTEME_APC_LinuxRedHat_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUbuntu_X_WINDOW_XCreateImage_2))                                                 \
               ||        (defined(BUG_SYSTEME_APC_LinuxUlmint_X_WINDOW_XCreateImage_2))                                                 \
                )

#    undef     MULTIPLICITE_DES_LIGNES_DES_BITMAPS
#    undef     LONGUEUR_EN_OCTETS_DES_LIGNES_D_IMAGES

#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW         /* Common,DEFV(Fonction,) : sous X-Window compiler la bibliotheque.      */
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_X_WINDOW         /* Common,DEFV(Fonction,) : sous X-Window compiler la bibliotheque.      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P A C T A G E   D ' U N E   P A L E T T E  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

#define   PAS_DU_FACTEUR_DE_REDUCTION                                                                                                   \
                    FLOT(INVE(FLOT(COULEURS)))                                                                                          \
                                        /* Pas du facteur de reduction ; avec cette valeur, on garantit de trouver quelque           */ \
                                        /* chose de convenable...                                                                    */
#define   REDUCTION_DU_FACTEUR_DE_REDUCTION                                                                                             \
                    DECR(facteur_de_reduction,PAS_DU_FACTEUR_DE_REDUCTION);                                                             \
                                        /* Reduction du facteur de reduction...                                                      */
#define   REDUCTION_D_UNE_COMPOSANTE_RVB(niveau,composante)                                                                             \
                    fINTE(MUL2(facteur_de_reduction                                                                                     \
                              ,FLOT(NIVR(ACCES_listes_de_substitution(L_SUBSTITUTION`composante,niveau)))                               \
                               )                                                                                                        \
                          )                                                                                                             \
                                        /* Reduction d'un niveau de gris ; on notera le 'INTE' qui est destine a assurer la          */ \
                                        /* coincidence, pour des valeurs de plus en plus petite de 'facteur_de_reduction', de        */ \
                                        /* polynomes 'RVB'; la composante 'ROUGE', 'VERTE' ou 'BLEUE' est definie par 'composante'.  */

DEFV(Common,DEFV(FonctionI,Icompactage_d_une_palette(nombre_maximal_de_couleurs_demande)))
DEFV(Argument,DEFV(Positive,nombre_maximal_de_couleurs_demande));
                                        /* Nombre maximum de couleurs auquel on souhaite se ramener ; il y a un autre Argument       */
                                        /* "cache" : il s'agit des trois listes de substitution (ROUGE,VERTE,BLEUE). Le Resultat     */
                                        /* sera la liste de substitution 'VARIABLE' indiquant les substitutions permettant donc      */
                                        /* de compacter la palette (ROUGE,VERTE,BLEUE)...                                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     DEFV(Positive,INIT(nombre_d_entrees_necessaires,COULEURS));
                                        /* Nombre courant d'entrees necessaires dans la palette (ROUGE,VERTE,BLEUE) ; ce nombre      */
                                        /* doit etre inferieur ou egal a l'Argument 'nombre_maximal_de_couleurs_demande'.            */
     DEFV(Float,DTb1(valeur_des_polynomes_RVB,COULEURS));
                                        /* A chaque entree de la palette (ROUGE,VERTE,BLEUE), on associe un polynome du type :       */
                                        /*                                                                                           */
                                        /*                                     2                      1                      0       */
                                        /*                  (alpha.nR).COULEURS  + (alpha.nV).COULEURS  + (alpha.nB).COULEURS        */
                                        /*                                                                                           */
                                        /* ou :                                                                                      */
                                        /*                                                                                           */
                                        /*                  alpha E [0,1],                                                           */
                                        /*                                                                                           */
                                        /* ce polynome permettant de tester la proximite reciproque des entrees entre elles.         */
     DEFV(Float,INIT(facteur_de_reduction,FU));
                                        /* Facteur de reduction de calcul des polynomes 'RVB' (il est appele 'alpha' ci-dessus).     */
     DEFV(Logical,DTb1(etat_des_polynomes_RVB,COULEURS));
                                        /* Cette liste indique si les polynomes correspondants sont 'ACTIF's (etat initial), ou      */
                                        /* bien 'INACTIF', ce qui signifie qu'on leur a trouve une autre entree ayant le meme        */
                                        /* polynome : il y a donc eu pour eux compactage...                                          */
     /*..............................................................................................................................*/
                                        /* On notera que l'on n'initialise pas les listes de substitution a priori, et a l'aide      */
                                        /* de 'INITIALISATION_LISTES_DE_SUBSTITUTION', car en effet, cela aurait pour facheux effet  */
                                        /* de reinitialiser les listes (ROUGE,VERTE,BLEUE) ; enfin, il faut supposer que tout est    */
                                        /* bon lorsque l'on arrive ici...                                                            */
     Test(IZGT(nombre_maximal_de_couleurs_demande))
          Bblock
          Tant(IFET(IFGT(nombre_d_entrees_necessaires,nombre_maximal_de_couleurs_demande)
                   ,IZGT(facteur_de_reduction)
                    )
               )
               Bblock
               EGAL(nombre_d_entrees_necessaires,COULEURS);
                                        /* A prior, il faut 'COULEURS' entrees...                                                    */
               BoIn(index,NOIR,BLANC,PAS_COULEURS)
                    Bblock
                    EGAL(ACCES_listes_de_substitution(L_SUBSTITUTION_VARIABLE,index),fonction_neutre_de_substitution(index));
                                        /* On reinitialise la liste de substitution 'VARIABLE' avec la fonction 'neutre', et non     */
                                        /* pas avec sa fonction specifique, au cas ou cette derniere ne serait pas neutre...         */
                    Eblock
               EBoI

               BoIn(index,NOIR,BLANC,PAS_COULEURS)
                    Bblock
                    EGAL(ITb1(etat_des_polynomes_RVB,INDX(index,NOIR)),ACTIF);
                                        /* A priori, tous les polynomes 'RVB' sont 'ACTIF's...                                       */
                    EGAL(ITb1(valeur_des_polynomes_RVB,INDX(index,NOIR))
                        ,AXPB(AXPB(REDUCTION_D_UNE_COMPOSANTE_RVB(index,ROUGE)
                                  ,FLOT(COULEURS)
                                  ,REDUCTION_D_UNE_COMPOSANTE_RVB(index,VERTE)
                                   )
                             ,FLOT(COULEURS)
                             ,REDUCTION_D_UNE_COMPOSANTE_RVB(index,BLEUE)
                              )
                         );
                                        /* Calcul des polynomes 'RVB' :                                                              */
                                        /*                                                                                           */
                                        /*                                     2                      1                      0       */
                                        /*                  (alpha.nR).COULEURS  + (alpha.nV).COULEURS  + (alpha.nB).COULEURS        */
                                        /*                                                                                           */
                                        /* ou :                                                                                      */
                                        /*                                                                                           */
                                        /*                  alpha E [0,1],                                                           */
                                        /*                                                                                           */
                    Eblock
               EBoI

               BoIn(index_ACTIF,NOIR,BLANC,PAS_COULEURS)
                    Bblock
                    Test(IFET(EST_ACTIF(ITb1(etat_des_polynomes_RVB,INDX(index_ACTIF,NOIR)))
                             ,IFLE(ADD2(index_ACTIF,PAS_COULEURS),BLANC)
                              )
                         )
                         Bblock
                         BoIn(index_INACTIF,ADD2(index_ACTIF,PAS_COULEURS),BLANC,PAS_COULEURS)
                              Bblock
                              Test(EST_ACTIF(ITb1(etat_des_polynomes_RVB,INDX(index_INACTIF,NOIR))))
                                   Bblock
                                   Test(IFEQ(ITb1(valeur_des_polynomes_RVB,INDX(index_INACTIF,NOIR))
                                            ,ITb1(valeur_des_polynomes_RVB,INDX(index_ACTIF,NOIR))
                                             )
                                        )
                                        Bblock
                                        EGAL(ITb1(etat_des_polynomes_RVB,INDX(index_INACTIF,NOIR)),INACTIF);
                                        /* Le polynome correspondant a l'entree 'index_INACTIF' de la palette de couleurs            */
                                        /* (ROUGE,VERTE,BLEUE) etant egal a l'entree 'index_ACTIF' est rendue inactif, puisqu'il     */
                                        /* il y a "coincidence" pour le 'facteur_de_reduction' courant...                            */
                                        MODIFICATION_LISTE_DE_SUBSTITUTION(index_INACTIF,index_ACTIF);
                                        /* Et on modifie donc la liste de substitution 'VARIABLE' en consequence...                  */
                                        DECR(nombre_d_entrees_necessaires,I);
                                        /* Enfin, on decompte le nombre d'entrees necessaires...                                     */
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         EBoI
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               EBoI

               REDUCTION_DU_FACTEUR_DE_REDUCTION;
                                        /* Et on reduit le facteur de reduction pour l'iteration suivante (si elle a lieu...).       */
               Eblock
          ETan

          Test(IFGT(nombre_d_entrees_necessaires,nombre_maximal_de_couleurs_demande))
               Bblock
               PRINT_ATTENTION("le nombre maximal de couleurs demande n'a pu etre atteint");
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ATTENTION("une palette sans couleurs est demandee, elle est renvoyee 'neutre'");
          Eblock
     ETes

     CLEAR_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_VARIABLE);
                                        /* Initialisation preliminaire a 'NIVEAU_UNDEF' des listes "inverses".                       */
     BoIn(index,NOIR,BLANC,PAS_COULEURS)
          Bblock
          CALCUL_LISTE_INVERSE_DE_SUBSTITUTION(L_SUBSTITUTION_VARIABLE,index);
                                        /* Puis initialisation des listes "directes" et "inverses",                                  */
          EGAL(ACCES_blocage_des_listes_de_substitution(L_SUBSTITUTION_VARIABLE,index),AUTORISE);
                                        /* Ainsi que de la matrice des blocages de modification des listes "directes".               */
          Eblock
     EBoI

     RETU_ERROR;
     Eblock

#undef    REDUCTION_D_UNE_COMPOSANTE_RVB
#undef    REDUCTION_DU_FACTEUR_DE_REDUCTION
#undef    PAS_DU_FACTEUR_DE_REDUCTION

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F I N   D E   P E R M E T T R E   D E S  R E F E R E N C E S   " E N   A V A N T "   D E   ' IXdisplay(...) '  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,IXinitialisation()))
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
                                        /* ATTENTION : 'INIT_ERROR' est mis en tete des variables locales au cas ou des couples      */
                                        /* ('BDEFV','EDEFV') suivraient...                                                           */
     /*..............................................................................................................................*/
     EGAL(pointeur_de_IXdisplay,aFONCTION(IXdisplay));
                                        /* A ce niveau, la fonction 'IXdisplay(...)' est evidemment connue...                        */

     RETU_ERROR;
     Eblock

EFonctionI

_______________________________________________________________________________________________________________________________________



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.