/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E D I T I O N   D ' U N   P A V E   D E   P O I N T S   D ' U N E   I M A G E  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/niveau$K' :                                                                                                */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1995??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_IMAGESF_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LES_COORDONNEES_SONT_DENORMALISEES                                                                                            \
                    VRAI                                                                                                                \
                                        /* Les coordonnees sont denormalisees ('VRAI') ou normalisees ('FAUX'). Ceci a ete introduit */ \
                                        /* le 20041122205642...                                                                      */
#define   LES_COORDONNEES_NORMALISEES_DOIVENT_LE_RESTER                                                                                 \
                    FAUX                                                                                                                \
                                        /* Si 'EST_FAUX(les_coordonnees_sont_denormalisees)' alors elles doivent rester dans [0,1]   */ \
                                        /* ('VRAI') ou etre denormalisees ('FAUX'). Ceci a ete introduit le 20041123105646...        */

#define   PERIODISER_X_ET_Y                                                                                                             \
                    VRAI
#define   SYMETRISER_X_ET_Y                                                                                                             \
                    FAUX
#define   PROLONGER_X_ET_Y                                                                                                              \
                    FAUX
#define   NIVEAU_FLOTTANT_HORS_IMAGE                                                                                                    \
                    FZERO
                                        /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1].           */
                                        /* La possibilite de symetriser a ete introduite le 20050721093201...                        */

#define   EDITER_TOUTE_L_IMAGE                                                                                                          \
                    FAUX                                                                                                                \
                                        /* Faut-il editer toute l'image ('VRAI') ou bien le sous-ensemble defini ci-apres ('FAUX') ? */ \
                                        /* Ce parametre fut introduit le 20060430090401...                                           */

#define   ABSCISSE_DU_CENTRE_DENORMALISEE                                                                                               \
                    Xmin
#define   ORDONNEE_DU_CENTRE_DENORMALISEE                                                                                               \
                    Ymin
                                        /* Point donnant le centre du pave dont on veut les niveaux (coordonnees denormalisees).     */

#define   ABSCISSE_DU_CENTRE_NORMALISEE                                                                                                 \
                    COORDONNEE_BARYCENTRIQUE_MINIMALE
#define   ORDONNEE_DU_CENTRE_NORMALISEE                                                                                                 \
                    COORDONNEE_BARYCENTRIQUE_MAXIMALE
                                        /* Point donnant le centre du pave dont on veut les niveaux (coordonnees normalisees).       */
#define   PAS_DE_L_ABSCISSE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER                                                             \
                    _____lNORMALISE_OX(I_lHOMOTHETIE_Std_OX(PasX))
#define   PAS_DE_L_ORDONNEE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER                                                             \
                    _____lNORMALISE_OY(I_lHOMOTHETIE_Std_OY(PasY))
                                        /* Pas de {Xf,Yf} lorsqu'elles ont utilisees et qu'elles doivent rester dans [0,1]. Ceci a   */
                                        /* ete introduit le 20041124100735...                                                        */
                                        /*                                                                                           */
                                        /* Le 20120212100832, les 'I_lHOMOTHETIE_Std_O?(...)'s  furent introduits...                 */

#define   DEMI_DELTA_X                                                                                                                  \
                    ZERO
#define   DEMI_DELTA_Y                                                                                                                  \
                    ZERO
                                        /* Definition des demi-cotes du pave dont on veut les niveaux.                               */

#define   EDITER_EN_DECIMAL                                                                                                             \
                    VRAI                                                                                                                \
                                        /* Faut-il editer en decimal ('VRAI') ou en hexa-decimal ('FAUX') ? Cela a ete introduit     */ \
                                        /* le 20130705125807...                                                                      */
#define   NOMBRE_DE_CHIFFRES_CONSTANT                                                                                                   \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les niveaux de type 'genere_p' avec un nombre de chiffres constant         */ \
                                        /* ('VRAI') ou bien avec juste le nombre de chiffres necessaires ('FAUX') ?                  */

#define   CONSERVER_LES_NOMBRES_NEGATIFS                                                                                                \
                    VRAI
#define   CONSERVER_LES_NOMBRES_POSITIFS                                                                                                \
                    VRAI
                                        /* Pour eliminer eventuellement les nombres negatifs et/ou les nombres positifs.             */
#define   VALEUR_D_EDITION_DES_NOMBRES_NEGATIFS                                                                                         \
                    FZERO
