/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   P O U R   L E S   F O N C T I O N S   D E   B A S E   D ' E D I T I O N                            */
/*        D E S   I M A G E S   S U I V A N T   L A   B I B L I O T H E Q U E   ' F R A M E -  B U F F E R   U l t r a N e t '  :    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Ce fichier contient toutes les                                                                                 */
/*                  definitions pour les fonctions                                                                                   */
/*                  de base d'edition des images raster                                                                              */
/*                  suivant la bibliotheque d'acces au                                                                               */
/*                  frame-buffer 'UltraNet' connecte aux                                                                             */
/*                  CRAYs YMP.                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiidU/fonction$DEF' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19910000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

#ifdef    SYSTEME_CRAYC98_UNICOS
#Aifdef   SYSTEME_CRAYC98_UNICOS
#Eifdef   SYSTEME_CRAYC98_UNICOS

#ifdef    SYSTEME_CRAYC916_UNICOS
#Aifdef   SYSTEME_CRAYC916_UNICOS
#Eifdef   SYSTEME_CRAYC916_UNICOS

#ifdef    SYSTEME_CRAYYMP1_UNICOS
#Aifdef   SYSTEME_CRAYYMP1_UNICOS
#Eifdef   SYSTEME_CRAYYMP1_UNICOS

#ifdef    SYSTEME_CRAYYMP2_UNICOS
#Aifdef   SYSTEME_CRAYYMP2_UNICOS
#Eifdef   SYSTEME_CRAYYMP2_UNICOS

#ifdef    SYSTEME_CRAYYMP4_UNICOS

#    if        (         (defined(EDFR22))                                                                                              \
               ||        (defined(EDFR22h))                                                                                             \
                )
#         define    __VERSION__COMPILER_LE_GRAPHIQUE_ULTRANET_FRAME_BUFFER                                                              \
                                        /* Sur un ordinateur CRAY YMP, compiler la bibliotheque graphique, meme si la norme          */ \
                                        /* 'X-Windows' est presente...                                                               */
#    Aif       (         (defined(EDFR22))                                                                                              \
               ||        (defined(EDFR22h))                                                                                             \
                )
#    Eif       (         (defined(EDFR22))                                                                                              \
               ||        (defined(EDFR22h))                                                                                             \
                )

#Aifdef   SYSTEME_CRAYYMP4_UNICOS
#Eifdef   SYSTEME_CRAYYMP4_UNICOS

#ifdef    SYSTEME_SUN3_SUNOS_CC
#Aifdef   SYSTEME_SUN3_SUNOS_CC
#Eifdef   SYSTEME_SUN3_SUNOS_CC

#ifdef    SYSTEME_SUN4_SUNOS_CC

#    if        (         (defined(EDFR13))                                                                                              \
                )
#         define    __VERSION__COMPILER_LE_GRAPHIQUE_ULTRANET_FRAME_BUFFER                                                              \
                                        /* Sur un ordinateur SUN4, compiler la bibliotheque graphique, meme si la norme              */ \
                                        /* 'X-Windows' est presente...                                                               */
#    Aif       (         (defined(EDFR13))                                                                                              \
                )
#    Eif       (         (defined(EDFR13))                                                                                              \
                )

#Aifdef   SYSTEME_SUN4_SUNOS_CC
#Eifdef   SYSTEME_SUN4_SUNOS_CC

