/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   A U T O M A T I Q U E   D ' U N   C - S H E L L - S C R I P T                                        */
/*        R E P E T A N T   L A   M E M E   O P E R A T I O N   P O U R   U N E   S E Q U E N C E   D ' I M A G E S  :               */
/*        S U I V A N T   D E S   N U M E R O S   O U   B I E N   S U I V A N T   L E S   C O M P O S A N T E S   { R , V , B }  :   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere un 'C-Shell-script' contenant                                                            */
/*                  une ligne par numero, et repetant ainsi une meme operation                                                       */
/*                  pour une (ou plusieurs) sequences d'images.                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple :                                                                                                                  */
/*                                                                                                                                   */
/* $xci/genere$X C='$xci/vraies_C$X A=$xw1/s.%04d p=$xiP/p RR=$xw1/s$ROUGE.%04d RV=$xw1/s$VERTE.%04d RB=$xw1/s$BLEUE.%04d $formatI'  */
/*                                                                                                                                   */
/*                                           \__/                          \__/                 \__/                 \__/            */
/*                                            ||                            ||                   ||                   ||             */
/*                                            ||                            ||                   ||                   ||             */
/*                                -------------------------------------------------------------------------------------              */
/*                               |                                                                                                   */
/*        ATTENTION :            |                                                                                                   */
/*                              \|/                                                                                                  */
/*                               .                                                                                                   */
/*                                                                                                                                   */
/*                    La chaine "%04d" ne peut pas apparaitre                                                                        */
/*                  plus de huit fois dans la commande Argument.                                                                     */
/*                  Cette limite n'est pas infranchissable, elle                                                                     */
/*                  est en effet imposee uniquement par la fonction                                                                  */
/*                  'GENERATION_DE_LA_COMMANDE_COURANTE(...)' qui                                                                    */
/*                  est definie et utilisee plus bas...                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    Dans un '$Z', il est imperatif que si '$xci/genere$X'                                                          */
/*                  fait l'objet d'un 'eval', tout soit sur la meme ligne a                                                          */
/*                  cause du couple '`...`'. On ecrira donc :                                                                        */
/*                                                                                                                                   */
/*                                      eval      `$xci/genere$X commande='(...)' en_tete=FAUX RVB=VRAI separateur=VRAI`             */
/*                                                                                                                                   */
/*                  afin de ne pas avoir le message :                                                                                */
/*                                                                                                                                   */
/*                                      /bin/csh: Event not found.                                                                   */
/*                                                                                                                                   */
/*                  tres desagreable...                                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple :                                                                                                                  */
/*                                                                                                                                   */
/*                  $xci/genere$X       RVB=VRAI C='$xci/acces$X A=$xT/IMAGE.1%s R=$xT/IMAGE.2%s $formatI'                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/genere$K' :                                                                                                */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1990??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____PAS_DE_LIBRAIRIES_DYNAMIQUES
                                        /* Ceci a ete introduit le 20030208113849 a cause de 'v $xcc/cpp$Z 20021212145057'.          */

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_L_EN_TETE_DU_C_SHELL_SCRIPT                                                                                            \
                    VRAI                                                                                                                \
                                        /* Indique si l'on doit editer l'en-tete "standard" du 'C-Shell-Script' ('VRAI') ou pas      */ \
                                        /* ('FAUX').                                                                                 */

#define   PARENTHESER_LES_COMMANDES                                                                                                     \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit parentheser les commandes ('VRAI') ou pas ('FAUX'). Ceci a ete  ,    */ \
                                        /* introduit le 20091208144756...                                                            */

#define   PAS_D_ATTENTE_PRELIMINAIRE                                                                                                    \
                    ZERO                                                                                                                \
                                        /* Duree d'attente preliminaire destinee a eviter des charges exceptionnelles des MACHINEs   */ \
                                        /* lors d'utilisations paralleles ('v $xiirc/.MANE.41.4.$U execRVB....xci.accumule.42.X'     */ \
                                        /* par exemple). Ainsi on pourra decaler temporellement les differentes branches paralleles  */ \
                                        /* et eviter ainsi que plusieurs chargements d'albums aient lieu simultanement...            */ \
                                        /* Ceci fut introduit le 20111011210301...                                                   */

#define   METTRE_UN_SEPARATEUR_DE_COMMANDE                                                                                              \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit editer un ";" de separation de commande ('VRAI') ou pas ('FAUX'),    */ \
                                        /* ceci pouvant servir lorsque l'on fait un :                                                */ \
                                        /*                                                                                           */ \
                                        /*                  eval      `$xci/genere$X ...`                                            */ \
                                        /*                                                                                           */

#define   TRAITER_LES_COMPOSANTES_RVB_ET_NON_PAS_UNE_SEQUENCE                                                                           \
                    FAUX                                                                                                                \
                                        /* Indique si l'on traite une sequence d'images numerotees ('FAUX'), ou bien les trois       */ \
                                        /* composantes {R,V,B} ('VRAI').                                                             */
#define   UTILISER_LE_SYSTEME_HLS_PLUTOT_QUE_LE_SYSTEME_RVB                                                                             \
                    FAUX                                                                                                                \
                                        /* Indique si l'on utilise le systeme 'HLS' plutot que le systeme 'RVB' (introduit le        */ \
                                        /* 20111216105032).                                                                          */
#define   GENERER_LES_POSTFIXES_RVB_ou_HLS_ou_XYZ                                                                                       \
                    VRAI                                                                                                                \
                                        /* Indique, lorsque l'on traite les trois composantes {R,V,B}, si l'on doit editer les       */ \
                                        /* postfixes {$ROUGE,$VERTE,$BLEUE} ('VRAI') ou les noms {ROUGE,VERTE,BLEUE} ('FAUX').       */ \
                                        /* Dans ce dernier cas, les postfixes {$ROUGE,$VERTE,$BLEUE} demeurent accessibles ; il      */ \
                                        /* suffit d'ecrire :                                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  $%s                                                                      */ \
                                        /*                                                                                           */ \
                                        /* ce qui, grace au '$' qui les precede, permet de generer des references aux variables      */ \
                                        /* d'environnement {$ROUGE,$VERTE,$BLEUE}. Bien evidemment, la commande, ou tout du moins    */ \
                                        /* les chaines du type '$%s' doivent etre dans des quotes simples afin d'empecher le '$CSH'  */ \
                                        /* d'evaluer ces "$%s"...                                                                    */