#define   VALEUR_D_EDITION_DES_NOMBRES_POSITIFS                                                                                         \
                    FZERO
                                        /* Valeur d'edition des nombres negatifs et/ou positifs eventuellement elimines.             */

#define   EDITER_LES_MESSAGES_DE_HORS_IMAGE                                                                                             \
                    FAUX                                                                                                                \
                                        /* Faut-il editer ('VRAI') ou pas ('FAUX') les messages d'erreur concernant les points       */ \
                                        /* hors-image (introduit le 20170923100510).                                                 */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/extrema.01.I"
                                        /* Introduit le 20051210184351 en ramplacement de 'NOMBRE_DE_CHIFFRES_NECESSAIRES(...)'.     */

#define   EDITION(condition,fonction_d_impression)                                                                                      \
                    Bblock                                                                                                              \
                    Test(condition)                                                                                                     \
                         Bblock                                                                                                         \
                         BLOC(fonction_d_impression);                                                                                   \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure d'edition conditionnelle...                                                     */

#define   MISE_EN_PAGE_AVANT_EDITION(Y,Y_centre,dd_Y,pasY,Ymin,Ymax,X,X_centre,dd_X,pasX,Xmin,Xmax)                                     \
                    Bblock                                                                                                              \
                    EDITION(I3ET(IFGE(dd_Y,pasY),IFEQ(Y,Y_centre),IFEQ(X,Xmin))                                                         \
                           ,BLOC(CALS(Fsauts_de_lignes(UN));)                                                                           \
                            );                                                                                                          \
                    EDITION(IFET(IFGE(dd_X,pasX),IFEQ(X,X_centre))                                                                      \
                           ,BLOC(CALS(FPrme0(" "));)                                                                                    \
                            );                                                                                                          \
                    Eblock                                                                                                              \
                                        /* Procedure de mise en page avant edition d'une valeur (introduit le 20041124100148).       */
#define   MISE_EN_PAGE_APRES_EDITION(Y,Y_centre,dd_Y,pasY,Ymin,Ymax,X,X_centre,dd_X,pasX,Xmin,Xmax)                                     \
                    Bblock                                                                                                              \
                    EDITION(IFNE(X,Xmax)                                                                                                \
                           ,BLOC(CALS(FPrme0(" "));)                                                                                    \
                            );                                                                                                          \
                    EDITION(IFET(IFNE(Y,Ymin),IFEQ(X,Xmax))                                                                             \
                           ,BLOC(CALS(Fsauts_de_lignes(UN));)                                                                           \
                            );                                                                                                          \
                                        /* ATTENTION, on utilise ici 'Ymin' et non pas 'Ymax' car, en effet, l'axe 'OY' est          */ \
                                        /* decrit de bas en haut...                                                                  */ \
                                                                                                                                        \
                    EDITION(IFET(IFGE(dd_X,pasX),IFEQ(X,X_centre))                                                                      \
                           ,BLOC(CALS(FPrme0(" "));)                                                                                    \
                            );                                                                                                          \
                    EDITION(I3ET(IFGE(dd_Y,pasY),IFEQ(Y,Y_centre),IFEQ(X,Xmax))                                                         \
                           ,BLOC(CALS(Fsauts_de_lignes(UN));)                                                                           \
                            );                                                                                                          \
                                                                                                                                        \
                    EDITION(I3ET(IFOU(IFGE(dd_Y,pasY),IFGE(dd_X,pasX))                                                                  \
                                ,IFEQ(Y,Ymin)                                                                                           \
                                ,IFEQ(X,Xmax)                                                                                           \
                                 )                                                                                                      \
                           ,BLOC(CALS(Fsauts_de_lignes(UN));)                                                                           \
                            );                                                                                                          \
                                                                                                                                        \
                    EDITION(IL_FAUT(ajouter_un_K_LF_en_fin_de_format_d_edition)                                                         \
                           ,BLOC(CALS(Fsauts_de_lignes(UN));)                                                                           \
                            );                                                                                                          \
                                        /* Introduit le 20140430184053...                                                            */ \
                    Eblock                                                                                                              \
                                        /* Procedure de mise en page apres edition d'une valeur (introduit le 20041124100148).       */