#ifdef    __VERSION__COMPILER_LE_GRAPHIQUE_ULTRANET_FRAME_BUFFER
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N C L U D E S   S P E C I F I Q U E S   D E   ' F R A M E -  B U F F E R   U l t r a N e t '  :                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        B U G S   D E S   B I B L I O T H E Q U E S   G R A P H I Q U E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_include_1                                                                              \
                                        /* Le fichier d'includes <ultra/ugraf.h> est vide...                                         */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_status_1                                                                               \
                                        /* Le compte-rendu n'est pas renvoye (ce qui signifie que la valeur initiale de la variable  */ \
                                        /* 'compte_rendu_des_operations' reste inchangee quelle que soit la fonction utilisee...).   */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_DIMENSION_DE_L_IMAGE_1                                                                 \
                                        /* La fonction 'UINIT(...)' demande comme parametres [Xmin,Xmax+1]x[Ymin,Ymax+1], et non     */ \
                                        /* pas [Xmin,Xmax]x[Ymin,Ymax] ; ce qui est appele 'Xmax' et 'Ymax' dans 'UINIT(...)' l'est  */ \
                                        /* donc improprement...                                                                      */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_UFLIP_1                                                                                \
                                        /* La fonction 'UFLIP(...)' en mode 'SYNCHRONISATION_VERTICALE' ne marche pas, et fait que   */ \
                                        /* la suite des operations se passe tres mal, en particulier rien n'apparait a l'ecran...    */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_UPAN_1                                                                                 \
                                        /* La fonction 'UPAN(...)' ne marche pas, et fait que la suite des operations se passe tres  */ \
                                        /* mal, en particulier rien n'apparait a l'ecran...                                          */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_FORMAT_DES_NIVEAUX_1                                                                   \
                                        /* La fonction 'USCWRT(...)' travaille en entiers, et non pas en caracteres...               */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_ORIGINE_DES_LIGNES_1                                                                   \
                                        /* La fonction 'USCWRT(...)' ignore "royalement" son parametre donnant l'abscisse du premier */ \
                                        /* point de chaque ligne.                                                                    */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_IMAGE_1                                                                                \
                                        /* L'axe 'OY' du frame-buffer UltraNet descend au lieu de monter...                          */
#    TestADef  BUG_SYSTEME_ULTRANET_FRAME_BUFFER_UNE_SEULE_IMAGE_1                                                                      \
                                        /* La diffusion d'une seule image est ineffective : il faut l'envoyer deux fois pour la      */ \
                                        /* faire apparaitre a l'ecran...                                                             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, ce bug est defini (parce qu'il existe reellement), mais n'est pas utilise...   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   D E   P A S S A G E   D E S                                              */
/*        C O O R D O N N E E S   A U X   L O N G U E U R S   E T   I N V E R S E M E N T  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    CUXR(abscisse)                                                                                                           \
                         COOR(abscisse,XminU)                                                                                           \
                                        /* Passage d'un 'X' a une longueur,                                                          */
#    define    CUYR(ordonnee)                                                                                                           \
                         COOR(ordonnee,YminU)                                                                                           \
                                        /* Passage d'un 'Y' a une longueur.                                                          */
#    define    CUXA(longueur)                                                                                                           \
                         COOA(longueur,XminU)                                                                                           \
                                        /* Passage d'une longueur a un 'X',                                                          */
#    define    CUYA(longueur)                                                                                                           \
                         COOA(longueur,YminU)                                                                                           \
                                        /* Passage d'une longueur a un 'Y'.                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   " P L A N   D E   T R A V A I L "   1 0 2 4 x 1 0 2 4  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    logXYU                                                                                                                   \
                         DIX

#    define    logXU                                                                                                                    \
                         logXYU                                                                                                         \
                                        /* Logarithme de la dimension horizontale,                                                   */
#    define    logYU                                                                                                                    \
                         logXYU                                                                                                         \
                                        /* Logarithme de la dimension verticale.                                                     */
#    define    XminU                                                                                                                    \
                         COORDONNEE_MINIMALE                                                                                            \
                                        /* Abscisse minimale,                                                                        */
#    define    XmaxU                                                                                                                    \
                         COORDONNEE_MAXIMALE(logXU)                                                                                     \
                                        /* Abscisse maximale.                                                                        */
#    define    dimXU                                                                                                                    \
                         DIMENSION(XminU,XmaxU)                                                                                         \
                                        /* Dimension de l'axe horizontal.                                                            */
#    define    PasXU                                                                                                                    \
                         PAS_COORDONNEE                                                                                                 \
                                        /* Pas horizontal.                                                                           */
#    define    dimXU2                                                                                                                   \
                         MOIT(dimXU)                                                                                                    \
                                        /* Definition de la longueur de la moitie de l'axe horizontal.                               */
#    define    XminU2                                                                                                                   \
                         ADD2(XminU,dimXU2)                                                                                             \
                                        /* Definition de l'abscisse minimale de [XmaxU/2,XmaxU].                                     */
