/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   F O R M A T   D E S   I M A G E S   E T   D E S   P I X E L S  :                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiiD/definit.1$DEF' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   I M A G E S   ( ' X ' )  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   k___Xmin                                                                                                                      \
                    COORDONNEE_MINIMALE                                                                                                 \
                                        /* Definition de l'abscisse minimale.                                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Xmin' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Xmax                                                                                                                      \
                    COORDONNEE_MAXIMALE(logX)                                                                                           \
                                        /* Definition de l'abscisse maximale.                                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Xmax' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimX                                                                                                                      \
                    DIMENSION(k___Xmin,k___Xmax)                                                                                        \
                                        /* Definition de la longueur de l'axe horizontal.                                            */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimX' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___PasX                                                                                                                      \
                    PAS_COORDONNEE                                                                                                      \
                                        /* Definition du pas de parcours de l'axe horizontal.                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'PasX' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimX2                                                                                                                     \
                    MOIT(k___dimX)                                                                                                      \
                                        /* Definition de la longueur de la moitie de l'axe horizontal.                               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimX2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Xmin2                                                                                                                     \
                    ADD2(k___Xmin,k___dimX2)                                                                                            \
                                        /* Definition de l'abscisse minimale de [Xmax/2,Xmax].                                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Xmin2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Xmax2                                                                                                                     \
                    PRED(k___Xmin2)                                                                                                     \
                                        /* Definition de l'abscisse maximale de [Xmin,Xmax/2].                                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Xmax2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Xcentre                                                                                                                   \
                    k___Xmin2                                                                                                           \
                                        /* Centre "approximatif" de [Xmin,Xmax].                                                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Xcentre' est pre-generee dans '$xcp/Konstantes$K' dans le cas   */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   I M A G E S   ( ' Y ' )  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   k___Ymin                                                                                                                      \
                    COORDONNEE_MINIMALE                                                                                                 \
                                        /* Definition de l'ordonnee minimale.                                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Ymin' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Ymax                                                                                                                      \
                    COORDONNEE_MAXIMALE(logY)                                                                                           \
                                        /* Definition de l'ordonnee maximale.                                                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Ymax' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimY                                                                                                                      \
                    DIMENSION(k___Ymin,k___Ymax)                                                                                        \
                                        /* Definition de la longueur de l'axe vertical.                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimY' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___PasY                                                                                                                      \
                    PAS_COORDONNEE                                                                                                      \
                                        /* Definition du pas de parcours de l'axe vertical.                                          */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'PasY' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimY2                                                                                                                     \
                    MOIT(k___dimY)                                                                                                      \
                                        /* Definition de la longueur de la moitie de l'axe vertical.                                 */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimY2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Ymin2                                                                                                                     \
                    ADD2(k___Ymin,k___dimY2)                                                                                            \
                                        /* Definition de l'ordonnee minimale de [Ymax/2,Ymax].                                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Ymin2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Ymax2                                                                                                                     \
                    PRED(k___Ymin2)                                                                                                     \
                                        /* Definition de l'ordonnee maximale de [Ymin,Ymax/2].                                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Ymax2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Ycentre                                                                                                                   \
                    k___Ymin2                                                                                                           \
                                        /* Centre "approximatif" de [Ymin,Ymax].                                                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Ycentre' est pre-generee dans '$xcp/Konstantes$K' dans le cas   */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   I M A G E S   ( ' Z ' )  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   k___Zmin                                                                                                                      \
                    MOYE(k___Xmin,k___Ymin)                                                                                             \
                                        /* Definition du 'Z' "minimal",                                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Zmin' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Zmax                                                                                                                      \
                    MOYE(k___Xmax,k___Ymax)                                                                                             \
                                        /* Definition du 'Z' "maximal" par raisons de "symetrie"...                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Zmax' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimZ                                                                                                                      \
                    DIMENSION(k___Zmin,k___Zmax)                                                                                        \
                                        /* Dimension de l'axe 'OZ' (pour le systeme graphique).                                      */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimZ' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___PasZ                                                                                                                      \
                    PAS_COORDONNEE                                                                                                      \
                                        /* Definition du pas de parcours de l'axe 'OZ'.                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'PasZ' est pre-generee dans '$xcp/Konstantes$K' dans le cas      */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimZ2                                                                                                                     \
                    MOIT(k___dimZ)                                                                                                      \
                                        /* Definition de la longueur de la moitie de l'axe de profondeur.                            */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimZ2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Zmin2                                                                                                                     \
                    ADD2(k___Zmin,k___dimZ2)                                                                                            \
                                        /* Definition de la coordonnee minimale de [Zmax/2,Zmax].                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Zmin2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Zmax2                                                                                                                     \
                    PRED(k___Zmin2)                                                                                                     \
                                        /* Definition de la coordonnee maximale de [Zmin,Zmax/2].                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Zmax2' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___Zcentre                                                                                                                   \
                    k___Zmin2                                                                                                           \
                                        /* Centre "approximatif" de [Zmin,Zmax].                                                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'Zcentre' est pre-generee dans '$xcp/Konstantes$K' dans le cas   */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */

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

                                        /* Definitions introduites le 20171219105340...                                              */

#define   k___Tmin                                                                                                                      \
                    NEUT(COORDONNEE_MINIMALE)                                                                                           \
                                        /* Definition de l'abscisse minimale.                                                        */
#define   k___Tmax                                                                                                                      \
                    SUCC(COORDONNEE_MINIMALE)                                                                                           \
                                        /* Definition de l'abscisse maximale.                                                        */
#define   k___dimT                                                                                                                      \
                    DIMENSION(k___Tmin,k___Tmax)                                                                                        \
                                        /* Definition de la longueur de l'axe temporel.                                              */
#define   k___PasT                                                                                                                      \
                    PAS_COORDONNEE                                                                                                      \
                                        /* Definition du pas de parcours de l'axe temporel.                                          */
#define   k___dimT2                                                                                                                     \
                    MOIT(k___dimT)                                                                                                      \
                                        /* Definition de la longueur de la moitie de l'axe temporel.                                 */
#define   k___Tmin2                                                                                                                     \
                    ADD2(k___Tmin,k___dimT2)                                                                                            \
                                        /* Definition de l'abscisse minimale de [Tmax/2,Tmax].                                       */
#define   k___Tmax2                                                                                                                     \
                    PRED(k___Tmin2)                                                                                                     \
                                        /* Definition de l'abscisse maximale de [Tmin,Tmax/2].                                       */
#define   k___Tcentre                                                                                                                   \
                    k___Tmin2                                                                                                           \
                                        /* Centre "approximatif" de [Tmin,Tmax].                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   I M A G E S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   k___MdimXY                                                                                                                    \
                    MAX2(k___dimX,k___dimY)                                                                                             \
                                        /* Plus grande dimension dans l'espace a deux dimensions.                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'MdimXY' est pre-generee dans '$xcp/Konstantes$K' dans le cas    */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___MdimXYZ                                                                                                                   \
                    MAX2(k___MdimXY,k___dimZ)                                                                                           \
                                        /* Plus grande dimension dans l'espace a trois dimensions.                                   */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'MdimXYZ' est pre-generee dans '$xcp/Konstantes$K' dans le cas   */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___MdimXYZT                                                                                                                  \
                    MAX2(k___MdimXYZ,k___dimT)                                                                                          \
                                        /* Plus grande dimension dans l'espace a quatre dimensions.                                  */

#define   k___dimXY                                                                                                                     \
                    MUL2(k___dimX,k___dimY)                                                                                             \
                                        /* Dimension bi-dimensionnelle du carre (OX,OY),                                             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimXY' est pre-generee dans '$xcp/Konstantes$K' dans le cas     */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimXYZ                                                                                                                    \
                    MUL2(k___dimXY,k___dimZ)                                                                                            \
                                        /* Dimension tri-dimensionnelle du cube (OX,OY,OZ).                                          */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'dimXYZ' est pre-generee dans '$xcp/Konstantes$K' dans le cas    */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.                                             */
#define   k___dimXYZT                                                                                                                   \
                    MUL2(k___dimXYZ,k___dimT)                                                                                           \
                                        /* Dimension quadri-dimensionnelle de l'hyper-cube (OX,OY,OZ,OT).                            */

#define   k___PLUS_GRANDE_IMAGE_CARREE_INSCRITE                                                                                         \
                    MIN2(k___dimX,k___dimY)                                                                                             \
                                        /* Definition des dimensions de la plus grande image carree que l'on peut "inscrire"         */ \
                                        /* dans une image "standard" [dimX,dimY].                                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'PLUS_GRANDE_IMAGE_CARREE_INSCRITE' est pre-generee dans         */ \
                                        /* '$xcp/Konstantes$K' dans le cas de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.             */
#define   k___PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE                                                                                     \
                    MAX2(k___dimX,k___dimY)                                                                                             \
                                        /* Definition des dimensions de la plus petite image carree que l'on peut "circonscrire"     */ \
                                        /* autour d'une image "standard" [dimX,dimY].                                                */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE' est pre-generee dans     */ \
                                        /* '$xcp/Konstantes$K' dans le cas de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_01'.             */

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

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#    TestADef  Xmin                                                                                                                     \
                         k___Xmin
#    TestADef  Xmax                                                                                                                     \
                         k___Xmax
#    TestADef  dimX                                                                                                                     \
                         k___dimX
#    TestADef  dimX2                                                                                                                    \
                         k___dimX2
#    TestADef  Xmin2                                                                                                                    \
                         k___Xmin2
#    TestADef  Xmax2                                                                                                                    \
                         k___Xmax2
#    TestADef  Xcentre                                                                                                                  \
                         k___Xcentre

#    TestADef  Ymin                                                                                                                     \
                         k___Ymin
#    TestADef  Ymax                                                                                                                     \
                         k___Ymax
#    TestADef  dimY                                                                                                                     \
                         k___dimY
#    TestADef  dimY2                                                                                                                    \
                         k___dimY2
#    TestADef  Ymin2                                                                                                                    \
                         k___Ymin2
#    TestADef  Ymax2                                                                                                                    \
                         k___Ymax2
#    TestADef  Ycentre                                                                                                                  \
                         k___Ycentre

#    TestADef  Zmin                                                                                                                     \
                         k___Zmin
#    TestADef  Zmax                                                                                                                     \
                         k___Zmax
#    TestADef  dimZ                                                                                                                     \
                         k___dimZ
#    TestADef  dimZ2                                                                                                                    \
                         k___dimZ2
#    TestADef  Zmin2                                                                                                                    \
                         k___Zmin2
#    TestADef  Zmax2                                                                                                                    \
                         k___Zmax2
#    TestADef  Zcentre                                                                                                                  \
                         k___Zcentre

#    TestADef  Tmin                                                                                                                     \
                         k___Tmin
#    TestADef  Tmax                                                                                                                     \
                         k___Tmax
#    TestADef  dimT                                                                                                                     \
                         k___dimT
#    TestADef  dimT2                                                                                                                    \
                         k___dimT2
#    TestADef  Tmin2                                                                                                                    \
                         k___Tmin2
#    TestADef  Tmax2                                                                                                                    \
                         k___Tmax2
#    TestADef  Tcentre                                                                                                                  \
                         k___Tcentre

#    TestADef  MdimXY                                                                                                                   \
                         k___MdimXY
#    TestADef  MdimXYZ                                                                                                                  \
                         k___MdimXYZ
#    TestADef  MdimXYZT                                                                                                                 \
                         k___MdimXYZT

#    TestADef  dimXY                                                                                                                    \
                         k___dimXY
#    TestADef  dimXYZ                                                                                                                   \
                         k___dimXYZ
#    TestADef  dimXYZT                                                                                                                  \
                         k___dimXYZT

#    TestADef  PLUS_GRANDE_IMAGE_CARREE_INSCRITE                                                                                        \
                         k___PLUS_GRANDE_IMAGE_CARREE_INSCRITE
#    TestADef  PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE                                                                                    \
                         k___PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
                                        /* Les variables 'dimX', 'dimY' et 'dimZ' seront definies en 'PASSE_1' dans les fichiers     */
                                        /* '$xiii/Images$STR', '$xiii/Imagess$STR', '$ximt/fourier$FON' et '$ximt/ondelettes$FON'    */
                                        /* afin de traiter le cas des images "statiques...                                           */
=    define    dimX                                                                                                                     \
                         DIMENSION(Xmin,Xmax)
                                        /* Definition de la longueur de l'axe horizontal.                                            */
=    define    dimXN                                                                                                                    \
                         LONGUEUR(dimX)
                                        /* Definition de la longueur de l'axe horizontal compatible '_____?NORMALISE_OX(...)'.       */
                                        /*                                                                                           */
                                        /* ATTENTION, suite a 'v $xiiD/definit.1$DEF 20090928173316' ce qui precede est obsolete...  */
=    define    dimX2                                                                                                                    \
                         MOIT(dimX)
                                        /* Definition de la longueur de la moitie de l'axe horizontal.                               */
=    define    Xmin2                                                                                                                    \
                         ADD2(Xmin,dimX2)
                                        /* Definition de l'abscisse minimale de [Xmax/2,Xmax].                                       */
=    define    Xmax2                                                                                                                    \
                         PRED(Xmin2)
                                        /* Definition de l'abscisse maximale de [Xmin,Xmax/2].                                       */
=    define    Xcentre                                                                                                                  \
                         Xmin2
                                        /* Centre "approximatif" de [Xmin,Xmax].                                                     */

=    define    dimY                                                                                                                     \
                         DIMENSION(Ymin,Ymax)
                                        /* Definition de la longueur de l'axe vertical.                                              */
=    define    dimYN                                                                                                                    \
                         LONGUEUR(dimY)
                                        /* Definition de la longueur de l'axe vertical compatible '_____?NORMALISE_OY(...)'.         */
                                        /*                                                                                           */
                                        /* ATTENTION, suite a 'v $xiiD/definit.1$DEF 20090928173316' ce qui precede est obsolete...  */