#define   nombre_de_caracteres_pour_les_sorties_non_standard_a_nombre_de_chiffres_constant                                              \
                    ADD2(nombre_de_decimales,TROIS)                                                                                     \
                                        /* Introduit le 20121116165351 afin de garantir une bonne tabulation lors des sorties        */ \
                                        /* a nombre de chiffres constant pour les images non standards...                            */

#include  xci/valeurs.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E D I T I O N   D ' U N   P A V E   D E   P O I N T S   D ' U N E   I M A G E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));

     DEFV(Logical,INIT(les_coordonnees_sont_denormalisees,LES_COORDONNEES_SONT_DENORMALISEES));
                                        /* Les coordonnees sont denormalisees ('VRAI') ou normalisees ('FAUX'). Ceci a ete introduit */
                                        /* le 20041122205642...                                                                      */
     DEFV(Logical,INIT(les_coordonnees_normalisees_doivent_le_rester,LES_COORDONNEES_NORMALISEES_DOIVENT_LE_RESTER));
                                        /* Si 'EST_FAUX(les_coordonnees_sont_denormalisees)' alors elles doivent rester dans [0,1]   */
                                        /* ('VRAI') ou etre denormalisees ('FAUX'). Ceci a ete introduit le 20041123105646...        */
     DEFV(Logical,INIT(periodiser_X,PERIODISER_X_ET_Y));
     DEFV(Logical,INIT(periodiser_Y,PERIODISER_X_ET_Y));
     DEFV(Logical,INIT(symetriser_X,SYMETRISER_X_ET_Y));
     DEFV(Logical,INIT(symetriser_Y,SYMETRISER_X_ET_Y));
     DEFV(Logical,INIT(prolonger_X,PROLONGER_X_ET_Y));
     DEFV(Logical,INIT(prolonger_Y,PROLONGER_X_ET_Y));
     DEFV(genere_Float,INIT(niveau_flottant_hors_image,NIVEAU_FLOTTANT_HORS_IMAGE));
                                        /* Pour savoir s'il faut periodiser ou prolonger les coordonnees {X,Y} dans [0,1].           */
                                        /* La possibilite de symetriser a ete introduite le 20050721093201...                        */

     DEFV(Logical,INIT(editer_toute_l_image,EDITER_TOUTE_L_IMAGE));
                                        /* Faut-il editer toute l'image ('VRAI') ou bien le sous-ensemble defini ci-apres ('FAUX') ? */
                                        /* Ce parametre fut introduit le 20060430090401...                                           */
     DEFV(Int,INIT(abscisse_du_centre_denormalisee,ABSCISSE_DU_CENTRE_DENORMALISEE));
     DEFV(Int,INIT(ordonnee_du_centre_denormalisee,ORDONNEE_DU_CENTRE_DENORMALISEE));
                                        /* Point donnant le centre du pave dont on veut les niveaux (coordonnees denormalisees).     */
     DEFV(Float,INIT(abscisse_du_centre_normalisee,FLOT__UNDEF));
     DEFV(Float,INIT(ordonnee_du_centre_normalisee,FLOT__UNDEF));
                                        /* Point donnant le centre du pave dont on veut les niveaux (coordonnees normalisees).       */
     DEFV(Float,INIT(pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester,FLOT__UNDEF));
     DEFV(Float,INIT(pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester,FLOT__UNDEF));
                                        /* Pas de {Xf,Yf} lorsqu'elles ont utilisees et qu'elles doivent rester dans [0,1]. Ceci a   */
                                        /* ete introduit le 20041124100735...                                                        */
     DEFV(Int,INIT(demi_delta_X,DEMI_DELTA_X));
     DEFV(Int,INIT(demi_delta_Y,DEMI_DELTA_Y));
                                        /* Definition des demi-cotes du pave dont on veut les niveaux.                               */

     DEFV(Logical,INIT(editer_en_decimal,EDITER_EN_DECIMAL));
                                        /* Faut-il editer en decimal ('VRAI') ou en hexa-decimal ('FAUX') ? Cela a ete introduit     */
                                        /* le 20130705125807...                                                                      */
     DEFV(Logical,INIT(nombre_de_chiffres_constant,NOMBRE_DE_CHIFFRES_CONSTANT));
                                        /* Faut-il editer les niveaux de type 'genere_p' avec un nombre de chiffres constant         */
                                        /* ('VRAI') ou bien avec juste le nombre de chiffres necessaires ('FAUX') ?                  */

     DEFV(Logical,INIT(conserver_les_nombres_negatifs,CONSERVER_LES_NOMBRES_NEGATIFS));
     DEFV(Logical,INIT(conserver_les_nombres_positifs,CONSERVER_LES_NOMBRES_POSITIFS));
                                        /* Pour eliminer eventuellement les nombres negatifs et/ou les nombres positifs.             */
     DEFV(Float,INIT(valeur_d_edition_des_nombres_negatifs,VALEUR_D_EDITION_DES_NOMBRES_NEGATIFS));
     DEFV(Float,INIT(valeur_d_edition_des_nombres_positifs,VALEUR_D_EDITION_DES_NOMBRES_POSITIFS));
                                        /* Valeur d'edition des nombres negatifs et/ou positifs eventuellement elimines.             */

     DEFV(Logical,INIT(editer_les_messages_de_hors_image,EDITER_LES_MESSAGES_DE_HORS_IMAGE));
                                        /* Faut-il editer ('VRAI') ou pas ('FAUX') les messages d'erreur concernant les points       */
                                        /* hors-image (introduit le 20170923100510).                                                 */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_L("standard=",les_images_sont_standards);

                         GET_ARGUMENT_L("denormalisees=""denorm=",les_coordonnees_sont_denormalisees);
                         GET_ARGUMENT_N("normalisees=""norm=",les_coordonnees_sont_denormalisees);
                         GET_ARGUMENT_L("rester_dans_0_1=""r_0_1=",les_coordonnees_normalisees_doivent_le_rester);
                         GET_ARGUMENT_L("periodiser_X=""per_X=",periodiser_X);
                         GET_ARGUMENT_L("symetriser_X=""sym_X=",symetriser_X);
                         GET_ARGUMENT_L("prolonger_X=""pro_X=",prolonger_X);
                         GET_ARGUMENT_L("periodiser_Y=""per_Y=",periodiser_Y);
                         GET_ARGUMENT_L("symetriser_Y=""sym_Y=",symetriser_Y);
                         GET_ARGUMENT_L("prolonger_Y=""pro_Y=",prolonger_Y);
                         GET_ARGUMENT_F("niveau_hors_image=""nhi=",niveau_flottant_hors_image);

                         GET_ARGUMENT_L("toute=""image=",editer_toute_l_image);
                         GET_ARGUMENT_I("x=""X=",abscisse_du_centre_denormalisee);
                         GIT_ARGUMENT_F("xf=""Xf=",abscisse_du_centre_normalisee,ABSCISSE_DU_CENTRE_NORMALISEE);
                         GIT_ARGUMENT_F("pxf=""pXf="
                                       ,pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester
                                       ,PAS_DE_L_ABSCISSE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER
                                        );
                         GET_ARGUMENT_I("y=""Y=",ordonnee_du_centre_denormalisee);
                         GIT_ARGUMENT_F("yf=""Yf=",ordonnee_du_centre_normalisee,ORDONNEE_DU_CENTRE_NORMALISEE);
                         GIT_ARGUMENT_F("pyf=""pYf="
                                       ,pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester
                                       ,PAS_DE_L_ORDONNEE_DU_CENTRE_NORMALISEE_LORSQU_ELLE_DOIT_LE_RESTER
                                        );

                         GET_ARGUMENT_I("dx=""dX=""Dx=""DX=",demi_delta_X);
                         GET_ARGUMENT_I("dy=""dY=""Dy=""DY=",demi_delta_Y);

                         GET_ARGUMENT_L("decimal=""ed=",editer_en_decimal);
                         GET_ARGUMENT_N("hexadecimal=""ehd=",editer_en_decimal);
                         GET_ARGUMENT_L("constant=",nombre_de_chiffres_constant);
                         GET_ARGUMENT_C("signe=",valeurs_signees);
                         GET_ARGUMENT_C("format=",format_d_edition);
                                        /* On notera le 20070302110607, que l'on peut ecrire :                                       */
                                        /*                                                                                           */
                                        /*                  format="f"                                                               */
                                        /*                                                                                           */
                                        /* ('v $Falias_change format=') comme argument explicite dans l'appel a une commande '$X'.   */
                                        /* Par contre, definir :                                                                     */
                                        /*                                                                                           */
                                        /*                  set       PaRaMeTrEs='... format="f" ...'                                */
                                        /*                                                                                           */
                                        /* puis appeler une commande '$X' avec comme argument explicite '$PaRaMeTrEs' ne marchera    */
                                        /* pas car, en effet, les '$K_QD' qui entourent le format 'f' seront integrees au format,    */
                                        /* ce qui est evidemment incorrect ('v $Falias_Udisk format='). Il a donc ete decide a cette */
                                        /* date de ne jamais encadrer des formats ("f", "g",...) par des '$K_QD', quel que soit      */
                                        /* l'utilisation. Au passage, si l'on souhaitait veritablement "double quoter" les formats   */
                                        /* ("f", "g",...), il suffirait d'ecrire :                                                   */
                                        /*                                                                                           */
                                        /*                  set       PaRaMeTrEs=`eval echo '... format="f" ...'`                    */
                                        /*                                                                                           */
                                        /* pour avoir les '$K_QD's et les "effacer" immediatement...                                 */
                         GET_ARGUMENT_I("decimales=",nombre_de_decimales);

                         GET_ARGUMENT_L("LF=""K_LF=",ajouter_un_K_LF_en_fin_de_format_d_edition);
                                        /* Introduit le 20140430184053...                                                            */

                         GET_ARGUMENT_L("negatifs=""n=",conserver_les_nombres_negatifs);
                         GET_ARGUMENT_F("nn=""niveau_negatif=",valeur_d_edition_des_nombres_negatifs);
                         GET_ARGUMENT_L("positifs=""p=",conserver_les_nombres_positifs);
                         GET_ARGUMENT_F("np=""niveau_positif=",valeur_d_edition_des_nombres_positifs);

                         GET_ARGUMENT_L("interpoler=""inter="
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                                        );
                         GET_ARGUMENT_N("ne_pas_interpoler=""ninter="
                                       ,FFload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement
                                        );
                                        /* Parametres introduits le 20080926133545 et completes le 20090603182930 par la negation... */
                         GET_ARGUMENT_L("lineaire=""bilineaire="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                         GET_ARGUMENT_N("cubique=""bicubique="
                                       ,FFload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire
                                        );
                         GET_ARGUMENT_L("pasX_et_pasY=""pasXY=",FFload_point_coordonnees_01_____utiliser_pasX_et_pasY);
                         GET_ARGUMENT_I("pasX=",FFload_point_coordonnees_01_____pasX);
                         GET_ARGUMENT_I("pasY=",FFload_point_coordonnees_01_____pasY);

                         GET_ARGUMENT_L("editer_les_messages_de_hors_image=""editer_messages=",editer_les_messages_de_hors_image);
                                        /* Arguments introduits le 20170923100510...                                                 */
                         )
                    )

     Test(EST_FAUX(les_coordonnees_sont_denormalisees))
          Bblock
          Test(EST_FAUX(les_coordonnees_normalisees_doivent_le_rester))
               Bblock
               EGAL(abscisse_du_centre_denormalisee,_cDENORMALISE_OX(abscisse_du_centre_normalisee));
               EGAL(ordonnee_du_centre_denormalisee,_cDENORMALISE_OY(ordonnee_du_centre_normalisee));
                                        /* Cas ou les coordonnees etaient normalisees et qu'elles doivent etre denormalisees.        */
               Eblock
          ATes
               Bblock
               Test(EST_VRAI(les_images_sont_standards))
                    Bblock
                    PRINT_ERREUR("pour les images 'standard's les coordonnees doivent etre denormalisees");

                    EGAL(les_coordonnees_normalisees_doivent_le_rester,FAUX);
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_toute_l_image))
          Bblock
          EGAL(abscisse_du_centre_denormalisee,Xcentre);
          EGAL(ordonnee_du_centre_denormalisee,Ycentre);
          EGAL(demi_delta_X,dimX2);
          EGAL(demi_delta_Y,dimY2);
          EGAL(abscisse_du_centre_normalisee,_____cNORMALISE_OX(abscisse_du_centre_denormalisee));
          EGAL(ordonnee_du_centre_normalisee,_____cNORMALISE_OY(ordonnee_du_centre_denormalisee));
                                        /* Possibilite introduite le 20060430090401...                                               */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA,IFmageA,nom_imageA))))
          Bblock
          Test(I3ET(EST_FAUX(les_images_sont_standards)
                   ,EST_FAUX(les_coordonnees_sont_denormalisees)
                   ,EST_VRAI(les_coordonnees_normalisees_doivent_le_rester)
                    )
               )
               Bblock
               Gbegin_imageQ(DoDe
                            ,SOUS(ordonnee_du_centre_normalisee,_____lNORMALISE_OY(demi_delta_Y))
                            ,ADD2(ordonnee_du_centre_normalisee,_____lNORMALISE_OY(demi_delta_Y))
                            ,pas_de_l_ordonnee_du_centre_normalisee_lorsqu_elle_doit_le_rester
                            ,Float
                            ,SE12
                            ,DoIn
                            ,SOUS(abscisse_du_centre_normalisee,_____lNORMALISE_OX(demi_delta_X))
                            ,ADD2(abscisse_du_centre_normalisee,_____lNORMALISE_OX(demi_delta_X))
                            ,pas_de_l_abscisse_du_centre_normalisee_lorsqu_elle_doit_le_rester
                            ,Float
                            ,SE12
                             )
                    Bblock
                    Test(TEST_DANS_L_IMAGE(_cDENORMALISE_OX(X),_cDENORMALISE_OY(Y)))
                                        /* ATTENTION, jusqu'au 20090606144926,  il y avait ici :                                     */
                                        /*                                                                                           */
                                        /*                  Test(TEST_DANS_L_IMAGE(X,Y))                                             */
                                        /*                                                                                           */
                                        /* par erreur...                                                                             */
                         Bblock
                         MISE_EN_PAGE_AVANT_EDITION(Y
                                                   ,ordonnee_du_centre_normalisee
                                                   ,_____lNORMALISE_OY(demi_delta_Y)
                                                   ,pasY
                                                   ,Ymin_begin_colonneQ
                                                   ,Ymax_begin_colonneQ
                                                   ,X
                                                   ,abscisse_du_centre_normalisee
                                                   ,_____lNORMALISE_OX(demi_delta_X)
                                                   ,pasX
                                                   ,Xmin_begin_ligneQ
                                                   ,Xmax_begin_ligneQ
                                                    );

                         EDITION(EST_FAUX(les_images_sont_standards)
                                ,BLOC(DEFV(genere_Float,INIT(niveau_courant
                                                            ,FFload_point_coordonnees_01(IFmageA
                                                                                        ,X
                                                                                        ,Y
                                                                                        ,periodiser_X
                                                                                        ,periodiser_Y
                                                                                        ,symetriser_X
                                                                                        ,symetriser_Y
                                                                                        ,prolonger_X
                                                                                        ,prolonger_Y
                                                                                        ,niveau_flottant_hors_image
                                                                                         )
                                                             )
                                           );
                                      CAL3(Prme2(Cara(chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition))
                                                ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                                                ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_negatifs),IZLT(niveau_courant))
                                                     ,valeur_d_edition_des_nombres_negatifs
                                                     ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_positifs),IZGT(niveau_courant))
                                                          ,valeur_d_edition_des_nombres_positifs
                                                          ,niveau_courant
                                                           )
                                                      )
                                                 )
                                           );
                                      )
                                 );
                         Eblock
                    ATes
                         Bblock
                         Test(IL_FAUT(editer_les_messages_de_hors_image))
                                        /* Test introduit le 20170923100510...                                                       */
                              Bblock
                              CAL1(Prer0("\n"));
                                        /* Et ce a cause de la mise en page de 'MISE_EN_PAGE_APRES_EDITION(...)'.                    */
                              PRINT_ERREUR("le point demande est en dehors de l'image (1)");
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes

                    MISE_EN_PAGE_APRES_EDITION(Y
                                              ,ordonnee_du_centre_normalisee
                                              ,_____lNORMALISE_OY(demi_delta_Y)
                                              ,pasY
                                              ,Ymin_begin_colonneQ
                                              ,Ymax_begin_colonneQ
                                              ,X
                                              ,abscisse_du_centre_normalisee
                                              ,_____lNORMALISE_OX(demi_delta_X)
                                              ,pasX
                                              ,Xmin_begin_ligneQ
                                              ,Xmax_begin_ligneQ
                                               );
                    Eblock
               Gend_imageQ(EDoD,Float,EDoI,Float)
               Eblock
          ATes
               Bblock
               begin_imageQ(DoDe
                           ,SOUS(ordonnee_du_centre_denormalisee,demi_delta_Y)
                           ,ADD2(ordonnee_du_centre_denormalisee,demi_delta_Y)
                           ,pasY
                           ,DoIn
                           ,SOUS(abscisse_du_centre_denormalisee,demi_delta_X)
                           ,ADD2(abscisse_du_centre_denormalisee,demi_delta_X)
                           ,pasX
                            )
                    Bblock
                    Test(TEST_DANS_L_IMAGE(X,Y))
                         Bblock
                         MISE_EN_PAGE_AVANT_EDITION(Y
                                                   ,ordonnee_du_centre_denormalisee
                                                   ,demi_delta_Y
                                                   ,pasY
                                                   ,Ymin_begin_colonneQ
                                                   ,Ymax_begin_colonneQ
                                                   ,X
                                                   ,abscisse_du_centre_denormalisee
                                                   ,demi_delta_X
                                                   ,pasX
                                                   ,Xmin_begin_ligneQ
                                                   ,Xmax_begin_ligneQ
                                                    );

                         EDITION(EST_VRAI(les_images_sont_standards)
                                ,BLOC(CAL3(Prme2(COND(IL_FAUT(editer_en_decimal)
                                                     ,"%0*d"
                                                     ,"%0*x"
                                                      )
                                                ,COND(IL_FAUT(editer_en_decimal)
                                                     ,NOMBRE_DE_CHIFFRES_NECESSAIRES(load_point(ImageA,X,Y))
                                                     ,NHXOC
                                                      )
                                                ,load_point(ImageA,X,Y)
                                                 )
                                           );
                                      )
                                 );