#    define    XmaxU2                                                                                                                   \
                         PRED(XminU2)                                                                                                   \
                                        /* Definition de l'abscisse maximale de [XminU,XmaxU/2].                                     */
#    define    XcentreU                                                                                                                 \
                         XminU2                                                                                                         \
                                        /* Centre "approximatif" de [XminU,XmaxU].                                                   */
#    define    YminU                                                                                                                    \
                         COORDONNEE_MINIMALE                                                                                            \
                                        /* Ordonnee minimale,                                                                        */
#    define    YmaxU                                                                                                                    \
                         COORDONNEE_MAXIMALE(logYU)                                                                                     \
                                        /* Ordonnee maximale.                                                                        */
#    define    dimYU                                                                                                                    \
                         DIMENSION(YminU,YmaxU)                                                                                         \
                                        /* Dimension de l'axe vertical.                                                              */
#    define    PasYU                                                                                                                    \
                         PAS_COORDONNEE                                                                                                 \
                                        /* Pas vertical.                                                                             */
#    define    dimYU2                                                                                                                   \
                         MOIT(dimYU)                                                                                                    \
                                        /* Definition de la longueur de la moitie de l'axe vertical.                                 */
#    define    YminU2                                                                                                                   \
                         ADD2(YminU,dimYU2)                                                                                             \
                                        /* Definition de l'ordonnee minimale de [YmaxU/2,YmaxU].                                     */
#    define    YmaxU2                                                                                                                   \
                         PRED(YminU2)                                                                                                   \
                                        /* Definition de l'ordonnee maximale de [YminU,YmaxU/2].                                     */
#    define    YcentreU                                                                                                                 \
                         YminU2                                                                                                         \
                                        /* Centre "approximatif" de [YminU,YmaxU].                                                   */

#    if        (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                             \
                )
#    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))                                                             \
                )
#    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))                                                             \
                )
#    Aif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )
#    Eif       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                             \
                )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E N O R M A L I S A T I O N   D E S   A X E S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    _cDENORMALISE_OXU(coordonnee)                                                                                            \
                         _cDENORMALISE_AXES(XminU,dimXU,coordonnee)
#    define    _lDENORMALISE_OXU(longueur)                                                                                              \
                         _lDENORMALISE_AXES(dimXU,longueur)
                                        /* Normalisation d'une longueur sur l'axe OX ; l'unite represente [XminU,XmaxU].             */
#    define    _cDENORMALISE_OYU(coordonnee)                                                                                            \
                         _cDENORMALISE_AXES(YminU,dimYU,coordonnee)
#    define    _lDENORMALISE_OYU(longueur)                                                                                              \
                         _lDENORMALISE_AXES(dimYU,longueur)
                                        /* Normalisation d'une longueur sur l'axe OY ; l'unite represente [YminU,YmaxU].             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M A L I S A T I O N   D E S   A X E S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    _____cNORMALISE_OXU(coordonnee)                                                                                          \
                         _____cNORMALISE_AXES(XminU,dimXU,coordonnee)
#    define    _____lNORMALISE_OXU(longueur)                                                                                            \
                         _____lNORMALISE_AXES(dimXU,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OX ; l'unite represente [XminU,XmaxU].           */
#    define    _____cNORMALISE_OYU(coordonnee)                                                                                          \
                         _____cNORMALISE_AXES(YminU,dimYU,coordonnee)
#    define    _____lNORMALISE_OYU(longueur)                                                                                            \
                         _____lNORMALISE_AXES(dimYU,longueur)
                                        /* Denormalisation d'une longueur sur l'axe OY ; l'unite represente [YminU,YmaxU].           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   N E C E S S A I R E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#    define    RAPPORT_DE_ZOOM_STANDARD_DU_FRAME_BUFFER_ULTRANET                                                                        \
                         UN                                                                                                             \
                                        /* Rapport de zoom standard (c'est-a-dire ne modifiant pas la taille de l'image).            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S T R U C T U R E S   N E C E S S A I R E S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#Aifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ULTRANET_FRAME_BUFFER
#Eifdef   __VERSION__COMPILER_LE_GRAPHIQUE_ULTRANET_FRAME_BUFFER




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