=    define    dimY2                                                                                                                    \
                         MOIT(dimY)
                                        /* Definition de la longueur de la moitie de l'axe vertical.                                 */
=    define    Ymin2                                                                                                                    \
                         ADD2(Ymin,dimY2)
                                        /* Definition de l'ordonnee minimale de [Ymax/2,Ymax].                                       */
=    define    Ymax2                                                                                                                    \
                         PRED(Ymin2)
                                        /* Definition de l'ordonnee maximale de [Ymin,Ymax/2].                                       */
=    define    Ycentre                                                                                                                  \
                         Ymin2
                                        /* Centre "approximatif" de [Ymin,Ymax].                                                     */

=    define    dimZ                                                                                                                     \
                         DIMENSION(Zmin,Zmax)
                                        /* Dimension de l'axe 'OZ' (pour le systeme graphique).                                      */
=    define    dimZN                                                                                                                    \
                         LONGUEUR(dimZ)
                                        /* Definition de la longueur de l'axe de profondeur compatible '_____?NORMALISE_OZ(...)'.    */
                                        /*                                                                                           */
                                        /* ATTENTION, suite a 'v $xiiD/definit.1$DEF 20090928173316' ce qui precede est obsolete...  */
=    define    dimZ2                                                                                                                    \
                         MOIT(dimZ)
                                        /* Definition de la longueur de la moitie de l'axe de profondeur.                            */
=    define    Zmin2                                                                                                                    \
                         ADD2(Zmin,dimZ2)
                                        /* Definition de la coordonnee minimale de [Zmax/2,Zmax].                                    */
=    define    Zmax2                                                                                                                    \
                         PRED(Zmin2)
                                        /* Definition de la coordonnee maximale de [Zmin,Zmax/2].                                    */
=    define    Zcentre                                                                                                                  \
                         Zmin2
                                        /* Centre "approximatif" de [Zmin,Zmax].                                                     */

=    define    dimT                                                                                                                     \
                         DIMENSION(Tmin,Tmax)
                                        /* Dimension de l'axe 'OT' (pour le systeme graphique).                                      */
=    define    dimTN                                                                                                                    \
                         LONGUEUR(dimT)
                                        /* Definition de la longueur de l'axe de profondeur...                                       */
=    define    dimT2                                                                                                                    \
                         MOIT(dimT)
                                        /* Definition de la longueur de la moitie de l'axe de profondeur.                            */
=    define    Tmin2                                                                                                                    \
                         ADD2(Tmin,dimT2)
                                        /* Definition de la coordonnee minimale de [Tmax/2,Tmax].                                    */
=    define    Tmax2                                                                                                                    \
                         PRED(Tmin2)
                                        /* Definition de la coordonnee maximale de [Tmin,Tmax/2].                                    */
=    define    Tcentre                                                                                                                  \
                         Tmin2
                                        /* Centre "approximatif" de [Tmin,Tmax].                                                     */

=    define    MdimXY                                                                                                                   \
                         MAX2(dimX,dimY)
                                        /* Plus grande dimension dans l'espace a deux dimensions.                                    */
=    define    MdimXYZ                                                                                                                  \
                         MAX2(MdimXY,dimZ)
                                        /* Plus grande dimension dans l'espace a trois dimensions.                                   */
=    define    MdimXYZT                                                                                                                 \
                         MAX2(MdimXYZ,dimT)
                                        /* Plus grande dimension dans l'espace a quatre dimensions.                                  */

=    define    dimXY                                                                                                                    \
                         MUL2(dimX,dimY)
                                        /* Dimension bi-dimensionnelle du carre (OX,OY),                                             */
=    define    dimXYZ                                                                                                                   \
                         MUL2(dimXY,dimZ)
                                        /* Dimension tri-dimensionnelle du cube (OX,OY,OZ).                                          */
=    define    dimXYZT                                                                                                                  \
                         MUL2(dimXYZ,dimT)
                                        /* Dimension quadri-dimensionnelle de l'hyper-cube (OX,OY,OZ,OT).                            */

=    define    PLUS_GRANDE_IMAGE_CARREE_INSCRITE                                                                                        \
                         MIN2(dimX,dimY)
                                        /* Definition des dimensions de la plus grande image carree que l'on peut "inscrire"         */
                                        /* dans une image "standard" [dimX,dimY].                                                    */
=    define    PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE                                                                                    \
                         MAX2(dimX,dimY)
                                        /* Definition des dimensions de la plus petite image carree que l'on peut "circonscrire"     */
                                        /* autour d'une image "standard" [dimX,dimY].                                                */
#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))                                                                  \
           )

#TestADef PasX                                                                                                                          \
                    k___PasX
#TestADef PasY                                                                                                                          \
                    k___PasY
#TestADef PasZ                                                                                                                          \
                    k___PasZ
#TestADef PasT                                                                                                                          \
                    k___PasT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N T I O N   D E S   M I N I M A   F L O T T A N T S   ( E T   A U T R E S )  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FXmin                                                                                                                         \
                    FZERO
#define   FYmin                                                                                                                         \
                    FZERO
#define   FZmin                                                                                                                         \
                    FZERO
#define   FTmin                                                                                                                         \
                    FZERO
                                        /* 'FZmin' fut introduit pour 'v $xiipf/fonction.2$FON FFload_point_coordonnees_01_____Zf'   */
                                        /* le 20080918211437 ; 'FXmin' et 'FYmin' le furent par symetrie avec 'FZmin'. On notera     */
                                        /* qu'il ne faut pas confondre {FXmin,FYmin,FZmin} avec {FLOT(Xmin),FLOT(Ymin),FLOT(Zmin)}   */
                                        /* (c'est-a-dire a {FXorigine,FYorigine,FZorigine}) qui eux, sont variables et sont egaux    */
                                        /* a {Xmin,Ymin,Zmin}, alors que {FXmin,FYmin,FZmin} sont toujours nuls...                   */

#define   FXmax                                                                                                                         \
                    FU
#define   FYmax                                                                                                                         \
                    FU
#define   FZmax                                                                                                                         \
                    FU
#define   FTmax                                                                                                                         \
                    FU
                                        /* Introduits le 20171212154647 et complete le 20171219112546 avec 'FTmax'...                */

#define   FXmilieu                                                                                                                      \
                    MOYE(FXmin,FXmax)
#define   FYmilieu                                                                                                                      \
                    MOYE(FYmin,FYmax)
#define   FZmilieu                                                                                                                      \
                    MOYE(FZmin,FZmax)
#define   FTmilieu                                                                                                                      \
                    MOYE(FTmin,FTmax)
                                        /* Introduits le 20171212154647 et complete le 20171219112546 avec 'FTmilieu'...             */
                                        /*                                                                                           */
                                        /* ATTENTION : ne pas confondre {FXcentre_____,FYcentre_____,FZcentre_____} et               */
                                        /* {FXmilieu,FYmilieu,FZmilieu}, le premier triplet etant dynamique et lie aux               */
                                        /* definitions {Xcentre,Ycentre,Zcentre}...                                                  */

#define   FXcentre_____                                                                                                                 \
                    FLOT(Xcentre)
#define   FYcentre_____                                                                                                                 \
                    FLOT(Ycentre)
#define   FZcentre_____                                                                                                                 \
                    FLOT(Zcentre)
#define   FTcentre_____                                                                                                                 \
                    FLOT(Tcentre)
                                        /* Introduits le 20120607085854 en notant que la longueur de ces symboles est egale a        */
                                        /* celle de ce qu'ils definissent afin de simplifier leur introduction...                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N T I O N   D U   F O R M A T   " E X T R E M E "   D E S   I M A G E S   " S T A T I Q U E S "  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Dans tous les cas (c'est-a-dire, quel que                                                                      */
/*                  soit 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_??'                                                                   */
/*                  et 'GESTION_DES_IMAGES_STATIQUES_VERSION_??')                                                                    */
/*                  les symboles "KK___..." designent des tailles                                                                    */
/*                  constantes (c'est-a-dire qui ne ne peuvent pas                                                                   */
/*                  changer a l'execution), alors que les symboles                                                                   */
/*                  "K___..." peuvent representer aussi bien des                                                                     */
/*                  tailles constantes que des tailles variables                                                                     */
/*                  (cas de 'GESTION_DES_IMAGES_STATIQUES_VERSION_02').                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

                                        /* "K___..." et "KK___..." ont la meme valeur constante et donnent la taille effective des   */
                                        /* axes des objets de type 'S___<type>' et 'E___S___<type>' pour "K___...", et de type       */
                                        /* 'F___<type>' pour "KK___...".                                                             */

#    define    K___dimX                                                                                                                 \
                         k___dimX                                                                                                       \
                                        /* Extension maximale de l'axe 'OX',                                                         */
#    define    K___dimY                                                                                                                 \
                         k___dimY                                                                                                       \
                                        /* Extension maximale de l'axe 'OY',                                                         */
#    define    K___dimZ                                                                                                                 \
                         k___dimZ                                                                                                       \
                                        /* Extension maximale de l'axe 'OZ'.                                                         */

#    define    KK___dimX                                                                                                                \
                         k___dimX                                                                                                       \
                                        /* Extension maximale de l'axe 'OX' (a cause de 'GESTION_DES_IMAGES_STATIQUES_VERSION_02'),  */
#    define    KK___dimY                                                                                                                \
                         k___dimY                                                                                                       \
                                        /* Extension maximale de l'axe 'OY' (a cause de 'GESTION_DES_IMAGES_STATIQUES_VERSION_02'),  */
#    define    KK___dimZ                                                                                                                \
                         k___dimZ                                                                                                       \
                                        /* Extension maximale de l'axe 'OZ' (a cause de 'GESTION_DES_IMAGES_STATIQUES_VERSION_02').  */
#    define    KK___dimT                                                                                                                \
                         k___dimT                                                                                                       \
                                        /* Extension maximale de l'axe 'OT' (a cause de 'GESTION_DES_IMAGES_STATIQUES_VERSION_02').  */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )

#    if        (         (defined(SYSTEME_NWS3000_NEWSOS)))

#         if        (         (defined(LACT23))                                                                                         \
                    ||        (defined(EDFR11))                                                                                         \
                    ||        (defined(HOME11))                                                                                         \
                     )
                                        /* Nota : rappelons que les noms '$LACT23', '$EDFR11' et '$HOME11' sont synonymes et         */
                                        /* designent la station UNIX "portable" en fonction de sa situation geographique...          */
#                   nTestADef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1                                            \
                                        /* ATTENTION : sur 'SYSTEME_NWS3000_NEWSOS' il y a pre-allocation de la zone de swap         */ \
                                        /* necessaire a chaque process, il est necessaire de reduire au minimum l'extension          */ \
                                        /* des dimensions. On prendra donc ce qui suffit pour le Pal, a savoir :                     */ \
                                        /*                                                                                           */ \
                                        /*                  sur 'OX' : 0819 (pour 0780),                                             */ \
                                        /*                  sur 'OY' : 0576 (pour 0575),                                             */ \
                                        /*                  sur 'OZ' : 1024 (valeur indefinie pour le Pal...).                       */ \
                                        /*                                                                                           */ \
                                        /* En fait, j'ai regenere le systeme, et aggrandi la zone de swap...                         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : Cette variable est liee obligatoirement a la definition 'BUG_NWS3000_Sdu_1'   */ \
                                        /* qui est faite dans le fichier '$FbugsG'...                                                */
#                   TestADef  BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1                                            \
                                        /* ATTENTION : sur 'SYSTEME_NWS3000_NEWSOS' il y a (provisoirement ?) un probleme : la       */ \
                                        /* taille d'un programme ne peut exceder (a epsilon pres...) la taille de la memoire         */ \
                                        /* physique. Il est donc necessaire de reduire au minimum l'extension des dimensions.        */ \
                                        /* On prendra donc ce qui suffit pour le Pal, a savoir :                                     */ \
                                        /*                                                                                           */ \
                                        /*                  sur 'OX' : 0819 (pour 0780),                                             */ \
                                        /*                  sur 'OY' : 0576 (pour 0575),                                             */ \
                                        /*                  sur 'OZ' : 1024 (valeur indefinie pour le Pal...).                       */ \
                                        /*                                                                                           */ \
                                        /* Ceci est un probleme, par exemple, pour '$xci/filtre.01$K'.                               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : Cette variable est liee obligatoirement a la definition 'BUG_NWS3000_Sdu_1'   */ \
                                        /* qui est faite dans le fichier '$FbugsG'...                                                */
#         Aif       (         (defined(LACT23))                                                                                         \
                    ||        (defined(EDFR11))                                                                                         \
                    ||        (defined(HOME11))                                                                                         \
                     )
#         Eif       (         (defined(LACT23))                                                                                         \
                    ||        (defined(EDFR11))                                                                                         \
                    ||        (defined(HOME11))                                                                                         \
                     )

#    Aif       (         (defined(SYSTEME_NWS3000_NEWSOS)))
#    Eif       (         (defined(SYSTEME_NWS3000_NEWSOS)))

#    if        (         (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1))                                      \
               ||        (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1))                                      \
                )
#         define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OX(dimension)                                                             \
                              ADD2(dimension,GRO6(FRA10(dimension)))
#         define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OY(dimension)                                                             \
                              ADD2(dimension,GRO1(FRA8(dimension)))
#         define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OZ(dimension)                                                             \
                              ADD2(dimension,GRO1(FRA1(dimension)))