#define   nombre_caracteres_nombre_chiffres_constant                                                                                    \
                    nombre_de_caracteres_pour_les_sorties_non_standard_a_nombre_de_chiffres_constant                                    \
                                        /* Afin de raccourcir une ligne qui suit...                                                  */

                         EDITION(EST_FAUX(les_images_sont_standards)
                                ,BLOC(DEFV(genere_Float,INIT(niveau_courant,loadF_point(IFmageA,X,Y)));
                                      CAL3(Prme2(COND(IL_NE_FAUT_PAS(nombre_de_chiffres_constant)
                                                     ,Cara(chain_Aconcaten4(INTRODUCTION_FORMAT
                                                                           ,valeurs_signees
                                                                           ,".*"
                                                                           ,format_d_edition
                                                                            )
                                                           )
                                                     ,Cara(chain_Aconcaten5(INTRODUCTION_FORMAT
                                                                           ,valeurs_signees
                                                                           ,chain_Aentier(nombre_caracteres_nombre_chiffres_constant)
                                                                           ,".*"
                                                                           ,FORMAT_D_EDITION_g
                                                                            )
                                                           )
                                                      )
                                                ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                                                ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_negatifs),IZLT(niveau_courant))
                                                     ,valeur_d_edition_des_nombres_negatifs
                                                     ,COND(IFET(IL_NE_FAUT_PAS(conserver_les_nombres_positifs),IZGT(niveau_courant))
                                                          ,valeur_d_edition_des_nombres_positifs
                                                          ,niveau_courant
                                                           )
                                                      )
                                                 )
                                           );
                                      )
                                 );
                                        /* Le 20121116165351 la gestion du nombre de chiffres constant pour les images non standards */
                                        /* en forcant, en particulier, le format 'FORMAT_D_EDITION_g'...                             */

#undef    nombre_caracteres_nombre_chiffres_constant

                         Eblock
                    ATes
                         Bblock
                         Test(IL_FAUT(editer_les_messages_de_hors_image))
                                        /* Test introduit le 20170923100510...                                                       */
                              Bblock
                              CAL1(Prer0("\n"));
                                        /* Et ce a cause de la mise en page de 'MISE_EN_PAGE_APRES_EDITION(...)'.                    */
                              PRINT_ERREUR("le point demande est en dehors de l'image (2)");
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ETes

                    MISE_EN_PAGE_APRES_EDITION(Y
                                              ,ordonnee_du_centre_denormalisee
                                              ,demi_delta_Y
                                              ,pasY
                                              ,Ymin_begin_colonneQ
                                              ,Ymax_begin_colonneQ
                                              ,X
                                              ,abscisse_du_centre_denormalisee
                                              ,demi_delta_X
                                              ,pasX
                                              ,Xmin_begin_ligneQ
                                              ,Xmax_begin_ligneQ
                                               );
                    Eblock
               end_imageQ(EDoD,EDoI)
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.