#define   LES_COMPOSANTES_RVB_SONT_EN_FAIT_DES_COMPOSANTES_XYZ                                                                          \
                    FAUX                                                                                                                \
                                        /* Lorsque le traitement des trois composantes {R,V,B} est demande, est-ce bien du {R,V,B}   */ \
                                        /* qui va etre genere ('FAUX') ou bien du {cX,cY,cZ} ('VRAI') ? Ceci fut introduit le        */ \
                                        /* 20050907092935 pour 'v $xrs/project2D.01$Z 20050907093830'. La valeur par defaut          */ \
                                        /* garantit la compatibilite anterieure...                                                   */

#define   GENERER_DU_PARALLELISME_POUR_LES_COMPOSANTES_RVB                                                                              \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit generer du parallelisme ('VRAI') ou pas ('FAUX') lors du traitement  */ \
                                        /* des composantes {R,V,B} (ou {cX,cY,cZ}) ? Ceci fut introduit le 20071214140707.           */

#define   TENTER_DE_CORRIGER_CERTAINES_FAUTES_DE_FORMAT                                                                                 \
                    VRAI                                                                                                                \
                                        /* Indique si l'on doit tenter de corriger certaines fautes de format ('VRAI') telle la      */ \
                                        /* fameuse "%S" (pour "%s") ou non ('VRAI'). Ceci fut introduit le 20061225100727, mais      */ \
                                        /* fut inhibe le 20070109101142 pour des raisons expliquees ci-apres, dans le commentaire    */ \
                                        /* 'v $xci/genere$K 20070109101142'. Grace a 'v $xig/fonct$vv$DEF 20070110091012, il a ete   */ \
                                        /* possible de revenir a 'VRAI' le 20070110091750...                                         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : je note le 20120814150208 que cette correction peut avoir des consequences    */ \
                                        /* desastreuses si la commande a executer contient des quotes ou encore des back-slashes     */ \
                                        /* comme cela s'est vu dans 'v $xiirv/.PART.4.15.$U corriger_certaines_fautes=FAUX'...       */

#define   POUR_parallele_1N_EXECUTER_LES_COMMANDES_SOUS_CSH                                                                             \
                    FAUX                                                                                                                \
                                        /* La possibilite d'executer les commandes de 'v $xcg/parallele.1N$K CSH' a ete introduite   */ \
                                        /* le 20091021102302, la valeur par defaut etant compatible avec celle qui est fixee dans    */ \
                                        /* 'v $xcg/parallele.1N$K EXECUTER_LES_COMMANDES_SOUS_CSH'...                                */