#         define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OT(dimension)                                                             \
                              ADD2(dimension,GRO1(FRA1(dimension)))
                                        /* Les images "statiques" (celles qui sont definies une fois pour toute dans les fichiers    */
                                        /* '$xiii/Images$STR' et '$xiii/Imagess$STR') posent un probleme particulier, car en effet   */
                                        /* il est impossible d'initialier leur pointeur en fonction de 'dimX' et 'dimY' (les         */
                                        /* compilateurs le refusent), et d'autre part a l'execution, leur type est perdu, et donc    */
                                        /* leur longueur (en nombre d'octets) est inconnue. La seule solution est donc de prevoir    */
                                        /* a priori une zone suffisamment grande pour satisfaire tous les besoins, c'est ce que      */
                                        /* l'on definit ici, en prenant en compte un bug relatif a la pre-allocation de la zone de   */
                                        /* swap necessaire a chaque process, il est necessaire de reduire au minimum l'extension     */
                                        /* des dimensions. On prend donc ce qui suffit pour le Pal, a savoir :                       */
                                        /*                                                                                           */
                                        /*                  sur 'OX' : 0819 (pour 0780),                                             */
                                        /*                  sur 'OY' : 0576 (pour 0575),                                             */
                                        /*                  sur 'OZ' : 1024.                                                         */
                                        /*                                                                                           */
#    Aif       (         (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1))                                      \
               ||        (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1))                                      \
                )

#         if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                        \
                     )
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OXYZT(dimension)                                                     \
                                   GRO2(dimension)

#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OX(dimension)                                                        \
                                   EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OXYZT(dimension)
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OY(dimension)                                                        \
                                   EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OXYZT(dimension)
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OZ(dimension)                                                        \
                                   EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OXYZT(dimension)
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OT(dimension)                                                        \
                                   EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OXYZT(dimension)
                                        /* Cas des images "statiques" (voir les commentaires ci-dessus a leur sujet...).             */
#         Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                        \
                     )
#         Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                        \
                     )

#         if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                        \
                     )
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OX(dimension)                                                        \
                                   ADD2(GRO3(dimension),GRO2(FRA10(dimension)))
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OY(dimension)                                                        \
                                   ADD2(GRO3(dimension),GRO2(FRA10(dimension)))
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OZ(dimension)                                                        \
                                   GRO1(FRA16(dimension))
#              define    EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OT(dimension)                                                        \
                                   GRO1(FRA16(dimension))
#         Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                        \
                     )
#         Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                        \
                     )

                                        /* Les images "statiques" (celles qui sont definies une fois pour toute dans les fichiers    */
                                        /* '$xiii/Images$STR' et '$xiii/Imagess$STR') posent un probleme particulier, car en effet   */
                                        /* il est impossible d'initialier leur pointeur en fonction de 'dimX' et 'dimY' (les         */
                                        /* compilateurs le refusent), et d'autre part a l'execution, leur type est perdu, et donc    */
                                        /* leur longueur (en nombre d'octets) est inconnue. La seule solution est donc de prevoir    */
                                        /* a priori une zone suffisamment grande pour satisfaire tous les besoins, c'est ce que      */
                                        /* l'on definit ici. On notera le passage de 'GRO2(...)' a 'GRO4(...)' utile en fait avec    */
                                        /* 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_03' qui permet de manipuler des images au format    */
                                        /* double du format 'Pal' sans probleme ; ceci a ete introduit le 19970220161259.            */
                                        /* De plus, le 19970224145047 afin de ne pas avoir des "album"s de taille delirantes, j'ai   */
                                        /* et contraint de reduire 'EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OZ(...)'.              */

#    Eif       (         (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1))                                      \
               ||        (defined(BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1))                                      \
                )

                                        /* Ces tests de pre-existence de 'K___dimX', 'K___dimY' et 'K___dimZ' sont en fait destines  */
                                        /* a discriminer la compilation de la commande '$xcp/Konstantes$K' elle-meme des autres      */
                                        /* compilations...                                                                           */

#    define    k___K___dimX                                                                                                             \
                         EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OX(k___dimX)                                                         \
                                        /* Extension maximale de l'axe 'OX',                                                         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'K___dimX' est pre-generee dans '$xcp/Konstantes$K' dans le cas  */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'.                                             */
#    define    k___K___dimY                                                                                                             \
                         EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OY(k___dimY)                                                         \
                                        /* Extension maximale de l'axe 'OY',                                                         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'K___dimY' est pre-generee dans '$xcp/Konstantes$K' dans le cas  */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'.                                             */
#    define    k___K___dimZ                                                                                                             \
                         EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OZ(k___dimZ)                                                         \
                                        /* Extension maximale de l'axe 'OZ'.                                                         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'K___dimZ' est pre-generee dans '$xcp/Konstantes$K' dans le cas  */ \
                                        /* de 'GESTION_DU_FORMAT_DES_IMAGES_VERSION_02'.                                             */
#    define    k___K___dimT                                                                                                             \
                         EXTENSION_EXTREME_DES_DIMENSIONS_DES_AXES_OT(k___dimT)                                                         \
                                        /* Extension maximale de l'axe 'OT'.                                                         */

#    ifdef     GESTION_DES_IMAGES_STATIQUES_VERSION_01

                                        /* "K___..." et "KK___..." ont la meme valeur constante et donnent la taille maximale des    */
                                        /* axes des objets de type 'S___<type>' et 'E___S___<type>' pour "K___...", et de type       */
                                        /* 'F___<type>' pour "KK___...".                                                             */

#         TestADef  K___dimX                                                                                                            \
                              k___K___dimX
#         TestADef  K___dimY                                                                                                            \
                              k___K___dimY
#         TestADef  K___dimZ                                                                                                            \
                              k___K___dimZ
#         TestADef  K___dimT                                                                                                            \
                              k___K___dimT

                                        /* Ces tests de pre-existence de 'K___dimX', 'K___dimY' et 'K___dimZ' sont en fait destines  */
                                        /* a discriminer la compilation de la commande '$xcp/Konstantes$K' elle-meme des autres      */
                                        /* compilations ('K___dimT' a ete introduit le 20171219112728).                              */

#         TestADef  KK___dimX                                                                                                           \
                              k___K___dimX
#         TestADef  KK___dimY                                                                                                           \
                              k___K___dimY
#         TestADef  KK___dimZ                                                                                                           \
                              k___K___dimZ
#         TestADef  KK___dimT                                                                                                           \
                              k___K___dimT

                                        /* Ces tests de pre-existence de 'K___dimX', 'K___dimY' et 'K___dimZ' sont en fait destines  */
                                        /* a discriminer la compilation de la commande '$xcp/Konstantes$K' elle-meme des autres      */
                                        /* compilations ('KK___dimT' a ete introduit le 20171219112728).                             */

#    Aifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_01
#    Eifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_01

#    ifdef     GESTION_DES_IMAGES_STATIQUES_VERSION_02

                                        /* "K___..." est variable et donne la taille effective des objets de type 'S___<type>' et    */
                                        /* 'E___S___<type>', alors que "KK___..." est constante et donne la taille des objets de     */
                                        /* type 'F___<type>'.                                                                        */

#         ifdef     K___dimX
#              undef     K___dimX
#         Aifdef    K___dimX
#         Eifdef    K___dimX

#         ifdef     K___dimY
#              undef     K___dimY
#         Aifdef    K___dimY
#         Eifdef    K___dimY

#         ifdef     K___dimZ
#              undef     K___dimZ
#         Aifdef    K___dimZ
#         Eifdef    K___dimZ

#         ifdef     K___dimT
#              undef     K___dimT
#         Aifdef    K___dimT
#         Eifdef    K___dimT

                                        /* Ces tests de pre-existence de 'K___dimX', 'K___dimY' et 'K___dimZ' sont en fait destines  */
                                        /* a assurer la compatibilite avec la commande '$xcp/Konstantes$K' tant qu'elle n'a pas ete  */
                                        /* recompilee (elle est alors equivalente a 'GESTION_DES_IMAGES_STATIQUES_VERSION_01'...).   */
#         define    K___dimX                                                                                                            \
                              dimX
#         define    K___dimY                                                                                                            \
                              dimY
#         define    K___dimZ                                                                                                            \
                              dimZ
#         define    K___dimT                                                                                                            \
                              dimT

#         TestADef  KK___dimX                                                                                                           \
                              k___dimX
#         TestADef  KK___dimY                                                                                                           \
                              k___dimY
#         TestADef  KK___dimZ                                                                                                           \
                              k___dimZ
#         TestADef  KK___dimT                                                                                                           \
                              k___dimT

                                        /* Ces tests de pre-existence de 'K___dimX', 'K___dimY' et 'K___dimZ' sont en fait destines  */
                                        /* a discriminer la compilation de la commande '$xcp/Konstantes$K' elle-meme des autres      */
                                        /* compilations...                                                                           */

#    Aifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_02
#    Eifdef    GESTION_DES_IMAGES_STATIQUES_VERSION_02

#    define    KK___MdimXY                                                                                                              \
                         MAX2(KK___dimX,KK___dimY)                                                                                      \
                                        /* "Longueur" maximale d'une image.                                                          */
#    define    KK___dimXY                                                                                                               \
                         MUL2(KK___dimX,KK___dimY)                                                                                      \
                                        /* "Surface" maximale d'une image.                                                           */
#    define    KK___dimXYZ                                                                                                              \
                         MUL2(KK___dimXY,KK___dimZ)                                                                                     \
                                        /* "Volume" maximale d'un album.                                                             */
#    define    KK___dimXYZT                                                                                                             \
                         MUL2(KK___dimXYZ,KK___dimT)                                                                                    \
                                        /* "Volume" maximale d'un hyper-album.                                                       */
#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))                                                                  \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N T I O N   D E S   C O M P O S A N T E S   C H R O M A T I Q U E S   E L E M E N T A I R E S  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMPOSANTE_CHROMATIQUE_FIRST                                                                                                  \
                    INDEX0                                                                                                              \
                                        /* Definition de la premiere composante chromatique.                                         */

Denumer04(INIS(_COMPOSANTE_CHROMATIQUE_ROUGE,COMPOSANTE_CHROMATIQUE_FIRST)
              ,_COMPOSANTE_CHROMATIQUE_VERTE
              ,_COMPOSANTE_CHROMATIQUE_BLEUE
              ,_COMPOSANTE_CHROMATIQUE_INEXISTANTE
         ,liste_des_IDENTIFICATEURS_DE_COMPOSANTE_CHROMATIQUE
          );
#define   COMPOSANTE_CHROMATIQUE_ROUGE                                                                                                  \
                    ENUM(_COMPOSANTE_CHROMATIQUE_ROUGE)
#define   COMPOSANTE_CHROMATIQUE_VERTE                                                                                                  \
                    ENUM(_COMPOSANTE_CHROMATIQUE_VERTE)
#define   COMPOSANTE_CHROMATIQUE_BLEUE                                                                                                  \
                    ENUM(_COMPOSANTE_CHROMATIQUE_BLEUE)
                                        /* Definition des specificateurs des identites des composantes chromatiques.                 */

#define   k___NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                                                        \
                    LENG(COMPOSANTE_CHROMATIQUE_FIRST,PRED(ENUM(_COMPOSANTE_CHROMATIQUE_INEXISTANTE)))                                  \
                                        /* Nombre de composantes chromatiques elementaires dans le systeme 'RVB'.                    */

#TestADef NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                                                            \
                    k___NOMBRE_DE_COMPOSANTES_CHROMATIQUES                                                                              \
                                        /* "Pre-generation" des constantes fondamentales.                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   M U L T I P L E X A G E   D E S                                                                  */
/*        T R O I S   C O M P O S A N T E S   C H R O M A T I Q U E S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Bsize_p                                                                                                                       \
                    MUL2(size_p,NBITOC)                                                                                                 \
                                        /* Nombre de bits necessaires a coder un niveau...                                           */