#include  xci/sequence.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SELECTION__RVB_HLS_XYZ(element_RVB,element_HLS,element_XYZ)                                                                   \
                    COND(EST_VRAI(les_composantes_RVB_sont_en_fait_des_composantes_XYZ)                                                 \
                        ,element_XYZ                                                                                                    \
                        ,COND(EST_VRAI(utiliser_le_systeme_HLS_plutot_que_le_systeme_RVB)                                               \
                             ,element_HLS                                                                                               \
                             ,element_RVB                                                                                               \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Afin de choisir entre le 'RVB' et le 'XYZ' (introduit le 20071214135136)...               */
#define   NOM_DES_COMPOSANTES(chaine_car_RVB,var_env_RVB,chaine_car_HLS,var_env_HLS,chaine_car_XYZ,var_env_XYZ)                         \
                    COND(IL_FAUT(generer_les_postfixes_RVB_ou_HLS_ou_XYZ)                                                               \
                        ,Cara(SELECTION__RVB_HLS_XYZ(var_env_RVB,var_env_HLS,var_env_XYZ))                                              \
                        ,Cara(SELECTION__RVB_HLS_XYZ(chaine_car_RVB,chaine_car_HLS,chaine_car_XYZ))                                     \
                         )                                                                                                              \
                                        /* Afin de choisir ce que l'on va editer en mode {R,V,B}.                                    */

#include  xci/genere.I"
                                        /* Ce '$I' a ete cree le 20071227130205 a cause de la derivation formelle et plus            */
                                        /* particulierement du fichier 'v $xcc/cpp$Z INCLUDES_1.sed' qui "inhibe" temporairement     */
                                        /* les 'define's du niveau le plus bas des fichiers...                                       */

#define   GENERATION_DE_LA_COMMANDE_COURANTE(valeur_a_editer,c_est_la_derniere_commande,arguments_specifiques,temporisation_eventuelle) \
                                        /* L'argument 'arguments_specifiques' a ete introduit le 20091208125349...                   */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'temporisation_eventuelle' a ete introduit le 20111011210301...                */ \
                    Bblock                                                                                                              \
                    DEFV(Positive,INIT(nombre_de_K_POUR_CENT,chain_comptage_des_occurences_d_un_caractere(commande,K_POUR_CENT)));      \
                                                                                                                                        \
                    Choi(nombre_de_K_POUR_CENT)                                                                                         \
                                        /* Sequence introduite le 20071227114214...                                                  */ \
                         Bblock                                                                                                         \
                         GENERATION_D_UN_CAS(ZERO,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                      \
                         GENERATION_D_UN_CAS(UN,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                        \
                         GENERATION_D_UN_CAS(DEUX,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                      \
                         GENERATION_D_UN_CAS(TROIS,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                     \
                         GENERATION_D_UN_CAS(QUATRE,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                    \
                         GENERATION_D_UN_CAS(CINQ,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                      \
                         GENERATION_D_UN_CAS(SIX,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                       \
                         GENERATION_D_UN_CAS(SEPT,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                      \
                         GENERATION_D_UN_CAS(HUIT,valeur_a_editer,arguments_specifiques,temporisation_eventuelle);                      \
                                        /* C'est a l'interieur de l'un de ces 'GENERATION_D_UN_CAS(...)'s que la commande            */ \
                                        /* 'commande' est editee ('v $xci/genere$I CAL2.GPrin').                                     */ \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              Test(EST_FAUX(le_message_d_erreur_a_deja_ete_emis))                                                       \
                                        /* Introduit le 20071228115524 afin de n'emettre le message relatif a trop de "%"s qu'une    */ \
                                        /* seule fois...                                                                             */ \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("il y a trop de '%'s a generer dans la commande");                                      \
                                   CAL1(Prer1("(ils sont au nombre de %d)\n",nombre_de_K_POUR_CENT));                                   \
                                                                                                                                        \
                                   EGAL(le_message_d_erreur_a_deja_ete_emis,VRAI);                                                      \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                                                                                                                                        \
                    Test(IFET(IL_FAUT(mettre_un_separateur_de_commande),EST_FAUX(c_est_la_derniere_commande)))                          \
                         Bblock                                                                                                         \
                         CAL2(Prin1(" %c",K_POINT_VIRGULE));                                                                            \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFOU(IL_NE_FAUT_PAS(traiter_les_composantes_RVB_et_non_pas_une_sequence)                                       \
                             ,IFET(IL_FAUT(traiter_les_composantes_RVB_et_non_pas_une_sequence)                                         \
                                  ,IL_NE_FAUT_PAS(generer_du_parallelisme_pour_les_composantes_RVB)                                     \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         CAL2(Prin0("\n"));                                                                                             \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    INITIALISATION_DE_LA_GENERATION_DE_LA_COMMANDE_COURANTE                                                             \
                                        /* En effet, 'GENERATION_DE_LA_COMMANDE_COURANTE(...)' est appelee plusieurs fois de         */ \
                                        /* suite et il convient donc de reinitialiser 'v $xci/genere$I LISTE_DES_VALEURS' a chaque   */ \
                                        /* fois...                                                                                   */ \
                    Eblock                                                                                                              \
                                        /* Generation de la commande courante...                                                     */

#define   GENERATION_EVENTUELLE_DU_PARALLELISME(chaine)                                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(generer_du_parallelisme_pour_les_composantes_RVB))                                                     \
                         Bblock                                                                                                         \
                         CAL2(Prin1("%s",chaine));                                                                                      \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Generation du code necessaire au parallelisme.                                            */
#define   COMMANDE_COURANTE                                                                                                             \
                    chain_Aconcaten4(" commande",chain_numero(INCR(numero_de_la_commande_courante,I),UN),"=",C_VERITABLE_QUOTE)         \
                                        /* Pour numeroter automatiquement les commandes (introduit le 20071215112601). On notera     */ \
                                        /* qu'a priori UN seul chiffre suffit puisqu'il y a de 1 a 3 commandes...                    */ \
                                        /*                                                                                           */ \
                                        /* C'est donc ici que l'on genere les sequences :                                            */ \
                                        /*                                                                                           */ \
                                        /*                  commande1="                                                              */ \
                                        /*                  commande2="                                                              */ \
                                        /*                  commande3="                                                              */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   A U T O M A T I Q U E   D ' U N   C - S H E L L - S C R I P T                                        */
/*        R E P E T A N T   L A   M E M E   O P E R A T I O N   P O U R   U N E   S E Q U E N C E   D ' I M A G E S  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(commande),C_VIDE));
                                        /* Chaine de caracteres donnant la commande a repeter...                                     */

     DEFV(Logical,INIT(editer_l_en_tete_du_C_shell_script,EDITER_L_EN_TETE_DU_C_SHELL_SCRIPT));
                                        /* Indique si l'on doit editer l'en-tete "standard" du 'C-Shell-Script' ('VRAI') ou pas      */
                                        /* ('FAUX').                                                                                 */

     DEFV(Logical,INIT(traiter_les_composantes_RVB_et_non_pas_une_sequence,TRAITER_LES_COMPOSANTES_RVB_ET_NON_PAS_UNE_SEQUENCE));
                                        /* Indique si l'on traite une sequence d'images numerotees ('FAUX'), ou bien les trois       */
                                        /* composantes {R,V,B} ('VRAI').                                                             */
     DEFV(Logical,INIT(utiliser_le_systeme_HLS_plutot_que_le_systeme_RVB,UTILISER_LE_SYSTEME_HLS_PLUTOT_QUE_LE_SYSTEME_RVB));
                                        /* Indique si l'on utilise le systeme 'HLS' plutot que le systeme 'RVB' (introduit le        */
                                        /* 20111216105032).                                                                          */
     DEFV(Logical,INIT(generer_les_postfixes_RVB_ou_HLS_ou_XYZ,GENERER_LES_POSTFIXES_RVB_ou_HLS_ou_XYZ));
                                        /* Indique, lorsque l'on traite les trois composantes {R,V,B}, si l'on doit editer les       */
                                        /* postfixes {$ROUGE,$VERTE,$BLEUE} ('VRAI') ou les noms {ROUGE,VERTE,BLEUE} ('FAUX').       */
                                        /* Dans ce dernier cas, les postfixes {$ROUGE,$VERTE,$BLEUE} demeurent accessibles ; il      */
                                        /* suffit d'ecrire :                                                                         */
                                        /*                                                                                           */
                                        /*                  $%s                                                                      */
                                        /*                                                                                           */
                                        /* ce qui, grace au '$' qui les precede, permet de generer des references aux variables      */
                                        /* d'environnement {$ROUGE,$VERTE,$BLEUE}. Bien evidemment, la commande, ou tout du moins    */
                                        /* les chaines du type '$%s' doivent etre dans des quotes simples afin d'empecher le '$CSH'  */
                                        /* d'evaluer ces "$%s"...                                                                    */
     DEFV(Logical,INIT(les_composantes_RVB_sont_en_fait_des_composantes_XYZ,LES_COMPOSANTES_RVB_SONT_EN_FAIT_DES_COMPOSANTES_XYZ));
                                        /* Lorsque le traitement des trois composantes {R,V,B} est demande, est-ce bien du {R,V,B}   */
                                        /* qui va etre genere ('FAUX') ou bien du {cX,cY,cZ} ('VRAI') ? Ceci fut introduit le        */
                                        /* 20050907092935 pour 'v $xrs/project2D.01$Z 20050907093830'. La valeur par defaut          */
                                        /* garantit la compatibilite anterieure...                                                   */
     DEFV(Logical,INIT(generer_du_parallelisme_pour_les_composantes_RVB,GENERER_DU_PARALLELISME_POUR_LES_COMPOSANTES_RVB));
                                        /* Indique si l'on doit generer du parallelisme ('VRAI') ou pas ('FAUX') lors du traitement  */
                                        /* des composantes {R,V,B} (ou {cX,cY,cZ}) ? Ceci fut introduit le 20071214140707.           */
     DEFV(CHAR,INIC(POINTERc(arguments_generaux),C_VIDE));
                                        /* Arguments generaux (introduits le 20100412140113).                                        */
     DEFV(CHAR,INIC(POINTERc(arguments_specifiques_ROUGE_ou_TEINT_ou_X),C_VIDE));
     DEFV(CHAR,INIC(POINTERc(arguments_specifiques_VERTE_ou_LUMIN_ou_Y),C_VIDE));
     DEFV(CHAR,INIC(POINTERc(arguments_specifiques_BLEUE_ou_SATUR_ou_Z),C_VIDE));
                                        /* Arguments specifiques a chacune des trois composantes {R,V,B} (ou {cX,cY,cZ}). Ceci fut   */
                                        /* introduit le 20091208125349.                                                              */

     DEFV(Logical,INIT(parentheser_les_commandes,PARENTHESER_LES_COMMANDES));
                                        /* Indique si l'on doit parentheser les commandes ('VRAI') ou pas ('FAUX'). Ceci a ete  ,    */
                                        /* introduit le 20091208144756...                                                            */

     DEFV(Int,INIT(duree_d_attente_preliminaire_ROUGE_ou_TEINT_ou_X,PAS_D_ATTENTE_PRELIMINAIRE));
     DEFV(Int,INIT(duree_d_attente_preliminaire_VERTE_ou_LUMIN_ou_Y,PAS_D_ATTENTE_PRELIMINAIRE));
     DEFV(Int,INIT(duree_d_attente_preliminaire_BLEUE_ou_SATUR_ou_Z,PAS_D_ATTENTE_PRELIMINAIRE));
                                        /* Durees d'attente preliminaire destinees a eviter des charges exceptionnelles des MACHINEs */
                                        /* lors d'utilisations paralleles ('v $xiirc/.MANE.41.4.$U execRVB....xci.accumule.42.X'     */
                                        /* par exemple). Ainsi on pourra decaler temporellement les differentes branches paralleles  */
                                        /* et eviter ainsi que plusieurs chargements d'albums aient lieu simultanement...            */
                                        /* Ceci fut introduit le 20111011210301...                                                   */

     DEFV(Logical,INIT(mettre_un_separateur_de_commande,METTRE_UN_SEPARATEUR_DE_COMMANDE));
                                        /* Indique si l'on doit editer un ";" de separation de commande ('VRAI') ou pas ('FAUX'),    */
                                        /* ceci pouvant servir lorsque l'on fait un :                                                */
                                        /*                                                                                           */
                                        /*                  eval      `$xci/genere$X ...`                                            */

     DEFV(Logical,INIT(tenter_de_corriger_certaines_fautes_de_format,TENTER_DE_CORRIGER_CERTAINES_FAUTES_DE_FORMAT));
                                        /* Indique si l'on doit tenter de corriger certaines fautes de format ('VRAI') telle la      */
                                        /* fameuse "%S" (pour "%s") ou non ('VRAI'). Ceci fut introduit le 20061225100727...         */
                                        /*                                                                                           */
                                        /* ATTENTION : je note le 20120814150208 que cette correction peut avoir des consequences    */
                                        /* desastreuses si la commande a executer contient des quotes ou encore des back-slashes     */
                                        /* comme cela s'est vu dans 'v $xiirv/.PART.4.15.$U corriger_certaines_fautes=FAUX'...       */

     DEFV(Logical,INIT(pour_parallele_1N_executer_les_commandes_sous_CSH,POUR_parallele_1N_EXECUTER_LES_COMMANDES_SOUS_CSH));
                                        /* La possibilite d'executer les commandes de 'v $xcg/parallele.1N$K CSH' a ete introduite   */
                                        /* le 20091021102302, la valeur par defaut etant compatible avec celle qui est fixee dans    */
                                        /* 'v $xcg/parallele.1N$K EXECUTER_LES_COMMANDES_SOUS_CSH'...                                */

     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */

     DEFV(Logical,INIT(le_message_d_erreur_a_deja_ete_emis,FAUX));
                                        /* Introduit le 20071228115524 afin de n'emettre le message relatif a trop de "%"s qu'une    */
                                        /* seule fois...                                                                             */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("commande=""c=""C=",commande);

                         GET_ARGUMENT_L("et=""en_tete=""csh=",editer_l_en_tete_du_C_shell_script);

                         GET_ARGUMENT_L("parentheser=""parentheses=""parent=",parentheser_les_commandes);
                                        /* Arguments introduits le 20091208144756...                                                 */

                         GET_ARGUMENT_L("RVB=",traiter_les_composantes_RVB_et_non_pas_une_sequence);
                         GET_ARGUMENT_L("HLS=",utiliser_le_systeme_HLS_plutot_que_le_systeme_RVB);
                                        /* Argument introduit le 20111216105032...                                                   */
                         GET_ARGUMENT_L("postfixes_RVB=""postfixes_HLS=""postfixes_XYZ=""postfixes="
                                       ,generer_les_postfixes_RVB_ou_HLS_ou_XYZ
                                        );
                                        /* Les arguments {"postfixes_HLS=","postfixes_XYZ=","postfixes="} furent introduits le       */
                                        /* 20111216115048...                                                                         */
                         GET_ARGUMENT_L("XYZ=",les_composantes_RVB_sont_en_fait_des_composantes_XYZ);
                         GET_ARGUMENT_L("parallelisme=""parallele=""para=",generer_du_parallelisme_pour_les_composantes_RVB);
                         GET_ARGUMENT_N("sequentiel=""seq=",generer_du_parallelisme_pour_les_composantes_RVB);
                         GET_ARGUMENT_L("separateur=""sep=""pv=",mettre_un_separateur_de_commande);
                         GET_ARGUMENT_C("arguments_generaux=""ag=",arguments_generaux);
                                        /* Arguments introduits le 20100412140113, puis le 20100701101530 en ce qui concerne         */
                                        /* "sequentiel=" et "seq="...                                                                */
                         GET_ARGUMENT_C("arguments_specifiques_ROUGE=""asR=" ##
                                        "arguments_specifiques_TEINT=""asH=" ##
                                        "arguments_specifiques_X=""asX=" ##
                                        "arguments_specifiques_1=""as1="
                                       ,arguments_specifiques_ROUGE_ou_TEINT_ou_X
                                        );
                         GET_ARGUMENT_C("arguments_specifiques_VERTE=""asV=" ##
                                        "arguments_specifiques_LUMIN=""asL=" ##
                                        "arguments_specifiques_Y=""asY=" ##
                                        "arguments_specifiques_2=""as2="
                                       ,arguments_specifiques_VERTE_ou_LUMIN_ou_Y
                                        );
                         GET_ARGUMENT_C("arguments_specifiques_BLEUE=""asB=" ##
                                        "arguments_specifiques_SATUR=""asS=" ##
                                        "arguments_specifiques_Z=""asZ=" ##
                                        "arguments_specifiques_3=""as3="
                                       ,arguments_specifiques_BLEUE_ou_SATUR_ou_Z
                                        );
                                        /* Les "arguments specifiques" ont ete introduits le 20091208125349...                       */
                                        /*                                                                                           */
                                        /* Le 20150430140514 ont ete introduits les arguments {1,2,3} afin de "symetriser" les       */
                                        /* commandes {execHLS,execRVB,execXYZ}...                                                    */

                         GET_ARGUMENT_I("attente_preliminaire_ROUGE=""apR=" ##
                                        "attente_preliminaire_TEINT=""apH=" ##
                                        "attente_preliminaire_X=""apX=" ##
                                        "attente_preliminaire_1=""ap1="
                                       ,duree_d_attente_preliminaire_ROUGE_ou_TEINT_ou_X
                                        );
                         GET_ARGUMENT_I("attente_preliminaire_VERTE=""apV=" ##
                                        "attente_preliminaire_LUMIN=""apL=" ##
                                        "attente_preliminaire_Y=""apY=" ##
                                        "attente_preliminaire_2=""ap2="
                                       ,duree_d_attente_preliminaire_VERTE_ou_LUMIN_ou_Y
                                        );
                         GET_ARGUMENT_I("attente_preliminaire_BLEUE=""apB=" ##
                                        "attente_preliminaire_SATUR=""apS=" ##
                                        "attente_preliminaire_Z=""apZ=" ##
                                        "attente_preliminaire_3=""ap3="
                                       ,duree_d_attente_preliminaire_BLEUE_ou_SATUR_ou_Z
                                        );
                                        /* Les temporisations ont ete introduites le 20111011210301...                               */
                                        /*                                                                                           */
                                        /* Le 20150430140514 ont ete introduits les arguments {1,2,3} afin de "symetriser" les       */
                                        /* commandes {execHLS,execRVB,execXYZ}...                                                    */

                         GET_ARGUMENT_L("fautes=""corriger_les_formats=""corriger_certaines_fautes=""corriger="
                                       ,tenter_de_corriger_certaines_fautes_de_format
                                        );

                         GET_ARGUMENT_L("CSH=""pCSH=""pcsh=",pour_parallele_1N_executer_les_commandes_sous_CSH);
                         GET_ARGUMENT_N("SH=""pSH=""psh=",pour_parallele_1N_executer_les_commandes_sous_CSH);

                         GET_ARGUMENT_I("premiere=""p=",premiere_image);
                                        /* Abreviation introduite le 20070112190525...                                               */
                         GET_ARGUMENT_I("derniere=""d=",derniere_image);
                                        /* Abreviation introduite le 20070112190525...                                               */
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         )
                    );

     Test(IL_NE_FAUT_PAS(tenter_de_corriger_certaines_fautes_de_format))
                                        /* Test introduit le 20061225100727...                                                       */
          Bblock
          Test(IL_NE_FAUT_PAS(traiter_les_composantes_RVB_et_non_pas_une_sequence))
               Bblock
               Test(EST_VRAI(les_composantes_RVB_sont_en_fait_des_composantes_XYZ))
                    Bblock
                    PRINT_ERREUR("les options 'RVB=' et 'XYZ=' ne sont pas utilisees correctement");
                    CAL1(Prer2("(l'utilisation de 'XYZ=%s' necessite 'RVB=%s')\n"
                              ,ETAT_LOGIQUE(NEUL(les_composantes_RVB_sont_en_fait_des_composantes_XYZ))
                              ,ETAT_LOGIQUE(NOTL(traiter_les_composantes_RVB_et_non_pas_une_sequence))
                               )
                         );
                                        /* Verification introduite le 20060617114831...                                              */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(editer_l_en_tete_du_C_shell_script))
               Bblock
               CAL2(Prin1("#!%s\n",Gvar("SHELL")));
               CAL2(Prin0("\n"));

               CAL2(Prin0("####################################################################"));
               CAL2(Prin0("###################################################################\n"));

               CAL2(Prin0("#                                                                   "));
               CAL2(Prin0("                                                                  #\n"));

               CAL2(Prin0("#         C - S H E L L - S C R I P T  :                            "));
               CAL2(Prin0("                                                                  #\n"));

               CAL2(Prin0("#                                                                   "));
               CAL2(Prin0("                                                                  #\n"));

               CAL2(Prin0("####################################################################"));
               CAL2(Prin0("###################################################################\n"));
                                        /* On met l'en-tete complete afin de generer un un 'C-Shell-script'. D'autre part, les       */
                                        /* lignes commentaires "#...#" ont ete coupees en deux afin de limiter la longueur des       */
                                        /* lignes de ce programme.                                                                   */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IL_FAUT(traiter_les_composantes_RVB_et_non_pas_une_sequence))
               Bblock
                                        /* On notera que ci-apres, le 20071215105843, '$K_QS' a ete remplace par '$K_QD' (via        */
                                        /* 'C_VERITABLE_QUOTE') car, en effet, cela permet de placer des variables d'environnement   */
                                        /* dans les commandes tout en rendant possible leur interpretation...                        */

               DEFV(Int,INIT(numero_de_la_commande_courante,ZERO));
                                        /* Pour numeroter automatiquement (a priori de 1 a 3) les commandes Argument ("commande?=")  */
                                        /* de '$xcg/parallele.1N$X' (introduit le 20071215112601).                                   */

               GENERATION_EVENTUELLE_DU_PARALLELISME(chain_Aconcaten5("$xcg/parallele.1N$X"
                                                                     ," CSH="
                                                                     ,ETAT_LOGIQUE(pour_parallele_1N_executer_les_commandes_sous_CSH)
                                                                     ," "
                                                                     ,arguments_generaux
                                                                      )
                                                     );
                                        /* Le 20090415100503, la commande '$xcg/parallele.1N$X' a remplace '$xcg/parallele.14$X'     */
                                        /* etant plus generale...                                                                    */

               GENERATION_EVENTUELLE_DU_PARALLELISME(COMMANDE_COURANTE);
               GENERATION_DE_LA_COMMANDE_COURANTE(NOM_DES_COMPOSANTES(ptCARA("ROUGE"),c_ROUGE
                                                                     ,ptCARA("TEINT"),c_TEINT
                                                                     ,ptCARA("COORD_X"),c_COORD_X
                                                                      )
                                                 ,FAUX
                                                 ,arguments_specifiques_ROUGE_ou_TEINT_ou_X
                                                 ,CASP_vrai_Int_de_base(duree_d_attente_preliminaire_ROUGE_ou_TEINT_ou_X)
                                                  );
                                        /* Le 20111027084647, les durees d'attente ont fait l'objet de 'CASP_vrai_Int_de_base(...)'  */
                                        /* afin d'eviter les messages :                                                              */
                                        /*                                                                                           */
                                        /*        ...warning: format '%d' expects type 'int', but argument ... has type 'long int'   */
                                        /*                                                                                           */
                                        /* lors de la generattion des 'v $xci/genere$I .sleep %d'... On notera que le 20111027084647 */
                                        /* j'ai essaye de remplacer les 'Int's par des 'vrai_Int_de_base's mais que cela ne marche   */
                                        /* pas a cause de 'v $xig/fonct$vv$DEF gPROCESS_PARAMETRE_VALIDATION_DU_TYPE'...             */
               GENERATION_EVENTUELLE_DU_PARALLELISME(C_VERITABLE_QUOTE);

               GENERATION_EVENTUELLE_DU_PARALLELISME(COMMANDE_COURANTE);
               GENERATION_DE_LA_COMMANDE_COURANTE(NOM_DES_COMPOSANTES(ptCARA("VERTE"),c_VERTE
                                                                     ,ptCARA("LUMIN"),c_LUMIN
                                                                     ,ptCARA("COORD_Y"),c_COORD_Y
                                                                      )
                                                 ,FAUX
                                                 ,arguments_specifiques_VERTE_ou_LUMIN_ou_Y
                                                 ,CASP_vrai_Int_de_base(duree_d_attente_preliminaire_VERTE_ou_LUMIN_ou_Y)
                                                  );
                                        /* Le 20111027084647, les durees d'attente ont fait l'objet de 'CASP_vrai_Int_de_base(...)'  */
                                        /* afin  d'eviter les messages :                                                             */
                                        /*                                                                                           */
                                        /*        ...warning: format '%d' expects type 'int', but argument ... has type 'long int'   */
                                        /*                                                                                           */
                                        /* lors de la generattion des 'v $xci/genere$I .sleep %d'... On notera que le 20111027084647 */
                                        /* j'ai essaye de remplacer les 'Int's par des 'vrai_Int_de_base's mais que cela ne marche   */
                                        /* pas a cause de 'v $xig/fonct$vv$DEF gPROCESS_PARAMETRE_VALIDATION_DU_TYPE'...             */
               GENERATION_EVENTUELLE_DU_PARALLELISME(C_VERITABLE_QUOTE);

               GENERATION_EVENTUELLE_DU_PARALLELISME(COMMANDE_COURANTE);
               GENERATION_DE_LA_COMMANDE_COURANTE(NOM_DES_COMPOSANTES(ptCARA("BLEUE"),c_BLEUE
                                                                     ,ptCARA("SATUR"),c_SATUR
                                                                     ,ptCARA("COORD_Z"),c_COORD_Z
                                                                      )
                                                 ,VRAI
                                                 ,arguments_specifiques_BLEUE_ou_SATUR_ou_Z
                                                 ,CASP_vrai_Int_de_base(duree_d_attente_preliminaire_BLEUE_ou_SATUR_ou_Z)
                                                  );
                                        /* Le 20111027084647, les durees d'attente ont fait l'objet de 'CASP_vrai_Int_de_base(...)'  */
                                        /* afin  d'eviter les messages :                                                             */
                                        /*                                                                                           */
                                        /*        ...warning: format '%d' expects type 'int', but argument ... has type 'long int'   */
                                        /*                                                                                           */
                                        /* lors de la generattion des 'v $xci/genere$I .sleep %d'... On notera que le 20111027084647 */
                                        /* j'ai essaye de remplacer les 'Int's par des 'vrai_Int_de_base's mais que cela ne marche   */
                                        /* pas a cause de 'v $xig/fonct$vv$DEF gPROCESS_PARAMETRE_VALIDATION_DU_TYPE'...             */
               GENERATION_EVENTUELLE_DU_PARALLELISME(chain_Aconcaten2(C_VERITABLE_QUOTE,"\n"));
                                        /* Le nom d'une couleur (ou coordonnee) peut apparaitre 8 fois dans la commande argument...  */
               Eblock
          ATes
               Bblock
               DoQu(numero_d_image,premiere_image,derniere_image,pas_des_images)
                    Bblock
                    GENERATION_DE_LA_COMMANDE_COURANTE(numero_d_image
                                                      ,IFEQ(numero_d_image,derniere_image)
                                                      ,C_VIDE
                                                      ,PAS_D_ATTENTE_PRELIMINAIRE
                                                       );
                                        /* Le 'numero_d_image' peut donc apparaitre 8 fois dans la commande argument...              */
                    Eblock
               EDoI
               Eblock
          ETes
          Eblock
     ATes
          Bblock
                                        /* ATTENTION : je note le 20120814150208 que cette correction peut avoir des consequences    */
                                        /* desastreuses si la commande a executer contient des quotes ou encore des back-slashes     */
                                        /* comme cela s'est vu dans 'v $xiirv/.PART.4.15.$U corriger_certaines_fautes=FAUX'...       */
                                        /*                                                                                           */
                                        /* ATTENTION : je note le 20140218105623 que c'est la sequence qui suit qui est responsable  */
                                        /* du probleme decrit dans 'v $xiMo/serveur.01$vv$Y 20121208081706'. C'est ce qui a induit   */
                                        /* les modifications 'v $Falias_CodexB 20140218104504' et 'v $Falias_CodexE 20140218104509'. */
                                        /* Alors, est-ce 'C_SH__REDIRECTION_PROGRAMME' ou encore 'C_SH__REDIRECTION_FICHIER' qui est */
                                        /* responsable ?                                                                             */
                                        /*                                                                                           */
                                        /* Une "solution" pourrait etre de forcer :                                                  */
                                        /*                                                                                           */
                                        /*                  #define   TENTER_DE_CORRIGER_CERTAINES_FAUTES_DE_FORMAT               \  */
                                        /*                                      FAUX                                              \  */
                                        /*                                                                                           */
                                        /* par defaut afin de minimiser les risques de blocage...                                    */
          DEFV(CHAR,INIC(POINTERc(commande_de_generation_corrigee),CHAINE_UNDEF));
                                        /* Commande courante avec correction des eventuelles fautes...                               */
          DEFV(CHAR,INIT(POINTERc(nom_du_fichier_de_manoeuvre),generation_d_un_nom_absolu_dans_xT_temporaire(Gvar("Y"))));
                                        /* Definition d'un fichier de manoeuvre temporarire. On remarquera que '$Y' sera inclu       */
                                        /* dans le nom du fichier temporaire, mais qu'il n'en sera pas le postfixe : il sera en      */
                                        /* effet suivi de '$Wi'...                                                                   */

          CALS(Fdelete_fichier(nom_du_fichier_de_manoeuvre,NE_PAS_EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS));
                                        /* Destruction initiale du fichier de manoeuvre au cas ou...                                 */

          RECONSTITUTION_DE_LA_COMMANDE_COURANTE_AVEC_QUOTAGE(commande_de_generation_corrigee);
                                        /* Recuperation de la commande courante en "double quotant" ses arguments de facon a         */
                                        /* permettre les manipulations ci-apres...                                                   */

          EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
              (chain_Aconcaten11("echo ",commande_de_generation_corrigee," corriger_les_formats=",C_FAUX____
                                ,C_SH__REDIRECTION_PROGRAMME
                                ,Gvar("SE")
                                ,COND(IL_FAUT(traiter_les_composantes_RVB_et_non_pas_une_sequence)
                                     ,chain_Aconcaten8(" -e 's/\\(%\\)D/\\1s/g' "
                                                      ," -e 's/\\(%\\)d/\\1s/g' "
                                                      ," -e 's/\\(%\\)S/\\1s/g' "
                                                      ," -e 's/\\(%\\)X/\\1s/g' "
                                                      ," -e 's/\\(%\\)x/\\1s/g' "
                                                      ," -e 's/\\(%\\)\\( \\)/\\1s\\2/g' "
                                                      ," -e 's/\\(%\\)$/\\1s/' "
                                                      ," -e 's/\\(%[0-9]*\\)[^ %0-9s]/\\1s/g' "
                                                       )
                                     ,chain_Aconcaten8(" -e 's/\\(%\\)D/\\1d/g' "
                                                      ," -e 's/\\(%\\)O/\\1o/g' "
                                                      ," -e 's/\\(%\\)S/\\1d/g' "
                                                      ," -e 's/\\(%\\)s/\\1d/g' "
                                                      ," -e 's/\\(%\\)X/\\1x/g' "
                                                      ," -e 's/\\(%\\)\\( \\)/\\1d\\2/g' "
                                                      ," -e 's/\\(%\\)$/\\1d/' "
                                                      ," -e 's/\\(%[0-9]*\\)[^ %0-9dox]/\\1d/g' "
                                                       )
                                      )
                                ,C_SH__REDIRECTION_FICHIER,nom_du_fichier_de_manoeuvre
                                ," ; "
                                ,EXECUTION_D_UN_FICHIER_SOUS_SH(nom_du_fichier_de_manoeuvre)
                                 )
               );
                                        /* Execution de la demande courante en ayant corrige, si besoin est, quelques fautes         */
                                        /* "classiques" concernant les formats "%"...                                                */
                                        /*                                                                                           */
                                        /* Jusqu'au 20061225163121, j'ai desesperemment tente de faire fonctionner directement :     */
                                        /*                                                                                           */
                                        /*                  `echo ... | $SE ...`                                                     */
                                        /*                                                                                           */
                                        /* qui aurait donc du executer la commande corrigee. Malheureusement, l'argument "commande=" */
                                        /* contient en general des espaces ; cet argument ne conserve pas cette "forme" dans le      */
                                        /* "`...`" et les espaces sont consideres alors comme un separateur d'arguments. La seule    */
                                        /* solution semble donc etre de passer par un fichier intermediaire temporaire que l'on      */
                                        /* execute ensuite via "." (qui est a '$SH' ce que "source" est a '$CSH'...).                */
                                        /*                                                                                           */
                                        /* ATTENTION, je note le 20070109095046 que ce dispositif interdit desormais des             */
                                        /* utilisations du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  $xci/genere$X       commande='... $VARIABLE' ...                         */
                                        /*                                                                                           */
                                        /* car, en effet, la variable '$VARIABLE' ne sera pas interpretee par le '$CSH' puisque      */
                                        /* figurant entre deux '$K_QS'. La chaine '$VARIABLE' sera donc transmise au '$SH' qui,      */
                                        /* ne la connaissant pas, la remplacera par '$K_VIDE'. Il conviendra donc d'ecrire :         */
                                        /*                                                                                           */
                                        /*                  $xci/genere$X       commande="... $VARIABLE" ...                         */
                                        /*                                                                                           */
                                        /* (entre deux '$K_QD') systematiquement. Mais, il est finalement plus prudent (peut-etre    */
                                        /* provisoirement...) d'inhiber par defaut cette possibilite (le 20070109101142). Au         */
                                        /* passage, utiliser 'EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_CSH(...)', tout en etant       */
                                        /* penalisant au niveau du temps d'execution, ne resoudrait pas le probleme en ce qui        */
                                        /* concerne les variables '$VARIABLE' ne faisant pas partie de l'environnement et qui sont   */
                                        /* temporaires ('v $xiMo/creation$Z .xci.genere.X.commande=...xci.neutre.X.A=.Image%s').     */
                                        /*                                                                                           */
                                        /* Le 20070109110652, je decouvre qu'il suffit que ces variables '$VARIABLE' soient definies */
                                        /* par :                                                                                     */
                                        /*                                                                                           */
                                        /*                  setenv    VARIABLE  ...                                                  */
                                        /*                                                                                           */
                                        /* pour qu'elles soient tranmises au '$SH' et que tout fonctionne correctement, meme avec    */
                                        /* l'ecriture :                                                                              */
                                        /*                                                                                           */
                                        /*                  $xci/genere$X       commande='... $VARIABLE' ...                         */
                                        /*                                                                                           */
                                        /* Le 20070110091012, la solution fut trouvee grace a 'v $xig/fonct$vv$DEF 20070110091012',  */
                                        /* permettant de revenir a l'etat 'IL_FAUT(tenter_de_corriger_certaines_fautes_de_format)'   */
                                        /* par defaut le 20070110091750...                                                           */
                                        /*                                                                                           */
                                        /* Le 20071229094053, l'edition "octale" ("%o") a ete introduite...                          */
                                        /*                                                                                           */
                                        /* Le 20100704112426, les chaines "^0-9s" et "^0-9dox" ont ete remplaces respectivement      */
                                        /* par "^%0-9s" et "^%0-9dox" ce qui permet de ne pas traiter les occurences du type "%%"    */
                                        /* comme cela s'est vu dans 'v $Falias_execALBUM 20100703155111'...                          */
                                        /*                                                                                           */
                                        /* Le 20111117081809, passage de 'C_REDIRECTION_PROGRAMME' et 'C_REDIRECTION_FICHIER'        */
                                        /* a 'C_SH__REDIRECTION_PROGRAMME' et 'C_SH__REDIRECTION_FICHIER'...                         */
                                        /*                                                                                           */
                                        /* Le 20111216165752, les expressions :                                                      */
                                        /*                                                                                           */
                                        /*                  -e 's/\\(%[0-9]*\\)[^%0-9s]/\\1s/g'                                      */
                                        /*                  -e 's/\\(%[0-9]*\\)[^%0-9dox]/\\1d/g'                                    */
                                        /*                                                                                           */
                                        /* ont evolue par l'introduction d'un espace dans la liste "[^...]" des exclusions suite     */
                                        /* a un probleme rencontre a cette date avec une commande du type :                          */
                                        /*                                                                                           */
                                        /*                  execRVB   $xci/minmax$X A1=... A2=... R=...%                             */
                                        /*                                                                                           */
                                        /* ('v $Dhistory/LACT19$D/20111216170308 20111216162944') ou il n'y avait rien apres le "%". */
                                        /* Il a donc fallu aussi remplacer donc "% " par "%s " ou "%d " suivant les cas. On notera   */
                                        /* au passage que "%  s" (par exemple...) equivaut a "%s" avec le message :                  */
                                        /*                                                                                           */
                                        /*                  warning: repeated ' ' flag in format                                     */
                                        /*                                                                                           */
                                        /* emis alors par '$Cc' autant de fois qu'il y a d'espaces apres le "%"...                   */

          CALS(Fdelete_fichier(nom_du_fichier_de_manoeuvre,EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS));
          CALZ_FreCC(nom_du_fichier_de_manoeuvre);
                                        /* Destruction de l'espace et liberation de l'espace du nom...                               */

          CALZ_FreCC(commande_de_generation_corrigee);
          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.