#define   k___PRECISION_MINIMALE_DU_ROUGE                                                                                               \
                    QUOD(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MINIMALE_DU_ROUGE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */
#define   k___PRECISION_MINIMALE_DU_VERTE                                                                                               \
                    QUOD(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MINIMALE_DU_VERTE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */
#define   k___PRECISION_MINIMALE_DU_BLEUE                                                                                               \
                    QUOD(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MINIMALE_DU_BLEUE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */

                                        /* Nombre de bits minimal necessaire a chaque composante chromatique...                      */

#define   k___PRECISION_MAXIMALE_DU_ROUGE                                                                                               \
                    QUOE(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MAXIMALE_DU_ROUGE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */
#define   k___PRECISION_MAXIMALE_DU_VERTE                                                                                               \
                    QUOE(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MAXIMALE_DU_VERTE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */
#define   k___PRECISION_MAXIMALE_DU_BLEUE                                                                                               \
                    QUOE(Bsize_p,NOMBRE_DE_COMPOSANTES_CHROMATIQUES)                                                                    \
                                        /* ATTENTION : la constante 'PRECISION_MAXIMALE_DU_BLEUE' est pre-generee dans               */ \
                                        /* '$xcp/Konstantes$K'.                                                                      */

                                        /* Nombre de bits maximal occupes par les trois composantes chromatiques ; on notera         */
                                        /* que ces trois precisions sont incompatibles, puisque leur somme est superieure            */
                                        /* a 'Bsize_p' (malheureusement...).                                                         */

#nodefine SLRS_RVB_VERSION_01                                                                                                           \
                                        /* Avec cette version, on teste les faibles niveaux afin de les conserver.                   */
#define   SLRS_RVB_VERSION_02                                                                                                           \
                                        /* Avec cette version, les faibles niveaux ne sont pas testes...                             */

#ifdef    SLRS_RVB_VERSION_01
#    define    SLRS_RVB(niveau,amplitude)                                                                                               \
                         COND(IFEQ(niveau,NOIR)                                                                                         \
                             ,NOIR                                                                                                      \
                             ,MAX2(SLRS(niveau,amplitude),NOIR_PLANCHER)                                                                \
                              )                                                                                                         \
                                        /* Procedure destinee a decaler les niveaux en eveitant la disparition des niveaux faibles.  */
#Aifdef   SLRS_RVB_VERSION_01
#Eifdef   SLRS_RVB_VERSION_01

#ifdef    SLRS_RVB_VERSION_02
#    define    SLRS_RVB(niveau,amplitude)                                                                                               \
                         SLRS(niveau,amplitude)                                                                                         \
                                        /* Procedure destinee a decaler les niveaux sans tester l'amplitude des niveaux. Ceci a      */ \
                                        /* ete introduit le 20010715175157 parce que c'est finalement plus logique, meme si cela ne  */ \
                                        /* permet pas de reproduire correctement une image grise (c'est-a_dire dont, pour chaque     */ \
                                        /* point, les niveaux {ROUGE,VERTE,BLEUE} sont egaux) avec 'v $xci/multiplex$K', puis la     */ \
                                        /* palette '$xiP/universel.11'. Cela peut se comprendre en faisant les maniuplations         */ \
                                        /* suivantes :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  Std                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/vraies_C$X     A=$xiio/MIRE p=$xiP/gris.01                       \  */ \
                                        /*                                      RVB=VRAI R=$xTG/IMAGE.1                 $formatI     */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/multiplex$X    AR=$xTG/IMAGE.1$ROUGE                             \  */ \
                                        /*                                      AV=$xTG/IMAGE.1$VERTE                             \  */ \
                                        /*                                      AB=$xTG/IMAGE.1$BLEUE                             \  */ \
                                        /*                                      R=$xTG/IMAGE.2                          $formatI     */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/vraies_C$X     A=$xTG/IMAGE.2 p=$xiP/universel.11                \  */ \
                                        /*                                      RVB=VRAI R=$xTG/IMAGE.3                 $formatI     */ \
                                        /*                                                                                           */ \
                                        /* Le dump hexa-decimal des 3 composantes de '$xTG/IMAGE.3' donne :                          */ \
                                        /*                                                                                           */ \
                                        /*                  $ROUGE              0000 2424 4848 6c6c 9090 b4b4 d8d8 ffff              */ \
                                        /*                  $VERTE              0000 2424 4848 6c6c 9090 b4b4 d8d8 ffff              */ \
                                        /*                  $BLEUE              0000 0000 5555 5555 aaaa aaaa ffff ffff              */ \
                                        /*                                                                                           */ \
                                        /* (pour chaque ligne). On voit bien que seules les composantes '$ROUGE' et '$VERTE' sont    */ \
                                        /* egales, et differentes de '$BLEUE' ce qui vient evidemment du multiplexage 3+3+2.         */
#Aifdef   SLRS_RVB_VERSION_02
#Eifdef   SLRS_RVB_VERSION_02

#define   MULTIPLEXAGE_RVB(coul1,nivo_ROUGE,precision_ROUGE,coul2,nivo_VERTE,precision_VERTE,coul3,nivo_BLEUE,precision_BLEUE,slrs,dg)  \
                    SLLS(OUI03(SLLS(slrs(coul1(nivo_ROUGE,nivo_VERTE,nivo_BLEUE)                                                        \
                                        ,SOUS(Bsize_p                                                                                   \
                                             ,coul1(precision_ROUGE,precision_VERTE,precision_BLEUE)                                    \
                                              )                                                                                         \
                                         )                                                                                              \
                                   ,ADD2(coul2(precision_ROUGE,precision_VERTE,precision_BLEUE)                                         \
                                        ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                         \
                                         )                                                                                              \
                                    )                                                                                                   \
                              ,SLLS(slrs(coul2(nivo_ROUGE,nivo_VERTE,nivo_BLEUE)                                                        \
                                        ,SOUS(Bsize_p                                                                                   \
                                             ,coul2(precision_ROUGE,precision_VERTE,precision_BLEUE)                                    \
                                              )                                                                                         \
                                         )                                                                                              \
                                   ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                              \
                                    )                                                                                                   \
                              ,SLLS(slrs(coul3(nivo_ROUGE,nivo_VERTE,nivo_BLEUE)                                                        \
                                        ,SOUS(Bsize_p                                                                                   \
                                             ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                    \
                                              )                                                                                         \
                                         )                                                                                              \
                                   ,ZERO                                                                                                \
                                    )                                                                                                   \
                               )                                                                                                        \
                        ,dg                                                                                                             \
                         )                                                                                                              \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe de format quelconque definit      */ \
                                        /* par le nombre de bits (precision_ROUGE,precision_VERTE,precision_BLEUE) de                */ \
                                        /* chaque composante.                                                                        */

#define   CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                                             \
                    ZERO                                                                                                                \
                                        /* Afin de cadrer a droite un triplet de type {R,V,B} (quel que soit l'ordre...).            */
#define   CADRAGE_A_GAUCHE_DES_TRIPLETS_RVB                                                                                             \
                    Bsize_p                                                                                                             \
                                        /* Afin de cadrer a gauche un triplet de type {R,V,B} (quel que soit l'ordre...).            */

#define   MULTIPLEXAGE_RVB_222(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                  \
                    MULTIPLEXAGE_RVB(SE13,niveau_ROUGE,PRECISION_MINIMALE_DU_ROUGE                                                      \
                                    ,SE23,niveau_VERTE,PRECISION_MINIMALE_DU_VERTE                                                      \
                                    ,SE33,niveau_BLEUE,PRECISION_MINIMALE_DU_BLEUE                                                      \
                                    ,SLRS_RVB                                                                                           \
                                    ,CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe compatible avec la palette        */ \
                                        /* '$xiP/universel.31', et dans le format {R,V,B} = (2,2,2) pour des niveaux en 'genere_p'.  */
#define   MULTIPLEXAGE_RVB_223(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                  \
                    MULTIPLEXAGE_RVB(SE13,niveau_ROUGE,PRECISION_MINIMALE_DU_ROUGE                                                      \
                                    ,SE23,niveau_VERTE,PRECISION_MINIMALE_DU_VERTE                                                      \
                                    ,SE33,niveau_BLEUE,PRECISION_MAXIMALE_DU_BLEUE                                                      \
                                    ,SLRS_RVB                                                                                           \
                                    ,CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe compatible avec la palette        */ \
                                        /* '$xiP/universel.21', et dans le format {R,V,B} = (2,2,3) pour des niveaux en 'genere_p'.  */
#define   MULTIPLEXAGE_RVB_332(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                  \
                    MULTIPLEXAGE_RVB(SE13,niveau_ROUGE,PRECISION_MAXIMALE_DU_ROUGE                                                      \
                                    ,SE23,niveau_VERTE,PRECISION_MAXIMALE_DU_VERTE                                                      \
                                    ,SE33,niveau_BLEUE,PRECISION_MINIMALE_DU_BLEUE                                                      \
                                    ,SLRS_RVB                                                                                           \
                                    ,CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe compatible avec la palette        */ \
                                        /* '$xiP/universel.11', et dans le format {R,V,B} = (3,3,2) pour des niveaux en 'genere_p'.  */
#define   MULTIPLEXAGE_RVBg_888(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                 \
                    MULTIPLEXAGE_RVB(SE13,niveau_ROUGE,Bsize_p                                                                          \
                                    ,SE23,niveau_VERTE,Bsize_p                                                                          \
                                    ,SE33,niveau_BLEUE,Bsize_p                                                                          \
                                    ,SLRS                                                                                               \
                                    ,CADRAGE_A_GAUCHE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe dans le format {R,V,B} = (8,8,8)  */ \
                                        /* pour des niveaux en 'genere_p', mais avec un cadrage a gauche (d'ou le "g" de "RVBg").    */
#define   MULTIPLEXAGE_RVB_888(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                  \
                    MULTIPLEXAGE_RVB(SE13,niveau_ROUGE,Bsize_p                                                                          \
                                    ,SE23,niveau_VERTE,Bsize_p                                                                          \
                                    ,SE33,niveau_BLEUE,Bsize_p                                                                          \
                                    ,SLRS                                                                                               \
                                    ,CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe dans le format {R,V,B} = (8,8,8)  */ \
                                        /* pour des niveaux en 'genere_p', avec un cadrage a droite standard...                      */

#define   MULTIPLEXAGE_BVR_888(niveau_ROUGE,niveau_VERTE,niveau_BLEUE)                                                                  \
                    MULTIPLEXAGE_RVB(SE33,niveau_ROUGE,Bsize_p                                                                          \
                                    ,SE23,niveau_VERTE,Bsize_p                                                                          \
                                    ,SE13,niveau_BLEUE,Bsize_p                                                                          \
                                    ,SLRS                                                                                               \
                                    ,CADRAGE_A_DROITE_DES_TRIPLETS_RVB                                                                  \
                                     )                                                                                                  \
                                        /* Pour passer d'un triplet {R,V,B} a un niveau multiplexe dans le format (B,V,R) = (8,8,8)  */ \
                                        /* pour des niveaux en 'genere_p', mais ATTENTION, c'est (B,V,R) et non pas {R,V,B}...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   D E M U L T I P L E X A G E   D E S                                                              */
/*        T R O I S   C O M P O S A N T E S   C H R O M A T I Q U E S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DEMULTIPLEXAGE_RVB_1(niveau,coul1,precision_ROUGE,coul2,precision_VERTE,coul3,precision_BLEUE,slls,dg)                        \
                    slls(REST(SLRS(SLRS(niveau,dg)                                                                                      \
                                  ,ADD2(coul2(precision_ROUGE,precision_VERTE,precision_BLEUE)                                          \
                                       ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,MASK_TO_P2(gMASQUE(coul1(precision_ROUGE,precision_VERTE,precision_BLEUE)))                               \
                              )                                                                                                         \
                        ,SOUS(Bsize_p                                                                                                   \
                             ,coul1(precision_ROUGE,precision_VERTE,precision_BLEUE)                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Pour demultiplexer la couleur 'coul1'.                                                    */
#define   DEMULTIPLEXAGE_RVB_2(niveau,coul1,precision_ROUGE,coul2,precision_VERTE,coul3,precision_BLEUE,slls,dg)                        \
                    slls(REST(SLRS(SLRS(niveau,dg)                                                                                      \
                                  ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                               \
                                   )                                                                                                    \
                             ,MASK_TO_P2(gMASQUE(coul2(precision_ROUGE,precision_VERTE,precision_BLEUE)))                               \
                              )                                                                                                         \
                        ,SOUS(Bsize_p                                                                                                   \
                             ,coul2(precision_ROUGE,precision_VERTE,precision_BLEUE)                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Pour demultiplexer la couleur 'coul2'.                                                    */
#define   DEMULTIPLEXAGE_RVB_3(niveau,coul1,precision_ROUGE,coul2,precision_VERTE,coul3,precision_BLEUE,slls,dg)                        \
                    slls(REST(SLRS(SLRS(niveau,dg)                                                                                      \
                                  ,ZERO                                                                                                 \
                                   )                                                                                                    \
                             ,MASK_TO_P2(gMASQUE(coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)))                               \
                              )                                                                                                         \
                        ,SOUS(Bsize_p                                                                                                   \
                             ,coul3(precision_ROUGE,precision_VERTE,precision_BLEUE)                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Pour demultiplexer la couleur 'coul3'.                                                    */

#define   DEMULTIPLEXAGE_RVBg_888(niveau,coul)                                                                                          \
                    coul(DEMULTIPLEXAGE_RVB_1(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_GAUCHE_DES_TRIPLETS_RVB)     \
                        ,DEMULTIPLEXAGE_RVB_2(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_GAUCHE_DES_TRIPLETS_RVB)     \
                        ,DEMULTIPLEXAGE_RVB_3(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_GAUCHE_DES_TRIPLETS_RVB)     \
                         )                                                                                                              \
                                        /* Pour passer d'un niveau multiplexe dans le format {R,V,B} = (8,8,8) a l'un des trois      */ \
                                        /* niveau d'un triplet {R,V,B} pour des niveaux en 'genere_p', et cadres a gauche...         */

#define   DEMULTIPLEXAGE_RVBg_888_ROUGE(niveau)                                                                                         \
                    DEMULTIPLEXAGE_RVBg_888(niveau,SE13)                                                                                \
                                        /* Pour recuperer le ROUGE dans un niveau multiplexe dans le format {R,V,B} = (8,8,8)...     */
#define   DEMULTIPLEXAGE_RVBg_888_VERTE(niveau)                                                                                         \
                    DEMULTIPLEXAGE_RVBg_888(niveau,SE23)                                                                                \
                                        /* Pour recuperer le VERTE dans un niveau multiplexe dans le format {R,V,B} = (8,8,8)...     */
#define   DEMULTIPLEXAGE_RVBg_888_BLEUE(niveau)                                                                                         \
                    DEMULTIPLEXAGE_RVBg_888(niveau,SE33)                                                                                \
                                        /* Pour recuperer le BLEUE dans un niveau multiplexe dans le format {R,V,B} = (8,8,8)...     */

#define   DEMULTIPLEXAGE_BVR_888(niveau,coul)                                                                                           \
                    coul(DEMULTIPLEXAGE_RVB_1(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_DROITE_DES_TRIPLETS_RVB)     \
                        ,DEMULTIPLEXAGE_RVB_2(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_DROITE_DES_TRIPLETS_RVB)     \
                        ,DEMULTIPLEXAGE_RVB_3(niveau,SE33,Bsize_p,SE23,Bsize_p,SE13,Bsize_p,SLLS,CADRAGE_A_DROITE_DES_TRIPLETS_RVB)     \
                         )                                                                                                              \
                                        /* Pour passer d'un niveau multiplexe dans le format (B,V,R) = (8,8,8) a l'un des trois      */ \
                                        /* niveau d'un triplet {R,V,B} pour des niveaux en 'genere_p', mais ATTENTION, c'est (B,V,R) */ \
                                        /* et non pas {R,V,B}...                                                                     */

#define   DEMULTIPLEXAGE_BVR_888_ROUGE(niveau)                                                                                          \
                    DEMULTIPLEXAGE_BVR_888(niveau,SE33)                                                                                 \
                                        /* Pour recuperer le ROUGE dans un niveau multiplexe dans le format (B,V,R) = (8,8,8)...     */
#define   DEMULTIPLEXAGE_BVR_888_VERTE(niveau)                                                                                          \
                    DEMULTIPLEXAGE_BVR_888(niveau,SE23)                                                                                 \
                                        /* Pour recuperer le VERTE dans un niveau multiplexe dans le format (B,V,R) = (8,8,8)...     */
#define   DEMULTIPLEXAGE_BVR_888_BLEUE(niveau)                                                                                          \
                    DEMULTIPLEXAGE_BVR_888(niveau,SE13)                                                                                 \
                                        /* Pour recuperer le BLEUE dans un niveau multiplexe dans le format (B,V,R) = (8,8,8)...     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " P R E - G E N E R A T I O N "   D E S   C O N S T A N T E S   F O N D A M E N T A L E S  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef PRECISION_MINIMALE_DU_ROUGE                                                                                                   \
                    k___PRECISION_MINIMALE_DU_ROUGE
#TestADef PRECISION_MINIMALE_DU_VERTE                                                                                                   \
                    k___PRECISION_MINIMALE_DU_VERTE
#TestADef PRECISION_MINIMALE_DU_BLEUE                                                                                                   \
                    k___PRECISION_MINIMALE_DU_BLEUE
#TestADef PRECISION_MAXIMALE_DU_ROUGE                                                                                                   \
                    k___PRECISION_MAXIMALE_DU_ROUGE
#TestADef PRECISION_MAXIMALE_DU_VERTE                                                                                                   \
                    k___PRECISION_MAXIMALE_DU_VERTE
#TestADef PRECISION_MAXIMALE_DU_BLEUE                                                                                                   \
                    k___PRECISION_MAXIMALE_DU_BLEUE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I M E N S I O N   D E S   " E S P A C E S "   S T A N D A R D S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   MONO_DIMENSIONNEL                                                                                                             \
                    UN                                                                                                                  \
                                        /* Dimension des objets "mono-dimensionnels",                                                */
#define   BI_DIMENSIONNEL                                                                                                               \
                    SUCC(MONO_DIMENSIONNEL)                                                                                             \
                                        /* Dimension des objets "bi-dimensionnels",                                                  */
#define   TRI_DIMENSIONNEL                                                                                                              \
                    SUCC(BI_DIMENSIONNEL)                                                                                               \
                                        /* Dimension des objets "tri-dimensionnels".                                                 */
#define   QUADRI_DIMENSIONNEL                                                                                                           \
                    SUCC(TRI_DIMENSIONNEL)                                                                                              \
                                        /* Dimension des objets "quadri-dimensionnels".                                              */

#define   PUId(x,d)                                                                                                                     \
                    PUIX(x,NEUT(FLOT(d)))
#define   PUI1(x)                                                                                                                       \
                    PUId(x,MONO_DIMENSIONNEL)
#define   PUI2(x)                                                                                                                       \
                    PUId(x,BI_DIMENSIONNEL)
#define   PUI3(x)                                                                                                                       \
                    PUId(x,TRI_DIMENSIONNEL)
#define   PUI4(x)                                                                                                                       \
                    PUId(x,QUADRI_DIMENSIONNEL)
                                        /* Calcul d'un "volume" a partir d'une dimension (introduit le 20070227134635).              */

#define   RACd(x,d)                                                                                                                     \
                    PUIX(x,INVE(FLOT(d)))
#define   RAC1(x)                                                                                                                       \
                    RACd(x,MONO_DIMENSIONNEL)
#define   RAC2(x)                                                                                                                       \
                    RACd(x,BI_DIMENSIONNEL)
#define   RAC3(x)                                                                                                                       \
                    RACd(x,TRI_DIMENSIONNEL)
#define   RAC4(x)                                                                                                                       \
                    RACd(x,QUADRI_DIMENSIONNEL)
                                        /* Calcul d'une dimension a partir d'un "volume" (introduit le 20070227134635).              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L I D A T I O N   D E S   C O O R D O N N E E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, les coordonnees {x,y[,z]} qui suivent ne doivent pas etre typees afin que les  */
                                        /* procedures du type 'TEST_HORS_IMAGE(...)' puissent etre utilisees avec des coordonnees    */
                                        /* flottantes. Cela est tres utile au cas ou elles devraient atteindre des valeurs tres      */
                                        /* grandes (par exemple, pour 'new_X' et 'new_Y' dans 'UN_SUR_Z_DANS_LE_PLAN_COMPLEXE(...)'  */
                                        /* dans '$ximcf/conformes$FON', bien que cela n'y soit pas utilise, car, en effet, un        */
                                        /* probleme de ce type a ete regle en remplacant les 'INTE(...)' par des 'VINTE(...)').      */

#define   TEST_HORS_IMAGE(x,y)                                                                                                          \
                    IFOU(IFEXff(x,Xmin,Xmax)                                                                                            \
                        ,IFEXff(y,Ymin,Ymax)                                                                                            \
                         )                                                                                                              \
                                        /* Test de positionnement des coordonnees hors de l'image, en faisant les hypotheses         */ \
                                        /* realistes suivantes :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  Xmin < Xmax,                                                             */ \
                                        /*                  Ymin < Ymax,                                                             */ \
                                        /*                                                                                           */ \
                                        /* ce qui permet de remplacer 'NINCff(...)' par 'IFEXff(...)'...                             */
#define   TEST_DANS_L_IMAGE(x,y)                                                                                                        \
                    IFET(IFINff(x,Xmin,Xmax)                                                                                            \
                        ,IFINff(y,Ymin,Ymax)                                                                                            \
                         )                                                                                                              \
                                        /* Test de positionnement des coordonnees dans l'image, en faisant les hypotheses            */ \
                                        /* realistes suivantes :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  Xmin < Xmax,                                                             */ \
                                        /*                  Ymin < Ymax,                                                             */ \
                                        /*                                                                                           */ \
                                        /* ce qui permet de remplacer 'INCLff(...)' par 'IFINff(...)'...                             */
#define   TEST_HORS_ALBUM(x,y,z)                                                                                                        \
                    I3OU(IFEXff(x,Xmin,Xmax)                                                                                            \
                        ,IFEXff(y,Ymin,Ymax)                                                                                            \
                        ,IFEXff(z,Zmin,Zmax)                                                                                            \
                         )                                                                                                              \
                                        /* Test de positionnement des coordonnees hors de l'image volumique, en faisant les          */ \
                                        /* hypotheses realistes suivantes :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  Xmin < Xmax,                                                             */ \
                                        /*                  Ymin < Ymax,                                                             */ \
                                        /*                  Zmin < Zmax,                                                             */ \
                                        /*                                                                                           */ \
                                        /* ce qui permet de remplacer 'NINCff(...)' par 'IFEXff(...)'...                             */
#define   TEST_DANS_L_ALBUM(x,y,z)                                                                                                      \
                    I3ET(IFINff(x,Xmin,Xmax)                                                                                            \
                        ,IFINff(y,Ymin,Ymax)                                                                                            \
                        ,IFINff(z,Zmin,Zmax)                                                                                            \
                         )                                                                                                              \
                                        /* Test de positionnement des coordonnees dans l'image volumique, en faisant les             */ \
                                        /* hypotheses realistes suivantes :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  Xmin < Xmax,                                                             */ \
                                        /*                  Ymin < Ymax,                                                             */ \
                                        /*                  Zmin < Zmax,                                                             */ \
                                        /*                                                                                           */ \
                                        /* ce qui permet de remplacer 'INCLff(...)' par 'IFINff(...)'...                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E N O R M A L I S A T I O N   D E S   A X E S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COOA(longueur,coordonnee_minimale)                                                                                            \
                    ADD2(coordonnee_minimale,longueur)                                                                                  \
                                        /* Avant le 20190726101713 cette definition etait dans 'v $xiii/Images$DEF 20190726105745'.  */
                                        /* Or 'v $xiii/Images$DEF' est inclus apres 'v $xiiD/definit.1$DEF' ce qui posait alors un   */
                                        /* probleme pour les definitions '_cDENORMALISE_O?(...)' passee de '$PASSE_1' a '$PASSE_2'   */
                                        /* a cette date, d'ou la necessite de ce deplacement...                                      */

#define   F__cDENORMALISE_OX(coordonnee)                                                                                                \
                    F__cDENORMALISE_AXES(Xmin,dimX,coordonnee)
=define   _cDENORMALISE_OX(coordonnee)                                                                                                  \
                    _cDENORMALISE_AXES(Xmin,dimX,coordonnee)
#define   V_cDENORMALISE_OX(coordonnee)                                                                                                 \
                    V_cDENORMALISE_AXES(Xmin,dimX,coordonnee)
                                        /* Le 20190726101713 '_cDENORMALISE_OX(...)' est passe de '$PASSE_1' a '$PASSE_2' pour       */
                                        /* 'v $xiii/pent_image$FON TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE'...         */

#define   F__lDENORMALISE_OX(longueur)                                                                                                  \
                    F__lDENORMALISE_AXES(dimX,longueur)
#define   _lDENORMALISE_OX(longueur)                                                                                                    \
                    _lDENORMALISE_AXES(dimX,longueur)
#define   V_lDENORMALISE_OX(longueur)                                                                                                   \
                    V_lDENORMALISE_AXES(dimX,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OX ; l'unite represente [Xmin,Xmax]              */
                                        /* (en flottant puis en entier). On verifiera que :                                          */
                                        /*                                                                                           */
                                        /*                  F__cDENORMALISE_OX(0.0) = Xmin                                           */
                                        /*                  F__cDENORMALISE_OX(1.0) = Xmax                                           */
                                        /*                                                                                           */
                                        /* et que :                                                                                  */
                                        /*                                                                                           */
                                        /*                  _cDENORMALISE_OX(0.0) = Xmin                                             */
                                        /*                  _cDENORMALISE_OX(1.0) = Xmax                                             */
                                        /*                                                                                           */
                                        /* Les "double" versions '*_cDENORMALISE_O?(...)' et '*_lDENORMALISE_O?(...)' ont ete        */
                                        /* introduites le 20010223094543 car effectivement une coordonnee et une longueur ne         */
                                        /* doivent pas etre normalisees de la meme facon (seule la coordonnee doit etre              */
                                        /* "relativisee"...).                                                                        */

#define   F__cDENORMALISE_OY(coordonnee)                                                                                                \
                    F__cDENORMALISE_AXES(Ymin,dimY,coordonnee)
=define   _cDENORMALISE_OY(coordonnee)                                                                                                  \
                    _cDENORMALISE_AXES(Ymin,dimY,coordonnee)
#define   V_cDENORMALISE_OY(coordonnee)                                                                                                 \
                    V_cDENORMALISE_AXES(Ymin,dimY,coordonnee)
                                        /* Le 20190726101713 '_cDENORMALISE_OY(...)' est passe de '$PASSE_1' a '$PASSE_2' pour       */
                                        /* 'v $xiii/pent_image$FON TRANSFORMATION_DE_TROIS_NIVEAUX_RVB_EN_UNE_COORDONNEE'...         */

#define   F__lDENORMALISE_OY(longueur)                                                                                                  \
                    F__lDENORMALISE_AXES(dimY,longueur)
#define   _lDENORMALISE_OY(longueur)                                                                                                    \
                    _lDENORMALISE_AXES(dimY,longueur)
#define   V_lDENORMALISE_OY(longueur)                                                                                                   \
                    V_lDENORMALISE_AXES(dimY,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OY ; l'unite represente [Ymin,Ymax]              */
                                        /* (en flottant puis en entier). On verifiera que :                                          */
                                        /*                                                                                           */
                                        /*                  F__cDENORMALISE_OY(0.0) = Ymin                                           */
                                        /*                  F__cDENORMALISE_OY(1.0) = Ymax+1                                         */
                                        /*                                                                                           */
                                        /* et que :                                                                                  */
                                        /*                                                                                           */
                                        /*                  _cDENORMALISE_OY(0.0) = Ymin                                             */
                                        /*                  _cDENORMALISE_OY(1.0) = Ymax+1                                           */
                                        /*                                                                                           */
                                        /* Les "double" versions '*_cDENORMALISE_O?(...)' et '*_lDENORMALISE_O?(...)' ont ete        */
                                        /* introduites le 20010223094543 car effectivement une coordonnee et une longueur ne         */
                                        /* doivent pas etre normalisees de la meme facon (seule la coordonnee doit etre              */
                                        /* "relativisee"...).                                                                        */

#define   F__cDENORMALISE_OZ(coordonnee)                                                                                                \
                    F__cDENORMALISE_AXES(Zmin,dimZ,coordonnee)
=define   _cDENORMALISE_OZ(coordonnee)                                                                                                  \
                    _cDENORMALISE_AXES(Zmin,dimZ,coordonnee)
#define   V_cDENORMALISE_OZ(coordonnee)                                                                                                 \
                    V_cDENORMALISE_AXES(Zmin,dimZ,coordonnee)
                                        /* Le 20190726101713 '_cDENORMALISE_OZ(...)' est passe de '$PASSE_1' a '$PASSE_2' par        */
                                        /* "symetrie" avec '_cDENORMALISE_OX(...)' et '_cDENORMALISE_OY(...)'...                     */

#define   F__lDENORMALISE_OZ(longueur)                                                                                                  \
                    F__lDENORMALISE_AXES(dimZ,longueur)
#define   _lDENORMALISE_OZ(longueur)                                                                                                    \
                    _lDENORMALISE_AXES(dimZ,longueur)
#define   V_lDENORMALISE_OZ(longueur)                                                                                                   \
                    V_lDENORMALISE_AXES(dimZ,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OZ (en flottant puis en entier).                 */
                                        /*                                                                                           */
                                        /* Les "double" versions '*_cDENORMALISE_O?(...)' et '*_lDENORMALISE_O?(...)' ont ete        */
                                        /* introduites le 20010223094543 car effectivement une coordonnee et une longueur ne         */
                                        /* doivent pas etre normalisees de la meme facon (seule la coordonnee doit etre              */
                                        /* "relativisee"...).                                                                        */

#define   F__cDENORMALISE_OT(coordonnee)                                                                                                \
                    F__cDENORMALISE_AXES(Tmin,dimT,coordonnee)
#define   _cDENORMALISE_OT(coordonnee)                                                                                                  \
                    _cDENORMALISE_AXES(Tmin,dimT,coordonnee)
#define   V_cDENORMALISE_OT(coordonnee)                                                                                                 \
                    V_cDENORMALISE_AXES(Tmin,dimT,coordonnee)

#define   F__lDENORMALISE_OT(longueur)                                                                                                  \
                    F__lDENORMALISE_AXES(dimT,longueur)
#define   _lDENORMALISE_OT(longueur)                                                                                                    \
                    _lDENORMALISE_AXES(dimT,longueur)
#define   V_lDENORMALISE_OT(longueur)                                                                                                   \
                    V_lDENORMALISE_AXES(dimT,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OT (en flottant puis en entier).                 */

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

                                        /* Ces definitions furent introduites le 20120210180521 pour permettre a certains            */
                                        /* programmes d'etre vraiment independants du format des images. C'est, par exemple, le      */
                                        /* cas de 'v $xci/fract_2D.01$K MAILLE_X' ou la valeur par defaut ('MAILLE_X') de l'argument */
                                        /* 'maille_OX' est definie en entier dans [k___Xmin,k___Xmax] et non pas dans [0,1]...       */

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    F_cHOMOTHETIE_Std_AXES(k___dimension,dimension,coordonnee,CoordonneeA,CoordonneeR)                                       \
                         COND(IL_FAUT(cHOMOTHETIE_Std_AXES_____compatibilite_20120210)                                                  \
                             ,coordonnee                                                                                                \
                             ,CoordonneeA(SCAL(CoordonneeR(coordonnee),FLOT(k___dimension),FLOT(dimension)))                            \
                              )

#    define    F_cHOMOTHETIE_Std_OX(coordonnee)                                                                                         \
                         F_cHOMOTHETIE_Std_AXES(k___dimX,dimX,coordonnee,COXA,COXR)
#    define    F_cHOMOTHETIE_Std_OY(coordonnee)                                                                                         \
                         F_cHOMOTHETIE_Std_AXES(k___dimY,dimY,coordonnee,COYA,COYR)
#    define    F_cHOMOTHETIE_Std_OZ(coordonnee)                                                                                         \
                         F_cHOMOTHETIE_Std_AXES(k___dimZ,dimZ,coordonnee,COZA,COZR)

#    define    I_cHOMOTHETIE_Std_OX(coordonnee)                                                                                         \
                         INTE(F_cHOMOTHETIE_Std_OX(coordonnee))
#    define    I_cHOMOTHETIE_Std_OY(coordonnee)                                                                                         \
                         INTE(F_cHOMOTHETIE_Std_OY(coordonnee))
#    define    I_cHOMOTHETIE_Std_OZ(coordonnee)                                                                                         \
                         INTE(F_cHOMOTHETIE_Std_OZ(coordonnee))
                                        /* On notera le 20190321134912 qu'il est a priori stupide d'utiliser ces procedures          */
                                        /* sur des coordonees dependants de '$formatI'. Cela s'est vu a cette date, par exemple,     */
                                        /* avec 'v $xrc/julia.42$K C_DEPART_X' ou l'on avait, avant le 20190321131310 :              */
                                        /*                                                                                           */
                                        /*                  _____cNORMALISE_OX(I_cHOMOTHETIE_Std_OX(Xcentre))                        */
                                        /*                                                                                           */
                                        /* or 'Xcentre' a deja une valeur correcte (au centre) pour le '$formatI' courant et donc    */
                                        /* 'I_cHOMOTHETIE_Std_OX(Xcentre)' n'etait evidemment pas au centre de l'image...            */
                                        /*                                                                                           */
                                        /* Il semblerait meme que d'une facon generale, ces procedures soient inutiles et qu'il      */
                                        /* serait logique de les remplacer par :                                                     */
                                        /*                                                                                           */
                                        /*                  #    define    I_cHOMOTHETIE_Std_OX(coordonnee)                       \  */
                                        /*                                           INTE(NEUT(coordonnee))                          */
                                        /*                                                                                           */

#    define    F_lHOMOTHETIE_Std_AXES(k___dimension,dimension,longueur)                                                                 \
                         COND(IL_FAUT(lHOMOTHETIE_Std_AXES_____compatibilite_20120210)                                                  \
                             ,longueur                                                                                                  \
                             ,SCAL(longueur,FLOT(k___dimension),FLOT(dimension))                                                        \
                              )

#    define    F_lHOMOTHETIE_Std_OX(longueur)                                                                                           \
                         F_lHOMOTHETIE_Std_AXES(k___dimX,dimX,longueur)
#    define    F_lHOMOTHETIE_Std_OY(longueur)                                                                                           \
                         F_lHOMOTHETIE_Std_AXES(k___dimY,dimY,longueur)
#    define    F_lHOMOTHETIE_Std_OZ(longueur)                                                                                           \
                         F_lHOMOTHETIE_Std_AXES(k___dimZ,dimZ,longueur)

#    define    I_lHOMOTHETIE_Std_OX(longueur)                                                                                           \
                         INTE(F_lHOMOTHETIE_Std_OX(longueur))
#    define    I_lHOMOTHETIE_Std_OY(longueur)                                                                                           \
                         INTE(F_lHOMOTHETIE_Std_OY(longueur))
#    define    I_lHOMOTHETIE_Std_OZ(longueur)                                                                                           \
                         INTE(F_lHOMOTHETIE_Std_OZ(longueur))
#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))                                                                  \
           )

                                        /* Ces definitions furent introduites le 20120210180521 pour permettre a certains            */
                                        /* programmes d'etre vraiment independants du format des images. C'est, par exemple, le      */
                                        /* cas de 'v $xci/fract_2D.01$K MAILLE_X' ou la valeur par defaut ('MAILLE_X') de l'argument */
                                        /* 'maille_OX' est definie en entier dans [k___Xmin,k___Xmax] et non pas dans [0,1]...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C E N T R A G E   D E S   A X E S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CENTRAGE_OX(coordonnee)                                                                                                       \
                    COXA(SOUS(coordonnee,Xcentre))                                                                                      \
                                        /* Centrage d'une coordonnee sur l'axe OX.                                                   */
#define   CENTRAGE_OY(coordonnee)                                                                                                       \
                    COYA(SOUS(coordonnee,Ycentre))                                                                                      \
                                        /* Centrage d'une coordonnee sur l'axe OY.                                                   */
#define   CENTRAGE_OZ(coordonnee)                                                                                                       \
                    COZA(SOUS(coordonnee,Zcentre))                                                                                      \
                                        /* Centrage d'une coordonnee sur l'axe OZ.                                                   */
#define   CENTRAGE_OT(coordonnee)                                                                                                       \
                    COTA(SOUS(coordonnee,Tcentre))                                                                                      \
                                        /* Centrage d'une coordonnee sur l'axe OT.                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R I M I T I V E S   D ' I N T E R F A C E   I N T E R - M O D U L E S  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ______NORMALISE_AXES(minimum,dimension,longueur,modificateur)                                                                 \
                    fDIVZ(COOR(FLOT(longueur)                                                                                           \
                              ,FLOT(minimum)                                                                                            \
                               )                                                                                                        \
                         ,FLOT(modificateur(dimension))                                                                                 \
                          )
#define   _____cNORMALISE_AXES(minimum,dimension,coordonnee)                                                                            \
                    ______NORMALISE_AXES(minimum,dimension,coordonnee,AXES_COORDONNEES_FERMES_OUVERTS)
#define   _____lNORMALISE_AXES(dimension,longueur)                                                                                      \
                    ______NORMALISE_AXES(ZERO,dimension,longueur,NEUT)
                                        /* Operation inverse de _?DENORMALISE_AXES(minimum,dimension,longueur), elle                 */
                                        /* fait passer de [min,max] a [0,1[.                                                         */
                                        /*                                                                                           */
                                        /* On notera qu'autrefois on utilisait la dimension au sens "nombre d'elements" :            */
                                        /*                                                                                           */
                                        /*                  ...FLOT(dimension)...                                                    */
                                        /*                                                                                           */
                                        /* mais qu'il est beaucoup plus logique d'utiliser la dimension au sens "longueur", d'ou     */
                                        /* l'ecriture :                                                                              */
                                        /*                                                                                           */
                                        /*                  ...FLOT(LONGUEUR(dimension))...                                          */
                                        /*                                                                                           */
                                        /* Le 20041111165615, je suis revenu en arriere pour '_____lNORMALISE_AXES(...)', d'ou       */
                                        /* l'introduction de l'argument 'modificateur' pour '______NORMALISE_AXES(...)'.             */
                                        /* Mais ATTENTION, cet "aller-retour" ne fut pas neutre en particulier en ce qui concerne    */
                                        /* la generation de champs via 'v $xiii/mono_image$DEF ACCES_A_UN_CHAMP_3D' qui reference    */
                                        /* de facon indirecte les deux procedures 'v $xiiD/definit.1$DEF _____cNORMALISE_AXES'       */
                                        /* et 'v $xiif/format$DEF F__lDENORMALISE_AXES'. Ainsi, suivant la date, il peut etre        */
                                        /* impossible de regenerer exactement certaines images. Cela s'est vu vers le 200604281457   */
                                        /* ou, par exemple, le calcul de 'v $xiaf/COT2.Q1$R16' sur '$CMAP28' a differe quelque peu   */
                                        /* de la version precedente 'v $xiaf/COT2.D1$R16' sur '$LACT14' a cause des conditions       */
                                        /* initiales ('v $xiirf/.COT2.D1.0.2.$U .xci.gauss.X') generees a partir de filtres          */
                                        /* utilisant donc 'v $xiii/mono_image$DEF ACCES_A_UN_CHAMP_3D' via la commande               */
                                        /* 'v $xci/gauss$K Fgaussien'...                                                             */
                                        /*                                                                                           */
                                        /* Le 20001223232351, 'DIVI(...)' fut remplace par 'fDIVZ(...)', lors de la mise au point    */
                                        /* de 'v $xiii/di_album$FON AFdensite' dans le cas ou l'un des axes est reduit a un point    */
                                        /* (par exemple 'OZ', lorsque l'on souhaite qu'un album soit equivalent a une image en       */
                                        /* faisant Zmin=Zmax).                                                                       */
                                        /*                                                                                           */
                                        /* Les "double" versions '_____cNORMALISE_AXES(...)' et '_____lNORMALISE_AXES(...)' ont ete  */
                                        /* introduites le 20010223094543 car effectivement une coordonnee et une longueur ne         */
                                        /* doivent pas etre normalisees de la meme facon (seule la coordonnee doit etre              */
                                        /* "relativisee"...).                                                                        */
                                        /*                                                                                           */
                                        /* La procedure 'COOR(...)' a ete introduite le 20040907164041.                              */
                                        /*                                                                                           */
                                        /* Le 20090928173316, la procedure 'LONGUEUR(...)' a ete remplacee par 'NEUT(...)' dans      */
                                        /* '_____cNORMALISE_AXES(...)' a cause du probleme 'v $xtc/NormDenorm.02$c TRMU' issu        */
                                        /* lui meme d'un probleme lors d'un redimensionnement d'un zoom dans 'v $xiirk/DIFF.11'      */
                                        /* ou les carres materialisant les particules n'etaient pas tous carres. Cela venait d'un    */
                                        /* "aller-retour" du type :                                                                  */
                                        /*                                                                                           */
                                        /*                  X/Y denormalisees au format 'F1'                                         */
                                        /*                            --> X/Y normalisees                                            */
                                        /*                                      X/Y denormalisees au format 'F2' (F2 # F1)           */
                                        /*                                                                                           */
                                        /* Par exemple, examinons le passage de [0,15] a [0,3] avec 'LONGUEUR(...)' :                */
                                        /*                                                                                           */
                                        /*                          |                   |                   |                        */
                                        /*        00   01   02   03 | 04   05   06   07 | 08   09   10   11 | 12   13   14   15      */
                                        /*                          |                   |                   |                        */
                                        /*        00   00   00   00 | 00   01   01   01 | 01   01   02   02 | 02   02   02   03      */
                                        /*                          | __                | __   __           | __   __   __           */
                                        /*                                                                                           */
                                        /* (ou les elements incorrects sont soulignes par "__"), l'"aller-retour" etant ici          */
                                        /* equivalent a :                                                                            */
                                        /*                                                                                           */
                                        /*                  (coordonnee/15)*3                                                        */
                                        /*                                                                                           */
                                        /* L'utilisation de 'NEUT(...)' equivaut a :                                                 */
                                        /*                                                                                           */
                                        /*                  (coordonnee/16)*4                                                        */
                                        /*                                                                                           */
                                        /* ce qui donne :                                                                            */
                                        /*                                                                                           */
                                        /*                          |                   |                   |                        */
                                        /*        00   01   02   03 | 04   05   06   07 | 08   09   10   11 | 12   13   14   15      */
                                        /*                          |                   |                   |                        */
                                        /*        00   00   00   00 | 01   01   01   01 | 02   02   02   02 | 03   03   03   03      */
                                        /*                          |                   |                   |                        */
                                        /*                                                                                           */
                                        /* qui est correct...                                                                        */
                                        /*                                                                                           */
                                        /* Le 20190620125144, je note l'inconvenient d'utiliser 'NEUT(...)' (et non LONGUEUR(...)')  */
                                        /* car en effet, a cause de cela, par exemple, la coordonnee 'X' denormalisee dans [0,511],  */
                                        /* lorsqu'elle est normalisee (avec une translation de 0.5 dans cet exemple) se trouve       */
                                        /* alors dans [-0.5,+0.498046875] ce qui fait que l'origine n'est pas au milieu du segment   */
                                        /* de definition de 'X' ('v $xiii/mono_image$FON 20190620110245' a ce propos...). Cela       */
                                        /* s'est vu lors de la mise au point de l'image 'v $xiia/VASA.24.256' qui a demande une      */
                                        /* modification des arguments 'v $xiia/$Fnota COORDONNEES_____compatibilite_20090929'...     */

#define   _____cNORMALISE_OX(coordonnee)                                                                                                \
                    _____cNORMALISE_AXES(Xmin,dimX,coordonnee)
#define   _____cNORMALISE_OY(coordonnee)                                                                                                \
                    _____cNORMALISE_AXES(Ymin,dimY,coordonnee)
#define   _____cNORMALISE_OZ(coordonnee)                                                                                                \
                    _____cNORMALISE_AXES(Zmin,dimZ,coordonnee)
#define   _____cNORMALISE_OT(coordonnee)                                                                                                \
                    _____cNORMALISE_AXES(Tmin,dimT,coordonnee)

#define   _____lNORMALISE_OX(longueur)                                                                                                  \
                    _____lNORMALISE_AXES(dimX,longueur)
#define   _____lNORMALISE_OY(longueur)                                                                                                  \
                    _____lNORMALISE_AXES(dimY,longueur)
#define   _____lNORMALISE_OZ(longueur)                                                                                                  \
                    _____lNORMALISE_AXES(dimZ,longueur)
#define   _____lNORMALISE_OT(longueur)                                                                                                  \
                    _____lNORMALISE_AXES(dimT,longueur)
                                        /* Ces fonctions sont destinees a faciliter l'interfacage du systeme graphique               */
                                        /* ou les coordonnees correspondent finalement au maillage de l'ecran, alors                 */
                                        /* que les autres systemes considerent qu'en general une image est un pave                   */
                                        /* du type [0,1[x[0,1[.                                                                      */
                                        /*                                                                                           */
                                        /* On verifiera que :                                                                        */
                                        /*                                                                                           */
                                        /*                  _____cNORMALISE_OX(Xmin)   = FXorigine  = 0.0                            */
                                        /*                  _____cNORMALISE_OX(Xmax+1)              = 1.0                            */
                                        /*                                                                                           */
                                        /* et que :                                                                                  */
                                        /*                                                                                           */
                                        /*                  _____cNORMALISE_OY(Ymin)   = FYorigine  = 0.0                            */
                                        /*                  _____cNORMALISE_OY(Ymax+1)              = 1.0                            */
                                        /*                                                                                           */
                                        /* Les "double" versions '_____cNORMALISE_O?(...)' et '_____lNORMALISE_O?(...)' ont ete      */
                                        /* introduites le 20010223094543 car effectivement une coordonnee et une longueur ne         */
                                        /* doivent pas etre normalisees de la meme facon (seule la coordonnee doit etre              */
                                        /* "relativisee"...).                                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I L A T A T I O N   D E S   A X E S   D E S T I N E E   A   G A R A N T I R   L A                                        */
/*        C O M P A R A B I L I T E   D E S   L O N G U E U R S   S U R   L E S   D E U X   A X E S                                  */
/*        L O R S   D ' O P E R A T I O N S   D E   T Y P E   ' _____?NORMALISE_O?(...) '  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CARRE_OX_PAR_RAPPORT_A_OY(longueur)                                                                                           \
                    SCAL(longueur                                                                                                       \
                        ,dimY                                                                                                           \
                        ,dimX                                                                                                           \
                         )                                                                                                              \
                                        /* Modification d'une longueur sur l'axe 'OX' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OY'.                                                          */
#define   CARRE_OY_PAR_RAPPORT_A_OY(longueur)                                                                                           \
                    NEUT(longueur)                                                                                                      \
                                        /* Modification d'une longueur sur l'axe 'OY' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OY'. Bien entendu cette primitive n'est la que par symetrie   */ \
                                        /* avec 'CARRE_OX_PAR_RAPPORT_A_OY(...)'.                                                    */

#define   CARRE_OX_PAR_RAPPORT_A_OX(longueur)                                                                                           \
                    NEUT(longueur)                                                                                                      \
                                        /* Modification d'une longueur sur l'axe 'OX' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OX'. Bien entendu cette primitive n'est la que par symetrie   */ \
                                        /* avec 'CARRE_OY_PAR_RAPPORT_A_OX(...)'.                                                    */
#define   CARRE_OY_PAR_RAPPORT_A_OX(longueur)                                                                                           \
                    SCAL(longueur                                                                                                       \
                        ,dimX                                                                                                           \
                        ,dimY                                                                                                           \
                         )                                                                                                              \
                                        /* Modification d'une longueur sur l'axe 'OY' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OX'.                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I L A T A T I O N   D E S   A X E S   D E S T I N E E   A   G A R A N T I R   L A                                        */
/*        C O M P A R A B I L I T E   D E S   L O N G U E U R S   S U R   L E S   D E U X   A X E S                                  */
/*        L O R S   D ' O P E R A T I O N S   D E   T Y P E   ' _?DENORMALISE_O?(...) '  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RECTANGLE_OX_PAR_RAPPORT_A_OY(longueur)                                                                                       \
                    SCAL(longueur                                                                                                       \
                        ,dimX                                                                                                           \
                        ,dimY                                                                                                           \
                         )                                                                                                              \
                                        /* Modification d'une longueur sur l'axe 'OX' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OY'.                                                          */
#define   RECTANGLE_OY_PAR_RAPPORT_A_OY(longueur)                                                                                       \
                    NEUT(longueur)                                                                                                      \
                                        /* Modification d'une longueur sur l'axe 'OY' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OY'. Bien entendu cette primitive n'est la que par symetrie   */ \
                                        /* avec 'RECTANGLE_OX_PAR_RAPPORT_A_OY(...)'.                                                */

#define   RECTANGLE_OX_PAR_RAPPORT_A_OX(longueur)                                                                                       \
                    NEUT(longueur)                                                                                                      \
                                        /* Modification d'une longueur sur l'axe 'OX' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OX'. Bien entendu cette primitive n'est la que par symetrie   */ \
                                        /* avec 'RECTANGLE_OY_PAR_RAPPORT_A_OX(...)'.                                                */
#define   RECTANGLE_OY_PAR_RAPPORT_A_OX(longueur)                                                                                       \
                    SCAL(longueur                                                                                                       \
                        ,dimY                                                                                                           \
                        ,dimX                                                                                                           \
                         )                                                                                                              \
                                        /* Modification d'une longueur sur l'axe 'OY' de facon a ce qu'elle soit comparable a une    */ \
                                        /* longueur mesuree sur l'axe 'OX'.                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O R M A T   D E S   P I X E L S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefS(genere_CHAR,CHAR)
TypedefS(A___genere_CHAR,genere_CHAR)
TypedefS(E___genere_CHAR,genere_CHAR)
                                        /* Pour definir le format "CHAR",                                                            */

TypedefS(genere_vrai_Int_de_base,vrai_Int_de_base PGPD)
TypedefS(A___genere_vrai_Int_de_base,genere_vrai_Int_de_base)
TypedefS(E___genere_vrai_Int_de_base,genere_vrai_Int_de_base)
                                        /* Pour definir le format "vrai_Int_de_base" (introduit le 20100326175628),                  */

TypedefS(genere_Int,Int PGPD)
TypedefS(A___genere_Int,genere_Int)
TypedefS(E___genere_Int,genere_Int)
                                        /* Pour definir le format "Int",                                                             */

TypedefS(genere_vrai_Positive_de_base,vrai_Positive_de_base PGPD)
TypedefS(A___genere_vrai_Positive_de_base,genere_vrai_Positive_de_base)
TypedefS(E___genere_vrai_Positive_de_base,genere_vrai_Positive_de_base)
                                        /* Pour definir le format "vrai_Positive_de_base" (introduit le 20100326175628),             */

TypedefS(genere_LPositive,LPositive PGPD)
TypedefS(A___genere_LPositive,genere_LPositive)
TypedefS(E___genere_LPositive,genere_LPositive)
                                        /* Pour definir le format "Positive". On notera qu'il est defini a l'aide de 'LPositive'     */
                                        /* (et non pas de 'Positive') afin de simplifier la fonction 'IGdisplay(...)' dans le        */
                                        /* fichier '$xiidG/fonction$FON', en ce qui concerne le type 'imageU' de l'image argument    */
                                        /* de facon a ce qu'il soit compatible avec ce qui est attendu par la fonction               */
                                        /* 'lrectwrite(...)' ; le type 'LPositive' doit donc etre un entier non signe long...        */

TypedefS(genere_vrai_float_de_base,vrai_Float_de_base PGPD)
TypedefS(A___genere_vrai_float_de_base,genere_vrai_float_de_base)
TypedefS(E___genere_vrai_float_de_base,genere_vrai_float_de_base)
                                        /* Pour definir le format "vrai_float_de_base" (introduit le 20170406095425...).             */
                                        /*                                                                                           */
                                        /* ATTENTION : c'est bien 'vrai_Float_de_base' et non pas 'vrai_float_de_base'...            */

TypedefS(genere_Float,Float PGPD)
TypedefS(A___genere_Float,genere_Float)
TypedefS(E___genere_Float,genere_Float)
                                        /* Pour definir le format "Float".                                                           */

TypedefS(genere_Double,Double PGPD)
TypedefS(A___genere_Double,genere_Double)
TypedefS(E___genere_Double,genere_Double)
                                        /* Pour definir le format "Double".                                                          */

TypedefS(genere_complexe,complexe PGPD)
TypedefS(A___genere_complexe,genere_complexe)
TypedefS(E___genere_complexe,genere_complexe)
                                        /* Pour definir le format "complexe".                                                        */

TypedefS(genere_hyper_complexe,hyper_complexe PGPD)
TypedefS(A___genere_hyper_complexe,genere_hyper_complexe)
TypedefS(E___genere_hyper_complexe,genere_hyper_complexe)
                                        /* Pour definir le format "hyper_complexe".                                                  */

TypedefS(genere_hyper_hyper_complexe,hyper_hyper_complexe PGPD)
TypedefS(A___genere_hyper_hyper_complexe,genere_hyper_hyper_complexe)
TypedefS(E___genere_hyper_hyper_complexe,genere_hyper_hyper_complexe)
                                        /* Pour definir le format "hyper_hyper_complexe" (introduit le 20150227095843).              */

#if       (Format_p==Format_char)
#    define    size_p                                                                                                                   \
                         size_CHAR                                                                                                      \
                                        /* Le format "CHAR" demande un octet par pixel.                                              */
#Aif      (Format_p==Format_char)
#Eif      (Format_p==Format_char)

#if       (Format_p==Format_int)
#    define    size_p                                                                                                                   \
                         size_Int                                                                                                       \
                                        /* Le format "Int" ("Unsigned") demande quatre octets par pixel.                             */
#Aif      (Format_p==Format_int)
#Eif      (Format_p==Format_int)

#if       (Format_p==Format_float)
#    define    size_p                                                                                                                   \
                         size_Float                                                                                                     \
                                        /* Le format "Float" demande quatre octets par pixel.                                        */
#Aif      (Format_p==Format_float)
#Eif      (Format_p==Format_float)

#if       (Format_p==Format_double)
#    define    size_p                                                                                                                   \
                         size_Double                                                                                                    \
                                        /* Le format "Double" demande huit octets par pixel.                                         */
#Aif      (Format_p==Format_double)
#Eif      (Format_p==Format_double)

#if       (Format_p==Format_complexe)
#    define    size_p                                                                                                                   \
                         size_complexe                                                                                                  \
                                        /* Le format "complexe" demande huit octets par pixel.                                       */
#Aif      (Format_p==Format_complexe)
#Eif      (Format_p==Format_complexe)

#if       (Format_p==Format_hyper_complexe)
#    define    size_p                                                                                                                   \
                         size_hyper_complexe                                                                                            \
                                        /* Le format "hyper-complexe" demande seize octets par pixel.                                */
#Aif      (Format_p==Format_hyper_complexe)
#Eif      (Format_p==Format_hyper_complexe)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   N O I R  :                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   k___NOIR                                                                                                                      \
                    GENP(ZERO)                                                                                                          \
                                        /* Definition du niveau de noir standard.                                                    */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la constante 'NOIR' est pre-generee dans '$xcp/Konstantes$K'.                 */

#define   FLOT__NOIR                                                                                                                    \
                    FLOT(NOIR)

#define   NOIR_char                                                                                                                     \
                    CAST_CHAR(NOIR)                                                                                                     \
                                        /* La procedure 'CAST_CHAR(...)' a remplace un 'CAST(genere_CHAR,...)' le 20090331101931.    */
#define   NOIR_int                                                                                                                      \
                    CASP_Int(NOIR)
#define   NOIR_positive                                                                                                                 \
                    CASP_LPositive(NOIR)
#define   NOIR_float                                                                                                                    \
                    CASP_Float(NOIR)                                                                                                    \
                                        /* ATTENTION a ne pas confondre 'NOIR_float' et 'FLOT__NOIR', le premier donnant le          */ \
                                        /* 'NOIR' en format 'genere_Float' et le second en format 'genere_p'...                      */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, voir la remarque 'v $xiiD/definit.2$DEF BLANC_float' qui, malgre la nullite    */ \
                                        /* (en general...) de 'FLOT__NOIR' et de 'NOIR_float' (et donc leur egalite), il conviendra  */ \
                                        /* de les considerer comme deux valeurs differentes...                                       */
#define   NOIR_double                                                                                                                   \
                    CASP_Double(NOIR)

                                        /* Les procedures 'CASP...(...)' ont remplace les 'CASP(genere_...,...)' le 20090331104330.  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O T I O N   D E   P L A N C H E R  :                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Nous allons definir la notion de                                                                               */
/*                  "plancher" ; en effet, lorsque l'on                                                                              */
/*                  marque un point dans une image a fond                                                                            */
/*                  NOIR, si ce point est lui-meme NOIR, il                                                                          */
/*                  n'apparaitra pas. D'ou ici cette definition                                                                      */
/*                  d'un NOIR_PLANCHER utilise pour le marquage                                                                      */
/*                  des points. Celui-ci est variable, et fonction                                                                   */
/*                  des listes de  SUBSTITUTION utilisees...                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Utilisation :                                                                                                              */
/*                                                                                                                                   */
/*                  SET_NOIR_PLANCHER(niveau);                                                                                       */
/*                                                                                                                                   */
/*                  permettent de positionner le NOIR_PLANCHER                                                                       */
/*                  courant...                                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Le 20050111155800 a cause de la modification 'v $xig/edite$vv$FON 20050111154812', les    */
                                        /* definitions suivantes sont passees de 'define' a 'TestADef' :                             */

#TestADef NOIR_PLANCHER                                                                                                                 \
                    SUCN(NOIR)                                                                                                          \
                                        /* Plancher a ne pas franchir bien souvent...                                                */
#TestADef NOIR_PLANCHER_0                                                                                                               \
                    DOUB(NOIR_PLANCHER)                                                                                                 \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_0n' et '..._FF'.  */
#TestADef NOIR_PLANCHER_1                                                                                                               \
                    DOUB(NOIR_PLANCHER_0)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_1n' et '..._FE'.  */
#TestADef NOIR_PLANCHER_2                                                                                                               \
                    DOUB(NOIR_PLANCHER_1)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_2n' et '..._FC'.  */
#TestADef NOIR_PLANCHER_3                                                                                                               \
                    DOUB(NOIR_PLANCHER_2)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_3n' et '..._F8'.  */
#TestADef NOIR_PLANCHER_4                                                                                                               \
                    DOUB(NOIR_PLANCHER_3)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_F0'.              */
#TestADef NOIR_PLANCHER_5                                                                                                               \
                    DOUB(NOIR_PLANCHER_4)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_E0'.              */
#TestADef NOIR_PLANCHER_6                                                                                                               \
                    DOUB(NOIR_PLANCHER_5)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_C0'.              */
#TestADef NOIR_PLANCHER_7                                                                                                               \
                    NEUT(NOIR_PLANCHER_6)                                                                                               \
                                        /* Plancher a ne pas franchir bien souvent pour les listes 'L_SUBSTITUTION_80'. ATTENTION,   */ \
                                        /* on notera la presence de 'NEUT(...)', et non pas de 'DOUB(...)', afin de ne pas definir   */ \
                                        /* un niveau superieur a 'BLANC'...                                                          */

                                        /* ATTENTION : au cas ou de nouvelles listes du type 'L_SUBSTITUTION_Xn' (avec X=4,5,...)    */
                                        /* seraient ajoutees, il conviendrait de creer de nouveaux 'NOIR_PLANCHER_X'...              */

                                        /* Le 20050111155800 a cause de la modification 'v $xig/edite$vv$FON 20050111154812', les    */
                                        /* definitions precedentes sont passees de 'define' a 'TestADef'...                          */

#define   NOIR_PLANCHER_SUBSTITUTION                                                                                                    \
                    noir_plancher_substitution                                                                                          \
                                        /* Plancher courant a ne pas franchir pour les listes 'L_SUBSTITUTION_Xn'...                 */
#define   SET_NOIR_PLANCHER(niveau)                                                                                                     \
                    Bblock                                                                                                              \
                    VALIDATION_NIVEAU(niveau                                                                                            \
                                     ,BLOC(EGAL(noir_plancher_substitution,niveau);                                                     \
                                        /* Mise a jour du "plancher" courant...                                                      */ \
                                           )                                                                                            \
                                     ,BLOC(PRINT_ERREUR("le 'plancher' demande est inexistant");                                        \
                                           CAL1(Prer1(" ce NIVEAU est %08X",niveau));                                                   \
                                           CAL1(Prer2(" - [Noir,Blanc] = [%08X,%08X]\n",NOIR,BLANC));                                   \
                                           )                                                                                            \
                                      );                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " P R E - G E N E R A T I O N "   D E S   C O N S T A N T E S   F O N D A M E N T A L E S  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#TestADef NOIR                                                                                                                          \
                    k___NOIR

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   E S P A C E   " T O R I Q U E "  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, a cause de l'usage qui est fait de ces procedures dans d'autre procedures      */
                                        /* definies en '$PASSE_3', ces definitions ont ete mises ici le 1995110700 depuis le fichier */
                                        /* '$xiii/Images$DEF'.                                                                       */

#define   MODX(x)                                                                                                                       \
                    MODU(x,Xmin,Xmax)
#define   MODY(y)                                                                                                                       \
                    MODU(y,Ymin,Ymax)
#define   MODZ(z)                                                                                                                       \
                    MODU(z,Zmin,Zmax)
#define   MODT(t)                                                                                                                       \
                    MODU(t,Tmin,Tmax)
                                        /* Axe 'OX', 'OY' et 'OZ' toriques (versions "entieres" : en effet, il fut decouvert le      */
                                        /* 20090128163159 qu'a cause du 'MODG(...)' utilise dans le 'MODU(...)' il etait imperatif   */
                                        /* que les coordonnees {x,y,z} soient entieres, d'ou la seconde version ci-apres...).        */

#define   MOFX(x)                                                                                                                       \
                    MODF(x,FLOT(Xmin),FLOT(Xmax))
#define   MOFY(y)                                                                                                                       \
                    MODF(y,FLOT(Ymin),FLOT(Ymax))
#define   MOFZ(z)                                                                                                                       \
                    MODF(z,FLOT(Zmin),FLOT(Zmax))
#define   MOFT(t)                                                                                                                       \
                    MODF(t,FLOT(Tmin),FLOT(Tmax))
                                        /* Axe 'OX', 'OY' et 'OZ' toriques (version "flottante" introduites le 20090128163159...).   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   E S P A C E   " S Y M E T R I Q U E "  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Ces definitions ont ete introduites le 20050720131731...                                  */

#define   SYM_XYZT(coordonnee,minimum,centre,maximum)                                                                                   \
                    COND(IFLT(coordonnee,centre)                                                                                        \
                        ,DIVI(AXPB(SOUS(maximum,minimum),coordonnee,SOUS(MUL2(minimum,centre),MUL2(minimum,maximum)))                   \
                             ,SOUS(centre,minimum)                                                                                      \
                              )                                                                                                         \
                        ,DIVI(AXPB(SOUS(maximum,minimum),coordonnee,SOUS(MUL2(minimum,centre),MUL2(maximum,maximum)))                   \
                             ,SOUS(centre,maximum)                                                                                      \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Formule generale de symetrisation suivant le graphe :                                     */ \
                                        /*                                                                                           */ \
                                        /*                  ^                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                M |       /\                                                               */ \
                                        /*                  |      /  \                                                              */ \
                                        /*                  |     /    \                                                             */ \
                                        /*                  |    /      \                                                            */ \
                                        /*                  |   /        \                                                           */ \
                                        /*                  |  /          \                                                          */ \
                                        /*                  | /            \                                                         */ \
                                        /*                m |/              \                                                        */ \
                                        /*                   ------------------------------>                                         */ \
                                        /*                  m       C       M                                                        */ \
                                        /*                                                                                           */ \
                                        /* ou {m,C,M} designent respectivement {minimum,centre,maximum}...                           */ \
                                        /*                                                                                           */ \
                                        /* Voir 'v $xcg/SYM_XYZT.01$K' le 20201114105133 pour comprendre ce calcul...                */

#define   SYMX(x)                                                                                                                       \
                    SYM_XYZT(x,Xmin,Xcentre,Xmax)                                                                                       \
                                        /* Axe 'OX' symetrique,                                                                      */
#define   SYMY(y)                                                                                                                       \
                    SYM_XYZT(y,Ymin,Ycentre,Ymax)                                                                                       \
                                        /* Axe 'OY' symetrique,                                                                      */
#define   SYMZ(z)                                                                                                                       \
                    SYM_XYZT(z,Zmin,Zcentre,Zmax)                                                                                       \
                                        /* Axe 'OZ' symetrique.                                                                      */
#define   SYMT(t)                                                                                                                       \
                    SYM_XYZT(t,Tmin,Tcentre,Tmax)                                                                                       \
                                        /* Axe 'OT' symetrique.                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   E S P A C E   " P R O L O N G E "  :                                                       */
/*        A   l ' E X T E R I E U R   C O M M E   I L   E S T   A U   B O R D  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, a cause de l'usage qui est fait de ces procedures dans d'autre procedures      */
                                        /* definies en '$PASSE_3', ces definitions ont ete mises ici le 1995110700 depuis le fichier */
                                        /* '$xiii/Images$DEF'.                                                                       */

#define   TROX(x)                                                                                                                       \
                    TRON(x,Xmin,Xmax)                                                                                                   \
                                        /* Axe 'OX' "prolonge",                                                                      */
#define   TROY(y)                                                                                                                       \
                    TRON(y,Ymin,Ymax)                                                                                                   \
                                        /* Axe 'OY' "prolonge",                                                                      */
#define   TROZ(z)                                                                                                                       \
                    TRON(z,Zmin,Zmax)                                                                                                   \
                                        /* Axe 'OZ' "prolonge".                                                                      */
#define   TROT(t)                                                                                                                       \
                    TRON(t,Tmin,Tmax)                                                                                                   \
                                        /* Axe 'OT' "prolonge".                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X T E N S I O N S   D E S   C O O R D O N N E S   L O R S Q U ' E L L E S   " D E B O R D E N T "  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Les definitions 'HORS_?_SYMETRIQUE(...)' ont ete introduites le 20050720133226...         */

%define   HORS_X_FORCER(X)                                                                                                              \
                    NEUT(X)
%define   HORS_X_PERIODIQUE(X)                                                                                                          \
                    MODX(X)
%define   HORS_X_SYMETRIQUE(X)                                                                                                          \
                    SYMX(MODX(X))
%define   HORS_X_PROLONGEMENT(X)                                                                                                        \
                    TROX(X)
                                        /* Extensions possibles de la coordonnee 'X'.                                                */
%define   HORS_Y_FORCER(Y)                                                                                                              \
                    NEUT(Y)
%define   HORS_Y_PERIODIQUE(Y)                                                                                                          \
                    MODY(Y)
%define   HORS_Y_SYMETRIQUE(Y)                                                                                                          \
                    SYMY(MODY(Y))
%define   HORS_Y_PROLONGEMENT(Y)                                                                                                        \
                    TROY(Y)
                                        /* Extensions possibles de la coordonnee 'Y'.                                                */
%define   HORS_Z_FORCER(Z)                                                                                                              \
                    NEUT(Z)
%define   HORS_Z_PERIODIQUE(Z)                                                                                                          \
                    MODZ(Z)
%define   HORS_Z_SYMETRIQUE(Z)                                                                                                          \
                    SYMZ(MODZ(Z))
%define   HORS_Z_PROLONGEMENT(Z)                                                                                                        \
                    TROZ(Z)
                                        /* Extensions possibles de la coordonnee 'Z'.                                                */
%define   HORS_T_FORCER(T)                                                                                                              \
                    NEUT(T)
%define   HORS_T_PERIODIQUE(T)                                                                                                          \
                    MODT(T)
%define   HORS_T_SYMETRIQUE(T)                                                                                                          \
                    SYMT(MODT(T))
%define   HORS_T_PROLONGEMENT(T)                                                                                                        \
                    TROT(T)
                                        /* Extensions possibles de la coordonnee 'T'.                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   N I V E A U X   I N E X I S T A N T S  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NIVEAU_UNDEF                                                                                                                  \
                    NOIR                                                                                                                \
                                        /* Niveau indefini ; on n'utilise pas 'UNDEF', car pour les images                           */ \
                                        /* de type "CHAR", 'UNDEF' ne tient pas sur un octet...                                      */
#define   FLOT__NIVEAU_UNDEF                                                                                                            \
                    FLOT__UNDEF                                                                                                         \
                                        /* Niveau indefini en flottant...                                                            */ \
                                        /*                                                                                           */ \
                                        /* Le remplacement de 'FLOT(NIVEAU_UNDEF)' par 'FLOT__UNDEF' le 20101025114454 est           */ \
                                        /* justifie par le commentaire 'v $xig/fonct$vv$DEF 20101020105725'...                       */

#define   NIVEAU_HORS_ECRAN                                                                                                             \
                    NIVEAU_UNDEF                                                                                                        \
                                        /* Niveau attribue a un point {X,Y} situe hors de l'ecran.                                   */
#define   NIVEAU_HORS_IMAGE(imageA,X,Y)                                                                                                 \
                    Niveau____hors_image
#define   NIVEAU_HORS_ALBUM(albumA,X,Y,Z)                                                                                               \
                    Niveau____hors_album
                                        /* Procedures generales de traitement des niveaux hors de l'ecran.                           */
                                        /*                                                                                           */
                                        /* Le 20070213145059 il y eut passage de 'NIVEAU_HORS_ECRAN' a quelque chose de parametrable */
                                        /* dynamiquement {Niveau____hors_image,Niveau____hors_album}...                              */

#define   NIVEAU_MASQUE                                                                                                                 \
                    NIVEAU_UNDEF                                                                                                        \
                                        /* Niveau attribue a un point qui est masque par le "masque".                                */



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.