/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R E M I E R E   P A R T I E   D E S   D E F I N I T I O N S   D U   L A N G A G E   ' K '                                */
/*        D E P E N D A N T E S   D U   L A N G A G E   S O U R C E   ( ' C ' )  :                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier, se trouvent toutes les                                                                        */
/*                  constantes, les definitions et les macros                                                                        */
/*                  utiles a la definition du langage 'K' et                                                                         */
/*                  qui dependent du langage source (le 'C').                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xil/defi_c1$vv$DEF' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19940000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   S Y S T E M E   U T I L I S E  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    on definit ici le systeme utilise                                                                              */
/*                  pour compiler les modules, et ce sous                                                                            */
/*                  la forme : ORDINATEUR/OS/COMPILATEUR,                                                                            */
/*                  ou 'OS' designe le systeme d'exploitation.                                                                       */
/*                  Les noms suivants sont reconnus pour                                                                             */
/*                  la variable-shell 'SYSTEME' :                                                                                    */
/*                                                                                                                                   */
/*                                      SYSTEME_APC_LinuxDebian_GCC,                                                                 */
/*                                      SYSTEME_APC_LinuxMandrake_GCC,                                                               */
/*                                      SYSTEME_APC_LinuxRedHat_GCC,                                                                 */
/*                                      SYSTEME_APC_LinuxUbuntu_GCC,                                                                 */
/*                                      SYSTEME_APC_LinuxUbuntu_ICC,                                                                 */
/*                                      SYSTEME_APC_LinuxUlmint_GCC,                                                                 */
/*                                      SYSTEME_APC_LinuxUlmint_ICC,                                                                 */
/*                                      SYSTEME_CRAY2_UNICOS_CC,                                                                     */
/*                                      SYSTEME_CRAY2_UNICOS_SCC,                                                                    */
/*                                      SYSTEME_CRAYC98_UNICOS_CC,                                                                   */
/*                                      SYSTEME_CRAYC98_UNICOS_SCC,                                                                  */
/*                                      SYSTEME_CRAYC916_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYC916_UNICOS_SCC,                                                                 */
/*                                      SYSTEME_CRAYYMP1_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP1_UNICOS_SCC,                                                                 */
/*                                      SYSTEME_CRAYYMP2_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP2_UNICOS_SCC,                                                                 */
/*                                      SYSTEME_CRAYYMP4_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP4_UNICOS_SCC,                                                                 */
/*                                      SYSTEME_DECALPHA340_OSF1_CC,                                                                 */
/*                                      SYSTEME_DECALPHA340_OSF1_GCC,                                                                */
/*                                      SYSTEME_DECALPHA340_OSF1_CC,                                                                 */
/*                                      SYSTEME_DECALPHA340_OSF1_GCC,                                                                */
/*                                      SYSTEME_DPX2000_SPIX_CC,                                                                     */
/*                                      SYSTEME_DPX5000_SPIX_CC,                                                                     */
/*                                      SYSTEME_ES9000_AIX_CC,                                                                       */
/*                                      SYSTEME_FX2800_CONCENTRIX_FXC,                                                               */
/*                                      SYSTEME_FX2800_CONCENTRIX_PCC,                                                               */
/*                                      SYSTEME_FX2800_CONCENTRIX_SCC,                                                               */
/*                                      SYSTEME_FX40_CONCENTRIX_CC,                                                                  */
/*                                      SYSTEME_FX40_CONCENTRIX_FXC,                                                                 */
/*                                      SYSTEME_HP705_HPUX_CC,                                                                       */
/*                                      SYSTEME_HP710_HPUX_CC,                                                                       */
/*                                      SYSTEME_HP720_HPUX_CC,                                                                       */
/*                                      SYSTEME_HP750_HPUX_CC,                                                                       */
/*                                      SYSTEME_HP755_HPUX_CC,                                                                       */
/*                                      SYSTEME_HP819_HPUX_CC,                                                                       */
/*                                      SYSTEME_NWS3000_NEWSOS_CC,                                                                   */
/*                                      SYSTEME_NWS3000_NEWSOS_2CC,                                                                  */
/*                                      SYSTEME_RS6000_AIX_CC,                                                                       */
/*                                      SYSTEME_SG4D20G_IRIX_CC,                                                                     */
/*                                      SYSTEME_SG4D25TG_IRIX_CC,                                                                    */
/*                                      SYSTEME_SG4D310VGX_IRIX_CC,                                                                  */
/*                                      SYSTEME_SG4D35TG_IRIX_CC,                                                                    */
/*                                      SYSTEME_SG4D85GT_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND308_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND324_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND3GA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND408_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND424_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND4GA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND508_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND524_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND5GA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND808_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND824_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGIND8GA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGINDA08_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGINDA24_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGINDAGA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO200A1_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO200A2_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO200A4_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO25224_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO252VA_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGO252VN_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGPCM801_IRIX_CC,                                                                    */
/*                                      SYSTEME_SGPCMA01_IRIX_CC,                                                                    */
/*                                      SYSTEME_SPS9_ROS_CC,                                                                         */
/*                                      SYSTEME_SPS9_ROS_RC,                                                                         */
/*                                      SYSTEME_SUN3_SUNOS_CC,                                                                       */
/*                                      SYSTEME_SUN4_SUNOS_CC,                                                                       */
/*                                      SYSTEME_SUN4NCUBE2S_SUNOS_CC,                                                                */
/*                                      SYSTEME_SUN4NCUBE2S_SUNOS_NCC,                                                               */
/*                                      SYSTEME_VAX8600_ULTRIX_CC,                                                                   */
/*                                      SYSTEME_VAX8600_ULTRIX_VCC,                                                                  */
/*                                      SYSTEME_VAX9000_ULTRIX_CC,                                                                   */
/*                                      SYSTEME_VAX9000_ULTRIX_GCC,                                                                  */
/*                                      SYSTEME_VAX9000_ULTRIX_VCC.                                                                  */
/*                                                                                                                                   */
/*                  La variable 'SYSTEME' est definie par un                                                                         */
/*                  "#define" implicite lors de la phase de                                                                          */
/*                  pre-processing par 'cpp' (option "-D").                                                                          */
/*                                                                                                                                   */
/*                    Mais ATTENTION, actuellement, l'ensemble                                                                       */
/*                  des logiciels n'a ete teste que pour (le                                                                         */
/*                  symbole "-->" indiquant le compilateur qui est                                                                   */
/*                  effectivement utilise lorsqu'il y a le choix                                                                     */
/*                  entre plusieurs) :                                                                                               */
/*                                                                                                                                   */
/*                            -->       SYSTEME_APC_LinuxDebian_GCC,                                                                 */
/*                            -->       SYSTEME_APC_LinuxMandrake_GCC,                                                               */
/*                            -->       SYSTEME_APC_LinuxRedHat_GCC,                                                                 */
/*                            -->       SYSTEME_APC_LinuxUbuntu_GCC,                                                                 */
/*                            -->       SYSTEME_CRAY2_UNICOS_SCC,                                                                    */
/*                            -->       SYSTEME_CRAYC98_UNICOS_SCC,                                                                  */
/*                            -->       SYSTEME_CRAYC916_UNICOS_SCC,                                                                 */
/*                            -->       SYSTEME_CRAYYMP1_UNICOS_SCC,                                                                 */
/*                            -->       SYSTEME_CRAYYMP2_UNICOS_SCC,                                                                 */
/*                            -->       SYSTEME_CRAYYMP4_UNICOS_SCC,                                                                 */
/*                            -->       SYSTEME_DECALPHA340_OSF1_CC,                                                                 */
/*                            -->       SYSTEME_DECALPHA340_OSF1_GCC,                                                                */
/*                            -->       SYSTEME_DECALPHA340_OSF1_CC,                                                                 */
/*                            -->       SYSTEME_DECALPHA340_OSF1_GCC,                                                                */
/*                            -->       SYSTEME_DPX5000_SPIX_CC,                                                                     */
/*                            -->       SYSTEME_ES9000_AIX_CC,                                                                       */
/*                                      SYSTEME_FX2800_CONCENTRIX_FXC,                                                               */
/*                            -->       SYSTEME_FX2800_CONCENTRIX_SCC,                                                               */
/*                            -->       SYSTEME_HP705_HPUX_CC,                                                                       */
/*                            -->       SYSTEME_HP710_HPUX_CC,                                                                       */
/*                            -->       SYSTEME_HP720_HPUX_CC,                                                                       */
/*                            -->       SYSTEME_HP750_HPUX_CC,                                                                       */
/*                            -->       SYSTEME_HP755_HPUX_CC,                                                                       */
/*                            -->       SYSTEME_HP819_HPUX_CC,                                                                       */
/*                                      SYSTEME_NWS3000_NEWSOS_CC,                                                                   */
/*                            -->       SYSTEME_NWS3000_NEWSOS_2CC,                                                                  */
/*                            -->       SYSTEME_RS6000_AIX_CC,                                                                       */
/*                            -->       SYSTEME_SG4D20G_IRIX_CC,                                                                     */
/*                            -->       SYSTEME_SG4D25TG_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SG4D310VGX_IRIX_CC,                                                                  */
/*                            -->       SYSTEME_SG4D35TG_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SG4D85GT_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND308_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND324_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND3GA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND408_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND424_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND4GA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND508_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND524_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND5GA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND808_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND824_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGIND8GA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGINDA08_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGINDA24_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGINDAGA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO200A1_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO200A2_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO200A4_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO25224_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO252VA_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGO252VN_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGPCM801_IRIX_CC,                                                                    */
/*                            -->       SYSTEME_SGPCMA01_IRIX_CC,                                                                    */
/*                                      SYSTEME_SPS9_ROS_CC,                                                                         */
/*                            -->       SYSTEME_SPS9_ROS_RC,                                                                         */
/*                            -->       SYSTEME_SUN3_SUNOS_CC,                                                                       */
/*                            -->       SYSTEME_SUN4_SUNOS_CC,                                                                       */
/*                            -->       SYSTEME_SUN4NCUBE2S_SUNOS_CC,                                                                */
/*                            -->       SYSTEME_SUN4NCUBE2S_SUNOS_NCC,                                                               */
/*                            -->       SYSTEME_VAX9000_ULTRIX_GCC.                                                                  */
/*                                                                                                                                   */
/*                  et avec une bonne probabilite de reussite                                                                        */
/*                  pour :                                                                                                           */
/*                                                                                                                                   */
/*                                      SYSTEME_CRAY2_UNICOS_CC,                                                                     */
/*                                      SYSTEME_CRAYC98_UNICOS_CC,                                                                   */
/*                                      SYSTEME_CRAYC916_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP1_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP2_UNICOS_CC,                                                                  */
/*                                      SYSTEME_CRAYYMP4_UNICOS_CC,                                                                  */
/*                                      SYSTEME_FX40_CONCENTRIX_CC,                                                                  */
/*                                      SYSTEME_FX40_CONCENTRIX_FXC,                                                                 */
/*                                      SYSTEME_VAX8600_ULTRIX_CC,                                                                   */
/*                                      SYSTEME_VAX9000_ULTRIX_CC.                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N C A T E N A T I O N   A V E C   E S P A C E M E N T  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   KONC(a,b)                                                                                                                     \
                    a b                                                                                                                 \
                                        /* Concatenation avec espacement ; elle est destinee en fait uniquement a calculer la        */ \
                                        /* taille de certains types (par exemple 'size_Int' et 'size_Positive')...                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        B U G S   T R E S   G E N E R A U X  :                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
                                        /* Introduit le 20241120144302 et complete le 20241121095824 avec {Debian,Mandrake,RedHat},  */
                                        /* le probleme correspondant se manifestant aussi sur '$CMAP28'...                           */
#    define    BUG_SYSTEME_APC_GCC_tableaux_statiques_trop_volumineux_1                                                                 \
                                        /* Voir le probleme 'v $xil/defi_c1$vv$DEF 20241120150941'...                                */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#    nTestADef BUG_SYSTEME_APC_GCC_too_large_stack_frames                                                                               \
                                        /* Le compilateur 'gcc' ne tolere pas des tableaux locaux (et donc implantes dans la pile)   */ \
                                        /* de trop grande taille (de l'ordre de 1047923*8 octets). Pour plus de details, on pourra   */ \
                                        /* consulter 'v $Dbugs/APC$D/LinuxRedHat$D/GCC$D/lorenz.11$c'. Le 20000308085017, la         */ \
                                        /* reponse au "bug report" est de "customiser" avec 'ulimit', d'ou d'une part 'nTestADef'    */ \
                                        /* de desactivation du bug, et d'autre part 'v $xE/.profile$vv$Y ulimit'...                  */

                                        /* Jusqu'au 20040227141752, il y a eu ici :                                                  */
                                        /*                                                                                           */
                                        /*                  #    nTestADef BUG_SYSTEME_APC_GCC_optimisation_01                       */
                                        /*                                                                                           */
                                        /* ce symbole ayant ete change en 'BUG_SYSTEME_APC_GCC_ExcessPrecisionProblem_01'            */
                                        /* le 20040303094121. Mais le 20040227141752, 'BUG_SYSTEME_APC_GCC_optimisation_01'          */
                                        /* (remplace donc le 20040303094121 par 'BUG_SYSTEME_APC_GCC_ExcessPrecisionProblem_01')     */
                                        /* a ete introduit dans 'v $xcp/Bugs$K BUG_SYSTEME_APC_GCC_ExcessPrecisionProblem_01' (pour  */
                                        /* y etre genere automatiquement...).                                                        */
                                        /*                                                                                           */
                                        /* l'optimisation ('O1', 'O2' ou 'O3') provoque un comportement anormal de certaines         */
                                        /* fonctions ('v $xiii/tri_image$FON IFproduit_generalise_inverse_a_gauche_A1' par exemple   */
                                        /* pour laquelle le test 'Test(IFGT(distance_minimale_...))' est systematiquement VRAI pour  */
                                        /* l'integralite de 50% des lignes (environ...) meme si cela n'est pas possible. Ceci a      */
                                        /* ete introduit le 20040203155437 et se manifeste a cette date sur '$LACT15' et '$LACT16'.  */
                                        /*                                                                                           */
                                        /* Il est a noter qu'une autre facon de lutter contre ce fleau consiste a supprimer tout     */
                                        /* simplement l'optimisation dans la definition de '$Cc' ; malheureusement, cette solution   */
                                        /* est mauvaise car alors les performances chutent brutalement ; en contre-partie, elle      */
                                        /* s'applique partout ou ce "bug" existe (a condition de recompiler...), alors que le        */
                                        /* solution ici utilisee demande a ce que les fonctions problematiques aient ete recensees.  */
                                        /*                                                                                           */
                                        /* Ce bug a ete supprime le 20040204122533 apres l'introduction d'une finesse plus grande    */
                                        /* dans la non optimisabilite des modules ('v $xcc/cb$Z PRAGMA_CL_____BLOC_NON_OPTIMISABLE') */
                                        /* et a donc ete introduit dans 'v $xiii/tri_image$FON PRAGMA_CL_____BLOC_NON_OPTIMISABLE'.  */
                                        /*                                                                                           */
                                        /* Le 20040209153210, le programme 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.01$c' a      */
                                        /* definitivement mis en cause la compilation et l'optimisation ; ce n'est donc pas moi      */
                                        /* qui suis reponsable...                                                                    */
                                        /*                                                                                           */
                                        /* Le 20040219161107, j'ai note deux facons de faire disparaitre le probleme decrit dans     */
                                        /* 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.01$c' et dans                                */
                                        /* 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.02$c' en utilisant l'une des deux options    */
                                        /* suivantes pour '$Cc' :                                                                    */
                                        /*                                                                                           */
                                        /*                  -ffloat-store                                                            */
                                        /*                                                                                           */
                                        /* qui est disponible partout (elle reduit de 80 a 64 bits la precision) et :                */
                                        /*                                                                                           */
                                        /*                  -mfpmath=sse,387 -msse2                                                  */
                                        /*                                                                                           */
                                        /* qui elle utilise simultanement les instructions flottantes du jeu 'standard 387' et les   */
                                        /* instructions du jeu 'SSE'. Malheureusement, a cette date, cette derniere possibilite      */
                                        /* est disponible sur '$LACT16', mais pas sur '$LACT15'... Par contre, en ce qui concerne    */
                                        /* le probleme 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.14$c', seule l'option :          */
                                        /*                                                                                           */
                                        /*                  -mfpmath=sse,387 -msse2                                                  */
                                        /*                                                                                           */
                                        /* le corrige (alors qu'elle n'est pas disponible sur '$LACT15'...). Cela prouve bien que    */
                                        /* le probleme 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.02$c' (dit "direct") et          */
                                        /* le probleme 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/flottant.14$c' (dit "inverse") sont       */
                                        /* deux problemes differents puisque l'option '-mfpmath=sse,387 -msse2' corrige les deux...  */
                                        /*                                                                                           */
                                        /* Le 20040220111433, je note que grace a 'v $Fcompilers 20040220103647' ce "bug" n'a en     */
                                        /* fait plus de raisons d'etre, mais je conserve tout ce qui precede parce que cela semble   */
                                        /* bien precieux...                                                                          */
                                        /*                                                                                           */
                                        /* Le 20040222103215, j'ai trouve l'explication "finale". Imaginons donc deux nombres        */
                                        /* flottants 'A' et 'B' qui viennent d'etre calcules dans les registres flottants 80 bits.   */
                                        /* Ils vont etre qualifies par la suite de "compatibles" ce qui signifie que l'on peut       */
                                        /* faire de l'arithmetique entre-eux et surtout les comparer sans ambiguite. Imaginons       */
                                        /* alors que par un manque de ressources flottantes le nombre 'A' (par exemple) soit         */
                                        /* contraint de retourner en memoire (il se retrouve alors en 64 bits) "sans que             */
                                        /* l'optimiseur s'en rende compte" (c'est-la le "bug" !). Si ensuite les deux nombres        */
                                        /* 'A' (64 bits) et 'B' (80 bits) doivent etre compares, le nombre 'A' est ramene dans       */
                                        /* un registre flottant et on lui ajoute donc 16 bits (tres certainement nuls). Les deux     */
                                        /* nombres 'A' et 'B' ne sont plus "compatibles" et si le test est fait ainsi malgre tout    */
                                        /* (ce qui est le cas dans le contexte de ce "bug") son resultat ne peut etre que faux...    */
                                        /*                                                                                           */
                                        /* Finalement ce probleme est connu depuis une dizaine d'annees sous le nom de "excess       */
                                        /* precision problem" ('v $Dcourrier_in/20040227142837 wilson@specifixinc.com').             */
                                        /*                                                                                           */
                                        /* On notera l'introduction dans 'v $xig/fonct$vv$DEF 20040303135217' de fonctions qui       */
                                        /* sont destinees a garantir la qualite des tests portant sur les nombres 'Float' ; ainsi    */
                                        /* en forcant leur passage dans la pile avant le test, on garantit leur mise sur 64 bits     */
                                        /* quel que soit le format anterieur (64 ou 80 bits...).                                     */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )

#if       (         (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
           )
#    TestADef  BUG_SYSTEME_DECALPHA_OSF1_CC_large_stack_frames_not_yet_supported                                                        \
                                        /* Le compilateur 'cc' ne tolere pas des tableaux locaux aux fonctions (et donc implantes    */ \
                                        /* dans la pile) de trop grande taille (de l'ordre de 128*1024 octets...).                   */ \
                                        /*                                                                                           */ \
                                        /* On notera par la suite (dans les fichiers 'v $xiii/di_image$DEF', 'v $xiii/entrees$DEF'   */ \
                                        /* et 'v $xiii/quad_image$FON') les tests simultanes de :                                    */ \
                                        /*                                                                                           */ \
                                        /*                  BUG_SYSTEME_DECALPHA_OSF1_CC_large_stack_frames_not_yet_supported        */ \
                                        /*                                                                                           */ \
                                        /* et de :                                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  BUG_SYSTEME_DECALPHA340_OSF1_CC_large_stack_frames_not_yet_supported     */ \
                                        /*                  BUG_SYSTEME_DECALPHA350_OSF1_CC_large_stack_frames_not_yet_supported     */ \
                                        /*                  BUG_SYSTEME_DECALPHA464_OSF1_CC_large_stack_frames_not_yet_supported     */ \
                                        /*                                                                                           */ \
                                        /* afin de garantir la compatibilite entre '$xil/defi_c1.vA$DEF' et '$xil/defi_c1$vv$DEF.    */
#Aif      (         (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
           )
#Eif      (         (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
           )

#if       (         (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    nTestADef BUG_SYSTEME_VAX_ULTRIX_GCC_jumps_superieurs_a_32_kilo_octets                                                             \
                                        /* Le compilateur 'gcc' supporte mal les sauts de portee superieure a 32 kilo-octets.        */
#Aif      (         (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#Eif      (         (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N C L U D E S   S Y S T E M E S  :                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Le symbole 'NO_DEFINES_SYSTEMES'                                                                               */
/*                  permet de faire ou pas les includes                                                                              */
/*                  systemes : on ne les fait pas s'il                                                                               */
/*                  est defini...                                                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifndef   NO_INCLUDES_SYSTEMES

@    if        (         (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@         define    __USE_FILE_OFFSET64
                                        /* Introduit le 20071121102508 afin d'eviter les messages :                                  */
                                        /*                                                                                           */
                                        /*                  warning: incompatible implicit declaration of built-in function 'malloc' */
                                        /*                  warning: incompatible implicit declaration of built-in function 'exit'   */
                                        /*                                                                                           */
                                        /* sur '$LACT18'...                                                                          */
                                        /*                                                                                           */
                                        /* ATTENTION : je note le 20080116092751 que '__USE_FILE_OFFSET64' doit etre defini avant    */
                                        /* les 'include's car, en effet, il est utilise dans beaucoup d'entre-eux...                 */
@    Aif       (         (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@    Eif       (         (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )

@    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
                )
@         define    __USE_LARGEFILE64
@         define    __USE_FILE_OFFSET64
                                        /* Introduit le 20060520121632 suite au probleme 'v $xcg/fichier_etat$K 20060519191756'...   */
                                        /*                                                                                           */
                                        /* ATTENTION : je note le 20080116092751 que '__USE_LARGEFILE64' et '__USE_FILE_OFFSET64'    */
                                        /* doivent etre definis avant les 'include's car, en effet, ils sont utilises dans beaucoup  */
                                        /* d'entre-eux...                                                                            */
@    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
                )
@    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
                )

@    include   <errno.h>
                                        /* Definit les erreurs standards...                                                          */
@    include   <stdio.h>
                                        /* Definit les entrees-sorties standard.                                                     */

@    if        (         (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
                                        /* Le SYSTEME 'SYSTEME_APC_LinuxRedHat_GCC' a ete introduit le 20090318090848 suite au       */
                                        /* remplacement de "trinite.polytechnique.fr" par "europe.polytechnique.fr" (='$CMAP28',     */
                                        /* 'v $Fmachines 20090316110150').                                                           */
@         include   <stdlib.h>
@    Aif       (         (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@    Eif       (         (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )

@    if        (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@         include   <asm-generic/fcntl.h>
                                        /* Fonctions d'entrees-sorties introduites le 20191119144441 pour l'utilisation              */
                                        /* 'v $xcg/TestRedirection.01$K$INUTILE OPEN_LARGE_FILE'...                                  */
@    Aif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@         include   <fcntl.h>
                                        /* Fonctions d'entrees-sorties. On notera que sur 'SYSTEME_SG4D..._IRIX_CC' cet include      */
                                        /* provoque lui-meme un include de '<sys/fcntl.h>' dans lequel se trouve definis des         */
                                        /* des symboles comme 'O_RDONLY'...                                                          */
                                        /*                                                                                           */
                                        /* Je note le 20150310162758 que sur des MACHINEs telle '$LACT19', ces defintions            */
                                        /* {O_RDONLY,O_WRONLY,O_RDWR,...} sont dans 'v /usr/include/asm-generic/fcntl$h', mais       */
                                        /* ATTENTION, elles sont en octal et non pas en hexa-decimal !                               */
@    Eif       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                       \
               ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )

@    include   <sys/signal.h>
                                        /* Definit les types de signaux qui sont envoyables a un process.                            */

@    include   <sys/stat.h>
                                        /* Definit le format des informations relatives a un fichier. Le 20110531134318 ceci a       */
                                        /* ete deplace depuis 'v $xig/fonct$vv$FON 20110531134310' et ce a cause du programme        */
                                        /* 'v $xcg/PhaseCrit.01$K Chmod'...                                                          */

@    include   <time.h>
@    include   <sys/time.h>
                                        /* Definit les structures et les fonctions d'acces a la date et a l'heure.                   */
@    include   <netdb.h>

@    if        (         (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
                                        /* Le SYSTEME 'SYSTEME_APC_LinuxUlmint_GCC' a ete introduit le 20160813135704 suite a        */
                                        /* l'introduction de '$LACT1A'...                                                            */
@              include   <x86_64-linux-gnu/sys/types.h>
                                        /* En plus a cette date, a cause de 'v /usr/include/regex$h sys.types.h', il a fallu creer   */
                                        /* le lien 'v $Dhistory/LACT1A$D/20160813141121.$ADMINISTRATEUR x86_64-linux-gnu.sys.types'  */
                                        /* et ainsi, ce qui precede est inutile, mais conserve malgre tout...                        */
@    Aif       (         (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
@              include   <sys/types.h>
                                        /* Pour definir la structure "stat" dans <stat.h>. Avant l'introduction de la date et de     */
                                        /* l'heure dans 'PRINT_DEFAUT(...)' de '$xil/defi_c1$vv$DEF' cet include etait situe dans    */
                                        /* '$xig/fonct$vv$FON'. Or malheureusement, par exemple avec 'SYSTEME_NWS3000_NEWSOS', le    */
                                        /* type 'time_t' est defini dans '<sys/types.h>' et non pas dans '<times.h>' d'ou ce         */
                                        /* deplacement...                                                                            */
@    Eif       (         (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                         \
               ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                         \
                )
                                        /* Pour 'RemoteCommande(...)' et 'GetServeurByName(...)'.                                    */

#Aifndef  NO_INCLUDES_SYSTEMES
#Eifndef  NO_INCLUDES_SYSTEMES


/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   P R E S E N T A T I O N   D E S   F O R M U L E S  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    Les noms des fonctions suivantes                                                                               */
/*                  sont choisis de telle facon qu'ils                                                                               */
/*                  fassent exactement 4 caracteres ;                                                                                */
/*                  ainsi, en ajoutant la parenthese                                                                                 */
/*                  qui suit leur appel, on trouve 4+1=5,                                                                            */
/*                  ce qui correspond a la tabulation                                                                                */
/*                  choisie (5), qui elle-meme divise                                                                                */
/*                  exactement 10...                                                                                                 */
/*                                                                                                                                   */
/*                    De plus, les definitions ne sont                                                                               */
/*                  suivies d'aucun ";", afin de pouvoir                                                                             */
/*                  les combiner sans limites...                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' C A S T '   S U R   L E S   T Y P E S   ( ' T y p e d e f P ' )  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ptCAST(nom_de_type,x)                                                                                                         \
                    CAST(KONC(nom_de_type(VIDE),fETOILE(VIDE)),x)                                                                       \
                                        /* De facon a faire un 'CAST' pour un Pointeur sur un Type...                                */

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

#ifdef    DEFV_CAST_VERSION_01
#    message   "La version 'DEFV_CAST_VERSION_01' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_01
#Eifdef   DEFV_CAST_VERSION_01

#ifdef    DEFV_CAST_VERSION_02
#    message   "La version 'DEFV_CAST_VERSION_02' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_02
#Eifdef   DEFV_CAST_VERSION_02

#ifdef    DEFV_CAST_VERSION_03
#    define    PGPD                                                                                                                     \
                         VIDE

#    define    Typedef(type,structure)                                                                                                  \
=         define              type(var) structure var
                                        /* Definition d'un nouveau type ; mais attention, l'ordre des arguments pour 'Typedef'       */
                                        /* est inverse de celui de 'typedef' :                                                       */
                                        /*                                                                                           */
                                        /*                  typedef   structure type;                                                */
                                        /*                                                                                           */
                                        /* mais est plus logique...                                                                  */

#    define    TypedefP(type,structure)                                                                                                 \
=         define              type(var) structure var

#    define    TypedefT(type,structure)                                                                                                 \
=         define              type(var) structure(var)#

#    define    TypedefS(type,structure)                                                                                                 \
=         define              type(var) structure(var)#

#    define    TypedefB(type,structure)                                                                                                 \
=         define              type(var) structure var

                                        /* NOTA : ces quatre versions de 'Typedef()' appelees 'TypedefX()' ('X' valant 'B', 'P',     */
                                        /* 'S' ou 'T' pour Basic, Primaire, Secondaire et Tertiaire, ce qui donne l'ordre d'appel    */
                                        /* logique) comme un "typedef", parce que les ecritures suivantes sont illegales (alors      */
                                        /* qu'elles devraient l'etre) :                                                              */
                                        /*                                                                                           */
                                        /*                  typedef   int                 int1;                                      */
                                        /*                  typedef   short     int1      int2;                                      */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*                  typedef   register  int       int3;                                      */
                                        /*                                                                                           */

                                        /* Ces versions sont prises en compte par un post-pre-processing (d'ou les "=", et autres).  */
#    define    TypedefAES(type,structure)                                                                                               \
<>        define             type(var) structure var
                                        /* Procedure speciale de traitement des arguments d'une fonction via 'Argument', des objets  */
                                        /* externes a un module via 'Ailleurs', ainsi que des objets statiques via 'Statique' ;      */
                                        /* ceux-ci seront pris en compte entre la 'PASSE_1' et le 'PASSE_2' dans une passe speciale  */
                                        /* (dite 'PASSE_A') et reperee par '<>'...                                                   */
#Aifdef   DEFV_CAST_VERSION_03
#Eifdef   DEFV_CAST_VERSION_03

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P L A C E M E N T   E N   M E M O I R E  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   _const                                                                                                                        \
                    const
#define   _volatile                                                                                                                     \
                    volatile

#define   _long                                                                                                                         \
                    long
#define   _unsigned                                                                                                                     \
                    unsigned
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */

TypedefB(Constante,_const)
TypedefB(Volatile,_volatile)
                                        /* Le type 'Volatile' a ete introduit le 20040227134728 pour 'v $xcp/Bugs$K Volatile' ; il   */
                                        /* permet de bloquer l'optimisation relative aux variables ainsi "etiquettees"...            */
TypedefB(Static,static)
TypedefB(Short,short)
TypedefB(Long,_long)
TypedefB(Unsigned,_unsigned)

#nodefine Register_VERSION_01
                                        /* Version anterieure au 20030815112720.                                                     */
#define   Register_VERSION_02
                                        /* Version a compter du 20030815112720 ou la notion desuete et non portable d'allocation     */
                                        /* de donnees dans les registres est supprimee...                                            */

#ifdef    Register_VERSION_01
TypedefB(Register,register)
#Aifdef   Register_VERSION_01
#Eifdef   Register_VERSION_01

#ifdef    Register_VERSION_02
#Aifdef   Register_VERSION_02
#Eifdef   Register_VERSION_02

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T Y P E   P R I M I T I F   ' C A R A C T E R E '  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, ces definitions devraient etre logiquement dans '$xil/defi_K2$vv$DEF' mais     */
                                        /*  malheureusement, on en a besoin tout de suite. De plus, on ne peut la mettre dans        */
                                        /* '$xil/defi_K1$vv$DEF', car alors, 'TypedefP(...)' et 'TypedefS(...)' ne sont pas encore   */
                                        /* definis...                                                                                */

                                        /* A compter du 20040514131015, tous les types "de base" doivent subir un traitement         */
                                        /* specifique via 'v $xcc/cpp$Z TypesBase.vv' grace a 'v $xccp/TypesBase$vv$sed _de_base'.   */
                                        /* Ce dernier fichier devra donc etre mis a jour au cas ou de nouveaux types "de base"       */
                                        /* seraient ajoutes...                                                                       */

#define   vrai_char_de_base                                                                                                             \
                    char
#define   _char                                                                                                                         \
                    vrai_char_de_base                                                                                                   \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */
TypedefP(vrai_CHAR_de_base,vrai_char_de_base)
TypedefP(Char,_char)
TypedefS(CHAR,CONC(Unsigned,Char))
TypedefS(cChar,CONC(Constante,Char))

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                               \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                            \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
           )
TypedefS(CHAR_ou_vrai_CHAR_de_base,vrai_CHAR_de_base)
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                               \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                            \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
           )
TypedefS(CHAR_ou_vrai_CHAR_de_base,CHAR)
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                               \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                            \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE > 602000000))                                              \
           )

#define   Conversion_CHAR_en_vrai_CHAR_de_base(pointeur_converti,pointeur)                                                              \
                    DEFV(CHAR_ou_vrai_CHAR_de_base,INIT(POINTERc(pointeur_converti),ptCAST(CHAR_ou_vrai_CHAR_de_base,pointeur)));       \
                                        /* Conversion si necessaire d'un pointeur 'CHAR' en un pointeur 'CHAR_ou_vrai_CHAR_de_base'. */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T Y P E   P R I M I T I F   ' E N T I E R '  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, ces definitions devraient etre logiquement dans '$xil/defi_K2$vv$DEF' mais     */
                                        /*  malheureusement, on en a besoin tout de suite. De plus, on ne peut la mettre dans        */
                                        /* '$xil/defi_K1$vv$DEF', car alors, 'TypedefP(...)' et 'TypedefS(...)' ne sont pas encore   */
                                        /* definis...                                                                                */

                                        /* A compter du 20040514131015, tous les types "de base" doivent subir un traitement         */
                                        /* specifique via 'v $xcc/cpp$Z TypesBase.vv' grace a 'v $xccp/TypesBase$vv$sed _de_base'.   */
                                        /* Ce dernier fichier devra donc etre mis a jour au cas ou de nouveaux types "de base"       */
                                        /* seraient ajoutes...                                                                       */

#define   vrai_int_de_base                                                                                                              \
                    int
#define   _int                                                                                                                          \
                    vrai_int_de_base                                                                                                    \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */

TypedefP(vrai_Int_de_base,vrai_int_de_base)
TypedefP(_Int,_int)
TypedefS(vrai_Short_Int_de_base,CONC(Short,vrai_Int_de_base))
TypedefS(vrai_Long_Int_de_base,CONC(Long,vrai_Int_de_base))
TypedefS(vrai_Positive_de_base,CONC(Unsigned,vrai_Int_de_base))
TypedefS(vrai_binaire_de_base,vrai_Positive_de_base)
                                        /* Definition d'un type entier de base...                                                    */

                                        /* ATTENTION, avant le 1995032700, on definissait ici 'PRECISION_DU_Int'. Or malheureusement */
                                        /* dans '$xcc/cpp$Z', lors de la '$PASSE_1' des fichiers demandant la derivation formelle    */
                                        /* d'ordre N (voir par exemple '$xtKg'), on fait :                                           */
                                        /*                                                                                           */
                                        /*                  set       choix_cK="$choix_cK ""-Dinclure_DEFINIT_K_DEF"                 */
                                        /*                                                                                           */
                                        /* ce qui provoque la non prise en compte des fichiers 'inclure_DEFINIT_c_DEF'. Or de plus   */
                                        /* dans '$xil/defi_K2$vv$DEF', il y a des instructions '$PASSE_1' conditionnelles qui        */
                                        /* utilisent 'PRECISION_DU_Int'. Donc si 'PRECISION_DU_Int' est defini dans un fichier       */
                                        /* de type 'inclure_DEFINIT_c_DEF', on aura le message :                                     */
                                        /*                                                                                           */
                                        /*                  ...: undef symbol PRECISION_DU_Int in preprocessor if                    */
                                        /*                                                                                           */
                                        /* d'ou le transfert de la definition de 'PRECISION_DU_Int' dans '$xil/defi_K1$vv$DEF'...    */
                                        /*                                                                                           */
                                        /* ATTENTION, avant le 1995091300, on trouvait ici :                                         */
                                        /*                                                                                           */
                                        /*                  TypedefS(vrai_Long_Int_de_base,CONC(Long,_Int))                          */
                                        /*                                                                                           */
                                        /* mais, cela ne semblant pas logique, elle fut modifiee...                                  */
                                        /*                                                                                           */
                                        /* Le type 'vrai_Positive_de_base' a ete introduit le 20021209123822 pour etre utilise       */
                                        /* dans '$xcp/substitue.01$K vrai_Positive_de_base'.                                         */
                                        /*                                                                                           */
                                        /* Le type 'vrai_binaire_de_base' a ete introduit le 20100324081428...                       */

#if       (PRECISION_DU_Int==SIMPLE_PRECISION)
TypedefS(Int,_Int)
#Aif      (PRECISION_DU_Int==SIMPLE_PRECISION)
#Eif      (PRECISION_DU_Int==SIMPLE_PRECISION)

#if       (PRECISION_DU_Int==DOUBLE_PRECISION)
TypedefS(Int,CONC(Long,_Int))
#Aif      (PRECISION_DU_Int==DOUBLE_PRECISION)
#Eif      (PRECISION_DU_Int==DOUBLE_PRECISION)

TypedefS(ShortInt,CONC(Short,_Int))
TypedefS(LongInt,CONC(Long,_Int))
TypedefS(Positive,CONC(Unsigned,Int))
                                        /* ATTENTION, on notera que l'on ecrit :                                                     */
                                        /*                                                                                           */
                                        /*                  TypedefS(LongInt,CONC(Long,_Int))                                        */
                                        /*                                                                                           */
                                        /* et non pas :                                                                              */
                                        /*                                                                                           */
                                        /*                  TypedefP(LongInt,vrai_Long_Int_de_base)                                  */
                                        /*                                                                                           */
                                        /* afin de ne pas faire d'hypothese sur la nature de '_Int' ; de meme pour la definition     */
                                        /* de 'Int'...                                                                               */

#if       (PRECISION_DU_Int==SIMPLE_PRECISION)
TypedefS(LPositive,CONC(Long,Positive))
                                        /* Cette definition n'est en fait utilisee que pour definir 'genere_LPositive' dans le       */
                                        /* fichier '$xiiD/definit.1$DEF'.                                                            */
#Aif      (PRECISION_DU_Int==SIMPLE_PRECISION)
#Eif      (PRECISION_DU_Int==SIMPLE_PRECISION)

#if       (PRECISION_DU_Int==DOUBLE_PRECISION)
TypedefS(LPositive,Positive)
                                        /* Cette definition n'est en fait utilisee que pour definir 'genere_LPositive' dans le       */
                                        /* fichier '$xiiD/definit.1$DEF'.                                                            */
#Aif      (PRECISION_DU_Int==DOUBLE_PRECISION)
#Eif      (PRECISION_DU_Int==DOUBLE_PRECISION)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T Y P E   P R I M I T I F   ' S I M P L E - P R E C I S I O N '  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* A compter du 20040514131015, tous les types "de base" doivent subir un traitement         */
                                        /* specifique via 'v $xcc/cpp$Z TypesBase.vv' grace a 'v $xccp/TypesBase$vv$sed _de_base'.   */
                                        /* Ce dernier fichier devra donc etre mis a jour au cas ou de nouveaux types "de base"       */
                                        /* seraient ajoutes...                                                                       */

#define   vrai_float_de_base                                                                                                            \
                    float                                                                                                               \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE' et l'utilisation dans les interfaces       */ \
                                        /* avec certaines bibliotheques (celle du CUBI7 par exemple...).                             */

#if       (PRECISION_DU_Float==SIMPLE_PRECISION)
#    define    _float                                                                                                                   \
                         vrai_float_de_base                                                                                             \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */
#Aif      (PRECISION_DU_Float==SIMPLE_PRECISION)
#Eif      (PRECISION_DU_Float==SIMPLE_PRECISION)

#if       (PRECISION_DU_Float==DOUBLE_PRECISION)
#    define    _float                                                                                                                   \
                         vrai_double_de_base                                                                                            \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */
#Aif      (PRECISION_DU_Float==DOUBLE_PRECISION)
#Eif      (PRECISION_DU_Float==DOUBLE_PRECISION)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T Y P E   P R I M I T I F   ' D O U B L E - P R E C I S I O N '  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* A compter du 20040514131015, tous les types "de base" doivent subir un traitement         */
                                        /* specifique via 'v $xcc/cpp$Z TypesBase.vv' grace a 'v $xccp/TypesBase$vv$sed _de_base'.   */
                                        /* Ce dernier fichier devra donc etre mis a jour au cas ou de nouveaux types "de base"       */
                                        /* seraient ajoutes...                                                                       */

#define   vrai_double_de_base                                                                                                           \
                    double                                                                                                              \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */

#if       (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )
#    define    PRECISION_DU_Double                                                                                                      \
                         SIMPLE_PRECISION                                                                                               \
                                        /* Version CRAY2/UNICOS,                                                                     */ \
                                        /* version CRAYC98/UNICOS,                                                                   */ \
                                        /* version CRAYC916/UNICOS,                                                                  */ \
                                        /* version CRAYYMP1/UNICOS,                                                                  */ \
                                        /* version CRAYYMP2/UNICOS,                                                                  */ \
                                        /* version CRAYYMP4/UNICOS.                                                                  */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )
#    define    PRECISION_DU_Double                                                                                                      \
                         DOUBLE_PRECISION                                                                                               \
                                        /* Valeur par defaut...                                                                      */
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
           )

#if       (PRECISION_DU_Double==SIMPLE_PRECISION)
#    define    _double                                                                                                                  \
                         vrai_float_de_base                                                                                             \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */
#Aif      (PRECISION_DU_Double==SIMPLE_PRECISION)
#Eif      (PRECISION_DU_Double==SIMPLE_PRECISION)

#if       (PRECISION_DU_Double==DOUBLE_PRECISION)
#    define    _double                                                                                                                  \
                         vrai_double_de_base                                                                                            \
                                        /* Ces types intermediaires sont definis brutalement par des '#define' pour permettre la     */ \
                                        /* la parametrisation de leurs tailles par 'SIZE'...                                         */
#Aif      (PRECISION_DU_Double==DOUBLE_PRECISION)
#Eif      (PRECISION_DU_Double==DOUBLE_PRECISION)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   ' S I M P L E - P R E C I S I O N '                                                      */
/*        E T   D E   L A   ' D O U B L E - P R E C I S I O N '  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefP(vrai_Float_de_base,vrai_float_de_base)
TypedefP(Float,_float)

TypedefP(vrai_Double_de_base,vrai_double_de_base)
TypedefP(Double,_double)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   T Y P E   V I D E  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefP(Void,void)
                                        /* Definition du type vide...                                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E G L E S   D ' I N D E X A T I O N  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INDEX0                                                                                                                        \
                    ZERO                                                                                                                \
                                        /* Premier index d'une liste.                                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I M E N S I O N N E M E N T   S T A N D A R D  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    L'indexation pour les "structures"                                                                             */
/*                  a 1, 2, 3,... dimensions est du type :                                                                           */
/*                                                                                                                                   */
/*                                      ITb1c(...)        :      index1                                                              */
/*                                      ITb2c(...)        :     (index2*dim1)+index1                                                 */
/*                                      ITb3c(...)        :   (((index3*dim2)+index2)*dim1)+index1                                   */
/*                                      ITb4c(...)        : (((((index4*dim3)+index3)*dim2)+index2)*dim1)+index1                     */
/*                                                                                                                                   */
/*                  avec des notations evidentes...                                                                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DIME(dimension)                                                                                                               \
                    COND(IZGT(dimension),INTE(dimension),UN)                                                                            \
                                        /* Definition de la fonction de dimensionnement, mais ATTENTION, en general, les             */ \
                                        /* compilateurs n'acceptent pas les dimensions nulles. L'introduction de 'INTE(...)' a eu    */ \
                                        /* lieu le 20040418183321 avec la mise en place du dispositif de garantie eventuelle de      */ \
                                        /* l'ordre des operations 'v $xil/defi_c3$vv$DEF GarantirOrdreOperations_AvecTypeFloat'.     */

#ifdef    SYSTEME_DPX5000_SPIX_CC
#    undef     DIME
#    define    DIME(dimension)                                                                                                          \
                         INTE(dimension)                                                                                                \
                                        /* Definition de la fonction de dimensionnement...                                           */ \
                                        /*                                                                                           */ \
                                        /* Version DPX5000/SPIX/CC.                                                                  */
#Aifdef   SYSTEME_DPX5000_SPIX_CC
#Eifdef   SYSTEME_DPX5000_SPIX_CC

#define   gDTb1(vecteur,dimension)                                                                                                      \
                    vecteur[dimension]                                                                                                  \
                                        /* Definition d'un tableau a une dimension sans verification a priori de la dimension.       */
#define   DTb1(vecteur,dimension)                                                                                                       \
                    gDTb1(vecteur,DIME(dimension))                                                                                      \
                                        /* Definition d'un tableau a une dimension avec verification de la dimension,                */
#define   ITb1(vecteur,index)                                                                                                           \
                    PARE(vecteur[index])                                                                                                \
                                        /* Indexation d'un tel tableau.                                                              */
#define   ITb1c(index,dimension)                                                                                                        \
                    INTE(index)                                                                                                         \
                                        /* Conversion d'un indice mono-dimensionnel en un indice mono-dimensionnel. Le passage       */ \
                                        /* de 'NEUT(...)' a 'INTE(...)' a eu lieu le 20040423155513 suite a l'introduction du        */ \
                                        /* dispositif 'v $xil/defi_c3$vv$DEF GooF'.                                                  */
#define   ITb1csd(index)                                                                                                                \
                    ITb1c(index,ARGUMENT_ABSENT)                                                                                        \
                                        /* Introduit le 20220803182004 pour definir 'IdTb1sd(...)' ("sd"="Sans Dimension")...        */
#define   ITb1v(vecteur,index,dimension)                                                                                                \
                    ITb1(vecteur,ITb1c(index,dimension))                                                                                \
                                        /* Indexation "vectoriel" d'un tel tableau (defini par symetrie avec 'ITb2v(...)' et         */ \
                                        /* 'ITb3v(...)').                                                                            */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000405163016, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  #define   ITb1v(vecteur,index,dimension)                              \  */ \
                                        /*                                      ITb1(vecteur,index)                                  */ \
                                        /*                                                                                           */

#define   DdTb1(pointeur,vecteur,dimension,valeur_initiale)                                                                             \
                    INIT(pointeur(vecteur),valeur_initiale)                                                                             \
                                        /* Definition d'un tableau alloue dynamiquement a une dimension.                             */
#define   MdTb1(vecteur,dimension,type,libre)                                                                                           \
                    EGAL(vecteur,AllocIn(dimension,type))
#undef    MdTb1
#define   MdTb1(vecteur,dimension,type,libre)                                                                                           \
                    EGAL(vecteur                                                                                                        \
                        ,EGAL(INDIRECT(COND(IFEQ(vecteur,libre)                                                                         \
                                           ,ADRESSE(vecteur)                                                                            \
                                           ,PARE(LIS2(eFdTb1(vecteur,dimension,type),ADRESSE(vecteur)))                                 \
                                            )                                                                                           \
                                       )                                                                                                \
                             ,AllocIn(dimension,type)                                                                                   \
                              )                                                                                                         \
                         )
                                        /* Allocation dynamique de la memoire necessaire a un tableau a une dimension.               */
                                        /*                                                                                           */
                                        /* ATTENTION, avant le 1994092700, la definition etait la suivante :                         */
                                        /*                                                                                           */
                                        /*                  EGAL(vecteur,AllocIn(dimension,type))                                    */
                                        /*                                                                                           */
                                        /* mais prevoyant la possibilite de reallouer des structures (voir le probleme evoque        */
                                        /* dans la fonction 'Iload_image_avec_redimensionnement_eventuel(...)' dans le fichier       */
                                        /* 'v $xiii/files$FON') on adopte cette nouvelle definition inspiree du test effectue dans   */
                                        /* 'v $xtc/alloc.01$c'. L'ancienne definition a ete conservee, mais en lui ajoutant le       */
                                        /* quatrieme et nouvel argument 'libre' (on ne sait jamais...).                              */
                                        /*                                                                                           */
                                        /* On notera les points particuliers suivants :                                              */
                                        /*                                                                                           */
                                        /* 1-la structure 'EGAL(vecteur,EGAL(...))' n'est la que pour permettre a '$xcc/cpp$Z' de    */
                                        /* travailler normalement ; en effet, il repere les formes du type 'EGAL(vecteur,...)', et   */
                                        /* bien qu'elle soit ici redondante au niveau de l'affectation qu'elle realise (puisque      */
                                        /* cette derniere a deja ete effectuee par le 'EGAL(...)' le plus "interne"), elle est donc  */
                                        /* necessaire si l'on veut que '$xcc/cpp$Z' recupere les objets statiques utilises sans      */
                                        /* avoir a en changer la programmation...                                                    */
                                        /*                                                                                           */
                                        /* 2-la structure 'PARE(LIS2(...))' permet de faire executer la fonction 'eFdTb1(...)' mais  */
                                        /* sans que son resultat ne soit pris en compte dans l'evaluation de l'expression qui doit   */
                                        /* nous fournir l'adresse du pointeur sur l'objet statique. Notons d'ailleurs au passge      */
                                        /* que 'eFdTb1(...)' a le type 'Void' (via 'Free(...)') ce qui signifie qu'elle ne renvoie   */
                                        /* pas de valeur ; elle ne pourrait pas figurer d'ailleurs dans une expression ou sa valeur  */
                                        /* serait requise (voir 'v $xtc/alloc.01$c' a ce propos).                                    */
#define   eFdTb1(vecteur,dimension,type)                                                                                                \
                    FreSS(vecteur)
#define   FdTb1(vecteur,dimension,type,libre)                                                                                           \
                    Bblock                                                                                                              \
                    CALZ(eFdTb1(vecteur,dimension,type));                                                                               \
                    EGAL(vecteur,libre);                                                                                                \
                    Eblock
                                        /* Liberation dynamique de la memoire necessaire a un tableau a une dimension,               */
                                        /* la premiere forme ('eFdTb1(...)' pouvant figurer dans une expression et par exemple       */
                                        /* dans 'MdTb1(...)', alors que la seconde ('FdTb1(...)') ne le peut pas a cause de          */
                                        /* l'utilisation de 'CALS(...)'. Pour des raisons de simplicite, les fonctions 'eFdTb2(...)' */
                                        /* et 'eFdTb3(...)' ne seront pas definies...                                                */
                                        /*                                                                                           */
                                        /* ATTENTION : le 20180315115310, je note que c'est bien 'FreSS(...)' qu'il faut utiliser    */
                                        /* et non pas :                                                                              */
                                        /*                                                                                           */
                                        /*                  #define   eFdTb1(vecteur,dimension,type)                              \  */
                                        /*                                      CALZ_FreSS(vecteur)                                  */
                                        /*                                                                                           */
                                        /* etant donnes les localisations des appels des 'eFdTb1(...)'s...                           */
                                        /*                                                                                           */
                                        /* Le 20050221165524 a ete introduit la reinitialisation de 'vecteur' avec 'libre' a cause   */
                                        /* d'un probleme rencontre 'v $xiipf/fonction.3$FON FdTb1' ou l'on fait une suite de         */
                                        /* 'FdTb1(...)' suivis par des 'MdTb1(...)' or cette derniere procedure fait implicitement   */
                                        /* un 'eFdTb1(...)' lorsque le pointeur 'vecteur' semble ne pas etre 'libre'. D'ou cette     */
                                        /* mise a jour tres hygienique d'ailleurs qui rend le pointeur libre...                      */
                                        /*                                                                                           */
                                        /* Le 20051025155153, j'ai ajoute un ";" qui manquait, semble-t-il, derriere le 'CALS(...)'. */
#define   IdTb1(vecteur,index,dimension)                                                                                                \
                    PINDIRECT(bADD(vecteur,ITb1c(index,dimension)))                                                                     \
                                        /* Indexation d'un tableau alloue dynamiquement et a une dimension.                          */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000406084728, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  #define   IdTb1(vecteur,index,dimension)                              \  */ \
                                        /*                                      PINDIRECT(ADD2(vecteur,index))                       */ \
                                        /*                                                                                           */ \
                                        /* Le 20040419084436, 'ADD2(...)' a ete remplace par 'bADD(...)' afin de permettre           */ \
                                        /* la mise en place du dispositif de garantie eventuelle de l'ordre des operations           */ \
                                        /* 'v $xil/defi_c3$vv$DEF GarantirOrdreOperations_AvecTypeFloat'.                            */
#define   IdTb1sd(vecteur,index)                                                                                                        \
                    PINDIRECT(bADD(vecteur,ITb1csd(index)))                                                                             \
                                        /* A cause de 'v $xci/valeurs_ArbreSternBrocot$K TRI_D_UNE_LISTE_QUELCONQUE', cette          */ \
                                        /* procedure a ete introduite le 20220803182004 car pour 'TRI_D_UNE_LISTE_QUELCONQUE(...)'   */ \
                                        /* le dernier argument aurait du etre 'IdTb1(...)' qui demande trois arguments, alors        */ \
                                        /* que 'v $ximd/operator.1$FON TRI_D_UNE_LISTE_QUELCONQUE' et donc les proecdures            */ \
                                        /* telle 'v $ximd/operator.1$FON TRI_D_UNE_LISTE_QUELCONQUE_VERSION_N_AU_CARRE' en           */ \
                                        /* demande deux pour l'argument formel 'AccesListe(...)' qui, en general est 'IdTb1(...)'    */ \
                                        /* ('v $xrv/distance.02$K gELEMENT_DU_FICHIER' et 'v $xrv/ARITHMET.1g$I gELEMENT_DU_FICHIER' */ \
                                        /* par exemple...). On notera que : "sd"="Sans Dimension"...                                 */

#if       (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ATb1(vecteur)                                                                                                            \
                         ADRESSE(ITb1(vecteur,INDEX0))                                                                                  \
                                        /* Et adresse d'un tel tableau...                                                            */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ATb1(vecteur)                                                                                                            \
                         vecteur                                                                                                        \
                                        /* Et adresse d'un tel tableau...                                                            */
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )

#define   DTb0(vecteur)                                                                                                                 \
                    vecteur[]                                                                                                           \
                                        /* Definition d'un tableau a une dimension "muette",                                         */
#define   ITb0(vecteur,index)                                                                                                           \
                    ITb1(vecteur,index)                                                                                                 \
                                        /* Et indexation d'un tel tableau...                                                         */

#define   DTbp(vecteur)                                                                                                                 \
                    DTb0(PARE(POINTEUR(vecteur)))                                                                                       \
                                        /* Definition d'un pointeur sur un tableau a une seul dimension "muette".                    */
#define   ITbp(vecteur,index)                                                                                                           \
                    ITb0(PINDIRECT(vecteur),index)                                                                                      \
                                        /* Et indexation d'un tel tableau...                                                         */

#define   DTb2(matrice,dimension_1,dimension_2)                                                                                         \
                    matrice[DIME(dimension_1)][DIME(dimension_2)]                                                                       \
                                        /* Definition d'un tableau a deux dimensions,                                                */
#define   ITb2(matrice,index_1,index_2)                                                                                                 \
                    PARE(matrice[index_1][index_2])                                                                                     \
                                        /* Indexation d'un tel tableau.                                                              */
#define   ITb2c(index_1,dimension_1,index_2,dimension_2)                                                                                \
                    AXPB(ITb1c(index_2,dimension_2),dimension_1,ITb1c(index_1,dimension_1))                                             \
                                        /* Conversion d'un indice bi-dimensionnel en un indice mono-dimensionnel.                    */
#define   ITb2v(matrice,index_1,dimension_1,index_2,dimension_2)                                                                        \
                    ITb1(matrice,ITb2c(index_1,dimension_1,index_2,dimension_2))                                                        \
                                        /* Indexation "vectoriel" d'un tel tableau.                                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000405163016, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  #define   ITb2v(matrice,index_1,dimension_1,index_2,dimension_2)      \  */ \
                                        /*                                      ITb1(matrice,AXPB(index_2,dimension_1,index_1))      */ \
                                        /*                                                                                           */

#define   DdTb2(pointeur,matrice,dimension_1,dimension_2,valeur_initiale)                                                               \
                    DdTb1(pointeur,matrice,bMUL(dimension_1,dimension_2),valeur_initiale)                                               \
                                        /* Definition d'un tableau alloue dynamiquement a deux dimensions.                           */
#define   MdTb2(matrice,dimension_1,dimension_2,type,libre)                                                                             \
                    MdTb1(matrice,bMUL(dimension_1,dimension_2),type,libre)                                                             \
                                        /* Allocation dynamique de la memoire necessaire a un tableau a deux dimensions.             */
#define   FdTb2(matrice,dimension_1,dimension_2,type,libre)                                                                             \
                    FdTb1(matrice,bMUL(dimension_1,dimension_2),type,libre)                                                             \
                                        /* Liberation dynamique de la memoire necessaire a un tableau a deux dimensions.             */
#define   IdTb2(matrice,index_1,dimension_1,index_2,dimension_2)                                                                        \
                    IdTb1(matrice,ITb2c(index_1,dimension_1,index_2,dimension_2),bMUL(dimension_1,dimension_2))                         \
                                        /* Indexation d'un tableau alloue dynamiquement et a deux dimensions.                        */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000406084728, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  #define   IdTb2(matrice,index_1,dimension_1,index_2,dimension_2)      \  */ \
                                        /*                                      IdTb1(matrice                                     \  */ \
                                        /*                                           ,AXPB(index_2,dimension_1,index_1)           \  */ \
                                        /*                                           ,MUL2(dimension_1,dimension_2)               \  */ \
                                        /*                                            )                                              */ \
                                        /*                                                                                           */

#if       (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ATb2(vecteur)                                                                                                            \
                         ADRESSE(ITb2(vecteur,INDEX0,INDEX0))                                                                           \
                                        /* Et adresse d'un tel tableau...                                                            */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ATb2(matrice)                                                                                                            \
                         matrice                                                                                                        \
                                        /* Et adresse d'un tel tableau...                                                            */
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                                  \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                                \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                               \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )

#define   DTb3(tensor3,dimension_1,dimension_2,dimension_3)                                                                             \
                    tensor3[DIME(dimension_1)][DIME(dimension_2)][DIME(dimension_3)]                                                    \
                                        /* Definition d'un tableau a trois dimensions.                                               */
#define   ITb3(tensor3,index_1,index_2,index_3)                                                                                         \
                    PARE(tensor3[index_1][index_2][index_3])                                                                            \
                                        /* Indexation d'un tel tableau.                                                              */
#define   ITb3c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)                                                            \
                    ITb2c(index_1,dimension_1,ITb2c(index_2,dimension_2,index_3,dimension_3),dimension_2)                               \
                                        /* Conversion d'un indice tri-dimensionnel en un indice mono-dimensionnel.                   */
#define   ITb3v(tensor3,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)                                                    \
                    ITb1(tensor3,ITb3c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3))                                    \
                                        /* Indexation "vectoriel" d'un tel tableau.                                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000405163016, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*   #define   ITb3v(tensor,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)  \  */ \
                                        /*                  ITb1(tensor                                                           \  */ \
                                        /*                      ,AXPB(AXPB(index_3,dimension_2,index_2),dimension_1,index_1)      \  */ \
                                        /*                       )                                                                   */ \
                                        /*                                                                                           */

#define   DdTb3(pointeur,tensor3,dimension_1,dimension_2,dimension_3,valeur_initiale)                                                   \
                    DdTb1(pointeur,tensor3,MUL3(dimension_1,dimension_2,dimension_3),valeur_initiale)                                   \
                                        /* Definition d'un tableau alloue dynamiquement a trois dimensions.                          */
#define   MdTb3(tensor3,dimension_1,dimension_2,dimension_3,type,libre)                                                                 \
                    MdTb1(tensor3,MUL3(dimension_1,dimension_2,dimension_3),type,libre)                                                 \
                                        /* Allocation dynamique de la memoire necessaire a un tableau a trois dimensions.            */
#define   FdTb3(tensor3,dimension_1,dimension_2,dimension_3,type,libre)                                                                 \
                    FdTb1(tensor3,MUL3(dimension_1,dimension_2,dimension_3),type,libre)                                                 \
                                        /* Liberation dynamique de la memoire necessaire a un tableau a trois dimensions.            */
#define   IdTb3(tensor3,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)                                                    \
                    IdTb1(tensor3                                                                                                       \
                         ,ITb3c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)                                            \
                         ,MUL3(dimension_1,dimension_2,dimension_3)                                                                     \
                          )                                                                                                             \
                                        /* Indexation d'un tableau alloue dynamiquement et a trois dimensions.                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, avant le 20000406084728, la definition etait :                                 */ \
                                        /*                                                                                           */ \
                                        /*   #define   IdTb3(tensor,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3)  \  */ \
                                        /*                  IdTb1(tensor                                                          \  */ \
                                        /*                       ,AXPB(AXPB(index_3,dimension_2,index_2),dimension_1,index_1)     \  */ \
                                        /*                       ,MUL3(dimension_1,dimension_2,dimension_3)                       \  */ \
                                        /*                        )                                                                  */ \
                                        /*                                                                                           */

#define   DTb4(tensor4,dimension_1,dimension_2,dimension_3,dimension_4)                                                                 \
                    tensor4[DIME(dimension_1)][DIME(dimension_2)][DIME(dimension_3)][DIME(dimension_4)]                                 \
                                        /* Definition d'un tableau a quatre dimensions. L'ensemble des definitions relatives aux     */ \
                                        /* tableaux a quatre dimensions furent introduites le 20081216142213...                      */
#define   ITb4(tensor4,index_1,index_2,index_3,index_4)                                                                                 \
                    PARE(tensor4[index_1][index_2][index_3][index_4])                                                                   \
                                        /* Indexation d'un tel tableau.                                                              */
#define   ITb4c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3,index_4,dimension_4)                                        \
                    ITb2c(index_1,dimension_1,ITb3c(index_2,dimension_2,index_3,dimension_3,index_4,dimension_4),dimension_2)           \
                                        /* Conversion d'un indice quadri-dimensionnel en un indice mono-dimensionnel.                */
#define   ITb4v(tensor4,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3,index_4,dimension_4)                                \
                    ITb1(tensor4,ITb4c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3,index_4,dimension_4))                \
                                        /* Indexation "vectoriel" d'un tel tableau.                                                  */

#define   DdTb4(pointeur,tensor4,dimension_1,dimension_2,dimension_3,dimension_4,valeur_initiale)                                       \
                    DdTb1(pointeur,tensor4,MUL4(dimension_1,dimension_2,dimension_3,dimension_4),valeur_initiale)                       \
                                        /* Definition d'un tableau alloue dynamiquement a quatre dimensions.                         */
#define   MdTb4(tensor4,dimension_1,dimension_2,dimension_3,dimension_4,type,libre)                                                     \
                    MdTb1(tensor4,MUL4(dimension_1,dimension_2,dimension_3,dimension_4),type,libre)                                     \
                                        /* Allocation dynamique de la memoire necessaire a un tableau a quatre dimensions.           */
#define   FdTb4(tensor4,dimension_1,dimension_2,dimension_3,dimension_4,type,libre)                                                     \
                    FdTb1(tensor4,MUL4(dimension_1,dimension_2,dimension_3,dimension_4),type,libre)                                     \
                                        /* Liberation dynamique de la memoire necessaire a un tableau a quatre dimensions.           */
#define   IdTb4(tensor4,index_1,dimension_1,index_2,dimension_2,index_3,dimension_3,index_4,dimension_4)                                \
                    IdTb1(tensor4                                                                                                       \
                         ,ITb4c(index_1,dimension_1,index_2,dimension_2,index_3,dimension_3,index_4,dimension_4)                        \
                         ,MUL4(dimension_1,dimension_2,dimension_3,dimension_4)                                                         \
                          )                                                                                                             \
                                        /* Indexation d'un tableau alloue dynamiquement et a quatre dimensions.                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C E S   D I R E C T   A U X   S T R U C T U R E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

                                        /* ATTENTION : on notera le 20201104140607 ci-dessous le fait que les differentes            */
                                        /* definitions suivantes sont suivies d'espaces et d'indicateur de ligne-suite. Cela         */
                                        /* a pour consequences que des structures telles :                                           */
                                        /*                                                                                           */
                                        /*                  ASD2(FAload_point_coordonnees_01_____matrice_de_transformation,cx,cx)    */
                                        /*                                                                                           */
                                        /* ('v $xci/accumule.41$I ASD2') sont traduites en :                                         */
                                        /*                                                                                           */
                                        /*                  FFAload_point_coordonnees_01_____matrice_de_transformation.cx .cx        */
                                        /*                                                                               .           */
                                        /*                                                                              /|\          */
                                        /*                                                                               |           */
                                        /*                                                                                           */
                                        /* avec donc un espace "parasite"...                                                         */

#define   ASD1(structure,element)                                                                                                       \
                    structure.element                                                                                                   \
                                        /* Acces direct aux elements d'une structure a un niveau. On notera que contrairement a la   */ \
                                        /* definition de 'ASI1(...)', on ne peut pas ecrire :                                        */ \
                                        /*                                                                                           */ \
                                        /*                  #define   ASD1(structure,element)                                     \  */ \
                                        /*                                      PARE(structure).element                              */ \
                                        /*                                                                                           */ \
                                        /* On verra en particulier dans 'v $xiii/vecteurs$DEF' la definition de 'WCG(...)' qui       */ \
                                        /* contient par exemple :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  WCG_ELEMENT(contexte,ASD1(vecteurs_____cursor_3D,x));                    */ \
                                        /*                                                                                           */ \
                                        /* qui equivaut a :                                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  EGAL(ASD1(contexte,ASD1(vecteurs_____cursor_3D,x)));                     */ \
                                        /*                                                                                           */ \
                                        /* soit apres traduction :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  ((contexte).(vecteurs_____cursor_3D).x = ((vecteurs_____cursor_3D).x));  */ \
                                        /*                              .         .                                                  */ \
                                        /*                             /|\       /|\                                                 */ \
                                        /*                              |         |                                                  */ \
                                        /*                              |         |                                                  */ \
                                        /*                                                                                           */ \
                                        /* ce qu'aucun compilateur 'C' n'autorise...                                                 */
#define   ASD2(structure,element1,element2)                                                                                             \
                    ASD1(ASD1(structure,element1),element2)                                                                             \
                                        /* Acces direct aux elements d'une structure a deux niveaux,                                 */
#define   ASD3(structure,element1,element2,element3)                                                                                    \
                    ASD1(ASD2(structure,element1,element2),element3)                                                                    \
                                        /* Acces direct aux elements d'une structure a trois niveaux,                                */
#define   ASD4(structure,element1,element2,element3,element4)                                                                           \
                    ASD1(ASD3(structure,element1,element2,element3),element4)                                                           \
                                        /* Acces direct aux elements d'une structure a quatre niveaux,                               */
#define   ASD5(structure,element1,element2,element3,element4,element5)                                                                  \
                    ASD1(ASD4(structure,element1,element2,element3,element4),element5)                                                  \
                                        /* Acces direct aux elements d'une structure a cinq niveaux.                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C E S   I N D I R E C T   A U X   S T R U C T U R E S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ASI1(structure,element)                                                                                                       \
                    PARE(structure)->element                                                                                            \
                                        /* Acces indirect aux elements d'une structure a un niveau. On notera le 'PARE(...)' destine */ \
                                        /* aux cas ou 'structure' est lui-meme une indirection (voir un exemple d'utilisation dans   */ \
                                        /* 'v $xrq/particle.M55$I' ou l'on trouve dans la fonction 'iPARTICULE(...)' la procedure    */ \
                                        /* 'INDIRECT(...)' en tant que premier argument de 'ASI1(...)'.                              */
#define   ASI2(structure,element1,element2)                                                                                             \
                    ASD1(ASI1(structure,element1),element2)                                                                             \
                                        /* Acces indirect aux elements d'une structure a deux niveaux,                               */
#define   ASI3(structure,element1,element2,element3)                                                                                    \
                    ASD1(ASI2(structure,element1,element2),element3)                                                                    \
                                        /* Acces indirect aux elements d'une structure a trois niveaux,                              */
#define   ASI4(structure,element1,element2,element3,element4)                                                                           \
                    ASD1(ASI3(structure,element1,element2,element3),element4)                                                           \
                                        /* Acces indirect aux elements d'une structure a quatre niveaux,                             */
#define   ASI5(structure,element1,element2,element3,element4,element5)                                                                  \
                    ASD1(ASI4(structure,element1,element2,element3,element4),element5)                                                  \
                                        /* Acces indirect aux elements d'une structure a cinq niveaux.                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T A I L L E   D ' U N E   S T R U C T U R E  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SIZE_GENERAL(element)                                                                                                         \
                    NEUT(sizeof(element))                                                                                               \
                                        /* Definition generale de tous les casts et independante de la version. Theoriquement, il    */ \
                                        /* suffirait d'ecrire :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  #define   SIZE_GENERAL(element)                                       \  */ \
                                        /*                                      sizeof(element)                                      */ \
                                        /*                                                                                           */ \
                                        /* Malheureusement, sur certains SYSTEMEs (par exemple 'SYSTEME_HP7??_HPUX_CC' ou encore     */ \
                                        /* 'SYSTEME_NWS3000_NEWSOS_2CC'), il apparait qu'il faut caster... C'est l'absence de ce     */ \
                                        /* cast qui serait responsable, apparemment, des bugs du type 'BUG_SYSTEME_..._SARS', que    */ \
                                        /* je conserve provisoirement, mais qui devrait prochainement disparaitre grace aux          */ \
                                        /* modifications apportees a 'DECG(...)' et 'DECD(...)' (en effet, ainsi que cela est dit    */ \
                                        /* ci-apres, 'SIZE_GENERAL(...)' ne peut rien faire...).                                     */ \
                                        /*                                                                                           */ \
                                        /* Pas de chance, j'ai essaye d'utiliser :                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  #define   SIZE_GENERAL(element)                                       \  */ \
                                        /*                                      INTE(sizeof(element))                                */ \
                                        /*                                                                                           */ \
                                        /* mais 'SYSTEME_NWS3000_NEWSOS_CC' et 'SYSTEME_NWS3000_NEWSOS_2CC' ne l'accepte pas, car    */ \
                                        /* en effet, 'SIZE_GENERAL(...)' est utilise (via d'autres procedures) pour dimensionner     */ \
                                        /* des structures a l'aide de 'DIME(...)'. Cette procedure contient un 'COND(...)', et si    */ \
                                        /* il contient un "cast" via 'SIZE_GENERAL(...)', alors le message :                         */ \
                                        /*                                                                                           */ \
                                        /*                  ccom: Error: ...,line ...: constant expected                             */ \
                                        /*                                                                                           */ \
                                        /* apparait, d'ou le retour a la version anterieure (avec 'NEUT(...)' malgre tout...).       */

#ifdef    DEFV_CAST_VERSION_01
#    message   "La version 'DEFV_CAST_VERSION_01' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_01
#Eifdef   DEFV_CAST_VERSION_01

#ifdef    DEFV_CAST_VERSION_02
#    message   "La version 'DEFV_CAST_VERSION_02' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_02
#Eifdef   DEFV_CAST_VERSION_02

#ifdef    DEFV_CAST_VERSION_03
#    define    SIZE(element)                                                                                                            \
                         SIZE_GENERAL(element(VIDE))                                                                                    \
                                        /* Definition generale de 'size'...                                                          */
#Aifdef   DEFV_CAST_VERSION_03
#Eifdef   DEFV_CAST_VERSION_03

#define   SIZP(element)                                                                                                                 \
                    SIZE_GENERAL(element)                                                                                               \
                                        /* Definition de 'size' relative aux elements divers qui ne sont pas definis sous            */ \
                                        /* forme de procedures a arguments (par exemple les variables 'size_...'.                    */
#define   SIZC(element)                                                                                                                 \
                    SIZE_GENERAL(element)                                                                                               \
                                        /* Definition de 'size' relative aux chaines...                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   G E N E R A L E   D E S   ' C A S T ' S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CAST_GENERAL(type,expression)                                                                                                 \
                    PARE(PARE(type)PARE(expression))                                                                                    \
                                        /* Definition generale de tous les casts et independante de la version...                    */

#ifdef    DEFV_CAST_VERSION_01
#    message   "La version 'DEFV_CAST_VERSION_01' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_01
#Eifdef   DEFV_CAST_VERSION_01

#ifdef    DEFV_CAST_VERSION_02
#    message   "La version 'DEFV_CAST_VERSION_02' n'est plus disponible."
#Aifdef   DEFV_CAST_VERSION_02
#Eifdef   DEFV_CAST_VERSION_02

#ifdef    DEFV_CAST_VERSION_03
#    define    CAST(type,expression)                                                                                                    \
                         CAST_GENERAL(type(VIDE_CAST),expression)                                                                       \
                                        /* Definition generale de tous les casts. On notera la presence de 'VIDE_CAST' qui n'est     */ \
                                        /* defini nulle part et qui permet de resoudre le probleme de l'elimination des couples de   */ \
                                        /* parentheses vides qui apparaissent lors de l'utilisation de 'ptCAST(...)'. En effet,      */ \
                                        /* alors l'argument 'type' ci-dessus n'y est pas une macro-procedure, et donc :              */ \
                                        /*                                                                                           */ \
                                        /*                  type(VIDE)                                                               */ \
                                        /*                                                                                           */ \
                                        /* est consideree comme :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  type      (VIDE)                                                         */ \
                                        /*                                                                                           */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  type      ()                                                             */ \
                                        /*                                                                                           */ \
                                        /* L'elimination de ces '()' par '$xcc/cpp$D/parent_vides$sed' reposait jusqu'au 1995062300  */ \
                                        /* sur la detection des chaines suivantes :                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  *         ()                                                             */ \
                                        /*                                                                                           */ \
                                        /* or, par malheur, de telles chaines peuvent etre decoupees par '$xcp/decoupage$K' apres    */ \
                                        /* le caractere 'K_ETOILE', ce que l'on ne peut interdire, sous peine de voir apparaitre     */ \
                                        /* des lignes trop longues. D'ou ce 'VIDE_CAST' qui n'est reconnu que par le fichier         */ \
                                        /* '$xcc/cpp$D/parent_vides$sed'...                                                          */
#    define    CASP(type,expression)                                                                                                    \
                         CAST_GENERAL(type(VIDE),expression)                                                                            \
                                        /* Definition des casts relatifs aux 'genere_XXX' des pixels...                              */
#Aifdef   DEFV_CAST_VERSION_03
#Eifdef   DEFV_CAST_VERSION_03

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   O B J E T S   A   E X T E R I O R I S E R  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION, ces definitions devraient etre logiquement dans '$xil/defi_K2$vv$DEF' mais     */
                                        /*  malheureusement, on en a besoin tout de suite. De plus, on ne peut la mettre dans        */
                                        /* '$xil/defi_K1$vv$DEF', car alors, 'TypedefP(...)' et 'TypedefS(...)' ne sont pas encore   */
                                        /* definis...                                                                                */

#define   ___Extern                                                                                                                     \
                    extern                                                                                                              \
                                        /* Afin de bien parametrer 'Extern' et 'Ailleurs'...                                         */
TypedefP(Extern,___Extern)
                                        /* Ce mot clef permet de designer les references externes a des objets "systemes" (par       */
                                        /* exemple, des fonctions de la bibliotheque mathematiques).                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   B L O C S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BEGIN     {
#define   END       }

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S T R U C T U R E S   G E N E R A L E S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION : depuis qu'a ete introduite la '$PASSE_D', il est imperatif que certaines      */
                                        /* definitions soient faites avant d'autre ; en particulier 'Benumeration' doit etre         */
                                        /* definie avant tout '-define ...' qui l'utilise...                                         */
#define   Bstructure                                                                                                                    \
                    BEGIN
#define   Estructure(nom)                                                                                                               \
                    END       nom
                                        /* Definition des structures 'struct'.                                                       */
#define   Bunion                                                                                                                        \
                    BEGIN
#define   Eunion(nom)                                                                                                                   \
                    END       nom
                                        /* Definition des unions 'union'.                                                            */
#define   Bliste                                                                                                                        \
                    BEGIN
#define   Eliste                                                                                                                        \
                    END;
                                        /* Definition des listes.                                                                    */
#define   Benumeration                                                                                                                  \
                    BEGIN
#define   Eenumeration                                                                                                                  \
                    END
                                        /* Definition des enumerations 'enum' ; on notera un changement dans ces definitions :       */
                                        /* autrefois, il y avait :                                                                   */
                                        /*                                                                                           */
                                        /*                  #define   Eenumeration(nom)                                           \  */
                                        /*                                      END       nom                                        */
                                        /*                                                                                           */
                                        /* et                                                                                        */
                                        /*                                                                                           */
                                        /*                  #define   Enum                                                        \  */
                                        /*                                      enum                                                 */
                                        /*                                                                                           */
                                        /* ainsi, on voit que le 'nom' est passe de 'Eenumeration' a 'Enum', ce qui evite que le     */
                                        /* 'nom' ne soit signale comme symbole indefini par la commande 'nm'...                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E N U M E R A T I O N S   S T A N D A R D S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* ATTENTION : depuis qu'a ete introduite la '$PASSE_D', il est imperatif que certaines      */
                                        /* definitions soient faites avant d'autre ; en particulier 'Denumer17(...)' doit etre       */
                                        /* definie avant tout '-define ...' qui l'utilise...                                         */

#define   Denumer01(element01,nom)                                                                                                      \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                              Eenumeration
#define   Denumer02(element01,element02,nom)                                                                                            \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                              Eenumeration
#define   Denumer03(element01,element02,element03,nom)                                                                                  \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                              Eenumeration
#define   Denumer04(element01,element02,element03,element04,nom)                                                                        \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                              Eenumeration
#define   Denumer05(element01,element02,element03,element04,element05,nom)                                                              \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                                       ,element05                                                                                       \
                              Eenumeration
#define   Denumer06(element01,element02,element03,element04,element05,element06,nom)                                                    \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                                       ,element05                                                                                       \
                                       ,element06                                                                                       \
                              Eenumeration
#define   Denumer07(element01,element02,element03,element04,element05,element06,element07,nom)                                          \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                                       ,element05                                                                                       \
                                       ,element06                                                                                       \
                                       ,element07                                                                                       \
                              Eenumeration
#define   Denumer08(element01,element02,element03,element04,element05,element06,element07,element08,nom)                                \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                                       ,element05                                                                                       \
                                       ,element06                                                                                       \
                                       ,element07                                                                                       \
                                       ,element08                                                                                       \
                              Eenumeration
#define   Denumer09(element01,element02,element03,element04,element05,element06,element07,element08,element09,nom)                      \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        element01                                                                                       \
                                       ,element02                                                                                       \
                                       ,element03                                                                                       \
                                       ,element04                                                                                       \
                                       ,element05                                                                                       \
                                       ,element06                                                                                       \
                                       ,element07                                                                                       \
                                       ,element08                                                                                       \
                                       ,element09                                                                                       \
                              Eenumeration
#define   Denumer10(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,nom)                                                              \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                              Eenumeration
#define   Denumer11(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,nom)                                                         \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                              Eenumeration
                                        /* Introduit le 20230927110826...                                                            */
#define   Denumer12(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,nom)                                                    \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                              Eenumeration
                                        /* Introduit le 20230927110826...                                                            */
#define   Denumer13(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,nom)                                               \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                              Eenumeration
#define   Denumer14(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,nom)                                          \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                              Eenumeration
                                        /* Introduit le 20230731112533...                                                            */
#define   Denumer15(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,nom)                                     \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                              Eenumeration
                                        /* Introduit le 20230731112533...                                                            */
#define   Denumer16(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,nom)                                \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                              Eenumeration
#define   Denumer17(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,nom)                           \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                              Eenumeration
#define   Denumer18(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,el18,nom)                      \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                                       ,el18                                                                                            \
                              Eenumeration
#define   Denumer19(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,el18,el19,nom)                 \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                                       ,el18                                                                                            \
                                       ,el19                                                                                            \
                              Eenumeration
#define   Denumer20(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20,nom)            \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                                       ,el18                                                                                            \
                                       ,el19                                                                                            \
                                       ,el20                                                                                            \
                              Eenumeration
#define   Denumer21(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20,el21,nom)       \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                                       ,el18                                                                                            \
                                       ,el19                                                                                            \
                                       ,el20                                                                                            \
                                       ,el21                                                                                            \
                              Eenumeration
#define   Denumer22(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20,el21,el22,nom)  \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        el01                                                                                            \
                                       ,el02                                                                                            \
                                       ,el03                                                                                            \
                                       ,el04                                                                                            \
                                       ,el05                                                                                            \
                                       ,el06                                                                                            \
                                       ,el07                                                                                            \
                                       ,el08                                                                                            \
                                       ,el09                                                                                            \
                                       ,el10                                                                                            \
                                       ,el11                                                                                            \
                                       ,el12                                                                                            \
                                       ,el13                                                                                            \
                                       ,el14                                                                                            \
                                       ,el15                                                                                            \
                                       ,el16                                                                                            \
                                       ,el17                                                                                            \
                                       ,el18                                                                                            \
                                       ,el19                                                                                            \
                                       ,el20                                                                                            \
                                       ,el21                                                                                            \
                                       ,el22                                                                                            \
                              Eenumeration
#define   Denumer23(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,nom)                                           \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                              Eenumeration
#define   Denumer24(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,nom)                                        \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                              Eenumeration
#define   Denumer25(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,nom)                                     \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                              Eenumeration
#define   Denumer26(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,nom)                                  \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                              Eenumeration
#define   Den27(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,nom)                                   \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                              Eenumeration
#define   Den28(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,nom)                                \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                              Eenumeration
#define   Den29(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,nom)                             \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                              Eenumeration
#define   Den30(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,nom)                          \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                              Eenumeration
#define   Den31(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,nom)                       \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20051111134206...                                                            */
#define   Den32(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,nom)                    \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20051114142602...                                                            */
#define   Den33(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,nom)                 \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20110224094845...                                                            */
#define   Den34(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,nom)              \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20110224094845...                                                            */
#define   Den35(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,nom)           \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                                       ,eZ                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20110224094845...                                                            */
#define   Den36(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,ea,nom)        \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                                       ,eZ                                                                                              \
                                       ,ea                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20110224094845...                                                            */
#define   Den37(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,ea,eb,nom)     \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                                       ,eZ                                                                                              \
                                       ,ea                                                                                              \
                                       ,eb                                                                                              \
                              Eenumeration                                                                                              \
                                        /* Introduit le 20110224094845...                                                            */
#define   Den38(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,ea,eb,ec,nom)  \
                    Enum(nom)                                                                                                           \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                                       ,eZ                                                                                              \
                                       ,ea                                                                                              \
                                       ,eb                                                                                              \
                                       ,ec                                                                                              \
                              Eenumeration
#define   Den39(e1,e2,e3,e4,e5,e6,e7,e8,e9,eA,eB,eC,eD,eE,eF,eG,eH,eI,eJ,eK,eL,eM,eN,eO,eP,eQ,eR,eS,eT,eU,eV,eW,eX,eY,eZ,ea,eb,ec,ed,n) \
                    Enum(n)                                                                                                             \
                              Benumeration                                                                                              \
                                        e1                                                                                              \
                                       ,e2                                                                                              \
                                       ,e3                                                                                              \
                                       ,e4                                                                                              \
                                       ,e5                                                                                              \
                                       ,e6                                                                                              \
                                       ,e7                                                                                              \
                                       ,e8                                                                                              \
                                       ,e9                                                                                              \
                                       ,eA                                                                                              \
                                       ,eB                                                                                              \
                                       ,eC                                                                                              \
                                       ,eD                                                                                              \
                                       ,eE                                                                                              \
                                       ,eF                                                                                              \
                                       ,eG                                                                                              \
                                       ,eH                                                                                              \
                                       ,eI                                                                                              \
                                       ,eJ                                                                                              \
                                       ,eK                                                                                              \
                                       ,eL                                                                                              \
                                       ,eM                                                                                              \
                                       ,eN                                                                                              \
                                       ,eO                                                                                              \
                                       ,eP                                                                                              \
                                       ,eQ                                                                                              \
                                       ,eR                                                                                              \
                                       ,eS                                                                                              \
                                       ,eT                                                                                              \
                                       ,eU                                                                                              \
                                       ,eV                                                                                              \
                                       ,eW                                                                                              \
                                       ,eX                                                                                              \
                                       ,eY                                                                                              \
                                       ,eZ                                                                                              \
                                       ,ea                                                                                              \
                                       ,eb                                                                                              \
                                       ,ec                                                                                              \
                                       ,ed                                                                                              \
                              Eenumeration
#define   Den47(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,o,p,q,r,s,t,u,v,n)                        \
                    Enum(n)                                                                                                             \
                              Benumeration                                                                                              \
                                        A                                                                                               \
                                       ,B                                                                                               \
                                       ,C                                                                                               \
                                       ,D                                                                                               \
                                       ,E                                                                                               \
                                       ,F                                                                                               \
                                       ,G                                                                                               \
                                       ,H                                                                                               \
                                       ,I                                                                                               \
                                       ,J                                                                                               \
                                       ,K                                                                                               \
                                       ,L                                                                                               \
                                       ,M                                                                                               \
                                       ,N                                                                                               \
                                       ,O                                                                                               \
                                       ,P                                                                                               \
                                       ,Q                                                                                               \
                                       ,R                                                                                               \
                                       ,S                                                                                               \
                                       ,T                                                                                               \
                                       ,U                                                                                               \
                                       ,V                                                                                               \
                                       ,W                                                                                               \
                                       ,X                                                                                               \
                                       ,Y                                                                                               \
                                       ,Z                                                                                               \
                                       ,a                                                                                               \
                                       ,b                                                                                               \
                                       ,c                                                                                               \
                                       ,d                                                                                               \
                                       ,e                                                                                               \
                                       ,f                                                                                               \
                                       ,g                                                                                               \
                                       ,h                                                                                               \
                                       ,i                                                                                               \
                                       ,j                                                                                               \
                                       ,k                                                                                               \
                                       ,l                                                                                               \
                                       ,m                                                                                               \
                                       ,o                                                                                               \
                                       ,p                                                                                               \
                                       ,q                                                                                               \
                                       ,r                                                                                               \
                                       ,s                                                                                               \
                                       ,t                                                                                               \
                                       ,u                                                                                               \
                                       ,v                                                                                               \
                              Eenumeration
#define   Den48(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,o,p,q,r,s,t,u,v,w,n)                      \
                    Enum(n)                                                                                                             \
                              Benumeration                                                                                              \
                                        A                                                                                               \
                                       ,B                                                                                               \
                                       ,C                                                                                               \
                                       ,D                                                                                               \
                                       ,E                                                                                               \
                                       ,F                                                                                               \
                                       ,G                                                                                               \
                                       ,H                                                                                               \
                                       ,I                                                                                               \
                                       ,J                                                                                               \
                                       ,K                                                                                               \
                                       ,L                                                                                               \
                                       ,M                                                                                               \
                                       ,N                                                                                               \
                                       ,O                                                                                               \
                                       ,P                                                                                               \
                                       ,Q                                                                                               \
                                       ,R                                                                                               \
                                       ,S                                                                                               \
                                       ,T                                                                                               \
                                       ,U                                                                                               \
                                       ,V                                                                                               \
                                       ,W                                                                                               \
                                       ,X                                                                                               \
                                       ,Y                                                                                               \
                                       ,Z                                                                                               \
                                       ,a                                                                                               \
                                       ,b                                                                                               \
                                       ,c                                                                                               \
                                       ,d                                                                                               \
                                       ,e                                                                                               \
                                       ,f                                                                                               \
                                       ,g                                                                                               \
                                       ,h                                                                                               \
                                       ,i                                                                                               \
                                       ,j                                                                                               \
                                       ,k                                                                                               \
                                       ,l                                                                                               \
                                       ,m                                                                                               \
                                       ,o                                                                                               \
                                       ,p                                                                                               \
                                       ,q                                                                                               \
                                       ,r                                                                                               \
                                       ,s                                                                                               \
                                       ,t                                                                                               \
                                       ,u                                                                                               \
                                       ,v                                                                                               \
                                       ,w                                                                                               \
                              Eenumeration                                                                                              \
                                        /* La procedure 'Den48(...)' a ete introduite le 20081004121952...                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A I T E M E N T   E V E N T U E L   D E S   C O N S T A N T E S   " E N U M E R E E S "  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ENUM(x)                                                                                                                       \
                    INTE(x)                                                                                                             \
                                        /* Deux cas sont possibles : ou bien les constantes enumerees sont typees en entiers         */ \
                                        /* (et on utilise 'NEUT'), ou bien elles ont un type inconnu (de moi...) et il faut          */ \
                                        /* alors forcer 'INTE'. En fait, pratiquement seul le systeme de REFERENCE                   */ \
                                        /* 'SYSTEME_DPX5000_SPIX_CC' permet la definition :                                          */ \
                                        /*                                                                                           */ \
                                        /*                  #define   ENUM(x)   NEUT(x)                                              */ \
                                        /*                                                                                           */ \
                                        /* Mais dans la mesure ou l'on souhaite generer parfois des fichiers "bootstrapables"        */ \
                                        /* de type '$c' qui soient portables sur des machines arbitraires, il faut choisir la        */ \
                                        /* solution qui soit compatible avec le maximum de systemes, et comme le systeme de          */ \
                                        /* REFERENCE 'SYSTEME_DPX5000_SPIX_CC' autorise 'INTE', on l'adopte partout...               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   S T R U C T U R E S  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Struct                                                                                                                        \
                    struct
#define   Union                                                                                                                         \
                    union

#define   STRU(nom_de_structure)                                                                                                        \
                    Struct    nom_de_structure                                                                                          \
                                        /* Pour etre utilise dans 'Typedef()'.                                                       */
#define   UNIO(nom_d_union)                                                                                                             \
                    Union     nom_d_union                                                                                               \
                                        /* Pour etre utilise dans 'Typedef()'.                                                       */
#define   Enum(nom_d_une_liste_enumeree)                                                                                                \
                    enum      nom_d_une_liste_enumeree                                                                                  \
                                        /* Pour creer une liste enumeree.                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S T R U C T U R E S   S T A N D A R D S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Dstruct00(nom1,nom2)                                                                                                          \
                    Dstruct01(nom1                                                                                                      \
                             ,DEFV(Dummy,dummy)                                                                                         \
                             ,nom2                                                                                                      \
                              )

#ifdef    SYSTEME_DPX5000_SPIX_CC
#    undef     Dstruct00
#    define    Dstruct00(nom1,nom2)                                                                                                     \
                         STRU(nom1)                                                                                                     \
                                   Bstructure                                                                                           \
                                   Estructure(nom2)                                                                                     \
                                        /* Le compilateur 'cc' accepte les structures vides...                                       */ \
                                        /*                                                                                           */ \
                                        /* Version DPX5000/SPIX/CC.                                                                  */
#Aifdef   SYSTEME_DPX5000_SPIX_CC
#Eifdef   SYSTEME_DPX5000_SPIX_CC

#define   Dstruct01(nom1,element01,nom2)                                                                                                \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                              Estructure(nom2)
#define   Dstruct02(nom1,element01,element02,nom2)                                                                                      \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                              Estructure(nom2)
#define   Dstruct03(nom1,element01,element02,element03,nom2)                                                                            \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                              Estructure(nom2)
#define   Dstruct04(nom1,element01,element02,element03,element04,nom2)                                                                  \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                              Estructure(nom2)
#define   Dstruct05(nom1,element01,element02,element03,element04,element05,nom2)                                                        \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                              Estructure(nom2)
#define   Dstruct06(nom1,element01,element02,element03,element04,element05,element06,nom2)                                              \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                              Estructure(nom2)
#define   Dstruct07(nom1,element01,element02,element03,element04,element05,element06,element07,nom2)                                    \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                              Estructure(nom2)
#define   Dstruct08(nom1,element01,element02,element03,element04,element05,element06,element07,element08,nom2)                          \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                                        element08;                                                                                      \
                              Estructure(nom2)
#define   Dstruct09(nom1,element01,element02,element03,element04,element05,element06,element07,element08,element09,nom2)                \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                                        element08;                                                                                      \
                                        element09;                                                                                      \
                              Estructure(nom2)
#define   Dstruct10(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,nom2)                                                        \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                              Estructure(nom2)
#define   Dstruct12(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,nom2)                                              \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                                        el11;                                                                                           \
                                        el12;                                                                                           \
                              Estructure(nom2)
#define   Dstruct13(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,nom2)                                         \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                                        el11;                                                                                           \
                                        el12;                                                                                           \
                                        el13;                                                                                           \
                              Estructure(nom2)
#define   Dstruct14(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,nom2)                                    \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                                        el11;                                                                                           \
                                        el12;                                                                                           \
                                        el13;                                                                                           \
                                        el14;                                                                                           \
                              Estructure(nom2)
#define   Dstruct15(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,nom2)                               \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                                        el11;                                                                                           \
                                        el12;                                                                                           \
                                        el13;                                                                                           \
                                        el14;                                                                                           \
                                        el15;                                                                                           \
                              Estructure(nom2)
#define   Dstruct16(nom1,el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12,el13,el14,el15,el16,nom2)                          \
                    STRU(nom1)                                                                                                          \
                              Bstructure                                                                                                \
                                        el01;                                                                                           \
                                        el02;                                                                                           \
                                        el03;                                                                                           \
                                        el04;                                                                                           \
                                        el05;                                                                                           \
                                        el06;                                                                                           \
                                        el07;                                                                                           \
                                        el08;                                                                                           \
                                        el09;                                                                                           \
                                        el10;                                                                                           \
                                        el11;                                                                                           \
                                        el12;                                                                                           \
                                        el13;                                                                                           \
                                        el14;                                                                                           \
                                        el15;                                                                                           \
                                        el16;                                                                                           \
                              Estructure(nom2)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        U N I O N S   S T A N D A R D S  :                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Dunion_01(nom1,element01,nom2)                                                                                                \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                              Eunion(nom2)
#define   Dunion_02(nom1,element01,element02,nom2)                                                                                      \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                              Eunion(nom2)
#define   Dunion_03(nom1,element01,element02,element03,nom2)                                                                            \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                              Eunion(nom2)
#define   Dunion_04(nom1,element01,element02,element03,element04,nom2)                                                                  \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                              Eunion(nom2)
#define   Dunion_05(nom1,element01,element02,element03,element04,element05,nom2)                                                        \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                              Eunion(nom2)
#define   Dunion_06(nom1,element01,element02,element03,element04,element05,element06,nom2)                                              \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                              Eunion(nom2)
#define   Dunion_07(nom1,element01,element02,element03,element04,element05,element06,element07,nom2)                                    \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                              Eunion(nom2)
#define   Dunion_08(nom1,element01,element02,element03,element04,element05,element06,element07,element08,nom2)                          \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                                        element08;                                                                                      \
                              Eunion(nom2)
#define   Dunion_09(nom1,element01,element02,element03,element04,element05,element06,element07,element08,element09,nom2)                \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                                        element08;                                                                                      \
                                        element09;                                                                                      \
                              Eunion(nom2)
#define   Dunion_10(nom1,element01,element02,element03,element04,element05,element06,element07,element08,element09,element10,nom2)      \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        element01;                                                                                      \
                                        element02;                                                                                      \
                                        element03;                                                                                      \
                                        element04;                                                                                      \
                                        element05;                                                                                      \
                                        element06;                                                                                      \
                                        element07;                                                                                      \
                                        element08;                                                                                      \
                                        element09;                                                                                      \
                                        element10;                                                                                      \
                              Eunion(nom2)
#define   Dunion_11(nom1,elem01,elem02,elem03,elem04,elem05,elem06,elem07,elem08,elem09,elem10,elem11,nom2)                             \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        elem01;                                                                                         \
                                        elem02;                                                                                         \
                                        elem03;                                                                                         \
                                        elem04;                                                                                         \
                                        elem05;                                                                                         \
                                        elem06;                                                                                         \
                                        elem07;                                                                                         \
                                        elem08;                                                                                         \
                                        elem09;                                                                                         \
                                        elem10;                                                                                         \
                                        elem11;                                                                                         \
                              Eunion(nom2)
#define   Dunion_12(nom1,elem01,elem02,elem03,elem04,elem05,elem06,elem07,elem08,elem09,elem10,elem11,elem12,nom2)                      \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        elem01;                                                                                         \
                                        elem02;                                                                                         \
                                        elem03;                                                                                         \
                                        elem04;                                                                                         \
                                        elem05;                                                                                         \
                                        elem06;                                                                                         \
                                        elem07;                                                                                         \
                                        elem08;                                                                                         \
                                        elem09;                                                                                         \
                                        elem10;                                                                                         \
                                        elem11;                                                                                         \
                                        elem12;                                                                                         \
                              Eunion(nom2)
#define   Dunion_13(nom1,elem01,elem02,elem03,elem04,elem05,elem06,elem07,elem08,elem09,elem10,elem11,elem12,elem13,nom2)               \
                    UNIO(nom1)                                                                                                          \
                              Bunion                                                                                                    \
                                        elem01;                                                                                         \
                                        elem02;                                                                                         \
                                        elem03;                                                                                         \
                                        elem04;                                                                                         \
                                        elem05;                                                                                         \
                                        elem06;                                                                                         \
                                        elem07;                                                                                         \
                                        elem08;                                                                                         \
                                        elem09;                                                                                         \
                                        elem10;                                                                                         \
                                        elem11;                                                                                         \
                                        elem12;                                                                                         \
                                        elem13;                                                                                         \
                              Eunion(nom2)                                                                                              \
                                        /* La definition 'Dunion_13(...)' a ete introduite le 20150227112637...                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N S T A N T E S   D E   B A S E   ( 1 )  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   UNDEF                                                                                                                         \
                    444719                                                                                                              \
                                        /* Pour ce qui n'est pas defini. On notera que cette valeur, d'une part convient aussi bien  */ \
                                        /* a des machines 16 bits, et que d'autre part, sa valeur 'def0' rappelle phonetiquement le  */ \
                                        /* mot 'defaut' (a titre d'information, sa valeur decimale est 57072)...                     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, il y a eu pendant longtemps :                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  #define   UNDEF                                                       \  */ \
                                        /*                                      PARE(0xdef0)                                         */ \
                                        /*                                                                                           */ \
                                        /* Malheureusement, cette forme ne permet pas d'utiliser le symbole 'UNDEF' dans des tests   */ \
                                        /* du type '#if'. D'ou cette nouvelle forme plus compatible. Cette modification a ete        */ \
                                        /* effectuee a cause de '$xiidG/fonction.1$FON' et du traitement tres particulier du         */ \
                                        /* symbole 'VL_PACKING_RGB_8' lors de '$PASSE_1' alors qu'il n'est defini qu'en '$PASSE_5'.  */ \
                                        /*                                                                                           */ \
                                        /* Le 20030405180029 afin d'etre "en phase" avec la variable '$UNDEF', je suis passe de      */ \
                                        /* 57072 a 444444719...                                                                      */ \
                                        /*                                                                                           */ \
                                        /* Le 20030528141449 je suis passe de 444444719 a 444719 car, en effet, 'UNDEF' peut, par    */ \
                                        /* exemple, intervenir dans des allocations memoire ('v $xci/valeurs_alea$K UNDEF') ; il     */ \
                                        /* faut donc limiter les risques de debordement. On notera que malgre la modification de     */ \
                                        /* 'v $xci/valeurs_alea$K 20030528154724' consistant a remplacer 'UNDEF' par 'gnnUNDEF', il  */ \
                                        /* est preferable de conserver la petite valeur (444719) plutot que la grande (444444719),   */ \
                                        /* car, en effet, la grande valeur pourrait avoir des consequences facheuses ailleurs...     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L I S T E S   P O U R   L E   P R E - P R O C E S S E U R  :                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Utilisation :                                                                                                              */
/*                                                                                                                                   */
/*                    Pour transmettre une liste de                                                                                  */
/*                  valeurs numeriques de longueur                                                                                   */
/*                  variable lors d'un appel de                                                                                      */
/*                  macro-procedures, on ne peut utiliser                                                                            */
/*                  la virgule comme separateur, car                                                                                 */
/*                  en effet, le pre-processeur considere                                                                            */
/*                  alors que le nombre d'arguments a                                                                                */
/*                  l'appel est different du nombre                                                                                  */
/*                  d'arguments formels ; il faut donc                                                                               */
/*                  "ruser" ; on ecrira par exemple :                                                                                */
/*                                                                                                                                   */
/*                  BlistA ELEM(x) ELEM(y) ELEM(z) ElistA                                                                            */
/*                                                                                                                                   */
/*                  pour transmettre la liste {x,y,z}.                                                                               */
/*                                                                                                                                   */
/*                    Il est imperatif que la definition de                                                                          */
/*                  'ELEM' ne commence pas par une parenthese                                                                        */
/*                  (d'ou l'operateur neutre '~~'), et de meme                                                                       */
/*                  ne finisse pas par une parenthese (voir la                                                                       */
/*                  definition de 'UNDEF')... D'autre part,                                                                          */
/*                  afin de parentheser par 'PARE' l'argument                                                                        */
/*                  'x' (qui peut etre n'importe quoi, et en                                                                         */
/*                  particulier une expression), et pour                                                                             */
/*                  satisfaire la contrainte precedente (pas                                                                         */
/*                  de parentheses encadrant la definition                                                                           */
/*                  de 'ELEM'), il faut noyer 'PARE(x)' a                                                                            */
/*                  l'interieur d'autre chose ; d'ou la                                                                              */
/*                  structure conditionnelle qui joue                                                                                */
/*                  le role de limiteur (evidemment, pour                                                                            */
/*                  les raisons evoquees ci-dessus, on ne                                                                            */
/*                  peut utiliser la forme 'COND'...).                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#nodefine ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_01                                                                                       \
                                        /* ATTENTION : la 'VERSION_01' est incompatible avec les fichiers "bootstrappables", et      */ \
                                        /* en particulier '$xbg/common$c'.                                                           */
#define   ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_02                                                                                       \
                                        /* La 'VERSION_02' quant a elle, est compatible avec les fichiers "bootstrappables", et      */ \
                                        /* en particulier '$xbg/common$c'.                                                           */

#define   BlistA                                                                                                                        \
                    BEGIN                                                                                                               \
                                        /* Debut d'une liste variable d'arguments numeriques ou de caracteres,                       */
#define   ElistA                                                                                                                        \
                    END                                                                                                                 \
                                        /* Fin d'une liste variable d'arguments numeriques ou de caracteres.                         */
=define   ELEM(element)                                                                                                                 \
                    element
                                        /* Definition d'un element.                                                                  */
                                        /* On notera que cette procedure n'est prise en compte que lors de la 'PASSE_2', et          */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
=define   IstructL01(element01)                                                                                                         \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                    ElistA
=define   IstructL02(element01,element02)                                                                                               \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                    ElistA
=define   IstructL03(element01,element02,element03)                                                                                     \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                    ElistA
=define   IstructL04(element01,element02,element03,element04)                                                                           \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                    ElistA
=define   IstructL05(element01,element02,element03,element04,element05)                                                                 \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                   ,ELEM(element05)                                                                                                     \
                    ElistA
=define   IstructL06(element01,element02,element03,element04,element05,element06)                                                       \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                   ,ELEM(element05)                                                                                                     \
                   ,ELEM(element06)                                                                                                     \
                    ElistA
=define   IstructL07(element01,element02,element03,element04,element05,element06,element07)                                             \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                   ,ELEM(element05)                                                                                                     \
                   ,ELEM(element06)                                                                                                     \
                   ,ELEM(element07)                                                                                                     \
                    ElistA
=define   IstructL08(element01,element02,element03,element04,element05,element06,element07,element08)                                   \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                   ,ELEM(element05)                                                                                                     \
                   ,ELEM(element06)                                                                                                     \
                   ,ELEM(element07)                                                                                                     \
                   ,ELEM(element08)                                                                                                     \
                    ElistA
=define   IstructL09(element01,element02,element03,element04,element05,element06,element07,element08,element09)                         \
                    BlistA                                                                                                              \
                    ELEM(element01)                                                                                                     \
                   ,ELEM(element02)                                                                                                     \
                   ,ELEM(element03)                                                                                                     \
                   ,ELEM(element04)                                                                                                     \
                   ,ELEM(element05)                                                                                                     \
                   ,ELEM(element06)                                                                                                     \
                   ,ELEM(element07)                                                                                                     \
                   ,ELEM(element08)                                                                                                     \
                   ,ELEM(element09)                                                                                                     \
                    ElistA
=define   IstructL10(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10)                                                                 \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                    ElistA
=define   IstructL11(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11)                                                            \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                   ,ELEM(el11)                                                                                                          \
                    ElistA
=define   IstructL12(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10,el11,el12)                                                       \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                   ,ELEM(el11)                                                                                                          \
                   ,ELEM(el12)                                                                                                          \
                    ElistA
=define   IstructL40(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10                                                                  \
                    ,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20                                                                  \
                    ,el21,el22,el23,el24,el25,el26,el27,el28,el29,el30                                                                  \
                    ,el31,el32,el33,el34,el35,el36,el37,el38,el39,el40                                                                  \
                     )                                                                                                                  \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                   ,ELEM(el11)                                                                                                          \
                   ,ELEM(el12)                                                                                                          \
                   ,ELEM(el13)                                                                                                          \
                   ,ELEM(el14)                                                                                                          \
                   ,ELEM(el15)                                                                                                          \
                   ,ELEM(el16)                                                                                                          \
                   ,ELEM(el17)                                                                                                          \
                   ,ELEM(el18)                                                                                                          \
                   ,ELEM(el19)                                                                                                          \
                   ,ELEM(el20)                                                                                                          \
                   ,ELEM(el21)                                                                                                          \
                   ,ELEM(el22)                                                                                                          \
                   ,ELEM(el23)                                                                                                          \
                   ,ELEM(el24)                                                                                                          \
                   ,ELEM(el25)                                                                                                          \
                   ,ELEM(el26)                                                                                                          \
                   ,ELEM(el27)                                                                                                          \
                   ,ELEM(el28)                                                                                                          \
                   ,ELEM(el29)                                                                                                          \
                   ,ELEM(el30)                                                                                                          \
                   ,ELEM(el31)                                                                                                          \
                   ,ELEM(el32)                                                                                                          \
                   ,ELEM(el33)                                                                                                          \
                   ,ELEM(el34)                                                                                                          \
                   ,ELEM(el35)                                                                                                          \
                   ,ELEM(el36)                                                                                                          \
                   ,ELEM(el37)                                                                                                          \
                   ,ELEM(el38)                                                                                                          \
                   ,ELEM(el39)                                                                                                          \
                   ,ELEM(el40)                                                                                                          \
                    ElistA
=define   IstructL50(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10                                                                  \
                    ,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20                                                                  \
                    ,el21,el22,el23,el24,el25,el26,el27,el28,el29,el30                                                                  \
                    ,el31,el32,el33,el34,el35,el36,el37,el38,el39,el40                                                                  \
                    ,el41,el42,el43,el44,el45,el46,el47,el48,el49,el50                                                                  \
                     )                                                                                                                  \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                   ,ELEM(el11)                                                                                                          \
                   ,ELEM(el12)                                                                                                          \
                   ,ELEM(el13)                                                                                                          \
                   ,ELEM(el14)                                                                                                          \
                   ,ELEM(el15)                                                                                                          \
                   ,ELEM(el16)                                                                                                          \
                   ,ELEM(el17)                                                                                                          \
                   ,ELEM(el18)                                                                                                          \
                   ,ELEM(el19)                                                                                                          \
                   ,ELEM(el20)                                                                                                          \
                   ,ELEM(el21)                                                                                                          \
                   ,ELEM(el22)                                                                                                          \
                   ,ELEM(el23)                                                                                                          \
                   ,ELEM(el24)                                                                                                          \
                   ,ELEM(el25)                                                                                                          \
                   ,ELEM(el26)                                                                                                          \
                   ,ELEM(el27)                                                                                                          \
                   ,ELEM(el28)                                                                                                          \
                   ,ELEM(el29)                                                                                                          \
                   ,ELEM(el30)                                                                                                          \
                   ,ELEM(el31)                                                                                                          \
                   ,ELEM(el32)                                                                                                          \
                   ,ELEM(el33)                                                                                                          \
                   ,ELEM(el34)                                                                                                          \
                   ,ELEM(el35)                                                                                                          \
                   ,ELEM(el36)                                                                                                          \
                   ,ELEM(el37)                                                                                                          \
                   ,ELEM(el38)                                                                                                          \
                   ,ELEM(el39)                                                                                                          \
                   ,ELEM(el40)                                                                                                          \
                   ,ELEM(el41)                                                                                                          \
                   ,ELEM(el42)                                                                                                          \
                   ,ELEM(el43)                                                                                                          \
                   ,ELEM(el44)                                                                                                          \
                   ,ELEM(el45)                                                                                                          \
                   ,ELEM(el46)                                                                                                          \
                   ,ELEM(el47)                                                                                                          \
                   ,ELEM(el48)                                                                                                          \
                   ,ELEM(el49)                                                                                                          \
                   ,ELEM(el50)                                                                                                          \
                    ElistA
=define   IstructL60(el01,el02,el03,el04,el05,el06,el07,el08,el09,el10                                                                  \
                    ,el11,el12,el13,el14,el15,el16,el17,el18,el19,el20                                                                  \
                    ,el21,el22,el23,el24,el25,el26,el27,el28,el29,el30                                                                  \
                    ,el31,el32,el33,el34,el35,el36,el37,el38,el39,el40                                                                  \
                    ,el41,el42,el43,el44,el45,el46,el47,el48,el49,el50                                                                  \
                    ,el51,el52,el53,el54,el55,el56,el57,el58,el59,el60                                                                  \
                     )                                                                                                                  \
                    BlistA                                                                                                              \
                    ELEM(el01)                                                                                                          \
                   ,ELEM(el02)                                                                                                          \
                   ,ELEM(el03)                                                                                                          \
                   ,ELEM(el04)                                                                                                          \
                   ,ELEM(el05)                                                                                                          \
                   ,ELEM(el06)                                                                                                          \
                   ,ELEM(el07)                                                                                                          \
                   ,ELEM(el08)                                                                                                          \
                   ,ELEM(el09)                                                                                                          \
                   ,ELEM(el10)                                                                                                          \
                   ,ELEM(el11)                                                                                                          \
                   ,ELEM(el12)                                                                                                          \
                   ,ELEM(el13)                                                                                                          \
                   ,ELEM(el14)                                                                                                          \
                   ,ELEM(el15)                                                                                                          \
                   ,ELEM(el16)                                                                                                          \
                   ,ELEM(el17)                                                                                                          \
                   ,ELEM(el18)                                                                                                          \
                   ,ELEM(el19)                                                                                                          \
                   ,ELEM(el20)                                                                                                          \
                   ,ELEM(el21)                                                                                                          \
                   ,ELEM(el22)                                                                                                          \
                   ,ELEM(el23)                                                                                                          \
                   ,ELEM(el24)                                                                                                          \
                   ,ELEM(el25)                                                                                                          \
                   ,ELEM(el26)                                                                                                          \
                   ,ELEM(el27)                                                                                                          \
                   ,ELEM(el28)                                                                                                          \
                   ,ELEM(el29)                                                                                                          \
                   ,ELEM(el30)                                                                                                          \
                   ,ELEM(el31)                                                                                                          \
                   ,ELEM(el32)                                                                                                          \
                   ,ELEM(el33)                                                                                                          \
                   ,ELEM(el34)                                                                                                          \
                   ,ELEM(el35)                                                                                                          \
                   ,ELEM(el36)                                                                                                          \
                   ,ELEM(el37)                                                                                                          \
                   ,ELEM(el38)                                                                                                          \
                   ,ELEM(el39)                                                                                                          \
                   ,ELEM(el40)                                                                                                          \
                   ,ELEM(el41)                                                                                                          \
                   ,ELEM(el42)                                                                                                          \
                   ,ELEM(el43)                                                                                                          \
                   ,ELEM(el44)                                                                                                          \
                   ,ELEM(el45)                                                                                                          \
                   ,ELEM(el46)                                                                                                          \
                   ,ELEM(el47)                                                                                                          \
                   ,ELEM(el48)                                                                                                          \
                   ,ELEM(el49)                                                                                                          \
                   ,ELEM(el50)                                                                                                          \
                   ,ELEM(el51)                                                                                                          \
                   ,ELEM(el52)                                                                                                          \
                   ,ELEM(el53)                                                                                                          \
                   ,ELEM(el54)                                                                                                          \
                   ,ELEM(el55)                                                                                                          \
                   ,ELEM(el56)                                                                                                          \
                   ,ELEM(el57)                                                                                                          \
                   ,ELEM(el58)                                                                                                          \
                   ,ELEM(el59)                                                                                                          \
                   ,ELEM(el60)                                                                                                          \
                    ElistA
                                        /* Initialisation de structures "lineaires" a 1,2,3... elements.                             */
                                        /*                                                                                           */
                                        /* On notera que ces procedures ne sont prises en compte que lors de la 'PASSE_2', et        */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
                                        /* telle 'vectorF_3D'...                                                                     */
                                        /*                                                                                           */
                                        /* Pour 'v $xiii/vecteurs$FON IstructL40' a ete introduit 'IstructL40(...)' le               */
                                        /* 20230730115502...                                                                         */
                                        /*                                                                                           */
                                        /* Le 20230906150104 a ete introduit 'IstructL50(...)' en prevision d'une extension          */
                                        /* de 'v $xiii/vecteurs$FON IstructL50'...                                                   */
                                        /*                                                                                           */
                                        /* Le 20230926180544 a ete introduit 'IstructL60(...)' en prevision d'une extension          */
                                        /* de 'v $xiii/vecteurs$FON IstructL60'...                                                   */

#define   Ichaine00                                                                                                                     \
                    IstructL01(K_NULL)
#define   Ichaine01(caractere01)                                                                                                        \
                    IstructL02(caractere01,K_NULL)
#define   Ichaine02(caractere01,caractere02)                                                                                            \
                    IstructL03(caractere01,caractere02,K_NULL)
#define   Ichaine03(caractere01,caractere02,caractere03)                                                                                \
                    IstructL04(caractere01,caractere02,caractere03,K_NULL)
#define   Ichaine04(caractere01,caractere02,caractere03,caractere04)                                                                    \
                    IstructL05(caractere01,caractere02,caractere03,caractere04,K_NULL)
#define   Ichaine05(caractere01,caractere02,caractere03,caractere04,caractere05)                                                        \
                    IstructL06(caractere01,caractere02,caractere03,caractere04,caractere05,K_NULL)
#define   Ichaine06(caractere01,caractere02,caractere03,caractere04,caractere05,caractere06)                                            \
                    IstructL07(caractere01,caractere02,caractere03,caractere04,caractere05,caractere06,K_NULL)
#define   Ichaine07(caractere01,caractere02,caractere03,caractere04,caractere05,caractere06,caractere07)                                \
                    IstructL08(caractere01,caractere02,caractere03,caractere04,caractere05,caractere06,caractere07,K_NULL)
                                        /* Pour initialiser des chaines de caracteres a partir d'une liste de caracteres...          */

=define   IstructH101(structure01)                                                                                                      \
                    BlistA                                                                                                              \
                    structure01                                                                                                         \
                    ElistA
=define   IstructH102(structure01,structure02)                                                                                          \
                    BlistA                                                                                                              \
                    structure01                                                                                                         \
                   ,structure02                                                                                                         \
                    ElistA
=define   IstructH103(structure01,structure02,structure03)                                                                              \
                    BlistA                                                                                                              \
                    structure01                                                                                                         \
                   ,structure02                                                                                                         \
                   ,structure03                                                                                                         \
                    ElistA
                                        /* Initialisation de structures "1-hierarchiques" a 1,2,3... elements. Le qualificatif       */
                                        /* "1-hierarchiques" signifiant "lineaire de structures lineaires", d'ou le 'H1' pour        */
                                        /* signifier "premier niveau".                                                               */
                                        /* On notera que ces procedures ne sont prises en compte que lors de la 'PASSE_2', et        */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
                                        /* telle 'vectorF_3D'...                                                                     */

#ifdef    ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_01

#    ifdef     SYSTEME_DPX5000_SPIX_CC
=         undef     ELEM
=         define    ELEM(element)                                                                                                       \
                              ~~VRAI ? PARE(element) : UNDEF
                                        /* Definition d'un element ; ATTENTION : la forme conditionnelle ne peut                     */
                                        /* etre precedee de parentheses, de meme que l'on ne peut en rencontrer a la                 */
                                        /* fin (donc COND(VRAI,element,UNDEF) est interdit). Enfin, je n'ai rien trouve              */
                                        /* de mieux que cela pour faire office de separateur et qui convienne a la fois              */
                                        /* au pre-processeur et au compilateur...                                                    */
                                        /* On notera que cette procedure n'est prise en compte que lors de la 'PASSE_2', et          */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
                                        /* telle 'vectorF_3D'...                                                                     */
                                        /*                                                                                           */
                                        /* Version DPX5000/SPIX/CC.                                                                  */
=         undef     IstructL01
=         define    IstructL01(element01)                                                                                               \
                              BlistA                                                                                                    \
                              ELEM(element01)                                                                                           \
                              ElistA
=         undef     IstructL02
=         define    IstructL02(element01,element02)                                                                                     \
                              BlistA                                                                                                    \
                              ELEM(element01)                                                                                           \
                              ELEM(element02)                                                                                           \
                              ElistA
=         undef     IstructL03
=         define    IstructL03(element01,element02,element03)                                                                           \
                              BlistA                                                                                                    \
                              ELEM(element01)                                                                                           \
                              ELEM(element02)                                                                                           \
                              ELEM(element03)                                                                                           \
                              ElistA
                                        /* Initialisation de structures "lineaires" a 1,2,3... elements.                             */
                                        /* On notera que ces procedures ne sont prises en compte que lors de la 'PASSE_2', et        */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
                                        /* telle 'vectorF_3D'...                                                                     */
                                        /*                                                                                           */
                                        /* Version DPX5000/SPIX/CC.                                                                  */
=         undef     IstructH101
=         define    IstructH101(structure01)                                                                                            \
                              BlistA                                                                                                    \
                              structure01                                                                                               \
                              ElistA
=         undef     IstructH102
=         define    IstructH102(structure01,structure02)                                                                                \
                              BlistA                                                                                                    \
                              structure01                                                                                               \
                              structure02                                                                                               \
                              ElistA
=         undef     IstructH103
=         define    IstructH103(structure01,structure02,structure03)                                                                    \
                              BlistA                                                                                                    \
                              structure01                                                                                               \
                              structure02                                                                                               \
                              structure03                                                                                               \
                              ElistA
                                        /* Initialisation de structures "1-hierarchiques" a 1,2,3... elements. Le qualificatif       */
                                        /* "1-hierarchiques" signifiant "lineaire de structures lineaires", d'ou le 'H1' pour        */
                                        /* signifier "premier niveau".                                                               */
                                        /* On notera que ces procedures ne sont prises en compte que lors de la 'PASSE_2', et        */
                                        /* ce afin qu'il n'y ait pas de problemes de nombre d'arguments dans des procedures          */
                                        /* telle 'vectorF_3D'...                                                                     */
                                        /*                                                                                           */
                                        /* Version DPX5000/SPIX/CC.                                                                  */
#    Aifdef    SYSTEME_DPX5000_SPIX_CC
#    Eifdef    SYSTEME_DPX5000_SPIX_CC

#Aifdef   ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_01
#Eifdef   ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_01

#ifdef    ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_02
#Aifdef   ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_02
#Eifdef   ELEM_SYSTEME_DPX5000_SPIX_CC_VERSION_02

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A F F E C T A T I O N S  :                                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*             *     * * * * * *   * * * * * *   * * * * * *   *         *   * * * * * *   *   * * * * * *   *         *             */
/*                        *             *        *             **        *        *        *   *         *   **        *             */
/*            * *         *             *        *             * *       *        *        *   *         *   * *       *             */
/*                        *             *        *             *  *      *        *        *   *         *   *  *      *             */
/*           *   *        *             *        *             *   *     *        *        *   *         *   *   *     *             */
/*                        *             *        * * *         *    *    *        *        *   *         *   *    *    *             */
/*          * * * *       *             *        *             *     *   *        *        *   *         *   *     *   *             */
/*                        *             *        *             *      *  *        *        *   *         *   *      *  *             */
/*         *       *      *             *        *             *       * *        *        *   *         *   *       * *             */
/*                        *             *        *             *        **        *        *   *         *   *        **             */
/*        *         *     *             *        * * * * * *   *         *        *        *   * * * * * *   *         *             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        ATTENTION :                                                                                                                */
/*                                                                                                                                   */
/*                    La structure des procedures qui                                                                                */
/*                  suivent est tres "pointue" et elles                                                                              */
/*                  ne peuvent etre modifiees "a la legere".                                                                         */
/*                  En particulier l'ordre des directives                                                                            */
/*                  qui les composent, l'absence de lignes                                                                           */
/*                  suite a la fin ou encore les changements                                                                         */
/*                  de ligne (en '$PASSE_2') ne peuvent etre                                                                         */
/*                  modifiees sans reflexion ni test exhaustif...                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RACINE_DE_LA_SAUVEGARDE_DES_VALEURS_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES                                                       \
                    ValeurParDefautDe
                                        /* Introduit le 20071110094509. Le 20071114110538, le nom a ete "prolonge"...                */
                                        /*                                                                                           */
                                        /* ATTENTION : 'ValeurParDefautDe' ne doit pas etre sur une ligne suite et ce afin           */
                                        /* d'eviter des problemes de concatenation par la suite...                                   */

#ifndef   RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES
                                        /* Ceci fut introduit le 20071117114933. On notera que l'on ne peut pas remplacer cette      */
                                        /* sequence conditionnelle {#ifndef,#Aifndef,#Eifndef} et le '#define' qui suit par un       */
                                        /* '#TestADef' car, en effet, ce '#define' est (au moins provisoirement...) un '#nodefine'.  */
                                        /* Ceci fut introduit afin de permettre de d'activer selectivement ce dispositif dans les    */
                                        /* librairies de '$xb'...                                                                    */
#    define    RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES                                                                       \
                         ListeDesArgumentsImplicites
                                        /* Introduit le 20071114104738. On notera que le 'nodefine' permet de ne pas generer le      */
                                        /* dispositif defini ci-apres de reinitialisation des arguments implicites...                */
                                        /*                                                                                           */
                                        /* ATTENTION : 'ListeDesArgumentsImplicites' ne doit pas etre sur une ligne suite car, en    */
                                        /* effet, dans le cas contraire un espace est insere entre ce symbole et '__COMPTEUR8__A__'  */
                                        /* dans 'LISTE_DES_ARGUMENTS_IMPLICITES'...                                                  */
                                        /*                                                                                           */
                                        /* Le 20071117150525, le '#nodefine' devient un '#define'. Mais etant donnee la remarque     */
                                        /* ci-dessus ('v $xil/defi_c1$vv$DEF 20071117114933'), les {#ifndef,#Aifndef,#Eifndef}       */
                                        /* encadrant ce '#define' et l'ensemble n'est pas remplace par un '#TestADef'...             */
#Aifndef  RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES
#Eifndef  RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES

#ifdef    RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES
@    define    VERSION__RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES
                                        /* Introduit le 20071117122849 pour 'v $xccp/xbVERSION$vv$I 20071117113750'...               */

#    define    LISTE_DES_ARGUMENTS_IMPLICITES                                                                                           \
                    RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES`__COMPTEUR8__A__
#    define    ReStOr(x)                                                                                                                \
                    EGAL(x,RACINE_DE_LA_SAUVEGARDE_DES_VALEURS_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES`````x);
#    define    GENERATION_D_UNE_LISTE_DES_ARGUMENTS_IMPLICITES(x)                                                                       \
                         %ifndef   LISTE_DES_ARGUMENTS_IMPLICITES                                                                       \
                              __PLUS1__A__                                                                                              \
                              %define   LISTE_DES_ARGUMENTS_IMPLICITES                         ReStOr(x)                                \
                              __MOINS1__A__                                                                                             \
                         %Aifndef                                                                                                       \
                              __PLUS1__A__                                                                                              \
                              %define   LISTE_DES_ARGUMENTS_IMPLICITES          __MOINS1__A__  LISTE_DES_ARGUMENTS_IMPLICITES ReStOr(x) \
                              __PLUS1__A__                                                                                              \
                         %Eifndef                                                                                                       \
                                                                                                                                        \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____

                                        /* Procedures introduites le 20071112125255 "pour le plaisir". La premiere permet de         */
                                        /* mettre 'x' en queue de la liste courante, alors que la seconde edite le contenu de        */
                                        /* la liste courante (et donc, en particulier, son etat final...).                           */
                                        /*                                                                                           */
                                        /* Le 20071112110511, j'avais note qu'il etait possible de generer des listes des 'x's       */
                                        /* definis via 'SINS(...)' et 'SINT(...)'. C'est ce qu'implante la procedure baptisee        */
                                        /* 'GENERATION_D_UNE_LISTE_DES_ARGUMENTS_IMPLICITES(...)'. A la fin de ce processus, un :    */
                                        /*                                                                                           */
                                        /*                  LISTE_DES_ARGUMENTS_IMPLICITES                                           */
                                        /*                                                                                           */
                                        /* quelque part fera apparaitre la liste des arguments implicites ainsi construite. On       */
                                        /* notera qu'ainsi on genere en fait autant de symboles "RACINE_DU_NOM_DE_...`NNNNNNNN"      */
                                        /* qu'il y a d'arguments implicites (ou "NNNNNNNN" represente une valeur decimale debutant   */
                                        /* a 1 ; en fait l'existence de l'element 0 est testee pour initialiser la liste, mais       */
                                        /* aucune valeur ne lui est attribuee...).                                                   */
                                        /*                                                                                           */
                                        /* On notera le 20071227180827 que la valeur "NNNNNNNN" n'est jamais remise a zero meme lors */
                                        /* du 'INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES',  */
                                        /* ce qui evite des problemes de redefinition (via '%define'...). Par contre, le symbole     */
                                        /* 'courant" 'LISTE_DES_ARGUMENTS_IMPLICITES' (pour une certaine valeur de "NNNNNNNN")       */
                                        /* lors de cette initialisation, ce qui reinitialise en quelque sorte la liste courante...   */
                                        /* On trouvera donc ainsi, par exemple :                                                     */
                                        /*                                                                                           */
                                        /*                  ...`00000001      = {(VPD_V1=V1);}                                       */
                                        /*                  ...`00000002      = {(VPD_V1=V1);(VPD_V2=V2);}                           */
                                        /*                  ...`00000003      = {(VPD_V1=V1);(VPD_V2=V2);(VPD_V3=V3);}               */
                                        /*                  ...`00000004      = {(VPD_V1=V1);(VPD_V2=V2);(VPD_V3=V3);(VPD_V4=V4);}   */
                                        /*                                                                                           */
                                        /* puis ici, reinitialisation de la liste :                                                  */
                                        /*                                                                                           */
                                        /*                  ...`00000005      = {(VPD_W1=W1);}                                       */
                                        /*                  ...`00000006      = {(VPD_W1=W1);(VPD_W2=W2);}                           */
                                        /*                  ...`00000007      = {(VPD_W1=W1);(VPD_W2=W2);(VPD_W3=W3);}               */
                                        /*                  ...`00000008      = {(VPD_W1=W1);(VPD_W2=W2);(VPD_W3=W3);(VPD_W4=W4);}   */
                                        /*                                                                                           */
                                        /* et ainsi de suite (en supposant dans cet exemple, qu'il y a systematiquement quatre       */
                                        /* variables {?1,?2,?3,?4} a sauvegarder ; au passage "VPD" signifie ValeurParDefautDe"      */
                                        /* et "?" symbolise "V" ou "W"...).                                                          */
                                        /*                                                                                           */
                                        /* ATTENTION : la double occurence de '_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____'   */
                                        /* est imperative si l'on ne veut pas que le '%Eifndef' "absorbe" en quelque sorte ce qui    */
                                        /* le suit. Cela est lie a la gestion de '$Z_UNDERSCORE' dans 'v $xccp/ChangeLigne$sed'...   */
                                        /* En notant "FCLP2" le symbole "_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____", on     */
                                        /* trouve ici, juste avant l'application de 'v $xcc/cpp$Z ChangeLigne.sed', des lignes du    */
                                        /* type (ceci ayant ete observe et compris le 20071113083932) :                              */
                                        /*                                                                                           */
                                        /*                  CHAINE1 %Eifndef FCLP2 FCLP2 CHAINE2 $                                   */
                                        /*                  ;                                                                        */
                                        /*                                                                                           */
                                        /* ou '$' est en fait '$Z_UNDERSCORE'. L'application de 'v $xcc/cpp$Z ChangeLigne.sed'       */
                                        /* donne alors :                                                                             */
                                        /*                                                                                           */
                                        /*                  CHAINE1 %Eifndef $                                                       */
                                        /*                                                          (vrai saut de ligne sans '$')    */
                                        /*                  CHAINE2 $                                                                */
                                        /*                  ;                                                                        */
                                        /*                                                                                           */
                                        /* soit apres le '$xcp/recollage$X' qui suivra :                                             */
                                        /*                                                                                           */
                                        /*                  CHAINE1 %Eifndef                                                         */
                                        /*                  CHAINE2 ;                                                                */
                                        /*                                                                                           */
                                        /* et ainsi, '%Eifndef' n'a pas "absorbe" la chaine "CHAINE2"...                             */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera l'absence de l'argument 'LISTE_DES_ARGUMENTS_IMPLICITES'            */
                                        /* relatif aux {%Aifndef,%Eifndef} ; en effet pour '%Eifndef' le compteur '__COMPTEUR8__A__' */
                                        /* n'est pas a jour (il vaut une unite de trop a cause du '__PLUS1__A__' qui le precede et   */
                                        /* qui est essentiel...). Cet argument est donc supprime pour '%Eifndef' et aussi pour       */
                                        /* %Aifndef', par symetrie (on rappelle que de toutes facons cet argument ne sert a rien     */
                                        /* pour les directives {%Aifndef,%Eifndef}, n'etant utile que pour '%ifndef'...).            */
                                        /*                                                                                           */
                                        /* ATTENTION : on notera d'autre part que les directives {__PLUS1__A__,__MOINS1__A__} sont   */
                                        /* interpretees meme a l'interieur d'une alternance fausse d'un test...                      */
                                        /*                                                                                           */
                                        /* Avant le 20071114104738, on trouvait ci-dessus :                                          */
                                        /*                                                                                           */
                                        /*                                 x                                                         */
                                        /*                  __MOINS1__A__  LISTE_DES_ARGUMENTS_IMPLICITES%&&%x                       */
                                        /*                                                                                           */
                                        /* pour les deux :                                                                           */
                                        /*                                                                                           */
                                        /*                  %define   LISTE_DES_ARGUMENTS_IMPLICITES                                 */
                                        /*                                                                                           */
                                        /* ci-dessus, mais a cette date fut introduite 'ReStOr(...)'...                              */

#    define    INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES                                       \
                         %ifdef   LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                              %undef    LISTE_DES_ARGUMENTS_IMPLICITES                                                                  \
                         %Aifdef  LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                         %Eifdef  LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____

#    define    RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(restaurer)                                                 \
                         %ifdef   LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                                        /* Introduit le 20080111091737 a cause de 'v $xrv/UNI2.11$K GENERE__FonctionF_UNI2_02' qui   */ \
                                        /* n'utilise pas 'SINT(...)'...                                                              */ \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                                        /* Ces deux '_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____' ont ete introduits le       */ \
                                        /* 20081028121321 car, en effet, a cette date, le '%ifdef   LISTE_DES_ARGUMENTS_IMPLICITES'  */ \
                                        /* et tout ce qui suit etaient sur la meme ligne... Je ne comprends pas a cette date depuis  */ \
                                        /* quand ce dispositif ne fonctionnait plus. En fait, le 20081028131554 j'ai compris : c'est */ \
                                        /* certainement parce que la modification du 20080111091737 (ci-dessus) n'avait pas ete      */ \
                                        /* testee (sauf evidemment pour 'v $xrv/UNI2.11$K GENERE__FonctionF_UNI2_02'...              */ \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(restaurer))                                                                                       \
                              Bblock                                                                                                    \
                              LISTE_DES_ARGUMENTS_IMPLICITES;                                                                           \
                              RETU(OK);                                                                                                 \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                                                                                                                        \
                         %Aifdef  LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                         %Eifdef  LISTE_DES_ARGUMENTS_IMPLICITES                                                                        \
                                                                                                                                        \
                         INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES

                                        /* Procedures introduites le 20071114104738 afin de pouvoir restaurer automatiquement la     */
                                        /* valeur par defaut des arguments implicites. L'utilisation sera la suivante pour chaque    */
                                        /* fonction concernee ou l'on trouvera d'abord ('v $xil/defi_K2$vv$DEF VraiBeginFonction') : */
                                        /*                                                                                           */
                                        /*        INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES */
                                        /*                                                                                           */
                                        /* afin de reinitialiser 'LISTE_DES_ARGUMENTS_IMPLICITES', puis une suite de 'SINS(...)'     */
                                        /* et ou de 'SINT(...)' definissant les arguments implicites et enfin tout a fait au         */
                                        /* debut du code de la fonction courante un :                                                */
                                        /*                                                                                           */
                                        /*        RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(indic);              */
                                        /*                                                                                           */
                                        /* qui, si 'indic' est VRAI, provoquera la remise a l'etat "par defaut" des arguments        */
                                        /* implicites et la sortie IMMEDIATE de la fonction correspondante (via un 'RETU(OK)'        */
                                        /* que je reprouve evidemment, puisque dans mon modele de programmation il ne doit y         */
                                        /* avoir qu'un seul RETU(...)' par fonction ; mais, enfin, je ne peux pas faire autrement,   */
                                        /* sachant qu'une telle heresie se rencontre aussi avec 'v $xig/fonct$vv$DEF Exit.OK.'...).  */
                                        /*                                                                                           */
                                        /* 'INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES'      */
                                        /* doit etre le dernier element de cette definition et ne pas etre une ligne suite : cela    */
                                        /* est IMPERATIF si l'on veut que tout fonctionne correctement...                            */
#Aifdef   RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES
#    define    LISTE_DES_ARGUMENTS_IMPLICITES                                                                                           \
                         VIDE
#    define    GENERATION_D_UNE_LISTE_DES_ARGUMENTS_IMPLICITES(x)                                                                       \
                         VIDE

#    define    INITIALISATION_DE_LA_RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES                                       \
                         VIDE
#    define    RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(restaurer)                                                 \
                         Bblock                                                                                                         \
                         BLOC(VIDE;);                                                                                                   \
                         Eblock
#Eifdef   RACINE_DU_NOM_DE_LA_LISTE_DES_ARGUMENTS_IMPLICITES

#define   INIS(x,a)                                                                                                                     \
                    x = a                                                                                                               \
                                        /* Pour initialiser par exemple une variable 'x' lors de sa definition, mais                 */ \
                                        /* attention, sans les parentheses : c'est obligatoire pour les chaines de                   */ \
                                        /* caracteres et dans les 'DenumerXX(...)', ainsi que pour les 'IstructLXX(...)'             */ \
                                        /* et les 'IchaineXX(...)'.                                                                  */
#define   ZINS(x,a)                                                                                                                     \
                    INIS(x,a)%&&%INIS(RACINE_DE_LA_SAUVEGARDE_DES_VALEURS_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES`````x,a)                  \
                                        /* Introduit par symetrie avec 'ZINT(...)', ceci etant particulierement destine aux          */ \
                                        /* declarations du type :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(...,ZINS(...)));                                        */ \
                                        /*                       ------                                                              */ \
                                        /*                                                                                           */ \
                                        /* hors de {BFonction...,EFonction...}. Ceci fut introduit le 20100521151536.                */ \
                                        /*                                                                                           */ \
                                        /* Je note le 20180328143053 que c'est la concatenation de 'RACINE_DE_LA_SAUVEGARDE...'      */ \
                                        /* et de 'x,a' qui provoque 'v $xig/fonct$vv$FON 20180328140252'...                          */
#define   PINS(x,a)                                                                                                                     \
                    ZINS(x,a)                                                                                                           \
                                        /* Synonyme de 'ZINS(...)' reserve aux arguments implicites des procedures '#define's        */ \
                                        /* et mis en place par "symetrie" avec 'PINT(...)' (introduit le 20120630094408).            */
#define   SINS(x,a)                                                                                                                     \
                    GENERATION_D_UNE_LISTE_DES_ARGUMENTS_IMPLICITES(x)                                                                  \
                                        /* Lorsque cette procedure est utilisee, il est imperatif qu'elle precede 'INIS(...)'        */ \
                                        /* afin de garantir que le ";" qui le suit necessairement ne soit pas rattache au            */ \
                                        /* '%Eifndef' ici genere (voir 'v $xil/defi_c1$vv$DEF 20071113083932').                      */ \
                    ZINS(x,a)                                                                                                           \
                                        /* Introduit par symetrie avec 'SINT(...)', ceci etant particulierement destine aux          */ \
                                        /* declarations du type :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(...,SINS(...)));                                        */ \
                                        /*                       ------                                                              */ \
                                        /*                                                                                           */ \
                                        /* a l'interieur de {BFonction...,EFonction...}. Ceci fut introduit le 20071109084132.       */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20071110112711 que pour inhiber ce dispositif de sauvegarde des valeurs      */ \
                                        /* initiales, il suffira de mettre ci-dessus la definition suivante :                        */ \
                                        /*                                                                                           */ \
                                        /*                  #define   SINS(x,a)                                                   \  */ \
                                        /*                                      INIS(x,a)                                            */ \
                                        /*                                                                                           */ \
                                        /* et le tour sera joue sans avoir a modifier tous les '$FON's de '$xi' qui utilisent        */ \
                                        /* 'SINS(...)' ('v $xau/LACT16.L1$Z')...                                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20071112110511, on notera qu'il est possible de generer des listes des 'x' definis     */ \
                                        /* via 'SINS(...)' et 'SINT(...)' ('v $xil/defi_c1$vv$DEF 20071112110511' ci-apres...).      */

#define   INIT(x,a)                                                                                                                     \
                    INIS(x,PARE(a))                                                                                                     \
                                        /* Pour initialiser par exemple une variable 'x' lors de sa definition (mais                 */ \
                                        /* avec les parentheses cette fois-ci...).                                                   */ \
                                        /*                                                                                           */ \
                                        /* Usage de {PINS,PINT,ZINS,ZINT,SINS,SINT} :                                                */ \
                                        /*                                                                                           */ \
                                        /* 1-Arguments implicites d'une procedure '#define' :                                        */ \
                                        /*                                                                                           */ \
                                        /*                  #define   PROCEDURE (...)                                                */ \
                                        /*                  (...)                                                                    */ \
                                        /*                  DEFV(Common,DEFV(...,PINS(...)));                                        */ \
                                        /*                  DEFV(Common,DEFV(...,PINT(...)));                                        */ \
                                        /*                  (...)                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* 2-Arguments implicites d'une serie de fonctions et donc HORS {BFonction?,EFonction?} :    */ \
                                        /*                                                                                           */ \
                                        /*                  (...)                                                                    */ \
                                        /*                  DEFV(Common,DEFV(...,ZINS(...)));                                        */ \
                                        /*                  DEFV(Common,DEFV(...,ZINT(...)));                                        */ \
                                        /*                  (...)                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* 3-Arguments implicites d'une fonction et donc a l'INTERIEUR de {BFonction?,EFonction?} :  */ \
                                        /*                                                                                           */ \
                                        /*                  BFonction?                                                               */ \
                                        /*                  (...)                                                                    */ \
                                        /*                  DEFV(Common,DEFV(...,SINS(...)));                                        */ \
                                        /*                  DEFV(Common,DEFV(...,SINT(...)));                                        */ \
                                        /*                  (...)                                                                    */ \
                                        /*                  EFonction?                                                               */ \
                                        /*                                                                                           */

#define   ZINT(x,a)                                                                                                                     \
                    INIT(x,a)%&&%INIT(RACINE_DE_LA_SAUVEGARDE_DES_VALEURS_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES`````x,a)                  \
                                        /* Pour initialiser par exemple une variable 'x' lors de sa definition (mais                 */ \
                                        /* avec les parentheses cette fois-ci...), tout en sauvegardant la valeur initiale,          */ \
                                        /* cette sauvegarde ne pouvant jamais etre modifiee, ceci etant particulierement destine     */ \
                                        /* aux declarations du type :                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(...,ZINT(...)));                                        */ \
                                        /*                       ------                                                              */ \
                                        /*                                                                                           */ \
                                        /* hors de {BFonction...,EFonction...}. Ceci fut introduit le 20100521151536.                */ \
                                        /*                                                                                           */ \
                                        /* Je note le 20180328143053 que c'est la concatenation de 'RACINE_DE_LA_SAUVEGARDE...'      */ \
                                        /* et de 'x,a' qui provoque 'v $xig/fonct$vv$FON 20180328140252'...                          */
#define   PINT(x,a)                                                                                                                     \
                    ZINT(x,a)                                                                                                           \
                                        /* Synonyme de 'ZINT(...)' reserve aux arguments implicites des procedures '#define's        */ \
                                        /* et utilise par 'v $xcc/GLFonctions$vv$Z PINT' (introduit le 20120630094408).              */
#define   SINT(x,a)                                                                                                                     \
                    GENERATION_D_UNE_LISTE_DES_ARGUMENTS_IMPLICITES(x)                                                                  \
                                        /* Lorsque cette procedure est utilisee, il est imperatif qu'elle precede 'INIT(...)'        */ \
                                        /* afin de garantir que le ";" qui le suit necessairement ne soit pas rattache au            */ \
                                        /* '%Eifndef' ici genere (voir 'v $xil/defi_c1$vv$DEF 20071113083932').                      */ \
                    ZINT(x,a)                                                                                                           \
                                        /* Pour initialiser par exemple une variable 'x' lors de sa definition (mais                 */ \
                                        /* avec les parentheses cette fois-ci...), tout en sauvegardant la valeur initiale,          */ \
                                        /* cette sauvegarde ne pouvant jamais etre modifiee, ceci etant particulierement destine     */ \
                                        /* aux declarations du type :                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(...,SINT(...)));                                        */ \
                                        /*                       ------                                                              */ \
                                        /*                                                                                           */ \
                                        /* a l'interieur de {BFonction...,EFonction...}. Ceci fut introduit le 20071108110308.       */ \
                                        /*                                                                                           */ \
                                        /* On notera l'impossibilite d'ecrire directement :                                          */ \
                                        /*                                                                                           */ \
                                        /*                  INIT(x,a),INIT(sauvegarde_de`````x,a)                                    */ \
                                        /*                                                                                           */ \
                                        /* a cause des operateurs de "typage" qui demandent un nombre exact d'arguments et la        */ \
                                        /* solution ci-dessus introduirait finalement un argument supplementaire. D'ou               */ \
                                        /* l'introduction de '$SeparateurListe_2' ('v $xcc/cpp$Z SeparateurListe_2') qui opere       */ \
                                        /* apres la '$PASSE_2' (a laquelle appartiennent les operateurs de "typage", tel 'Float'     */ \
                                        /* par exemple...).                                                                          */ \
                                        /*                                                                                           */ \
                                        /* Le 20071108130245, il a fallu remplacer "/--/" par "%&&%" et ce a cause de                */ \
                                        /* 'v $xcp/decoupage$K K_MOINS' et 'v $xcp/decoupage$K K_SLASH'. La chaine                   */ \
                                        /* "%&&%" doit etre insecable...                                                             */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20071108134827 que pour inhiber ce dispositif de sauvegarde des valeurs      */ \
                                        /* initiales, il suffira de mettre ci-dessus la definition suivante :                        */ \
                                        /*                                                                                           */ \
                                        /*                  #define   SINT(x,a)                                                   \  */ \
                                        /*                                      INIT(x,a)                                            */ \
                                        /*                                                                                           */ \
                                        /* et le tour sera joue sans avoir a modifier tous les '$FON's de '$xi' qui utilisent        */ \
                                        /* 'SINT(...)' ('v $xau/LACT16.L1$Z')...                                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20071109083457, "SauvegardeDe" fut change en "ValeurParDefautDe" qui correspond        */ \
                                        /* beaucoup mieux a la vocation de ce type de variable...                                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20071109084132, avec l'introduction de 'SINS(...)', le nom 'SINI(...)' fut change      */ \
                                        /* en 'SINT(...)'...                                                                         */ \
                                        /*                                                                                           */ \
                                        /* Mais ATTENTION, je note le 20071109091647 que cela ne peut etre utilise, par exemple,     */ \
                                        /* ainsi :                                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(CHAR,SINT(POINTERc(chaine),...                          */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, les procedures de type 'POINTER' mettent entre parentheses le nom de la    */ \
                                        /* variable, ce qui generera ci dessus le symbole suivant :                                  */ \
                                        /*                                                                                           */ \
                                        /*                  ValeurParDefautDe_____*(chaine)                                          */ \
                                        /*                                                                                           */ \
                                        /* ce qui est peu correct...                                                                 */

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ccCHAR(constante_chaine)                                                                                                 \
                         Finitialisation_d_une_constante_chaine_de_caracteres(constante_chaine)                                         \
                                        /* Pour donner le type 'CHAR' (donc 'unsigned char') a une constante chaine...               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : on n'oubliera pas d'aller modifier '$xig/fonct$vv$FON', et de regenerer       */ \
                                        /* ensuite les fichiers '$xig/fonct$vv$ARG' et '$xig/fonct$vv$EXT'...                        */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    ccCHAR(constante_chaine)                                                                                                 \
                         RIEN(constante_chaine)                                                                                         \
                                        /* Pour donner le type 'CHAR' (donc 'unsigned char') a une constante chaine. On notera       */ \
                                        /* que l'on n'ecrit pas :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  NEUT(constante_chaine)                                                   */ \
                                        /*                                                                                           */ \
                                        /* parce qu'en toute generalite, il est impossible de parentheser une constante chaine,      */ \
                                        /* par exemple, lors d'une initialisation...                                                 */
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )

#define   INIC(x,a)                                                                                                                     \
                    INIS(x,ccCHAR(a))                                                                                                   \
                                        /* Pour initialiser par exemple une variable 'x' de type 'DEFV(CHAR,INIC(POINTERc(...)))'.   */ \
                                        /* Cette procedure 'INIC(...)' a ete introduite a cause de certains SYSTEMEs n'acceptant     */ \
                                        /* pas qu'une variable 'CHAR' (donc 'unsigned char') soit initialisee avec une constante     */ \
                                        /* chaine...                                                                                 */
#define   EGAL(y,x)                                                                                                                     \
                    PARE(INIT(y,x))                                                                                                     \
                                        /* Pour affecter la valeur de l'expression 'x' a la variable 'y'.                            */
                                        /* chaine...                                                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   A R I T H M E T I Q U E S   D ' A D D I T I O N  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   A R I T H M E T I Q U E S   D E   D I V I S I O N  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DIVI(a,b)                                                                                                                     \
                    gDIVI(a,b)                                                                                                          \
                                        /* Division des deux nombres 'a' et 'b'.                                                     */

#if       (         (defined(BUG_SYSTEME_VAX9000_ULTRIX_GCC_division_de_zero))                                                          \
           )
#    undef     DIVI
#    define    DIVI(a,b)                                                                                                                \
                         COND(IZNE(a)                                                                                                   \
                             ,gDIVI(a,b)                                                                                                \
                             ,ZERO                                                                                                      \
                              )                                                                                                         \
                                        /* Division des deux nombres 'a' et 'b'. On notera que ce probleme ne se rencontre qu'en     */ \
                                        /* flottant, mais que je ne sais pas faire ici la difference avec les entiers. Cette         */ \
                                        /* methode n'etant pas fausse (bien entendu) pour les entiers, elle est utilisee             */ \
                                        /* universellement...                                                                        */
#Aif      (         (defined(BUG_SYSTEME_VAX9000_ULTRIX_GCC_division_de_zero))                                                          \
           )
#Eif      (         (defined(BUG_SYSTEME_VAX9000_ULTRIX_GCC_division_de_zero))                                                          \
           )

#define   REST(a,b)                                                                                                                     \
                    PARE(PARE(a) % PARE(b))                                                                                             \
                                        /* Reste de la division entiere de 'a' et 'b'.                                               */

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

#if       (         (defined(SYSTEME_SPS9_ROS_RC))                                                                                      \
           )
#    TestADef  BUG_SYSTEME_SPS9_ROS_RC_VIC1                                                                                             \
                                        /* Le compilateur 'rc' genere incorrectement certaines expressions, ce qui peut se           */ \
                                        /* corriger en leur appliquant l'operateur 'VIC1(...)'...                                    */
#Aif      (         (defined(SYSTEME_SPS9_ROS_RC))                                                                                      \
           )
#Eif      (         (defined(SYSTEME_SPS9_ROS_RC))                                                                                      \
           )

#define   VIC1(x)                                                                                                                       \
                    PARE(x)                                                                                                             \
                                        /* "Valeur" par defaut de 'VIC1' : la valeur utilise par le compilateur                      */ \
                                        /* pour la variable 'x' est correcte...                                                      */

#if       (         (defined(BUG_SYSTEME_SPS9_ROS_RC_VIC1))                                                                             \
           )
#    undef     VIC1
#    define    VIC1(x)                                                                                                                  \
                         ADD2(x                                                                                                         \
                             ,PRED(DIVI(SUCC(ADD2(eval_dummy,NEGA(eval_dummy)))                                                         \
                                       ,SUCC(ADD2(NEGA(eval_dummy),eval_dummy))                                                         \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                                        /* Le compilateur 'rc' utilise est vicieux, et pour acceder a la bonne valeur de             */ \
                                        /* l'expression 'x', il faut la placer dans une suite d'operations ; on utilise              */ \
                                        /* a cette fin, une expression dont la valeur est toujours nulle calculee a partir           */ \
                                        /* de la variable 'eval_dummy'...                                                            */
#Aif      (         (defined(BUG_SYSTEME_SPS9_ROS_RC_VIC1))                                                                             \
           )
#Eif      (         (defined(BUG_SYSTEME_SPS9_ROS_RC_VIC1))                                                                             \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N S   L O G I Q U E S   B I N A I R E S   ( B I T   A   B I T )  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   OUIN(a,b)                                                                                                                     \
                    PARE(INTE(a) | INTE(b))                                                                                             \
                                        /* OU INclusif.                                                                              */
#define   OUEX(a,b)                                                                                                                     \
                    PARE(INTE(a) ^ INTE(b))                                                                                             \
                                        /* OU EXclusif.                                                                              */
#define   ETLO(a,b)                                                                                                                     \
                    PARE(INTE(a) & INTE(b))                                                                                             \
                                        /* ET LOgique.                                                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E C A L A G E S  :                                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DECD(champ,amplitude)                                                                                                         \
                    PARE(PARE(champ) >> INTE(amplitude))                                                                                \
                                        /* Decalage general a droite. ATTENTION, il y avait autrefois :                              */ \
                                        /*                                                                                           */ \
                                        /*                  #define   DECD(champ,amplitude)                                       \  */ \
                                        /*                                      PARE(PARE(champ) >> PARE(amplitude))                 */ \
                                        /*                                                                                           */ \
                                        /* Or, ceci associe au commentaire de la definition de 'SIZE_GENERAL(...)' etait responsable */ \
                                        /* de la mauvaise generation du 'BLANC' dans '$xiiD/definit.2$DEF', et non pas un probleme   */ \
                                        /* de decalage arithmetique...                                                               */
#define   DECG(champ,amplitude)                                                                                                         \
                    PARE(PARE(champ) << INTE(amplitude))                                                                                \
                                        /* Decalage general a gauche. ATTENTION, il y avait autrefois :                              */ \
                                        /*                                                                                           */ \
                                        /*                  #define   DECG(champ,amplitude)                                       \  */ \
                                        /*                                      PARE(PARE(champ) << PARE(amplitude))                 */ \
                                        /*                                                                                           */ \
                                        /* Or, ceci associe au commentaire de la definition de 'SIZE_GENERAL(...)' etait responsable */ \
                                        /* de la mauvaise generation du 'BLANC' dans '$xiiD/definit.2$DEF', et non pas un probleme   */ \
                                        /* de decalage arithmetique...                                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S T R U C T U R E S   D E   T E S T   B I N A I R E  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Test(conditions)                                                                                                              \
                    BblockV                                                                                                             \
                    if        (conditions)                                                                                              \
                              Bblock                                                                                                    \
                                        /* On fait preceder le "if" d'un debut de block, afin que la fin du "Test"                   */ \
                                        /* (c'est-a-dire le "ETes") puisse etre valide par le compilateur ; en                       */ \
                                        /* effet, s'il s'agissait d'une instruction vide, son absence ne serait                      */ \
                                        /* pas diagnostiquee. On notera aussi la dissymetrie au niveau des 'Bblock'/'Eblock'         */ \
                                        /* entre 'ATes' et 'ETes', et ce afin de rendre obligatoire le triplet (Test,ATes,ETes).     */

#define   ATes                                                                                                                          \
                              Eblock                                                                                                    \
                    else                                                                                                                \
                              Bblock                                                                                                    \
                                        BblockV                                                                                         \
                                                  BblockV                                                                               \
                                        /* Alternative du 'Test'.                                                                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20051118155011, fut rajoute un niveau de 'BblockV' apres que j'ai decouvert un         */ \
                                        /* probleme bizarre dans 'v $xig/fonct$vv$FON Test.IFEQ.caractere_courant.K_LF' ou, pour     */ \
                                        /* ce 'Test(...)', les {ATes,ETes} associes etaient dans l'ordre inverse {ETes,ATes} sans    */ \
                                        /* que '$Cc' s'en rende compte...                                                            */

#define   ETes                                                                                                                          \
                                                  EblockV                                                                               \
                                        EblockV                                                                                         \
                              Eblock                                                                                                    \
                    EblockV                                                                                                             \
                                        /* Fin du 'Test'.                                                                            */ \
                                        /*                                                                                           */ \
                                        /* Le 20051118155011, fut rajoute un niveau de 'EblockV' apres que j'ai decouvert un         */ \
                                        /* probleme bizarre dans 'v $xig/fonct$vv$FON Test.IFEQ.caractere_courant.K_LF' ou, pour     */ \
                                        /* ce 'Test(...)', les {ATes,ETes} associes etaient dans l'ordre inverse {ETes,ATes} sans    */ \
                                        /* que '$Cc' s'en rende compte...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T E U R S   D E   T E S T   B I N A I R E  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   IFOU(condition_1,condition_2)                                                                                                 \
                    PARE(PARE(condition_1) || PARE(condition_2))                                                                        \
                                        /* 'OU' binaire a 2 conditions,                                                              */
#define   IFET(condition_1,condition_2)                                                                                                 \
                    PARE(PARE(condition_1) && PARE(condition_2))                                                                        \
                                        /* 'ET' binaire a 2 conditions,                                                              */
#define   IFEQ(x,a)                                                                                                                     \
                    PARE(PARE(x) == PARE(a))                                                                                            \
                                        /* Test de 'x = a'.                                                                          */
#define   IFNE(x,a)                                                                                                                     \
                    PARE(PARE(x) != PARE(a))                                                                                            \
                                        /* Test de 'x # a'.                                                                          */
#define   IFGE(x,a)                                                                                                                     \
                    PARE(PARE(x) >= PARE(a))                                                                                            \
                                        /* Test de 'x >= a'.                                                                         */
#define   IFGT(x,a)                                                                                                                     \
                    PARE(PARE(x) >  PARE(a))                                                                                            \
                                        /* Test de 'x > a'.                                                                          */
#define   IFLE(x,a)                                                                                                                     \
                    PARE(PARE(x) <= PARE(a))                                                                                            \
                                        /* Test de 'x <= a'.                                                                         */
#define   IFLT(x,a)                                                                                                                     \
                    PARE(PARE(x) <  PARE(a))                                                                                            \
                                        /* Test de 'x < a'.                                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T E U R   D E   S E L E C T I O N   C O N D I T I O N N E L L E  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COND(condition,valeur_si_VRAI,valeur_si_FAUX)                                                                                 \
                    PARE(PARE(condition) ? PARE(valeur_si_VRAI) : PARE(valeur_si_FAUX))                                                 \
                                        /* Operation conditionnelle.                                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I D E N T I T E   D ' U N   O B J E T  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   aIDENTITE(objet)                                                                                                              \
                    ADRESSE(objet)                                                                                                      \
                                        /* Acces a l'identite "directe" d'un objet.                                                  */
#define   IDENTITE(objet)                                                                                                               \
                    NEUT(objet)                                                                                                         \
                                        /* Acces a l'identite "indirecte" d'un objet.                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R D I C T I O N   D U   " g o t o "  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   goto                                                                                                                          \
                    Cachez_ce_GOTO_que_je_ne_saurais_voir                                                                               \
                                        /* Le 'goto' est completement proscrit...                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S T R U C T U R E S   D E   C O N T R O L E   D E S   A L T E R N A T I V E S   " C A S E "  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Brek                                                                                                                          \
                    break                                                                                                               \
                                        /* Sortie de l'instruction 'Choi' en fin de traitement d'un cas.                             */
#define   Choi(expression)                                                                                                              \
                    BblockV                                                                                                             \
                         BblockV                                                                                                        \
                         switch(expression)                                                                                             \
                                        /* On fait preceder le "switch" de deux debuts de block, afin que la fin du "Choi"           */ \
                                        /* (c'est-a-dire le "ECho") et la presence du traitement par default (c'est-a-dire           */ \
                                        /* 'Defo') puissent etre detectes par le compilateur ; en effet, s'il s'agissait             */ \
                                        /* d'une instruction vide, son absence ne serait pas diagnostiquee !!!                       */

#define   Case(constante)                                                                                                               \
                              case PARE(constante) :                                                                                    \
                                   Bblock                                                                                               \
                                        /* Traitement du cas courant. ATTENTION, il est de loin preferable de ne pas ecrire :        */ \
                                        /*                                                                                           */ \
                                        /*                  case INTE(constante) :                                                   */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, si par erreur, des constantes "reellement" flottantes etaient utilisees,   */ \
                                        /* elles seraient alors tronquees, et cela pourrait introduire un comportement anormal de    */ \
                                        /* certains programmes (voir par exemple le cas ou l'on testerait successivement les         */ \
                                        /* valeurs 1.1, 1.2, 1.3,... qui se rameneraient alors toutes a 1...).                       */ \
                                   PRINT_ATTENTION("utiliser 'Ca1e(constante)' plutot que 'Case(constante)'");                          \
                                        /* ATTENTION : je rappelle le 20101117140830 qu'au lieu de :                                 */ \
                                        /*                                                                                           */ \
                                        /*                  Case(constante)                                                          */ \
                                        /*                                                                                           */ \
                                        /* il est de loin preferable d'utiliser :                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Ca1e(constante)                                                          */ \
                                        /*                                                                                           */ \
                                        /* qui assure la "symetrie" avec 'Ca2e(...)', 'Ca3e(...)', 'Ca4e(...)',... d'ou le message   */ \
                                        /* d'attention introduit a cette date...                                                     */
#define   ECas                                                                                                                          \
                                   PRINT_ATTENTION("utiliser 'ECa1' plutot que 'ECas'");                                                \
                                   Brek;                                                                                                \
                                   Eblock                                                                                               \
                                        /* Fin de traitement du cas courant.                                                         */ \
                                        /*                                                                                           */ \
                                        /* Le message d'attention a ete introduit le 20101117140830...                               */

#define   Ca1e(c1)                                                                                                                      \
                              case PARE(c1) :                                                                                           \
                                   Bblock
#define   ECa1                                                                                                                          \
                                   Brek;                                                                                                \
                                   Eblock
                                        /* Traitement de 01 cas courant (introduit le 20100322185519).                               */
#define   Ca2e(c1,c2)                                                                                                                   \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV
#define   ECa2                                                                                                                          \
                                        Brek;                                                                                           \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 02 cas courants (introduit le 20100322185519).                              */
#define   Ca3e(c1,c2,c3)                                                                                                                \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV
#define   ECa3                                                                                                                          \
                                             Brek;                                                                                      \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 03 cas courants (introduit le 20100322185519).                              */
#define   Ca4e(c1,c2,c3,c4)                                                                                                             \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV
#define   ECa4                                                                                                                          \
                                                  Brek;                                                                                 \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 04 cas courants (introduit le 20100322185519).                              */
#define   Ca5e(c1,c2,c3,c4,c5)                                                                                                          \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV
#define   ECa5                                                                                                                          \
                                                       Brek;                                                                            \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 05 cas courants (introduit le 20100322185519).                              */
#define   Ca6e(c1,c2,c3,c4,c5,c6)                                                                                                       \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV
#define   ECa6                                                                                                                          \
                                                            Brek;                                                                       \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 06 cas courants (introduit le 20100322185519).                              */
#define   Ca7e(c1,c2,c3,c4,c5,c6,c7)                                                                                                    \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV
#define   ECa7                                                                                                                          \
                                                                 Brek;                                                                  \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 07 cas courants (introduit le 20100322185519).                              */
#define   Ca8e(c1,c2,c3,c4,c5,c6,c7,c8)                                                                                                 \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV
#define   ECa8                                                                                                                          \
                                                                      Brek;                                                             \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 08 cas courants (introduit le 20100322185519).                              */
#define   Ca9e(c1,c2,c3,c4,c5,c6,c7,c8,c9)                                                                                              \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV
#define   ECa9                                                                                                                          \
                                                                           Brek;                                                        \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 09 cas courants (introduit le 20100322185519).                              */
#define   CaAe(c1,c2,c3,c4,c5,c6,c7,c8,c9,cA)                                                                                           \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                              case PARE(cA) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV                                                      \
                                                                                BblockV
#define   ECaA                                                                                                                          \
                                                                                Brek;                                                   \
                                                                                EblockV                                                 \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 10 cas courants (introduit le 20100322185519).                              */
#define   CaBe(c1,c2,c3,c4,c5,c6,c7,c8,c9,cA,cB)                                                                                        \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                              case PARE(cA) :                                                                                           \
                              case PARE(cB) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV                                                      \
                                                                                BblockV                                                 \
                                                                                     BblockV
#define   ECaB                                                                                                                          \
                                                                                     Brek;                                              \
                                                                                     EblockV                                            \
                                                                                EblockV                                                 \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 11 cas courants (introduit le 20100322185519).                              */
#define   CaCe(c1,c2,c3,c4,c5,c6,c7,c8,c9,cA,cB,cC)                                                                                     \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                              case PARE(cA) :                                                                                           \
                              case PARE(cB) :                                                                                           \
                              case PARE(cC) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV                                                      \
                                                                                BblockV                                                 \
                                                                                     BblockV                                            \
                                                                                          BblockV
#define   ECaC                                                                                                                          \
                                                                                          Brek;                                         \
                                                                                          EblockV                                       \
                                                                                     EblockV                                            \
                                                                                EblockV                                                 \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 12 cas courants (introduit le 20100322185519).                              */
#define   CaDe(c1,c2,c3,c4,c5,c6,c7,c8,c9,cA,cB,cC,cD)                                                                                  \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                              case PARE(cA) :                                                                                           \
                              case PARE(cB) :                                                                                           \
                              case PARE(cC) :                                                                                           \
                              case PARE(cD) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV                                                      \
                                                                                BblockV                                                 \
                                                                                     BblockV                                            \
                                                                                          BblockV                                       \
                                                                                               BblockV
#define   ECaD                                                                                                                          \
                                                                                               Brek;                                    \
                                                                                               EblockV                                  \
                                                                                          EblockV                                       \
                                                                                     EblockV                                            \
                                                                                EblockV                                                 \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 13 cas courants (introduit le 20100322185519).                              */
#define   CaEe(c1,c2,c3,c4,c5,c6,c7,c8,c9,cA,cB,cC,cD,cE)                                                                               \
                              case PARE(c1) :                                                                                           \
                              case PARE(c2) :                                                                                           \
                              case PARE(c3) :                                                                                           \
                              case PARE(c4) :                                                                                           \
                              case PARE(c5) :                                                                                           \
                              case PARE(c6) :                                                                                           \
                              case PARE(c7) :                                                                                           \
                              case PARE(c8) :                                                                                           \
                              case PARE(c9) :                                                                                           \
                              case PARE(cA) :                                                                                           \
                              case PARE(cB) :                                                                                           \
                              case PARE(cC) :                                                                                           \
                              case PARE(cD) :                                                                                           \
                              case PARE(cE) :                                                                                           \
                                   Bblock                                                                                               \
                                        BblockV                                                                                         \
                                             BblockV                                                                                    \
                                                  BblockV                                                                               \
                                                       BblockV                                                                          \
                                                            BblockV                                                                     \
                                                                 BblockV                                                                \
                                                                      BblockV                                                           \
                                                                           BblockV                                                      \
                                                                                BblockV                                                 \
                                                                                     BblockV                                            \
                                                                                          BblockV                                       \
                                                                                               BblockV                                  \
                                                                                                    BblockV
#define   ECaE                                                                                                                          \
                                                                                                    Brek;                               \
                                                                                                    EblockV                             \
                                                                                               EblockV                                  \
                                                                                          EblockV                                       \
                                                                                     EblockV                                            \
                                                                                EblockV                                                 \
                                                                           EblockV                                                      \
                                                                      EblockV                                                           \
                                                                 EblockV                                                                \
                                                            EblockV                                                                     \
                                                       EblockV                                                                          \
                                                  EblockV                                                                               \
                                             EblockV                                                                                    \
                                        EblockV                                                                                         \
                                   Eblock
                                        /* Traitement de 14 cas courants (introduit le 20120118120309).                              */

#define   Defo                                                                                                                          \
                              default :                                                                                                 \
                                   Bblock                                                                                               \
                                        /* Traitement du cas par defaut,                                                             */
#define   EDef                                                                                                                          \
                                   Brek;                                                                                                \
                                   Eblock                                                                                               \
                         EblockV                                                                                                        \
                                        /* Fin de traitement du cas par defaut.                                                      */

#define   ECho                                                                                                                          \
                    EblockV                                                                                                             \
                                        /* Fin de l'instruction 'Choi'.                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N S T R U C T E U R S   D ' I T E R A T I O N S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Tant(conditions)                                                                                                              \
                    BblockV                                                                                                             \
                    while     (conditions)                                                                                              \
                                        /* On fait preceder le "while" d'un debut de block, afin que la fin du "Tant"                */ \
                                        /* (c'est-a-dire le "ETan") puisse etre valide par le compilateur ; en                       */ \
                                        /* effet, s'il s'agissait d'une instruction vide, son absence ne serait                      */ \
                                        /* pas diagnostiquee !!!                                                                     */ \
                              Bblock
#define   ETan                                                                                                                          \
                              Eblock                                                                                                    \
                    EblockV

#define   Bouc(initialisation,test_de_continuation,action_iterative)                                                                    \
                    for       (initialisation ; test_de_continuation ; action_iterative)                                                \
                                        /* Definition generale de l'iteration...                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N S T A N T E S   E N T I E R E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifndef   NO_DEFINE_____premiers_entiers_naturels
                                        /* Pour simplifier 'v $xrd/spectre.01$K NO_DEFINE_____premiers_entiers_naturels', ce tests   */
                                        /* a ete introduit le 20230731114914...                                                      */
Den48(INIS(_1,BIT)
          ,_2
          ,_3
          ,_4
          ,_5
          ,_6
          ,_7
          ,_8
          ,_9
          ,_10
          ,_11
          ,_12
          ,_13
          ,_14
          ,_15
          ,_16
          ,_17
          ,_18
          ,_19
          ,_20
          ,_21
          ,_22
          ,_23
          ,_24
          ,_25
          ,_26
          ,_27
          ,_28
          ,_29
          ,_30
          ,_31
          ,_32
          ,_33
          ,_34
          ,_35
          ,_36
          ,_37
          ,_38
          ,_39
          ,_40
          ,_41
          ,_42
          ,_43
          ,_44
          ,_45
          ,_46
          ,_47
          ,DERNIER_NOMBRE_ENTIER
          ,premiers_entiers_naturels
      );
                                        /* Passage de 'Denumer17(...)' a 'Den48(...)' le 20210307105730...                           */
#Aifndef  NO_DEFINE_____premiers_entiers_naturels
#Eifndef  NO_DEFINE_____premiers_entiers_naturels

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   C A R A C T E R E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   K_NULL                                                                                                                        \
                    '\0'                                                                                                                \
                                        /* Definition du caractere "null".                                                           */
#define   END_OF_CHAIN                                                                                                                  \
                    K_NULL                                                                                                              \
                                        /* Caractere de fin de chaine.                                                               */

#define   K_BACKSPACE                                                                                                                   \
                    '\b'                                                                                                                \
                                        /* Caractere <BACKSPACE>.                                                                    */
#define   K_TABULATION                                                                                                                  \
                    '\t'                                                                                                                \
                                        /* Caractere <TAB>.                                                                          */
#define   K_LF                                                                                                                          \
                    '\n'                                                                                                                \
                                        /* Caractere <NEW-LINE>.                                                                     */
#define   K_RC                                                                                                                          \
                    '\r'                                                                                                                \
                                        /* Caractere <RETOUR-CHARRIOT>.                                                              */

#define   K_ESC                                                                                                                         \
                    0x1b                                                                                                                \
                                        /* Caractere <ESCAPE>.                                                                       */

#define   K_BLANC                                                                                                                       \
                    ' '                                                                                                                 \
                                        /* Caractere 'BLANC' ou 'ESPACE'.                                                            */
#define   K_UNDEF                                                                                                                       \
                    K_BLANC                                                                                                             \
                                        /* Definition d'un caractere indefini (le code utilise est relativement 'neutre', en         */ \
                                        /* particulier, on ne peut utiliser 'K_NULL').                                               */

#define   K_EXCLAMATION                                                                                                                 \
                    '!'
#define   K_QUOTE                                                                                                                       \
                    '\"'                                                                                                                \
                                        /* Caractere d'encadrement des chaines de caracteres...                                      */
#define   K_VERITABLE_QUOTE                                                                                                             \
                              PREMIER_CARACTERE_ITb0(Gvar("K_QD"))                                                                      \
                                        /* Introduit le 20070228122854...                                                            */
#define   K_DIESE                                                                                                                       \
                    '#'
#define   K_DOLLAR                                                                                                                      \
                    '$'
#define   K_POUR_CENT                                                                                                                   \
                    '%'
#define   K_ET                                                                                                                          \
                    '&'
#define   K_APOSTROPHE                                                                                                                  \
                    '\''                                                                                                                \
                                        /* Caractere d'encadrement des caracteres...                                                 */
#define   K_VERITABLE_APOSTROPHE                                                                                                        \
                              PREMIER_CARACTERE_ITb0(Gvar("K_QS"))                                                                      \
                                        /* Introduit le 20070228122854...                                                            */
#define   K_PG                                                                                                                          \
                    '('
#define   K_PD                                                                                                                          \
                    ')'
#define   K_ETOILE                                                                                                                      \
                    '*'
#define   K_PLUS                                                                                                                        \
                    '+'
#define   K_VIRGULE                                                                                                                     \
                    ','
#define   K_MOINS                                                                                                                       \
                    '-'
#define   K_POINT                                                                                                                       \
                    '.'
#define   K_SLASH                                                                                                                       \
                    '/'

#define   K_0                                                                                                                           \
                    '0'
#define   K_1                                                                                                                           \
                    '1'
#define   K_2                                                                                                                           \
                    '2'
#define   K_3                                                                                                                           \
                    '3'
#define   K_4                                                                                                                           \
                    '4'
#define   K_5                                                                                                                           \
                    '5'
#define   K_6                                                                                                                           \
                    '6'
#define   K_7                                                                                                                           \
                    '7'
#define   K_8                                                                                                                           \
                    '8'
#define   K_9                                                                                                                           \
                    '9'

#define   K_DEUX_POINTS                                                                                                                 \
                    ':'
#define   K_POINT_VIRGULE                                                                                                               \
                    ';'                                                                                                                 \
                                        /* Caractere de fin d'expression.                                                            */
#define   K_INFERIEUR                                                                                                                   \
                    '<'
#define   K_EGAL                                                                                                                        \
                    '='
#define   K_SUPERIEUR                                                                                                                   \
                    '>'
#define   K_INTERROGATION                                                                                                               \
                    '?'
#define   K_A_ROND                                                                                                                      \
                    '@'                                                                                                                 \
                                        /* Delimitation entre les caracteres alphabetiques et les autres...                          */
#define   K_A                                                                                                                           \
                    'A'
#define   K_B                                                                                                                           \
                    'B'
#define   K_C                                                                                                                           \
                    'C'
#define   K_D                                                                                                                           \
                    'D'
#define   K_E                                                                                                                           \
                    'E'
#define   K_F                                                                                                                           \
                    'F'
#define   K_G                                                                                                                           \
                    'G'
#define   K_H                                                                                                                           \
                    'H'
#define   K_I                                                                                                                           \
                    'I'
#define   K_J                                                                                                                           \
                    'J'
#define   K_K                                                                                                                           \
                    'K'
#define   K_L                                                                                                                           \
                    'L'
#define   K_M                                                                                                                           \
                    'M'
#define   K_N                                                                                                                           \
                    'N'
#define   K_O                                                                                                                           \
                    'O'
#define   K_P                                                                                                                           \
                    'P'
#define   K_Q                                                                                                                           \
                    'Q'
#define   K_R                                                                                                                           \
                    'R'
#define   K_S                                                                                                                           \
                    'S'
#define   K_T                                                                                                                           \
                    'T'
#define   K_U                                                                                                                           \
                    'U'
#define   K_V                                                                                                                           \
                    'V'
#define   K_W                                                                                                                           \
                    'W'
#define   K_X                                                                                                                           \
                    'X'
#define   K_Y                                                                                                                           \
                    'Y'
#define   K_Z                                                                                                                           \
                    'Z'

#define   K_CG                                                                                                                          \
                    '['
#define   K_ANTI_SLASH                                                                                                                  \
                    '\\'
#define   K_CD                                                                                                                          \
                    ']'
#define   K_CIRCONFLEXE                                                                                                                 \
                    '^'
#define   K_UNDERSCORE                                                                                                                  \
                    '_'                                                                                                                 \
                                        /* Underscore (et substitut de l'ESPACE' parfois...).                                        */
#define   K_ANTI_QUOTE                                                                                                                  \
                    '`'                                                                                                                 \
                                        /* ATTENTION : 'K_ANTI_QUOTE' ne doit jamais etre utilise, car en effet le caractere "`"     */ \
                                        /* est utilise en tant que remplacement du caractere "_" afin de permettre au pre-processeur */ \
                                        /* 'cpp' de manipuler des morceaux de symboles : par exemple on utilisera dans la definition */ \
                                        /* d'une macro "MACRO" une variable muette "NOM" de la facon suivante :                      */ \
                                        /*                                                                                           */ \
                                        /*                  #define   MACRO(NOM)          NOM`XXXX                                   */ \
                                        /*                                                                                           */ \
                                        /* puis l'appel :                                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  MACRO(nom)                                                               */ \
                                        /*                                                                                           */ \
                                        /* generera :                                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  nom`XXXX                                                                 */ \
                                        /*                                                                                           */ \
                                        /* puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  nom_XXXX                                                                 */ \
                                        /*                                                                                           */ \
                                        /* qui correspond a une variable reelle "nom_XXXX".                                          */
#define   K_VERITABLE_ANTI_QUOTE                                                                                                        \
                              PREMIER_CARACTERE_ITb0(Gvar("K_QA"))                                                                      \
                                        /* Introduit le 20070228122854...                                                            */
#define   K_a                                                                                                                           \
                    'a'
#define   K_b                                                                                                                           \
                    'b'
#define   K_c                                                                                                                           \
                    'c'
#define   K_d                                                                                                                           \
                    'd'
#define   K_e                                                                                                                           \
                    'e'
#define   K_f                                                                                                                           \
                    'f'
#define   K_g                                                                                                                           \
                    'g'
#define   K_h                                                                                                                           \
                    'h'
#define   K_i                                                                                                                           \
                    'i'
#define   K_j                                                                                                                           \
                    'j'
#define   K_k                                                                                                                           \
                    'k'
#define   K_l                                                                                                                           \
                    'l'
#define   K_m                                                                                                                           \
                    'm'
#define   K_n                                                                                                                           \
                    'n'
#define   K_o                                                                                                                           \
                    'o'
#define   K_p                                                                                                                           \
                    'p'
#define   K_q                                                                                                                           \
                    'q'
#define   K_r                                                                                                                           \
                    'r'
#define   K_s                                                                                                                           \
                    's'
#define   K_t                                                                                                                           \
                    't'
#define   K_u                                                                                                                           \
                    'u'
#define   K_v                                                                                                                           \
                    'v'
#define   K_w                                                                                                                           \
                    'w'
#define   K_x                                                                                                                           \
                    'x'
#define   K_y                                                                                                                           \
                    'y'
#define   K_z                                                                                                                           \
                    'z'

#define   K_AG                                                                                                                          \
                    '{'
#define   K_PIPE                                                                                                                        \
                    '|'
#define   K_AD                                                                                                                          \
                    '}'
#define   K_TILDA                                                                                                                       \
                    '~'

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   C H A I N E S   E L E M E N T A I R E S  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   C_VIDE                                                                                                                        \
                    ""                                                                                                                  \
                                        /* Chaine vide.                                                                              */
#define   C_LF                                                                                                                          \
                    "\n"                                                                                                                \
                                        /* Chaine <NEW-LINE>.                                                                        */

#define   C_BLANC                                                                                                                       \
                    " "

#define   C_EXCLAMATION                                                                                                                 \
                    "!"

#define   C_QUOTE                                                                                                                       \
                    "\""
#define   C_VERITABLE_QUOTE                                                                                                             \
                              Gvar("K_QD")                                                                                              \
                                        /* Introduit le 20061225143630...                                                            */
#define   C_DIESE                                                                                                                       \
                    "#"
#define   C_DOLLAR                                                                                                                      \
                    "$"
#define   C_POUR_CENT                                                                                                                   \
                    "%"
#define   C_ET                                                                                                                          \
                    "&"

#define   C_APOSTROPHE                                                                                                                  \
                    "\'"
#define   C_VERITABLE_APOSTROPHE                                                                                                        \
                              Gvar("K_QS")                                                                                              \
                                        /* Introduit le 20061225143630...                                                            */

#define   C_PG                                                                                                                          \
                    "("
#define   C_PD                                                                                                                          \
                    ")"
#define   C_ETOILE                                                                                                                      \
                    "*"
#define   C_PLUS                                                                                                                        \
                    "+"
#define   C_VIRGULE                                                                                                                     \
                    ","
#define   C_MOINS                                                                                                                       \
                    "-"
#define   C_POINT                                                                                                                       \
                    "."
#define   C_SLASH                                                                                                                       \
                    "/"

#define   C_0                                                                                                                           \
                    "0"
#define   C_1                                                                                                                           \
                    "1"
#define   C_2                                                                                                                           \
                    "2"
#define   C_3                                                                                                                           \
                    "3"
#define   C_4                                                                                                                           \
                    "4"
#define   C_5                                                                                                                           \
                    "5"
#define   C_6                                                                                                                           \
                    "6"
#define   C_7                                                                                                                           \
                    "7"
#define   C_8                                                                                                                           \
                    "8"
#define   C_9                                                                                                                           \
                    "9"

#define   C_DEUX_POINTS                                                                                                                 \
                    ":"
#define   C_POINT_VIRGULE                                                                                                               \
                    ";"
#define   C_INFERIEUR                                                                                                                   \
                    "<"
#define   C_EGAL                                                                                                                        \
                    "="
#define   C_SUPERIEUR                                                                                                                   \
                    ">"
#define   C_INTERROGATION                                                                                                               \
                    "?"
#define   C_A_ROND                                                                                                                      \
                    "@"

#define   C_A                                                                                                                           \
                    "A"
#define   C_B                                                                                                                           \
                    "B"
#define   C_C                                                                                                                           \
                    "C"
#define   C_D                                                                                                                           \
                    "D"
#define   C_E                                                                                                                           \
                    "E"
#define   C_F                                                                                                                           \
                    "F"
#define   C_G                                                                                                                           \
                    "G"
#define   C_H                                                                                                                           \
                    "H"
#define   C_I                                                                                                                           \
                    "I"
#define   C_J                                                                                                                           \
                    "J"
#define   C_K                                                                                                                           \
                    "K"
#define   C_L                                                                                                                           \
                    "L"
#define   C_M                                                                                                                           \
                    "M"
#define   C_N                                                                                                                           \
                    "N"
#define   C_O                                                                                                                           \
                    "O"
#define   C_P                                                                                                                           \
                    "P"
#define   C_Q                                                                                                                           \
                    "Q"
#define   C_R                                                                                                                           \
                    "R"
#define   C_S                                                                                                                           \
                    "S"
#define   C_T                                                                                                                           \
                    "T"
#define   C_U                                                                                                                           \
                    "U"
#define   C_V                                                                                                                           \
                    "V"
#define   C_W                                                                                                                           \
                    "W"
#define   C_X                                                                                                                           \
                    "X"
#define   C_Y                                                                                                                           \
                    "Y"
#define   C_Z                                                                                                                           \
                    "Z"

#define   C_CG                                                                                                                          \
                    "["
#define   C_ANTI_SLASH                                                                                                                  \
                    "\\"
#define   C_CD                                                                                                                          \
                    "]"
#define   C_CIRCONFLEXE                                                                                                                 \
                    "^"
#define   C_UNDERSCORE                                                                                                                  \
                    "_"

#nodefine C_ANTI_QUOTE                                                                                                                  \
                    "`"                                                                                                                 \
                                        /* ATTENTION : 'C_ANTI_QUOTE' ne doit jamais etre utilise, car en effet le caractere "`"     */ \
                                        /* est utilise en tant que remplacement du caractere "_" afin de permettre au pre-processeur */ \
                                        /* 'cpp' de manipuler des morceaux de symboles : par exemple on utilisera dans la definition */ \
                                        /* d'une macro "MACRO" une variable muette "NOM" de la facon suivante :                      */ \
                                        /*                                                                                           */ \
                                        /*                  #define   MACRO(NOM)          NOM`XXXX                                   */ \
                                        /*                                                                                           */ \
                                        /* puis l'appel :                                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  MACRO(nom)                                                               */ \
                                        /*                                                                                           */ \
                                        /* generera :                                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  nom`XXXX                                                                 */ \
                                        /*                                                                                           */ \
                                        /* puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  nom_XXXX                                                                 */ \
                                        /*                                                                                           */ \
                                        /* qui correspond a une variable reelle "nom_XXXX".                                          */ \
                                        /*                                                                                           */ \
                                        /* On utilisera a la place 'C_VERITABLE_ANTI_QUOTE'...                                       */ \
                                        /*                                                                                           */ \
                                        /* A cause de 'v $xcp/conversion_UTF_8$K C_VERITABLE_ANTI_QUOTE', pour eviter de nouvelles   */ \
                                        /* erreurs, le 'define' est devenu un 'nodefine' le 20250129180222...                        */
#define   C_VERITABLE_ANTI_QUOTE                                                                                                        \
                              Gvar("K_QA")                                                                                              \
                                        /* Introduit le 20061225143630...                                                            */

#define   C_a                                                                                                                           \
                    "a"
#define   C_b                                                                                                                           \
                    "b"
#define   C_c                                                                                                                           \
                    "c"
#define   C_d                                                                                                                           \
                    "d"
#define   C_e                                                                                                                           \
                    "e"
#define   C_f                                                                                                                           \
                    "f"
#define   C_g                                                                                                                           \
                    "g"
#define   C_h                                                                                                                           \
                    "h"
#define   C_i                                                                                                                           \
                    "i"
#define   C_j                                                                                                                           \
                    "j"
#define   C_k                                                                                                                           \
                    "k"
#define   C_l                                                                                                                           \
                    "l"
#define   C_m                                                                                                                           \
                    "m"
#define   C_n                                                                                                                           \
                    "n"
#define   C_o                                                                                                                           \
                    "o"
#define   C_p                                                                                                                           \
                    "p"
#define   C_q                                                                                                                           \
                    "q"
#define   C_r                                                                                                                           \
                    "r"
#define   C_s                                                                                                                           \
                    "s"
#define   C_t                                                                                                                           \
                    "t"
#define   C_u                                                                                                                           \
                    "u"
#define   C_v                                                                                                                           \
                    "v"
#define   C_w                                                                                                                           \
                    "w"
#define   C_x                                                                                                                           \
                    "x"
#define   C_y                                                                                                                           \
                    "y"
#define   C_z                                                                                                                           \
                    "z"

#define   C_AG                                                                                                                          \
                    "{"
#define   C_PIPE                                                                                                                        \
                    "|"
#define   C_AD                                                                                                                          \
                    "}"
#define   C_TILDA                                                                                                                       \
                    "~"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        Q U E L Q U E S   C H A I N E S   U T I L E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   C_VRAI____                                                                                                                    \
                    "VRAI"
#define   C_VRAI_____ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"V",C_VRAI____)
#define   C_EXIST___                                                                                                                    \
                    "EXIST"
#define   C_EXIST____ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"EX",C_EXIST___)
#define   C_ACTIF___                                                                                                                    \
                    "ACTIF"
#define   C_ACTIF____ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"AC",C_ACTIF___)
#define   C_AUTORISE                                                                                                                    \
                    "AUTORISE"
#define   C_AUTORISE_ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"AU",C_AUTORISE)
#define   C_VALIDE__                                                                                                                    \
                    "VALIDE"
#define   C_VALIDE___ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"VA",C_VALIDE__)

#define   C_FAUX____                                                                                                                    \
                    "FAUX"
#define   C_FAUX_____ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"F",C_FAUX____)
#define   C_NEXIST__                                                                                                                    \
                    "NEXIST"
#define   C_NEXIST___ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"NEX",C_NEXIST__)
#define   C_INACTIF_                                                                                                                    \
                    "INACTIF"
#define   C_INACTIF__ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"INA",C_INACTIF_)
#define   C_INTERDIT                                                                                                                    \
                    "INTERDIT"
#define   C_INTERDIT_ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"INT",C_INTERDIT)
#define   C_INVALIDE                                                                                                                    \
                    "INVALIDE"
#define   C_INVALIDE_ABREGE                                                                                                             \
                    COND(LE_MODE_EST_INTERACTIF,"INV",C_INVALIDE)

#define   C_UNDEF                                                                                                                       \
                    "UNDEF"
                                        /* Les versions abregees ont ete introduites le 20050128215454 et rendues conditionnelles    */
                                        /* vis a vis de l'interactivite le 20070302091102 (et donc autorisees uniquement en mode     */
                                        /* interactif a compter de cette date et ce pour des questions d'esthetique...).             */
                                        /*                                                                                           */
                                        /* La chaine 'C_UNDEF' a ete introduite le 20150203132551...                                 */
                                        /*                                                                                           */
                                        /* Les chaines C_{EXIST,ACTIF,AUTORISE,VALIDE} et C_{EXIST,ACTIF,AUTORISE,VALIDE}_ABREGE     */
                                        /* ont ete introduites le 20170717160748...                                                  */

#define   C_JFC                                                                                                                         \
                    "JFC"
#define   C_LACTAMME                                                                                                                    \
                    "LACTAMME"
#define   C_GSV_LACTAMME                                                                                                                \
                    "GSV-LACTAMME"

#define   C_DATE                                                                                                                        \
                    "date"
#define   C_DATE_NUMERIQUE                                                                                                              \
                    "DATE"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   A D R E S S E   I N E X I S T A N T E  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ADRESSE_UNDEF                                                                                                                 \
                    ADRESSE(NIL)                                                                                                        \
                                        /* Est l'equivalent de 'UNDEF' pour les pointeurs...                                         */

#define   ADRESSE_NON_DEFINIE                                                                                                           \
                    ZERO                                                                                                                \
                                        /* Pour donner une valeur a une adresse qui ne sera pas definie. Malheureusement,            */ \
                                        /* 'ADRESSE_UNDEF' ne peut pratiquement pas etre utilisee pour des question de typage,       */ \
                                        /* d'ou cette nouvelle definition...                                                         */
#define   ADRESSE_NON_ENCORE_DEFINIE                                                                                                    \
                    ADRESSE_NON_DEFINIE                                                                                                 \
                                        /* Pour donner une valeur a une adresse qui n'est pas encore definie.                        */
#define   ADRESSE_PLUS_DEFINIE                                                                                                          \
                    ADRESSE_NON_DEFINIE                                                                                                 \
                                        /* Pour donner une valeur a une adresse qui n'est plus definie (introduit le 20050221164301  */ \
                                        /* pour etre utilise conjointement avec les procedures 'FdTb?(...)').                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   C H A I N E   Q U E L C O N Q U E   I N E X I S T A N T E  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CHAINE_UNDEF                                                                                                                  \
                    cNIL                                                                                                                \
                                        /* Est l'equivalent de 'UNDEF' pour les chaines de caracteres en general...                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, il y avait autrefois :                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Common,DEFV(CHAR,INIT(cNIL,K_UNDEF)));                              */ \
                                        /*                                                                                           */ \
                                        /* ainsi que :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  #define   CHAINE_UNDEF                                                \  */ \
                                        /*                                      ADRESSE(cNIL)                                        */ \
                                        /*                                                                                           */ \
                                        /* dans '$xil/defi_c1$vv$DEF'. L'introduction de la possibilite d'editer les parametres      */ \
                                        /* reellement utilisees dans une commande ('$xig/fonct$vv$DEF' et '$xig/fonct$vv$FON') a     */ \
                                        /* contraint a ces changements...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   N O M   I N E X I S T A N T  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOM_UNDEF                                                                                                                     \
                    CHAINE_UNDEF                                                                                                        \
                                        /* Est l'equivalent de 'UNDEF' pour les noms.                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A P P E L   D E   T Y P E   " S O U S - P R O G R A M M E "   D ' U N E   F O N C T I O N  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALS(fonction)                                                                                                                \
                    Bblock                                                                                                              \
                    fonction;                                                                                                           \
                    Eblock                                                                                                              \
                                        /* Pour effectuer l'appel d'une fonction comme un sous-programme (type FORTRAN).             */ \
                                        /* ATTENTION : cette definition doit etre ici parce qu'elle est utilisee ci-dessous pour     */ \
                                        /* une definition de '$PASSE_2' ('Return(...)' via 'Exit(...)')...                           */
#define   CALZ(fonction)                                                                                                                \
                    CALS(fonction);                                                                                                     \
                                        /* Pour distinguer les appels a des fonctions "Zystemes" (introduit le 20120624100636)...    */ \
                                        /*                                                                                           */ \
                                        /* Le 20180317125300, 'CALZ(...)' est passe de '$PASSE_1' a '$PASSE_2' afin de simplifier    */ \
                                        /* 'v $xig/fonct$vv$DEF EDITION_D_UN_COMPTEUR_DE_DESALLOCATION_MEMOIRE', mais cela n'etait   */ \
                                        /* pas une bonne idee et je suis donc revenu immediatement en arriere...                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I   D E S   V A L E U R S   D E S   F O N C T I O N S  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NbreAcces                                                                                                                     \
                    _____Fcompteur_DAppel

#if       (         (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_01))                                                          \
          &&        (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_02))                                                          \
           )
                                        /* Introduit le 20180412074717 afin de permettre des redefinitions locales, par exemple,     */
                                        /* dans les differentes bibliotheques de '$xb'...                                            */
#         nodefine  DEFINITION_DE__BeginFonction__RETU_VERSION_01
#         define    DEFINITION_DE__BeginFonction__RETU_VERSION_02
                                        /* Introduit le 20180411181723...                                                            */
#Aif      (         (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_01))                                                          \
          &&        (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_02))                                                          \
           )
#Eif      (         (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_01))                                                          \
          &&        (! defined(DEFINITION_DE__BeginFonction__RETU_VERSION_02))                                                          \
           )

#ifdef    DEFINITION_DE__BeginFonction__RETU_VERSION_01
#    define    RETU_comptage_acces_eventuel                                                                                             \
                         BLOC(VIDE;);
#    nodefine  RETU_comptage_acces_eventuel_fictif                                                                                      \
                         BLOC(VIDE;);
#Aifdef   DEFINITION_DE__BeginFonction__RETU_VERSION_01
#Eifdef   DEFINITION_DE__BeginFonction__RETU_VERSION_01

#ifdef    DEFINITION_DE__BeginFonction__RETU_VERSION_02
#    define    RETU_comptage_acces_eventuel_general(incrementation)                                                                     \
                         &ifdef              CompteurDeLaFonctionCourante                                                               \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             BLOC(incrementation);                                                                      \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             &undef              CompteurDeLaFonctionCourante                                           \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                         &Aifdef             CompteurDeLaFonctionCourante                                                               \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                                             _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                         \
                         &Eifdef             CompteurDeLaFonctionCourante                                                               \
                                                                                                                                        \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                         _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                             \
                                        /* Introduit le 20180411104629...                                                            */
#    define    RETU_comptage_acces_eventuel                                                                                             \
                         RETU_comptage_acces_eventuel_general(BLOC(INCR(NomDeLaFonctionCourante QD@@__ NbreAcces,I);))
#    nodefine  RETU_comptage_acces_eventuel_fictif                                                                                      \
                         RETU_comptage_acces_eventuel_general(BLOC(VIDE;))
                                        /* Introduit le 20180412165322...                                                            */
#Aifdef   DEFINITION_DE__BeginFonction__RETU_VERSION_02
#Eifdef   DEFINITION_DE__BeginFonction__RETU_VERSION_02

#define   RETU(valeur)                                                                                                                  \
                    RETU_comptage_acces_eventuel;                                                                                       \
                    Return(valeur)

                                        /* Renvoi d'une valeur par une fonction. La valeur de 'Return(...)' est definie ci-apres     */
                                        /* dans la passe '$PASSE_2' et peut d'ailleurs etre redefinie par 'BCommande'...             */

=define   Return(valeur)                return(valeur)
                                        /* Renvoi d'une valeur par une fonction. Cette definition peut etre modifiee par la fonction */
                                        /* 'BCommande' toujours dans la passe '$PASSE_2', et ce afin de mettre en place 'exit(...)'. */
                                        /* On notera l'absence d'anti-slash '\' ci-dessus due au fait qu'on est ici en '$PASSE_2'... */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O T S   C L E F S   P O U R   L E S   F O N C T I O N S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ARGUMENT_POINTEUR(argument)                                                                                                   \
                    argument                                                                                                            \
                                        /* Permet d'indiquer visuellement qu'un argument d'appel est un pointeur                     */ \
                                        /* sur une structure par exemple, et a l'appel, on utilisera ADRESSE(argument).              */
#define   ARGUMENT_POINTERc(argument)                                                                                                   \
                    ARGUMENT_POINTEUR(argument)                                                                                         \
                                        /* Permet d'indiquer visuellement qu'un argument d'appel est un pointeur                     */ \
                                        /* sur une chaine de caracteres, et a l'appel, on utilisera ADRESSE(argument).               */
#define   ARGUMENT_POINTERp(argument)                                                                                                   \
                    ARGUMENT_POINTEUR(argument)                                                                                         \
                                        /* Permet d'indiquer visuellement qu'un argument d'appel est un pointeur                     */ \
                                        /* sur une image, et a l'appel, on utilisera ADRESSE(argument).                              */
#define   ARGUMENT_POINTERs(argument)                                                                                                   \
                    ARGUMENT_POINTEUR(argument)                                                                                         \
                                        /* Permet d'indiquer visuellement qu'un argument d'appel est un pointeur                     */ \
                                        /* sur une structure, et a l'appel, on utilisera ADRESSE(argument).                          */
#define   ARGUMENT_FONCTION(argument)                                                                                                   \
                    ARGUMENT_POINTEUR(argument)                                                                                         \
                                        /* Permet d'indiquer visuellement qu'un argument d'appel est un nom de fonction,             */ \
                                        /* et a l'appel, on utilisera aFONCTION(nom).                                                */

#define   fETOILE(argument)                                                                                                             \
                    *argument                                                                                                           \
                                        /* Permet de generer les pointeurs, mais aussi les 'CAST' sur des structures ; c'est a       */ \
                                        /* a cause de ces derniers que l'on ecrit '*argument' et non pas '*PARE(argument)'...        */
#define   POINTEUR(argument)                                                                                                            \
                    fETOILE(PARE(argument))                                                                                             \
                                        /* Permet de generer un pointeur, par exemple dans la definition des                         */ \
                                        /* arguments d'une fonction ou bien pour indiquer qu'une fonction renvoie                    */ \
                                        /* un pointeur...                                                                            */
#define   POINTERv(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers un type 'Void'...                                      */
#define   POINTERc(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers une chaine de caracteres, par exemple                  */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */
#define   POINTERi(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers un nombre entier, par exemple                          */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */
#define   POINTERl(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers un nombre logique, par exemple                         */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */
#define   POINTERf(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers un nombre flottant, par exemple                        */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */
#define   POINTERs(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de generer un pointeur vers une structure, par exemple                             */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_ES9000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_RS6000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX_CC))                                                                                  \
          ||        (defined(SYSTEME_SG4D25TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX_CC))                                                                               \
          ||        (defined(SYSTEME_SG4D35TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D85GT_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    POINTERbp(argument)                                                                                                      \
                         DTb0(PARE(POINTEUR(argument)))                                                                                 \
                                        /* Permet de generer un pointeur vers un tableau monodimensionnel, par exemple               */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur. On notera que 'POINTERbp(...)' sera en               */ \
                                        /* general associe a 'DTbp(...)' et 'ITbp(...)'.                                             */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_ES9000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_RS6000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX_CC))                                                                                  \
          ||        (defined(SYSTEME_SG4D25TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX_CC))                                                                               \
          ||        (defined(SYSTEME_SG4D35TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D85GT_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )
#    define    POINTERbp(argument)                                                                                                      \
                         POINTEUR(argument)                                                                                             \
                                        /* Permet de generer un pointeur vers un tableau monodimensionnel, par exemple               */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur. On notera que 'POINTERbp(...)' sera en               */ \
                                        /* general associe a 'DTbp(...)' et 'ITbp(...)'.                                             */
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA340_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA350_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_DECALPHA464_OSF1_CC))                                                                              \
          ||        (defined(SYSTEME_ES9000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                            \
          ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                            \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                               \
          ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                              \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                                \
          ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                               \
          ||        (defined(SYSTEME_RS6000_AIX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX_CC))                                                                                  \
          ||        (defined(SYSTEME_SG4D25TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX_CC))                                                                               \
          ||        (defined(SYSTEME_SG4D35TG_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SG4D85GT_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                                    \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                             \
          ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                            \
          ||        (defined(SYSTEME_VAX9000_ULTRIX_GCC))                                                                               \
           )

#define   fPOINTEUR(nom_de_la_fonction)                                                                                                 \
                    PARE(POINTEUR(nom_de_la_fonction))                                                                                  \
                                        /* Permet de generer un pointeur vers une fonction, afin de l'appeler ; on notera la         */ \
                                        /* chose tres importante suivante :                                                          */ \
                                        /*                                                                                           */ \
                                        /*                  POINTERx(fonction(...))  designe une fonction renvoyant un pointeur sur  */ \
                                        /*                                           un certain type d'objets ('c' : chaine de       */ \
                                        /*                                           caracteres, 'p' : image, 's' : structure),      */ \
                                        /*                                                                                           */ \
                                        /* alors que :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  fPOINTEUR(fonction)(...) designe un pointeur vers une fonction...        */ \
                                        /*                                                                                           */

#define   afPOINTEUR(nom_de_la_fonction)                                                                                                \
                    fPOINTEUR(nom_de_la_fonction)()                                                                                     \
                                        /* Permet de generer un pointeur vers une fonction, afin de la definir en tant               */ \
                                        /* qu'argument d'une autre par un 'DEFV', ou lors de la generation d'une variable            */ \
                                        /* pointant vers une fonction (telle 'Fvariable').                                           */

#ifdef    DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_01
                                        /* Introduit le 20040625152717...                                                            */
#    nodefine  afPOINTEUR_1(nom_de_la_fonction)                                                                                         \
                         fPOINTEUR(nom_de_la_fonction)()                                                                                \
                                        /* Cette procedure introduite le 20040618142923 est necessaire pour traiter l'argument,      */ \
                                        /* en 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', des pointeurs de        */ \
                                        /* fonctions definis par 'v $ximd/operator.2$DEF DEFINITION_D_UN_APPLY'...                   */ \
                                        /*                                                                                           */ \
                                        /* On notera que cette definition ne sert plus a compter du 20180428004005...                */
#    define    afPOINTEUR_1p(nom_de_la_fonction)                                                                                        \
                         fPOINTEUR(nom_de_la_fonction)()                                                                                \
                                        /* Introduit le 20180428004005 pour 'v $ximd/operator.2$DEF DEFINITION_D_UN_APPLY'...        */

#    nodefine  afPOINTEUR_2(nom_de_la_fonction)                                                                                         \
                         fPOINTEUR(nom_de_la_fonction)()                                                                                \
                                        /* De meme, le 20040618154052, pour les pointeurs de fonctions a deux arguments...           */ \
                                        /*                                                                                           */ \
                                        /* On notera que cette definition ne sert plus a compter du 20180428004005...                */
#    define    afPOINTEUR_2p(nom_de_la_fonction)                                                                                        \
                         fPOINTEUR(nom_de_la_fonction)()                                                                                \
                                        /* Introduit le 20180428004005 pour 'v $xiipf/fonction.2$FON Fvariable'...                   */
#Aifdef   DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_01
#Eifdef   DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_01

#ifdef    DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02
                                        /* Introduit le 20040625152717...                                                            */
#    nodefine  afPOINTEUR_1(nom_de_la_fonction)                                                                                         \
                         fPOINTEUR(nom_de_la_fonction)(arg1)                                                                            \
                                        /* Cette procedure introduite le 20040618142923 est necessaire pour traiter l'argument,      */ \
                                        /* en 'DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02', des pointeurs de        */ \
                                        /* fonctions definis par 'v $ximd/operator.2$DEF DEFINITION_D_UN_APPLY'...                   */ \
                                        /*                                                                                           */ \
                                        /* On notera que cette definition ne sert plus a compter du 20180428004005...                */
#    define    afPOINTEUR_1p(nom_de_la_fonction)                                                                                        \
                         fPOINTEUR(nom_de_la_fonction)(DEFV(Argument,DEFV(genere_p,arg1)))                                              \
                                        /* Introduit le 20180428004005 pour 'v $ximd/operator.2$DEF DEFINITION_D_UN_APPLY'...        */

#    nodefine  afPOINTEUR_2(nom_de_la_fonction)                                                                                         \
                         fPOINTEUR(nom_de_la_fonction)(arg1,arg2)                                                                       \
                                        /* De meme, le 20040618154052, pour les pointeurs de fonctions a deux arguments...           */ \
                                        /*                                                                                           */ \
                                        /* On notera que cette definition ne sert plus a compter du 20180428004005...                */
#    define    afPOINTEUR_2p(nom_de_la_fonction)                                                                                        \
                         fPOINTEUR(nom_de_la_fonction)(DEFV(Argument,DEFV(genere_p,arg1)),DEFV(Argument,DEFV(genere_p,arg2)))           \
                                        /* Introduit le 20180428004005 pour 'v $xiipf/fonction.2$FON Fvariable'...                   */
#Aifdef   DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02
#Eifdef   DECLARATIONS_DES_FONCTIONS_ET_DE_LEURS_ARGUMENTS_VERSION_02

#define   INDIRECT(argument)                                                                                                            \
                    POINTEUR(argument)                                                                                                  \
                                        /* Permet de faire une operation indirecte, et par exemple un "EGAL".                        */
#define   PINDIRECT(argument)                                                                                                           \
                    PARE(INDIRECT(argument))                                                                                            \
                                        /* Cette definition est rendue necessaire, par exemple, dans 'IdTb1(...)' et 'ITbp(...)'.    */

#if       (         (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
           )
#    nTestADef BUG_SYSTEME_CRAY_C_ADRESSE                                                                                               \
                                        /* Actuellement, avec le compilateur 'scc', ecrire ('x' designant une variable declaree      */ \
                                        /* 'float' ou  'double') :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  &x   --> donne correctement l'adresse de 'x',                            */ \
                                        /*                  &(x) --> donne un resultat faux...                                       */ \
                                        /*                                                                                           */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
           )
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                                 \
          ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                               \
          ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                              \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                              \
           )

#define   ADRESSE(argument)                                                                                                             \
                    PARE(&PARE(argument))                                                                                               \
                                        /* Permet de recuperer l'adresse de l'argument, par exemple dans un                          */ \
                                        /* appel de fonction, on mettra f(ADRESSE(argument))...                                      */

#if       (         (defined(BUG_SYSTEME_CRAY_C_ADRESSE))                                                                               \
           )
#    undef     ADRESSE
#    define    ADRESSE(argument)                                                                                                        \
                         PARE(&argument)                                                                                                \
                                        /* Permet de recuperer l'adresse de l'argument, par exemple dans un                          */ \
                                        /* appel de fonction, on mettra f(ADRESSE(argument))...                                      */
#Aif      (         (defined(BUG_SYSTEME_CRAY_C_ADRESSE))                                                                               \
           )
#Eif      (         (defined(BUG_SYSTEME_CRAY_C_ADRESSE))                                                                               \
           )

#if       (         (defined(SYSTEME_DPX5000_SPIX_CC))                                                                                  \
           )
#    define    aFONCTION(nom_de_la_fonction)                                                                                            \
                         ADRESSE(nom_de_la_fonction(||||))                                                                              \
                                        /* Permet de recuperer l'adresse d'une fonction argument, par exemple dans                   */ \
                                        /* l'appel d'une autre fonction, on mettra f1(aFONCTION(f2))...                              */
#Aif      (         (defined(SYSTEME_DPX5000_SPIX_CC))                                                                                  \
           )
#    define    aFONCTION(nom_de_la_fonction)                                                                                            \
                         nom_de_la_fonction(||||)                                                                                       \
                                        /* Permet de recuperer l'adresse d'une fonction argument, par exemple dans                   */ \
                                        /* l'appel d'une autre fonction, on mettra f1(aFONCTION(f2)). On notera l'ecriture '(||||)'  */ \
                                        /* destinee en fait uniquement a '$xcp/cpp$X' afin qu'il trouve les parentheses obligatoires */ \
                                        /* pour chaque appel de procedure ; ensuite, '$xcc/cpp$D/fARGUMENT$sed' fait disparaitre     */ \
                                        /* tout cela. D'ailleur, autrefois, on trouvait 'nom_de_la_fonction' seul...                 */
#Eif      (         (defined(SYSTEME_DPX5000_SPIX_CC))                                                                                  \
           )

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

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#    if        (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                             \
               ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                            \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                           \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                       \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                          \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                         \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                           \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                          \
               ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                        \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                       \
                )
#         define    POINTERp(argument)                                                                                                  \
                              POINTEUR(argument)                                                                                        \
                                        /* Permet de generer un pointeur vers une image (ou matrice...), par exemple                 */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */
#    Aif       (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                             \
               ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                            \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                           \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                       \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                          \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                         \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                           \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                          \
               ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                        \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                       \
                )
#         define    POINTERp(argument)                                                                                                  \
                              POINTEUR(POINTEUR(argument))                                                                              \
                                        /* Permet de generer un pointeur vers une image (ou matrice...), par exemple                 */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */ \
                                        /* valeur par defaut.                                                                        */
#    Eif       (         (defined(SYSTEME_CRAY2_UNICOS_CC))                                                                             \
               ||        (defined(SYSTEME_CRAY2_UNICOS_SCC))                                                                            \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_CC))                                                                           \
               ||        (defined(SYSTEME_CRAYC98_UNICOS_SCC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYC916_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP1_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP2_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_CC))                                                                          \
               ||        (defined(SYSTEME_CRAYYMP4_UNICOS_SCC))                                                                         \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_FXC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_PCC))                                                                       \
               ||        (defined(SYSTEME_FX2800_CONCENTRIX_SCC))                                                                       \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_CC))                                                                          \
               ||        (defined(SYSTEME_FX40_CONCENTRIX_FXC))                                                                         \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_CC))                                                                           \
               ||        (defined(SYSTEME_NWS3000_NEWSOS_2CC))                                                                          \
               ||        (defined(SYSTEME_SUN3_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4_SUNOS_CC))                                                                               \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_CC))                                                                        \
               ||        (defined(SYSTEME_SUN4NCUBE2S_SUNOS_NCC))                                                                       \
                )

#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))                                                                  \
           )

#if       (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#    define    POINTERp(argument)                                                                                                       \
                         POINTEUR(argument)                                                                                             \
                                        /* Permet de generer un pointeur vers une image (ou matrice...), par exemple                 */ \
                                        /* dans la definition des arguments d'une fonction ou bien pour indiquer                     */ \
                                        /* qu'une fonction renvoie un pointeur...                                                    */ \
                                        /* valeur par defaut.                                                                        */
#Aif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )
#Eif      (         (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02))                                                                  \
          ||        (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))                                                                  \
           )

                                        /* ATTENTION, l'ajout d'une nouvelle definition de type 'POINTER?(...)' implique en general  */
                                        /* la modification des commandes '$xcg/gen.arg$Z' et '$xcg/gen.ext$Z', ainsi que de leurs    */
                                        /* directories '$D' associes...                                                              */

#define   POINTERC(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERI(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERU(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERF(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERD(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERJ(argument)                                                                                                            \
                    POINTERp(argument)
#define   POINTERHJ(argument)                                                                                                           \
                    POINTERp(argument)
#define   POINTERHHJ(argument)                                                                                                          \
                    POINTERp(argument)
                                        /* Identique a 'POINTERp(...)' mais pour des types d'images non standard, de type "imageC",  */
                                        /* "imageI", "imageU", "imageF", "imageD", "imageJ", "imageHJ" et "imageHHJ" respectivement. */
                                        /*                                                                                           */
                                        /* Le pointeur 'POINTERHHJ(...)' a ete introduit le 20150227110009...                        */

                                        /* ATTENTION, l'ajout d'une nouvelle definition de type 'POINTER?(...)' implique en general  */
                                        /* la modification des commandes '$xcg/gen.arg$Z' et '$xcg/gen.ext$Z', ainsi que de leurs    */
                                        /* directories '$D' associes...                                                              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M O T S   C L E F S   P O U R   L E S   C O M M A N D E S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Main                                                                                                                          \
                    main                                                                                                                \
                                        /* Nom du point d'entree dans le programme principal...                                      */

#define   BEntry                                                                                                                        \
                    BFonctionIB                                                                                                         \
                                        /* Le 'BFonctionI' a ete introduite le 20071116084209 car il manquait et remplace par        */ \
                                        /* 'BFonctionIB' le 20100317143109...                                                        */ \
                    DEFV(FonctionIB,Main())                                                                                             \
                                        /* "Programme principal".                                                                    */
#define   EEntry                                                                                                                        \
                    EFonctionIB                                                                                                         \
                                        /* Et fin de "programme principal"...                                                        */

#define   BCommande(nombre_d_arguments,arguments)                                                                                       \
                                        /* Permet d'introduire le programme principal pour une commande.                             */ \
                    BFonctionIB                                                                                                         \
                                        /* Le 'BFonctionI' a ete introduite le 20071116084209 car il manquait et remplace par        */ \
                                        /* 'BFonctionIB' le 20100317143109...                                                        */ \
                    DEFV(FonctionIB,Main(Argument_____nombre_d_arguments,Argument_____arguments))                                       \
                    DEFV(Argument,DEFV(Int,Argument_____nombre_d_arguments));                                                           \
                                        /* Nombre d'arguments recus, y compris son nom.                                              */ \
                    DEFV(Argument,DEFV(CHAR,POINTERc(DTb0(Argument_____arguments))));                                                   \
                                        /* Liste des arguments, y compris la commande ; mais ATTENTION, il y avait autrefois         */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(CHAR,POINTERc(POINTERc(DTb0(arguments))));                          */ \
                                        /*                                                                                           */ \
                                        /* qui m'a pose des problemes considerables en passant sur le CRAY2, je suis donc revenu     */ \
                                        /* a une version plus orthodoxe...                                                           */ \
                                                                                                                                        \
                                        /* ATTENTION : tout ce qui suit doit absolument preceder 'NOMBRE`D`ARGUMENTS' car, sinon,    */ \
                                        /* '$xcc/cpp$Z' le perd...                                                                   */ \
                                                                                                                                        \
                         Bblock                                                                                                         \
                                        /* Le 20241120150941, sur '$LACT19' je note qulque chose de mysterieux avec la commande :    */ \
                                        /*                                                                                           */ \
                                        /*                  $ssh_q_X  $LACT1A   "date ; $xci/convol.01$X"                            */ \
                                        /*                                                                                           */ \
                                        /* qui donne :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*        la date...                                                                         */ \
                                        /*        bash: line 1: 15862 Segmentation fault /home/colonna/commandes/images/convol.01.x  */ \
                                        /*                                                                                           */ \
                                        /* (le message "...Segmentation fault,,," n'apparaissant pas en l'absence de la date !).     */ \
                                        /*                                                                                           */ \
                                        /* En mettant juste ici un "fprintf(...)" et en utilisant de plus 'strace' :                 */ \
                                        /*                                                                                           */ \
                                        /*                  $ssh_q_X  $LACT1A   "date ; strace $xci/convol.01$X"                     */ \
                                        /*                                                                                           */ \
                                        /* on voit que c'est ici qu'apparait la violation memoire :                                  */ \
                                        /*                                                                                           */ \
                                        /*        munmap(0x7f6df972f000,           147181)                                           */ \
                                        /*        --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7ffc86ec5950} ---    */ \
                                        /*        +++ killed by SIGSEGV +++                                                          */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, le "fprintf(...)" devrait se voir juste apres le 'munmap(...)'.            */ \
                                        /*                                                                                           */ \
                                        /* Au passage, on notera que cela apparait avec 'v $xci/convol.01$X', 'v $xci/convol.04$X'   */ \
                                        /* et 'v $xci/convol.05$X' mais pas avec 'v $xci/convol.02$X' et 'v $xci/convol.03$X'...     */ \
                                        /* De plus, on notera aussi que :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  $ssh_q_X  $LACT1A   "date ; $xci/convol.01$X"                            */ \
                                        /*                                                                                           */ \
                                        /* executee sur '$LACT1A' elle-meme donne le meme message de 'Segmentation fault'...         */ \
                                        /*                                                                                           */ \
                                        /* Alors d'ou vient de 'SIGSEGV' ?                                                           */ \
                                        /*                                                                                           */ \
                                        /* Le 20241120172524, j'ai trouve, il s'agit des '$K's suivants :                            */ \
                                        /*                                                                                           */ \
                                        /*                  $xci/CompteVoi.01$K                                                      */ \
                                        /*                  $xci/MarqueVoi.01$K                                                      */ \
                                        /*                  $xci/accumule.12$K                                                       */ \
                                        /*                  $xci/bouche_trou$K                                                       */ \
                                        /*                  $xci/convol.01$K                                                         */ \
                                        /*                  $xci/convol.04$K                                                         */ \
                                        /*                  $xci/convol.05$K                                                         */ \
                                        /*                  $xci/dilate.01$K                                                         */ \
                                        /*                  $xci/dimension.02$K                                                      */ \
                                        /*                  $xci/distance.02$K                                                       */ \
                                        /*                  $xci/inertie.01$K                                                        */ \
                                        /*                  $xci/inertie.02$K                                                        */ \
                                        /*                  $xci/maxima_local$K                                                      */ \
                                        /*                  $xci/minima_local$K                                                      */ \
                                        /*                  $xci/montagne.02$K                                                       */ \
                                        /*                  $xci/nettete.01$K                                                        */ \
                                        /*                  $xci/pt_isole.01$K                                                       */ \
                                        /*                                                                                           */ \
                                        /* qui contiennent tous les lignes suivantes :                                               */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Float,DTb1(noyau,TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION));                 */ \
                                        /*        DEFV(Logical,DTb1(inhibition_du_noyau,TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION)); */ \
                                        /*                                                                                           */ \
                                        /* qui font de "grosse"s allocations memoire statiques. La solution va vonc etre de passer   */ \
                                        /* en allocation dynamique. Oui, mais le 20241120175518 je note que cela va etre complique,  */ \
                                        /* puisque l'acces devrait devenir indirect via 'IdTb1(...)'. Donc le plus simple va etre    */ \
                                        /* de diminuer 'TAILLE_MAXIMALE_D_UN_NOYAU_DE_CONVOLUTION', or ce probleme a deja ete        */ \
                                        /* rencontre (voir le bug 'BUG_SYSTEME_APC_GCC_too_large_stack_frames') et j'ai donc cree    */ \
                                        /* le nouveau bug 'BUG_SYSTEME_APC_GCC_tableaux_statiques_trop_volumineux_1' pour ce faire   */ \
                                        /* le 20241120180440...                                                                      */ \
                                                                                                                                        \
                         EGAL(arguments,Argument_____arguments);                                                                        \
                         EGAL(nombre_d_arguments,Argument_____nombre_d_arguments);                                                      \
                                        /* Le 20230405101804, j'ai tente de remplacer les deux instructions precedentes par :        */ \
                                        /*                                                                                           */ \
                                        /*   DEFV(CHAR,INIT(POINTERc(Complement_____arguments)                                       */ \
                                        /*                 ,Gvar(NOM_SYNTHETIQUE_DU_FICHIER_COURANT)                                 */ \
                                        /*                  )                                                                        */ \
                                        /*        );                                                                                 */ \
                                        /*   EGAp(arguments                                                                          */ \
                                        /*       ,chain_Aconcaten3(Argument_____arguments                                            */ \
                                        /*                        ,C_BLANC                                                           */ \
                                        /*                        ,Complement_____arguments                                          */ \
                                        /*                         )                                                                 */ \
                                        /*        );                                                                                 */ \
                                        /*   EGAL(nombre_d_arguments                                                                 */ \
                                        /*       ,ADD2(Argument_____nombre_d_arguments                                               */ \
                                        /*            ,TRMU(chain_comptage_des_occurences_d_un_caractere(Complement_____arguments    */ \
                                        /*                                                              ,K_BLANC                     */ \
                                        /*                                                               )                           */ \
                                        /*                  )                                                                        */ \
                                        /*             )                                                                             */ \
                                        /*        );                                                                                 */ \
                                        /*                                                                                           */ \
                                        /* afin d'assurer la concatenation des arguments "interactifs" de la commande                */ \
                                        /* (c'est-a-dire ceux qui figurent sur la ligne de commande) avec la valeur d'une            */ \
                                        /* eventuelle variable d'environnement de nom 'NOM_SYNTHETIQUE_DU_FICHIER_COURANT'           */ \
                                        /* qui aurait pu contenir une suite d'arguments. Par exemple, cela aurait pu etre            */ \
                                        /* utilise a la place de 'v $xiirv/.HILB.11.$U _____ParticulePara1' via la variable          */ \
                                        /* d'environnement '$xrv_particule_10'...                                                    */ \
                                        /*                                                                                           */ \
                                        /* Mais malheureusement, cela ne marche pas car, en effet, 'Argument_____arguments' n'est    */ \
                                        /* pas une chaine de caracteres, mais un tableau de chaines de caracteres !                  */ \
                                        /*                                                                                           */ \
                                        /* La bonne solution a ete trouvee le 20230405140116 et implementee ci-apres...              */ \
                                                                                                                                        \
                         EGAL(nombre_d_arguments_non_compris_le_nom,PRED(nombre_d_arguments));                                          \
                                        /* Introduits le 20221113114253 afin de pouvoir etre utilises dans des fonctions de          */ \
                                        /* 'v $xig/fonct$vv$FON 20221112133942'...                                                   */ \
                                        /*                                                                                           */ \
                                        /* Ceci a ete valide grace a 'v $xtc/argc_argv.12$c'...                                      */ \
                                                                                                                                        \
                         EGAp(nom_de_la_commande_courante,chain_Acopie(NOM_DE_LA_COMMANDE));                                            \
                                        /* Afin de pouvoir editer le nom de la commande courante dans 'gPRINT_DEFAUT(...)'.          */ \
                                        /*                                                                                           */ \
                                        /* Ce 'chain_Acopie(...)' appelle 'allocation_memoire_et_generation_des_format_EGAr(...)'    */ \
                                        /* ('v $xig/fonct$vv$FON 20180401123053') qui permet donc d'initialiser les formats dans     */ \
                                        /* le cas des '$X's n'ayant pas ete recompiles avec cette version de 'BCommande' qui a       */ \
                                        /* priori fait un 'allocation_memoire_et_generation_des_format_EGAr(...)' ci-apres. Cela     */ \
                                        /* assure donc la transition...                                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, je note le 20180406101245 qu'il ne faut pas faire de (a la fin...) :           */ \
                                        /*                                                                                           */ \
                                        /*                  CALZ_FreCC(nom_de_la_commande_courante);                                 */ \
                                        /*                                                                                           */ \
                                        /* dans 'v $xil/defi_K2$vv$DEF RETU_Commande' car, en effet, 'nom_de_la_commande_courante'   */ \
                                        /* est utile dans partout et en particulier dans 'PRINT_DEFAUT(...)'...                      */ \
                                        /*                                                                                           */ \
                                        /* En fait, le 20180407103819, je l'ai introduit "a la derniere minute", c'est-a-dire        */ \
                                        /* juste avant le 'RETU_ERROR' final...                                                      */ \
                                                                                                                                        \
                         begin_nouveau_block                                                                                            \
                                        /* Introduit le 20050905162854...                                                            */ \
                              Bblock                                                                                                    \
                                                                                                                                        \
                              Bclock(C_VIDE,FAUX);                                                                                      \
                                        /* Le chronometrage de la commande courante est a priori initialise, meme si son edition     */ \
                                        /* n'est peut-etre pas demandee (introduit le 20170518113625)...                             */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : on notera que ce 'Bclock(...)' n'est pas au meme niveau de {Bblock,Eblock}    */ \
                                        /* que le 'Eclock(...)' associe ('v $xil/defi_K2$vv$DEF Eclock') associe :                   */ \
                                        /*                                                                                           */ \
                                        /*                  BCommande(...)                <-- Bclock(...)                            */ \
                                        /*                       Bblock                                                              */ \
                                        /*                       (....)                                                              */ \
                                        /*                       RETU_Commande;           <-- Eclock(...)                            */ \
                                        /*                       Eblock                                                              */ \
                                        /*                  ECommande                                                                */ \
                                        /*                                                                                           */ \
                                        /* Cela parait donc quasiment impossible de les mettre au meme niveau. Au passage, c'est     */ \
                                        /* cela qui explique la suppression d'un 'Bblock' en tete de 'Bclock(...)' et d'un 'Eblock'  */ \
                                        /* en queue de 'Eclock(...)'.                                                                */ \
                                                                                                                                        \
                              CALS(allocation_memoire_et_generation_des_format_EGAr());                                                 \
                                        /* Definition des 'format_EGAr's utiles (introduit le 20180330120506)...                     */ \
                                                                                                                                        \
                                        /* ATTENTION : la definition de 'NOMBRE`D`ARGUMENTS' doit etre absolument en derniere        */ \
                                        /* position dans 'BCommande(...)' car, sinon, '$xcc/cpp$Z' perd ce qui suivrait...           */ \
                                                                                                                                        \
                              begin_nouveau_block                                                                                       \
                                        /* Sequence introduite le 20230405140116...                                                  */ \
                                   Bblock                                                                                               \
                                   DEFV(CHAR,INIT(POINTERc(Complement_____arguments),Gvar(NOM_SYNTHETIQUE_DU_FICHIER_COURANT)));        \
                                        /* Recuperation des arguments eventuels contenus dans la variable d'environnement de         */ \
                                        /* nom 'NOM_SYNTHETIQUE_DU_FICHIER_COURANT'...                                               */ \
                                                                                                                                        \
                                   Test(IFNE_chaine(Complement_____arguments,VALEUR_D_UNE_VARIABLE_UNDEF))                              \
                                        Bblock                                                                                          \
                                        DEFV(CHAR,INIC(POINTERc(commande_courante_effective),CHAINE_UNDEF));                            \
                                                                                                                                        \
                                        RECONSTITUTION_DE_LA_COMMANDE_COURANTE(commande_courante_effective);                            \
                                        /* Reconstitution de la commande courante telle qu'elle est apparue en ligne de commande...  */ \
                                                                                                                                        \
                                        EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(chain_Aconcaten6("unset "                            \
                                                                                                   ,NOM_SYNTHETIQUE_DU_FICHIER_COURANT  \
                                                                                                   ," ; "                               \
                                                                                                   ,commande_courante_effective         \
                                                                                                   ,C_BLANC                             \
                                                                                                   ,Complement_____arguments            \
                                                                                                    )                                   \
                                                                                   );                                                   \
                                        /* Generation d'une nouvelle commande completee du type :                                    */ \
                                        /*                                                                                           */ \
                                        /*                  unset             NOM_SYNTHETIQUE_DU_FICHIER_COURANT ;                   */ \
                                        /*                  CommandeEffective ComplementsArguments                                   */ \
                                        /*                                                                                           */ \
                                        /* On notera le 'unset' executee au prealable (sous '$SH') afin de ne pas boucler lors de    */ \
                                        /* la rerentree dans la commande ainsi completee...                                          */ \
                                                                                                                                        \
                                        RETU_Commande;                                                                                  \
                                        /* On notera le 20230406095735 que la valeur de 'CODE_ERREUR' peut avoir une valeur          */ \
                                        /* etrange dans le cas ou la commande provoquerait une erreur. Cela s'est vu a cette         */ \
                                        /* date avec 'v $xcg/ADD2.01$K' en ajoutant un argument non reconnu :                        */ \
                                        /*                                                                                           */ \
                                        /*        #include  <stdio.h>                                                                */ \
                                        /*        void      main()                                                                   */ \
                                        /*                  {                                                                        */ \
                                        /*                  printf("=%d=\n",system("~colonna/commandes/generales/ADD2.01$X xxxx"));  */ \
                                        /*                  }                                                                        */ \
                                        /*                                                                                           */ \
                                        /* qui donne un '$status' egal a 8448 c'est-a-dire 256*33, en notant que 33 correspond tres  */ \
                                        /* logiquement a 'v $xil/defi_K2$vv$DEF ERREUR33' qui se retrouve mysterieusement decale     */ \
                                        /* de 8 bits a gauche. La modification 'v $xil/defi_c1$vv$DEF SLRS.CODE_ERREUR' a corrige    */ \
                                        /* cela a cette date...                                                                      */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              end_nouveau_block                                                                                         \
                                                                                                                                        \
&    define    NOMBRE`D`ARGUMENTS            _____BEAUCOUP                                                                              \
                                        /* Au cas ou des compilations conditionnelles feraient que 'NOMBRE_D_ARGUMENTS' n'est pas    */ \
                                        /* defini ; ce peut etre le cas de 'v $xci/display$K' par exemple, lorsque 'X-Window'        */ \
                                        /* n'existe pas. ATTENTION : on notera qu'il n'y a pas de sequences :                        */ \
                                        /*                                                                                           */ \
                                        /*                  &    ifdef     NOMBRE_D_ARGUMENTS                                        */ \
                                        /*                  &         define    NOMBRE_D_ARGUMENTS  _____BEAUCOUP                    */ \
                                        /*                  &    Aifdef    NOMBRE_D_ARGUMENTS                                        */ \
                                        /*                  &    Eifdef    NOMBRE_D_ARGUMENTS                                        */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet le symbole 'NOMBRE_D_ARGUMENTS' est defini dans '$PASSE_1' en general,    */ \
                                        /* et qu'ici nous sommes dans '$PASSE_4', et qu'alors les symboles de '$PASSE_1' ne peuvent  */ \
                                        /* etre testes. Enfin, on ecrit 'NOMBRE`D`ARGUMENTS' et non pas 'NOMBRE_D_ARGUMENTS' afin    */ \
                                        /* que lors de '$PASSE_1 il n'y est pas substitution de 'NOMBRE_D_ARGUMENTS' par sa valeur   */ \
                                        /* s'il existe, ce qui lors de '$PASSE_4' donnerait le message "illegal macro name"...       */ \
                                        /*                                                                                           */ \
                                        /* Le 20040323125010, je note que l'ecriture 'NOMBRE`D`ARGUMENTS' interdit les definitions   */ \
                                        /* suivantes :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  #define   NOMBRE    ...                                                  */ \
                                        /*                  #define   D         ...                                                  */ \
                                        /*                  #define   ARGUMENTS ...                                                  */ \
                                        /*                                                                                           */ \
                                        /* dans un source quelconque. A cette date, la commande 'vs' a montre que ces trois symboles */ \
                                        /* n'existaient pas...                                                                       */ \
                                                                                                                                        \
                                        /* Definition du point d'entree d'une commande et quelques initialisations essentielles...   */
#define   ECommande                                                                                                                     \
                              Eblock                                                                                                    \
                         end_nouveau_block                                                                                              \
                                        /* Introduit le 20050905162854...                                                            */ \
                         Eblock                                                                                                         \
                    EFonctionIB                                                                                                         \
                                        /* Et fin de commande...                                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   G E S T I O N   D E   L ' E S P A C E   M E M O I R E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefP(TailleMalo,size_t)
                                        /* Introduit le 20120201181546 (bien tardivement...) pour definir l'argument d'appel a       */
                                        /* 'vrai_Malo_de_base(...)' et 'vrai_Calo_de_base(...)'.                                     */

DEFV(Extern,DEFV(CHAR,POINTERc(malloc())));
#define   vrai_Malo_de_base(taille_en_octets)                                                                                           \
                    malloc(taille_en_octets)

DEFV(Extern,DEFV(CHAR,POINTERc(calloc())));
#define   vrai_Calo_de_base(taille_en_octets)                                                                                           \
                    calloc(taille_en_octets,UN)                                                                                         \
                                        /* La fonction 'calloc(...)' a ete introduite le 20051208165517...                           */

#define   vrai_Malo_de_base_effectif(taille_en_octets)                                                                                  \
                    vrai_Malo_de_base(taille_en_octets)                                                                                 \
                                        /* Introduit le 20051208170523 pour permettre de passer facilement de 'malloc(...)' a        */ \
                                        /* 'calloc(...)' et inversement...                                                           */

#define   Malo(taille_en_octets)                                                                                                        \
                    allocation_memoire_avec_validation(INTE(taille_en_octets)                                                           \
                                                      ,nom_de_la_commande_courante                                                      \
                                                      ,FICHIER_COURANT_ABSOLU_x                                                         \
                                                      ,NomDeLaFonctionCourante                                                          \
                                                      ,LIGNE_COURANTE                                                                   \
                                                       )                                                                                \
                                        /* Definition de l'allocateur memoire general. Sur 'SYSTEME_APC_LinuxRedHat_GCC', faire :    */ \
                                        /*                                                                                           */ \
                                        /*                  setenv    MALLOC_CHECK_       1                                          */ \
                                        /*                                                                                           */ \
                                        /* permet de faire en "temps reel" des validations d'allocation/desallocation memoire...     */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, jusqu'au 20000224152926, 'Malo(...)' etait defini par :                        */ \
                                        /*                                                                                           */ \
                                        /*                  malloc(taille_en_octets)                                                 */ \
                                        /*                                                                                           */ \
                                        /* mais il est plus sage de valider...                                                       */ \
                                        /*                                                                                           */ \
                                        /* Les arguments {FICHIER_COURANT_RELATIF,NomDeLaFonctionCourante,LIGNE_COURANTE} furent     */ \
                                        /* introduits le 20120113141332 ('v $xig/fonct$vv$FON 20120113140943')...                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20120412092137, 'FICHIER_COURANT_ABSOLU_x' a remplace 'FICHIER_COURANT_RELATIF'        */ \
                                        /* suite a la modification 'v $Falias_vi 20120408185254' qui a supprime l'absolutisation     */ \
                                        /* des noms de fichier, si necessaire, sous 'vi'...                                          */
#define   PLUS_DE_MEMOIRE_LIBRE                                                                                                         \
                    ZERO                                                                                                                \
                                        /* Valeur renvoyee lorsqu'il n'y a plus de memoire libre...                                  */
#define   tMalo(taille_en_octets,type)                                                                                                  \
                    ptCAST(type,Malo(taille_en_octets))                                                                                 \
                                        /* Definition de l'allocateur memoire sur des structures de type donne.                      */

DEFV(Extern,DEFV(Void,free()));
#define   Free(pointeur)                                                                                                                \
                    free(pointeur)                                                                                                      \
                                        /* Definition du desallocateur memoire.                                                      */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, le 20050103094711 je note que 'free(...)' ne renvoie pas de code de retour.    */ \
                                        /* Il est donc impossible de savoir si cela s'est bien passe et en particulier de savoir     */ \
                                        /* si 'pointeur' etait valide...                                                             */ \
                                        /*                                                                                           */ \
                                        /* Je note le 20120201075734 qu'il est regrettable que 'Free(...)' ne sache pas combien      */ \
                                        /* d'octets il libere ('v $xig/fonct$vv$FON 20120131183248')...                              */

=define   FreCC(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FreDD(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FreFF(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FreII(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FreLL(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FrePP(pointeur)                                                                                                               \
                    Free(pointeur)
=define   FreSS(pointeur)                                                                                                               \
                    Free(pointeur)
                                        /* Definitions supplementaires introduites le 20051021165714 dans le but d'aider a la        */
                                        /* comprehension du probleme 'v $xig/fonct$vv$FON 20051019113924'. L'usage sera le suivant : */
                                        /*                                                                                           */
                                        /*                  operations sur Chaines            -->   FreCC(...)                       */
                                        /*                            chain_Acopie*(...)                                             */
                                        /*                            chain_ANcopie(...)                                             */
                                        /*                            chain_Aconcaten?(...)                                          */
                                        /*                                                                                           */
                                        /*                  Divers                            -->   FreDD(...)                       */
                                        /*                                                                                           */
                                        /*                  operations sur Fichiers           -->   FreFF(...)                       */
                                        /*                                                                                           */
                                        /*                  operations les Listes             -->   FreLL(...)                       */
                                        /*                                                                                           */
                                        /*                  Structures en memoire             -->   FreSS(...)                       */
                                        /*                                                                                           */
                                        /* Le 20180315131728, ces definitions sont passees de '$PASSE_1' a '$PASSE_2' afin de        */
                                        /* favoriser et simplifier la programmattion de 'gCALZ_Free(...)' ci-apres...                */
                                        /*                                                                                           */
                                        /* Le 20180406170731 ont ete introduits 'FreII(...)' (et non pas 'FreI(...)' et ce a         */
                                        /* cause de la definition 'v $xil/defi_K1$vv$DEF .define...I.') et de 'FrePP(...)' (et non   */
                                        /* 'FreP(...)' a cause de la definition 'v $xrq/particle.M0$K .define...I.')...              */

#nodefine gCALZ_Free_VERSION_01
                                        /* Version anterieure au 20221028172935...                                                   */
#define   gCALZ_Free_VERSION_02
                                        /* Version introduite le 20221028181016...                                                   */
                                        /*                                                                                           */
                                        /* On notera le 20221029115318 que cela permet de reduire la taille des '$c's et des '$X's   */
                                        /* ainsi qu'on peut le voir dans 'v $xcc/cpp$Z 20221029114820'...                            */

#ifdef    gCALZ_Free_VERSION_01
#    define    gCALZ_Free(X,pointeur)                                                                                                   \
                         Bblock                                                                                                         \
                         CALZ(Fre ## X(pointeur));                                                                                      \
                         EGAL(pointeur,ADRESSE_PLUS_DEFINIE);                                                                           \
                         INCK(gCALZ_Free_____compteur_de_tous_les_gCALZ_Free);                                                          \
                         INCK(CALZ_Fre ## X ## _____compteur_de_tous_les_CALZ_Fre ## X);                                                \
                                        /* Le comptage des 'gCALZ_Free(...)' a ete introduit le 20180315090454...                    */ \
                                        /*                                                                                           */ \
                                        /* On notera que l'on ne peut ecrire :                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  INCK(CALZ`FreX`____compteur_de_tous_les_CALZ`FreX);                      */ \
                                        /*                                                                                           */ \
                                        /* ou encore :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  INCK(CALZ_ ## FreX ## _____compteur_de_tous_les_CALZ_ ## FreX);          */ \
                                        /*                                                                                           */ \
                                        /* car, en effet, 'FreX' est en fait le nom d'une procedure qui demande donc a sa suite      */ \
                                        /* des parentheses (et de meme pour 'CALZ(...)').                                            */ \
                                        /*                                                                                           */ \
                                        /* La solution a ete trouvee le 20180315130123 en remplacant l'argument 'FreX' par 'X',      */ \
                                        /* sachant que l'on ne peut pas utiliser 'Fre ## X' car, en effet, les procedures            */ \
                                        /* 'FreX(...)' ne sont pas des fonctions, mais des '#define's dont le nom ne peut etre       */ \
                                        /* genere ainsi dynamiquement, d'ou le passage de '$PASSE_1' a '$PASSE_2' des 'FreX(...)'    */ \
                                        /* pour permettre 'Fre ## X'...                                                              */ \
                         Eblock
#Aifdef   gCALZ_Free_VERSION_01
#Eifdef   gCALZ_Free_VERSION_01

#ifdef    gCALZ_Free_VERSION_02
#    define    gCALZ_Free(X,pointeur)                                                                                                   \
                         Bblock                                                                                                         \
                         CALS(FgCALZ_Free ## X ## (ADRESSE(CALZ_Fre ## X ## _____compteur_de_tous_les_CALZ_Fre ## X),pointeur));        \
                                        /* Et ce afin d'economiser de la place pour les '$c's et les '$X's...                        */ \
                         EGAL(pointeur,ADRESSE_PLUS_DEFINIE);                                                                           \
                                        /* Introduit le 20240704135504, cette reinitialisation ne pouvant etre faite dans la         */ \
                                        /* fonction 'CALZ_FreSS(...)' ('v $xig/fonct$vv$FON 20240704122720' a ce propos...).         */ \
                         Eblock
#Aifdef   gCALZ_Free_VERSION_02
#Eifdef   gCALZ_Free_VERSION_02

#define   CALZ_FreCC(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(CC,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FreDD(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(DD,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FreFF(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(FF,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FreII(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(II,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FreLL(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(LL,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FrePP(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(PP,pointeur);                                                                                            \
                    Eblock
#define   CALZ_FreSS(pointeur)                                                                                                          \
                    Bblock                                                                                                              \
                    gCALZ_Free(SS,pointeur);                                                                                            \
                    Eblock
                                        /* Definitions introduites le 20180104094153 afin de memoriser le nouvel etat de 'pointeur'. */
                                        /*                                                                                           */
                                        /* Le 20180317125910, les 'CALZ_????(...)' sont passes de '$PASSE_1' a '$PASSE_2' afin de    */
                                        /* simplifier 'v $xig/fonct$vv$DEF EDITION_D_UN_COMPTEUR_DE_DESALLOCATION_MEMOIRE', mais     */
                                        /* cela n'etait pas une bonne idee et je suis donc revenu immediatement en arriere...        */
                                        /*                                                                                           */
                                        /* Le 20180406141913, furent introduits 'CALZ_FreI(...)' et 'CALZ_FreP(...)' qui ont ete     */
                                        /* renommes 'CALZ_FreII(...)' et 'CALZ_FrePP(...)' le 20180406171209 (la raison en est       */
                                        /* donnee dans 'v $xil/defi_c1$vv$DEF 20180406170731'...).                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   G E S T I O N   D E S   P R O C E S S U S  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,getpid()));
#define   Gpid()                                                                                                                        \
                    INTE(getpid())                                                                                                      \
                                        /* Recuperation du "process identificator" du process courant.                               */ \
                                        /* On notera la fonction 'INTE(...)' mise en place le 1995072400 afin d'eviter des           */ \
                                        /* problemes du type :                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  ...: warning(1177): argument is incompatible with formal                 */ \
                                        /*                                                                                           */ \
                                        /* sur 'SYSTEME_SGPCM801_IRIX_CC'...                                                         */

DEFV(Extern,DEFV(vrai_Int_de_base,fork()));
#define   Para()                                                                                                                        \
                    fork()                                                                                                              \
                                        /* Lancement en parallele d'un process...                                                    */

DEFV(Extern,DEFV(Void,exit()));
                                        /* Le 20090312112346 cette fonction est passee de 'vrai_Int_de_base' a 'Void' qui semble     */
                                        /* etre son type partout, bien que cela ne ce soit vu qu'a cette date lors d'experiences     */
                                        /* sur 'europe.polytechnique.fr' (qui remplace provisoirement 'trinite.polytechnique.fr'     */
                                        /* a cette date en tant que '$CMAP28') et sur laquelle on obtenait le message :              */
                                        /*                                                                                           */
                                        /*        ...: warning: incompatible implicit declaration of built-in function 'exit'        */
                                        /*                                                                                           */
                                        /* et qui ne s'etait jamais vu ailleurs...                                                   */
#define   Exit_simple(status)                                                                                                           \
                    exit(status)                                                                                                        \
                                        /* "Auto-fin" d'un process. ATTENTION : cette definition doit etre ici parce qu'elle est     */ \
                                        /* utilisee ci-dessous pour une definition de '$PASSE_2' ('Return(...)'). Cette nouvelle     */ \
                                        /* definition a ete introduite le 19961017141050 ('v $xcp/substitue.01$K Exit_simple') ;     */ \
                                        /* en effet, pour des raisons de pre-processing, on ne peut utiliser 'Exit(...)' dans ce     */ \
                                        /* fichier. En fait, le 19961018115054, j'ai remplace l'appel a 'Exit_simple(...)' dans      */ \
                                        /* '$xcp/substitue.01$K' par 'CODE_ERROR(...)' ; malgre tout, je conserve cette nouvelle     */ \
                                        /* definition, on ne sait jamais...                                                          */
#define   Exit(status)                                                                                                                  \
                    CALZ(Exit_simple(status))                                                                                           \
                                        /* "Auto-fin" d'un process. ATTENTION : cette definition doit etre ici parce qu'elle est     */ \
                                        /* utilisee ci-dessous pour une definition de '$PASSE_2' ('Return(...)')...                  */
#define   Abort(status)                                                                                                                 \
                    Exit(status)                                                                                                        \
                                        /* "Auto-abort" d'un process (introduit le 20170620095409)...                                */

DEFV(Extern,DEFV(vrai_Int_de_base,kill()));
#define   Kill(identificateur_de_process,numero_du_signal)                                                                              \
                    kill(identificateur_de_process,numero_du_signal)                                                                    \
                                        /* "Kill" d'un process...                                                                    */

TypedefP(RemoteServeur,STRU(servent))
DEFV(Extern,DEFV(RemoteServeur,POINTERs(getservbyname())));
#define   _GetServeurByName(service,protocole)                                                                                          \
                    getservbyname(service,protocole)

#if       (         (defined(BUG_SYSTEME_SYSTEME_APC_LinuxDebian_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxMandrake_GCC_numero_de_port))                                                 \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxRedHat_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_ICC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_ICC_numero_de_port))                                                   \
           )
                                        /* Aux dernieres nouvelles ('v $Dcourrier_in/19990827180623 htons'), il ne s'agirait pas     */
                                        /* d'une erreur. On trouve dans 'v /usr/include/glib.h swapping' des procedures assurant     */
                                        /* les conversions utiles.                                                                   */
                                        /*                                                                                           */
                                        /* Je conserve malgre tout 'BUG_SYSTEME_SYSTEME_APC_LinuxRedHat_GCC_numero_de_port'...       */
#    define    PERMUTATION_EVENTUELLE_DES_OCTETS_DU_NUMERO_DE_PORT(numero_de_port)                                                      \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(index_de_permutation,UNDEF));                                                                    \
                                                                                                                                        \
                         DEFV(permutation_2_a_2_des_octets_d_un_mot,numero_de_port_converti);                                           \
                         EGAL(ASD1(numero_de_port_converti,nombre_entier),POSI(numero_de_port));                                        \
                                        /* Recuperation du numero de port a permuter.                                                */ \
                                                                                                                                        \
                         Test(EST_IMPAIR(NOCMO))                                                                                        \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("'NOCMO' est impair, la permutation des octets 2 a 2 d'un numero de port est mauvaise");     \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         DoIn(index_de_permutation,INDEX0,LSTX(INDEX0,MOIT(NOCMO)),I)                                                   \
                              Bblock                                                                                                    \
                              cSWAP(ITb1(ASD1(numero_de_port_converti,octets),DOUB(index_de_permutation))                               \
                                   ,ITb1(ASD1(numero_de_port_converti,octets),DOUP(index_de_permutation))                               \
                                    );                                                                                                  \
                                        /* Permutation 2 a 2 des octets.                                                             */ \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                                                                                                                                        \
                         EGAL(numero_de_port,POSI(ASD1(numero_de_port_converti,nombre_entier)));                                        \
                                        /* Renvoi du numero de port permute.                                                         */ \
                         Eblock                                                                                                         \
                                        /* Permutation 2 a 2 des octets d'un mot lorsque cela est necessaire.                        */
#Aif      (         (defined(BUG_SYSTEME_SYSTEME_APC_LinuxDebian_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxMandrake_GCC_numero_de_port))                                                 \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxRedHat_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_ICC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_ICC_numero_de_port))                                                   \
           )
#    define    PERMUTATION_EVENTUELLE_DES_OCTETS_DU_NUMERO_DE_PORT(numero_de_port)                                                      \
                         Bblock                                                                                                         \
                         BLOC(VIDE;);                                                                                                   \
                         Eblock                                                                                                         \
                                        /* Recuperation des caracteristiques d'un serveur.                                           */
#Eif      (         (defined(BUG_SYSTEME_SYSTEME_APC_LinuxDebian_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxMandrake_GCC_numero_de_port))                                                 \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxRedHat_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUbuntu_ICC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_GCC_numero_de_port))                                                   \
          ||        (defined(BUG_SYSTEME_SYSTEME_APC_LinuxUlmint_ICC_numero_de_port))                                                   \
           )

#define   GetServeurByName(caracteristiques_du_serveur,service,protocole)                                                               \
                    Bblock                                                                                                              \
                    EGAL(caracteristiques_du_serveur,_GetServeurByName(service,protocole));                                             \
                    PERMUTATION_EVENTUELLE_DES_OCTETS_DU_NUMERO_DE_PORT(ASI1(caracteristiques_du_serveur,s_port));                      \
                    Eblock                                                                                                              \
                                        /* Recuperation des caracteristiques d'un serveur.                                           */

DEFV(Extern,DEFV(vrai_Int_de_base,rexec()));
#define   _RemoteCommande(machine,port,login,passwd,commande,stream_de_signalisation)                                                   \
                    rexec(machine,port,login,passwd,commande,stream_de_signalisation)

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
           )
#    TestADef  BUG_SYSTEME_rexec_login_passwd_interactif                                                                                \
                                        /* Comme cela peut se voir avec 'v $xtc/remote.12$c Segmentation', lorsque l'un des          */ \
                                        /* parametres {login,passwd} est nul ('ADRESSE_NON_DEFINIE'), cela provoque de la part       */ \
                                        /* de 'rexec(...)' le message :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  Segmentation fault                                                       */ \
                                        /*                                                                                           */ \
                                        /* que je n'ai pas pu faire disparaitre.                                                     */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
           )
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE <= 503000000))                                             \
           )

#define   RemoteCommande(stream_de_communication,machine,port,login,passwd,commande,stream_de_signalisation)                            \
                    Bblock                                                                                                              \
                    Conversion_CHAR_en_vrai_CHAR_de_base(machine_eventuellement_convertie,machine);                                     \
                    Conversion_CHAR_en_vrai_CHAR_de_base(login_eventuellement_converti,login);                                          \
                    Conversion_CHAR_en_vrai_CHAR_de_base(passwd_eventuellement_converti,passwd);                                        \
                    Conversion_CHAR_en_vrai_CHAR_de_base(commande_eventuellement_convertie,commande);                                   \
                                        /* Cette manipulation a ete rendue necessaire par 'SYSTEME_APC_LinuxRedHat_GCC' qui sinon    */ \
                                        /* donnait lors de l'appel de 'rexec(...)' avec directement 'machine' comme argument un      */ \
                                        /* message du type :                                                                         */ \
                                        /*                                                                                           */ \
                                        /*                  warning: passing arg 1 of `rexec' from incompatible pointer type         */ \
                                        /*                                                                                           */ \
                                        /* qui disparait avec ce transfert...                                                        */ \
                                        /* Puis, meme remarque mais pour 'SYSTEME_SGO200A2_IRIX_CC' pour {login,passwd,commande}.    */ \
                                                                                                                                        \
                    PERMUTATION_EVENTUELLE_DES_OCTETS_DU_NUMERO_DE_PORT(port);                                                          \
                                        /* Conversion eventuelle inverse ; en effet, les problemes de '_GetServeurByName(...)'       */ \
                                        /* et de '_RemoteCommande(...)' en ce qui concerne le numero de port se compensent ainsi     */ \
                                        /* que je l'ai decouvert le 19990824163922.                                                  */ \
                                                                                                                                        \
                    EGAL(stream_de_communication                                                                                        \
                        ,_RemoteCommande(ADRESSE(machine_eventuellement_convertie)                                                      \
                                        ,port                                                                                           \
                                        ,login_eventuellement_converti,passwd_eventuellement_converti                                   \
                                        ,commande_eventuellement_convertie                                                              \
                                        ,COND(IFNE(stream_de_signalisation,ADRESSE_NON_DEFINIE)                                         \
                                             ,ADRESSE(stream_de_signalisation)                                                          \
                                             ,ADRESSE_NON_DEFINIE                                                                       \
                                              )                                                                                         \
                                         )                                                                                              \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Lancement a distance d'une commande. ATTENTION, on notera l'hyopthese de nullite de       */ \
                                        /* de 'ADRESSE_NON_ENCORE_DEFINIE' qui est faite ici ; celle-ci est validee dans             */ \
                                        /* 'v $xcp/Konstantes$K' et 'v $xcg/remote.01$K RemoteCommande' (ou elle est utilisee...).   */

DEFV(Extern,DEFV(vrai_Int_de_base,shutdown()));
#define   ShutdownStream_RECEPTION                                                                                                      \
                    ZERO
#define   ShutdownStream_EMISSION                                                                                                       \
                    UN
#define   ShutdownStream_EMISSION_RECEPTION                                                                                             \
                    DEUX
#define   ShutdownStream(stream,mode)                                                                                                   \
                    shutdown(stream,mode)                                                                                               \
                                        /* Pour couper unilateralement un "stream" (avec les 3 codes possibles).                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   G E S T I O N   D E   F I C H I E R S  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,errno));
#define   CodeDErreurSystemeCourant                                                                                                     \
                    errno                                                                                                               \
                                        /* Recuperation du code d'erreur courant ('v /usr/include/asm/errno.h').                     */

TypedefP(File,FILE)
TypedefS(A___File,File)
                                        /* Definition de la structure definissant un fichier et a utiliser pour les acces aux        */
                                        /* fichiers par la fonction 'Fopen(...)'. En ce qui concerne les "stream"s standards, on     */
                                        /* pourra, par exemple, ecrire :                                                             */
                                        /*                                                                                           */
                                        /*                  DEFV(File,POINTERs(stream));                                             */
                                        /*                  (...);                                                                   */
                                        /*                  EGAL(stream,STREAM_IN);                                                  */
                                        /*                  (...);                                                                   */
                                        /*                  EGAL(stream,STREAM_OUT);                                                 */
                                        /*                  (...);                                                                   */
                                        /*                  EGAL(stream,STREAM_ERREUR);                                              */
                                        /*                                                                                           */
                                        /* Le type 'FILE' est defini dans 'v /usr/include/stdio$h typedef.struct._IO_FILE.FILE;'     */
                                        /* '_IO_FILE' etant lui-meme defini dans 'v /usr/include/libio$h struct._IO_FILE' (note le   */
                                        /* 20131004180504 sur '$LACT19'...).                                                         */

#define   cFile(x)                                                                                                                      \
                    CAST(File,x)
#define   cpFile(x)                                                                                                                     \
                    ptCAST(File,x)
                                        /* Cast "File".                                                                              */

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#    TestADef  BUG_SYSTEME_Linux_Sync_tres_lent                                                                                         \
                                        /* Ceci a ete introduit le 20121024134358. En effet a cette date, j'observe que l'execution  */ \
                                        /* de '$xrr/N_corps.11$X' pour generer 'v $xiak/NCOR.x1$R16' est beaucoup plus lente sur     */ \
                                        /* '$LACT19' que sur '$LACT18' ; voici le resulat des 'time's correspondants :               */ \
                                        /*                                                                                           */ \
                                        /*                  LACT18  : 91.117u  1.592s 1:52.95 82.0%      0+0k 0+0io         110pf+0w */ \
                                        /*                  LACT19  : 49.790u 23.600s 3:28.12 35.2%      0+0k 2312+675848io   8pf+0w */ \
                                        /*                                                                                           */ \
                                        /* ou l'on voit que le calcul est deux fois plus rapide (49.790/91.117), mais qu'il y a un   */ \
                                        /* nombre tres eleve d'entrees-sorties. Tout venait du 'CALZ(Sync(...))' contenu dans la     */ \
                                        /* fonction v $xig/fonct$vv$FON Fmise_a_jour_du_systeme_de_gestion_de_fichiers'...           */ \
                                        /*                                                                                           */ \
                                        /* Il aurait ete possible d'inhiber cela uniquement sur '$LACT19', mais d'une part l'appel   */ \
                                        /* a 'Sync(...)' n'a plus d'utilite aujourd'hui. D'autre part cela pourrait se retrouver     */ \
                                        /* sur d'autres MACHINEs (et d'ailleurs aux environs du 20121024171657 des tests ont montre  */ \
                                        /* que c'est cela qui etait, sur 'porte-brancion.polytechnique.fr', la cause des lenteurs    */ \
                                        /* que j'avais observees dans les entrees-sorties ('v $Fmachines ENTREES.SORTIES.LENTES')... */ \
                                        /*                                                                                           */ \
                                        /* Le 'time' a ensuite, apres l'introduction de ce bug, donne les valeurs suivantes :        */ \
                                        /*                                                                                           */ \
                                        /*                  LACT18  : 85.553u  1.496s 1:42.88 84.6%      0+0k 0+0io         102pf+0w */ \
                                        /*                  LACT19  : 50.550u  0.360s 0:51.49 98.8%      0+0k 0+675840io      0pf+0w */ \
                                        /*                                                                                           */ \
                                        /* ce qui est quand meme plus logique. On voit de plus qu'il y a aussi un gain sur '$LACT18' */ \
                                        /* (mais moins impressionnant que sur '$LACT19'...).                                         */ \
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )

#if       (         ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
           )
#    TestADef  BUG_SYSTEME_SGIND5_Sync_time_out                                                                                         \
                                        /* Dans ce cas il y a un probleme ('v $Dbugs/SGIND524$D/IRIX$D/$Fnota fr61125'). En effet,   */ \
                                        /* la fonction 'sync(...)' une fois sur N ne rend pas la main tres vite mais ou au bout de   */ \
                                        /* plusieurs secondes ; cette duree, ainsi que le nombre 'N' semble etre fonction de la      */ \
                                        /* taille de l'executable referencant 'sync(...)' et aussi de la taille du dernier (des      */ \
                                        /* derniers ?) fichier ecrit. ATTENTION, malheureusement, il est impossible d'automatiser    */ \
                                        /* la gestion de 'BUG_SYSTEME_SGIND5_Sync_time_out' par '$xcp/Bugs$K' ; en effet, on         */ \
                                        /* pourrait croire qu'il suffirait de boucler un certain nombre de fois sur 'sync(...)'      */ \
                                        /* dans le programme '$xcp/Bugs$K' et de chronometrer la duree de l'execution de cette       */ \
                                        /* fonction mais alors sur les SYSTEMEs en cause, la duree du pre-processing '$xcc/cpp$Z'    */ \
                                        /* serait augmentee considerablement, ce qui n'est pas tolerable...                          */
#Aif      (         ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
           )
#Eif      (         ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE == 602000000))                                             \
           )

#if       (         (! defined(BUG_SYSTEME_SGIND5_Sync_time_out))                                                                       \
           )
DEFV(Extern,DEFV(Void,sync()));
#    define    Sync                                                                                                                     \
                         sync                                                                                                           \
                                        /* Mise a jour du systeme de gestion de fichier sur les disques.                             */
#Aif      (         (! defined(BUG_SYSTEME_SGIND5_Sync_time_out))                                                                       \
           )
#Eif      (         (! defined(BUG_SYSTEME_SGIND5_Sync_time_out))                                                                       \
           )

DEFV(Extern,DEFV(vrai_Int_de_base,pipe()));
#define   Pipe(file_descriptor)                                                                                                         \
                    pipe(file_descriptor)                                                                                               \
                                        /* Definition du createur de "pipe".                                                         */

DEFV(Extern,DEFV(vrai_Int_de_base,fcntl()));
#define   Fflags_complets(file_descriptor)                                                                                              \
                    fcntl(file_descriptor,F_GETFL)
#define   Fflags(file_descriptor)                                                                                                       \
                    ETLO(Fflags_complets(file_descriptor),OPEN_MODE)
                                        /* Acces aux "flags" d'un fichier ouvert ou ferme (voir le fichier 'v $xtc/files.11$c').     */
                                        /* Le 20150310162758 fut introduit le 'OPEN_MODE' apres que j'ai decouvert a cette date      */
                                        /* qu'il y avait de plus le bit 'v /usr/include/asm-generic/fcntl$h O_LARGEFILE' (egal       */
                                        /* a '0x8000, soit 100000 en octal) positionne...                                            */
                                        /*                                                                                           */
                                        /* La procedure 'Fflags_complets(...)' a ete introduite le 20191118154559 pour               */
                                        /* 'v $xcg/TestRedirection.01$K$INUTILE Fflags_complets'...                                  */

TypedefP(FileStatus,STRU(stat))
                                        /* Introduit le 20060520115459...                                                            */
DEFV(Extern,DEFV(vrai_Int_de_base,stat()));
#define   Feta(nom_du_fichier,file_status)                                                                                              \
                    stat(Cara(nom_du_fichier),ADRESSE(file_status))                                                                     \
                                        /* Acces a l'etat d'un fichier ouvert ou ferme.                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, a compter du 20060520121632 il peut s'agir en fait de 'stat64(...)'...         */
DEFV(Extern,DEFV(vrai_Int_de_base,fstat()));
#define   Fsta(file_descriptor,file_status)                                                                                             \
                    fstat(file_descriptor,ADRESSE(file_status))                                                                         \
                                        /* Acces a l'etat d'un fichier deja ouvert. ATTENTION : cette fonction est a utiliser avec   */ \
                                        /* 'Open(...)' et 'Clos(...)'.                                                               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, a compter du 20060520121632 il peut s'agir en fait de 'fstat64(...)'...        */

DEFV(Extern,DEFV(vrai_Int_de_base,chmod()));
#define   Chmod(nom_du_fichier,mode)                                                                                                    \
                    chmod(nom_du_fichier,CAST(mode_t,mode))                                                                             \
                                        /* Changement du mode d'un fichier (introduit le 20110531132258).                            */
DEFV(Extern,DEFV(vrai_Int_de_base,fchmod()));
#define   Fchmod(file_descriptor,mode)                                                                                                  \
                    fchmod(file_descriptor,CAST(mode_t,mode))                                                                           \
                                        /* Changement du mode d'un fichier deja ouvert. ATTENTION : cette fonction est  a utiliser   */ \
                                        /* avec 'Open(...)' et 'Clos(...)'.                                                          */

@include  <utime.h>
DEFV(Extern,DEFV(vrai_Int_de_base,utime()));
#define   Utime(nom_du_fichier,dates)                                                                                                   \
                    utime(Cara(nom_du_fichier),ADRESSE(dates))                                                                          \
                                        /* Changement des dates de dernier acces et de derniere modification d'un fichier.           */

DEFV(Extern,DEFV(vrai_Int_de_base,creat()));
#define   Crea(nom_du_fichier,mode_de_creation)                                                                                         \
                    creat(Cara(nom_du_fichier),mode_de_creation)                                                                        \
                                        /* Creation d'un fichier.                                                                    */
DEFV(Extern,DEFV(vrai_Int_de_base,rename()));
#define   Reno(ancien_nom,nouveau_nom)                                                                                                  \
                    rename(Cara(ancien_nom),Cara(nouveau_nom))                                                                          \
                                        /* Changement d'un nom (de fichier ou de directory)...                                       */

                                        /* ATTENTION : la fonction 'defined(...)' n'est pas utilisee ci-apres a cause du '@' ; on    */
                                        /* n'ecrit donc pas :                                                                        */
                                        /*                                                                                           */
                                        /*                  @if       (         (! defined(SYSTEME_CRAY2_UNICOS_SCC))             \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP1_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP2_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP4_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_ES9000_AIX_CC))                \  */
                                        /*                            &&        (! defined(SYSTEME_RS6000_AIX_CC))                \  */
                                        /*                             )                                                             */
                                        /*                       (...)                                                               */
                                        /*                  @Aif      (         (! defined(SYSTEME_CRAY2_UNICOS_SCC))             \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP1_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP2_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP4_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_ES9000_AIX_CC))                \  */
                                        /*                            &&        (! defined(SYSTEME_RS6000_AIX_CC))                \  */
                                        /*                             )                                                             */
                                        /*                  @Eif      (         (! defined(SYSTEME_CRAY2_UNICOS_SCC))             \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP1_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP2_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_CRAYYMP4_UNICOS_SCC))          \  */
                                        /*                            &&        (! defined(SYSTEME_ES9000_AIX_CC))                \  */
                                        /*                            &&        (! defined(SYSTEME_RS6000_AIX_CC))                \  */
                                        /*                             )                                                             */
                                        /*                                                                                           */
                                        /* Ce qui suit est maintenant en commentaire, car en effet, l'adjonction de la PASSE 6       */
                                        /* dans le pre-processing permet de simplifier les choses. On trouvait donc autrefois :      */
                                        /*                                                                                           */
                                        /*                  @ifndef   SYSTEME_CRAY2_UNICOS_SCC                                       */
                                        /*                                                                                           */
                                        /*                  @    ifndef    SYSTEME_CRAYYMP1_UNICOS_SCC                               */
                                        /*                                                                                           */
                                        /*                  @         ifndef    SYSTEME_CRAYYMP2_UNICOS_SCC                          */
                                        /*                                                                                           */
                                        /*                  @              ifndef    SYSTEME_CRAYYMP4_UNICOS_SCC                     */
                                        /*                                                                                           */
                                        /*                  @                   ifndef    SYSTEME_RS6000_AIX_CC                      */
                                        /*                                                                                           */
DEFV(Extern,DEFV(vrai_Int_de_base,open()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <fcntl.h>'.  */
                                        /*                                                                                           */
                                        /*                  @                   Aifndef   SYSTEME_RS6000_AIX_CC                      */
                                        /*                  @                   Eifndef   SYSTEME_RS6000_AIX_CC                      */
                                        /*                                                                                           */
                                        /*                  @              Aifndef   SYSTEME_CRAYYMP4_UNICOS_SCC                     */
                                        /*                                                                                           */
                                        /* ceci, est en prevision de la prochaine release du compilateur 'scc' (nous sommes          */
                                        /* aujourd'hui le 19901031...).                                                              */
                                        /*                                                                                           */
                                        /*                  @              Eifndef   SYSTEME_CRAYYMP4_UNICOS_SCC                     */
                                        /*                                                                                           */
                                        /*                  @         Aifndef   SYSTEME_CRAYYMP2_UNICOS_SCC                          */
                                        /*                                                                                           */
                                        /* ceci, est en prevision de la prochaine release du compilateur 'scc' (nous sommes          */
                                        /* aujourd'hui le 19901031...).                                                              */
                                        /*                                                                                           */
                                        /*                  @         Eifndef   SYSTEME_CRAYYMP2_UNICOS_SCC                          */
                                        /*                                                                                           */
                                        /*                  @    Aifndef   SYSTEME_CRAYYMP1_UNICOS_SCC                               */
                                        /*                                                                                           */
                                        /* ceci, est en prevision de la prochaine release du compilateur 'scc' (nous sommes          */
                                        /* aujourd'hui le 19901031...).                                                              */
                                        /*                                                                                           */
                                        /*                  @    Eifndef   SYSTEME_CRAYYMP1_UNICOS_SCC                               */
                                        /*                                                                                           */
                                        /*                  @Aifndef  SYSTEME_CRAY2_UNICOS_SCC                                       */
                                        /*                                                                                           */
                                        /* ceci, est en prevision de la prochaine release du compilateur 'scc' (nous sommes          */
                                        /* aujourd'hui le 19901031...).                                                              */
                                        /*                                                                                           */
                                        /*                  @Eifndef  SYSTEME_CRAY2_UNICOS_SCC                                       */
                                        /*                                                                                           */
#define   Open(nom_du_fichier,file_status_flags)                                                                                        \
                    open(Cara(nom_du_fichier),file_status_flags)                                                                        \
                                        /* Ouverture d'un fichier. Le 'file_status_flags' prend une des valeurs suivantes :          */ \
                                        /*                                                                                           */ \
                                        /*                  OPEN_READ,                                                               */ \
                                        /*                  OPEN_WRITE,                                                              */ \
                                        /*                  OPEN_READ_AND_WRITE,                                                     */ \
                                        /*                  OPEN_READ_SANS_ATTENTE_EN_LECTURE_SI_LE_FICHIER_EST_VIDE,                */ \
                                        /*                  OPEN_READ_AND_WRITE_SANS_ATTENTE_EN_LECTURE_SI_LE_FICHIER_EST_VIDE,      */ \
                                        /*                                                                                           */ \
                                        /* et cette fonction renvoie un descripteur de fichier qui est un 'vrai_Int_de_base'.        */
#define   OpenNew(nom_du_fichier,file_status_flags,mode_de_creation)                                                                    \
                    open(Cara(nom_du_fichier),file_status_flags,mode_de_creation)                                                       \
                                        /* Ouverture d'un nouveau fichier. Le 'file_status_flags' prend la valeur suivante :         */ \
                                        /*                                                                                           */ \
                                        /*                  OPEN_READ_AND_WRITE_D_UN_FICHIER_INEXISTANT.                             */ \
                                        /*                                                                                           */ \
                                        /* Ceci fut introduit le 20070710110408 pour 'v $xig/fonct$vv$FON 20070710105610'...         */

DEFV(Extern,DEFV(File,POINTERs(fopen())));
#define   Fopen(nom_du_fichier,file_status_flags)                                                                                       \
                    fopen(Cara(nom_du_fichier),file_status_flags)                                                                       \
                                        /* Ouverture d'un fichier. Le 'file_status_flags' prend une des valeurs suivantes :          */ \
                                        /*                                                                                           */ \
                                        /*                  file_Rmode,                                                              */ \
                                        /*                  file_Wmode,                                                              */ \
                                        /*                  file_Amode,                                                              */ \
                                        /*                  file_RPmode,                                                             */ \
                                        /*                  file_WPmode,                                                             */ \
                                        /*                  file_APmode,                                                             */ \
                                        /*                                                                                           */ \
                                        /* et cette fonction renvoie un descripteur de fichier qui est un 'File'.                    */
#define   DESCRIPTEUR_D_UN_FICHIER_INEXISTANT                                                                                           \
                    cpFile(ZERO)                                                                                                        \
                                        /* Valeur du pointeur renvoye par 'fopen(...)' pour un fichier inexistant...                 */

DEFV(Extern,DEFV(vrai_Int_de_base,read()));
#define   Read(file_descriptor,adresse_du_buffer,nombre_d_octets)                                                                       \
                    read(file_descriptor,Cara(adresse_du_buffer),nombre_d_octets)                                                       \
                                        /* Definition de la fonction de lecture sans format. ATTENTION : cette fonction est a        */ \
                                        /* utiliser avec 'Open(...)' et 'Clos(...)'.                                                 */
DEFV(Extern,DEFV(vrai_Int_de_base,fscanf()));
#define   vrai_Fscan(file_descriptor,format_de_lecture,variable_unique)                                                                 \
                    fscanf(file_descriptor,Cara(format_de_lecture),variable_unique)
#define   Fscan(file_descriptor,format_de_lecture,variable_unique)                                                                      \
                    vrai_Fscan(file_descriptor,format_de_lecture,ADRESSE(variable_unique))
                                        /* Definition de la fonction de lecture avec format d'une seule variable (ceci est une       */
                                        /* restriction par rapport aux possibilites de 'fscanf(...)' mais permet d'avoir un nombre   */
                                        /* constant d'arguments). ATTENTION : cette fonction est a utiliser avec 'Fopen(...)' et     */
                                        /* 'FClos(...)'.                                                                             */
                                        /*                                                                                           */
                                        /* La procedure 'vrai_Fscan(...)' a ete introduite le 19991123172246 lors de l'introduction  */
                                        /* des codes non numerique dans 'v $xig/fonct$vv$FON vrai_Fscan'.                            */

#if       (         (defined(SYSTEME_APC_LinuxDebian))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxMandrake))                                                                                \
          ||        (defined(SYSTEME_APC_LinuxRedHat))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxUbuntu))                                                                                  \
           )
                                        /* ATTENTION : on ne peut pas etre plus selectif (en particulier en testant la valeur de     */
                                        /* 'nNOYAU_RELEASE') car, en effet, 'nNOYAU_RELEASE' est utilise a la compilation et non pas */
                                        /* a l'execution. Or, malheureusement, la compilation et l'execution peuvent avoir lieu sur  */
                                        /* des MACHINEs 'SYSTEME_APC_Linux' de SYSTEMEs completement differents. On notera au        */
                                        /* passage que pour bien faire ce "bug" ne devrait etre "active" que pour des versions du    */
                                        /* noyau du type "204??????" (voir ulterieures lorsqu'elles existeront...). Ainsi, pour      */
                                        /* simplifier, ce "bug" est donc "active" pour tous les 'SYSTEME_APC_Linux'.                 */

#    TestADef  BUG_SYSTEME_APC_Linux_trous_zeros_dans_des_fichiers_NFS_lors_de_Writ                                                     \
                                        /* Doit-on verifier par defaut dans 'Fstore_fichier_non_formatte(...)' que le contenu d'un   */ \
                                        /* fichier apres son ecriture est bien identique a ce qui devait etre ecrit ?                */ \
                                        /*                                                                                           */ \
                                        /* Ceci a ete introduit le 20020430164907 a cause de problemes graves rencontres             */ \
                                        /* sur '$CMAP??' lors de la generation de la sequence :                                      */ \
                                        /*                                                                                           */ \
                                        /*                  xivPdf 14 1 / 028237_028748                                              */ \
                                        /*                                                                                           */ \
                                        /* ou des blocs de '\000' apparaissent dans les fichiers '$xiim/REFL.Wb.????', la longueur   */ \
                                        /* de ces blocs etant un multiple de la taille des blocs declares pour le montage 'NFS'      */ \
                                        /* supportant '$xiim'. Bien que ce probleme semble ne se rencontrer qu'avec des fichiers     */ \
                                        /* de type 'NFS' supportes par '$CMAP31' et pour des clients 'Linux' d'une certaine version  */ \
                                        /* du noyau, il est difficile (voire dangereux car, en effet, on risquerait ainsi d'exclure  */ \
                                        /* des MACHINEs a probleme...) d'etre plus specifique qu'en testant '$SYSTEME'.              */ \
                                        /*                                                                                           */ \
                                        /* Ce probleme est donc traite dans le fichier 'v $xig/fonct$vv$FON 20020429105701', mais    */ \
                                        /* aussi dans 'v $Falias_reference 20020502151257'...                                        */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxMandrake))                                                                                \
          ||        (defined(SYSTEME_APC_LinuxRedHat))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxUbuntu))                                                                                  \
           )
#Eif      (         (defined(SYSTEME_APC_LinuxDebian))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxMandrake))                                                                                \
          ||        (defined(SYSTEME_APC_LinuxRedHat))                                                                                  \
          ||        (defined(SYSTEME_APC_LinuxUbuntu))                                                                                  \
           )

DEFV(Extern,DEFV(vrai_Int_de_base,write()));
#define   Writ(file_descriptor,adresse_du_buffer,nombre_d_octets)                                                                       \
                    write(file_descriptor,Cara(adresse_du_buffer),nombre_d_octets)                                                      \
                                        /* Definition de la fonction d'ecriture. ATTENTION : cette fonction est a utiliser avec      */ \
                                        /* 'Open(...)' et 'Clos(...)'.                                                               */

DEFV(Extern,DEFV(vrai_Int_de_base,fflush()));
#define   Fflush(file_descriptor)                                                                                                       \
                    fflush(file_descriptor)                                                                                             \
                                        /* "Vidage" des buffers d'un fichier ouvert par 'Fopen(...)' ; ceci est en particulier       */ \
                                        /* utilise avec 'stdout' et 'stderr', afin de garantir l'ordre et la sequentialite des       */ \
                                        /* sorties faites vers eux...                                                                */

DEFV(Extern,DEFV(vrai_Int_de_base,close()));
#define   Clos(file_descriptor)                                                                                                         \
                    close(file_descriptor)                                                                                              \
                                        /* Fermeture d'un fichier ouvert par 'Open(...)'.                                            */
DEFV(Extern,DEFV(vrai_Int_de_base,fclose()));
#define   Fclos(file_descriptor)                                                                                                        \
                    fclose(file_descriptor)                                                                                             \
                                        /* Fermeture d'un fichier ouvert par 'Fopen(...)'.                                           */

DEFV(Extern,DEFV(vrai_Int_de_base,unlink()));
#define   Unlink(nom_du_fichier)                                                                                                        \
                    unlink(Cara(nom_du_fichier))                                                                                        \
                                        /* Destruction definitive d'un fichier.                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        Q U E L Q U E S   V A R I A B L E S   D ' E N V I R O N N E M E N T   S T A N D A R D S  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   Gvar_iHOTE                                                                                                                    \
                    Gvar("iHOTE")                                                                                                       \
                                        /* Recuperation de l'adresse 'IP' de la machine hote (introduit le 20070522151828 pour       */
                                        /* etre utilise dans 'v $xig/defin_2$vv$DEF Gvar_iHOTE').                                    */
#define   Gvar_sHOTE                                                                                                                    \
                    Gvar("sHOTE")                                                                                                       \
                                        /* Recuperation du nom symbolique de la machine hote...                                      */
#define   Gvar_mHOTE                                                                                                                    \
                    Gvar("mHOTE")
#define   Gvar_vCOMPUTER                                                                                                                \
                    Gvar("vCOMPUTER")
#define   Gvar_mHOTE_Force                                                                                                              \
                    Gvar("mHOTE_Force")
#define   Gvar_amHOTE                                                                                                                   \
                    Gvar("amHOTE")
                                        /* Quelques definitions introduites le 20110531105919 pour 'v $xcg/PhaseCrit.01$K mHOTE'...  */
#define   Gvar_vCOMPUTERd                                                                                                               \
                    GvarDefaut("vCOMPUTERd","vCOMPUTERd_NonDefini")                                                                     \
                                        /* Recuperation du vrai nom de la machine hote (introduit le 20070420112557)...              */
#define   Gvar_HOST                                                                                                                     \
                    GvarDefaut("HOST","HOST_NonDefini")                                                                                 \
                                        /* Recuperation du vrai nom de la machine hote (introduit le 20070420120642)...              */
#define   Gvar_SYSTEME                                                                                                                  \
                    Gvar("SYSTEME")                                                                                                     \
                                        /* Recuperation du type de 'SYSTEME' hote...                                                 */

#define   Gvar_INTERACTIF                                                                                                               \
                    GvalDefaut("INTERACTIF",NEXIST)
#define   LE_MODE_EST_INTERACTIF                                                                                                        \
                    PRESENT(Gvar_INTERACTIF)
#define   LE_MODE_N_EST_PAS_INTERACTIF                                                                                                  \
                    ABSENT(Gvar_INTERACTIF)
                                        /* Recuperation du mode interactif ou pas (introduit le 20070302090750...).                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   U N I X   ( C O M M A N D E S   S Y S T E M E )  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,system()));
#define   SYSTEM(commande)                                                                                                              \
                    system(Cara(commande))                                                                                              \
                                        /* Cette fonction intermediaire est introduite afin de favoriser la portabilite. On notera   */ \
                                        /* que le 'Cara(...)' a ete introduit a cause des SYSTEMEs 'SYSTEME_SGIND?08_IRIX_CC' et     */ \
                                        /* 'SYSTEME_SGIND?24_IRIX_CC'...                                                             */

#define   EXECUTION_D_UN_FICHIER_SOUS_SH(nom_du_fichier)                                                                                \
                    EGAs(chain_Aconcaten2(". ",nom_du_fichier))                                                                         \
                                        /* Introduit le 20061225172208 pour 'v $xci/genere$K EXECUTION_D_UN_FICHIER_SOUS_SH'...      */

#define   DECALAGE_DES_CODES_D_ERREUR_SOUS_SH                                                                                           \
                    NBITOC                                                                                                              \
                                        /* Introduit le 20230406105959...                                                            */

#define   EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(suite_de_commandes)                                                                \
                    Bblock                                                                                                              \
                    CALS(FgEXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(suite_de_commandes));                                             \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$SH' mis sous cette forme le 20221128102945      */ \
                                        /* afin de reduire la taille des '$c's et des '$X's...                                       */
#define   gEXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(suite_de_commandes)                                                               \
                    Bblock                                                                                                              \
                    DEFV(CHAR,INIC(POINTERc(suite_courante_de_commandes_sous_SH),suite_de_commandes));                                  \
                                        /* Generation de la suite courante de commandes.                                             */ \
                                                                                                                                        \
                    Test(IL_FAUT(editer_les_commandes_avant_execution))                                                                 \
                         Bblock                                                                                                         \
                         CAL3(Prme1("Commande[s]Secondaire[s]=%s\n",suite_courante_de_commandes_sous_SH));                              \
                                        /* Edition de la commande courante (dite "secondaire"...) avant son execution.               */ \
                                        /*                                                                                           */ \
                                        /* On notera le remplacement de "CommandeSecondaire" par "Commande[s]Secondaire[s]" le       */ \
                                        /* 20041020112826 car, en effet, il n'y a qu'une seule "commande primaire" alors qu'il       */ \
                                        /* peut y avoir plusieurs "commandes secondaires"...                                         */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    EGAL(CODE_ERREUR,SYSTEM(suite_courante_de_commandes_sous_SH));                                                      \
                                        /* Execution de la suite courante de commandes.                                              */ \
                                        /*                                                                                           */ \
                                        /* Le positionnement de 'CODE_ERREUR' a ete introduit le 20230405173006 suite a              */ \
                                        /* la modification importante 'v $xil/defi_c1$vv$DEF 20230405140116'...                      */ \
                                                                                                                                        \
                    Test(IL_Y_A_ERREUR(CODE_ERREUR));                                                                                   \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("une suite de commandes sous '$SH' s'est mal executee");                                          \
                         CAL1(Prer0("cette suite de commandes est :\n"));                                                               \
                         CAL1(Prer1("%s\n",suite_courante_de_commandes_sous_SH));                                                       \
                         CAL1(Prer0("\n"));                                                                                             \
                                        /* La "fermeture" du message par un dernier "\n" a ete introduite le 20040115114013 suite    */ \
                                        /* aux modifications 'v $xcg/fichier_etat$K 20040115101933'...                               */ \
                                                                                                                                        \
                         EGAL(CODE_ERREUR,SLRS(CODE_ERREUR,DECALAGE_DES_CODES_D_ERREUR_SOUS_SH));                                       \
                                        /* Voir 'v $xil/defi_c1$vv$DEF 20230406095735' pour expliquer ce decalage...                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                                        /* ATTENTION, avant le 20050102173617, il y avait ici par erreur :                           */ \
                                        /*                                                                                           */ \
                                        /*                  CALS(Free(suite_courante_de_commandes_sous_SH));                         */ \
                                        /*                                                                                           */ \
                                        /* en effet, il ne serait necessaire que si 'suite_courante_de_commandes_sous_SH' etait      */ \
                                        /* definie via une allocation memoire (par exemple, via un 'chain_Aconcaten?(...)'), ce      */ \
                                        /* qui n'est pas le cas ici...                                                               */ \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$SH'.                                            */

#define   LANCEMENT_D_UNE_COMMANDE_SOUS_SH_DE_BASE                                                                                      \
                    C_VIDE
#define   LANCEMENT_D_UNE_COMMANDE_SOUS_SH                                                                                              \
                    EGAs(chain_Aconcaten2(Gvar("SH")," -c "))
                                        /* Pour lancer une commande sous '$SH'. Cette definition a ete introduite le 20091021094602  */
                                        /* pour 'v $xcg/parallele.1N.K LANCEMENT_D_UNE_COMMANDE_SOUS_SH'...                          */
                                        /*                                                                                           */
                                        /* Le 20120115105031 'C_VIDE' a ete remplace par l'acces a '$SH' afin d'etre sur du "shell"  */
                                        /* qui sera utilise et d'avoir ainsi acces a la commande 'nice'. En effet, 'C_VIDE' donnait  */
                                        /* acces a '/bin/sh' qui est en fait '/bin/dash' ; or ce dernier ne dispose pas de 'nice'.   */
                                        /* Seul '/bin/bash' en dispose d'ou l'utilisation de '$SH' ci-dessus...                      */
                                        /*                                                                                           */
                                        /* Le 20120115112614 fut introduit 'LANCEMENT_D_UNE_COMMANDE_SOUS_SH_DE_BASE' car, c'est     */
                                        /* en effet utile pour 'v $xcg/parallele.1N$K compatibilite_20120115'...                     */
#define   CHANGEMENT_DE_PRIORITE_D_UNE_COMMANDE_SOUS_SH                                                                                 \
                    "nice -n "                                                                                                          \
                                        /* Pour changer de priorite sous '$SH' (introduit le 20120115105311).                        */

#define   LANCEMENT_D_UNE_COMMANDE_SOUS_CSH                                                                                             \
                    EGAs(chain_Aconcaten2(Gvar("CSH")," -c "))                                                                          \
                                        /* Pour lancer une commande sous '$CSH'. Cette definition a ete deplacee le 20050102162501   */ \
                                        /* depuis 'v $xig/fonct$vv$DEF'.                                                             */
#define   CHANGEMENT_DE_PRIORITE_D_UNE_COMMANDE_SOUS_CSH                                                                                \
                    "nice +"                                                                                                            \
                                        /* Pour changer de priorite sous '$CSH' (introduit le 20120115105311).                       */

#define   PERMETTRE_UN_USAGE_NORMAL_DE_Mor                                                                                              \
                    "PasDe_stty= ; export PasDe_stty ; "                                                                                \
                                        /* Afin de resoudre le probleme evoque dans 'v $Fperipheriques 20030317173500'. Ceci a ete   */ \
                                        /* introduit le 20030317215230 dans 'v $xig/fonct$vv$DEF' et deplace ici le 20050102162501.  */

#define   FORCER_LE_MODE_NON_INTERACTIF                                                                                                 \
                    "NonInteractif= ; export NonInteractif ; "                                                                          \
                                        /* Afin de permettre de forcer le mode non interactif. Cela fut introduit le 20060119155733  */ \
                                        /* suite a un probleme rencontre sur '$LACT15' ou la commande '$xci/neutre$X' fut lancee     */ \
                                        /* avec l'option "Versions=VRAI" ('v $Dhistory/LACT15$D/20060119162208 20060119142234'),     */ \
                                        /* puis fut  abortee alors que '$FCshrc' etait dans la phase critique de '$FsavehistS' dans  */ \
                                        /* laquelle il etait entre se croyant en mode '$INTERACTIF' ('v $FCshrc 20000224163431')...  */

#define   EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_CSH(suite_de_commandes)                                                               \
                    Bblock                                                                                                              \
                    CALS(FgEXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_CSH(suite_de_commandes));                                            \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$CSH' mis sous cette forme le 20221128102945     */ \
                                        /* afin de reduire la taille des '$c's et des '$X's...                                       */
#define   gEXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_CSH(suite_de_commandes)                                                              \
                    Bblock                                                                                                              \
                    DEFV(CHAR,INIC(POINTERc(suite_courante_de_commandes_sous_CSH)                                                       \
                                           ,chain_Aconcaten4(PERMETTRE_UN_USAGE_NORMAL_DE_Mor                                           \
                                                            ,FORCER_LE_MODE_NON_INTERACTIF                                              \
                                                            ,LANCEMENT_D_UNE_COMMANDE_SOUS_CSH                                          \
                                                            ,suite_de_commandes                                                         \
                                                             )                                                                          \
                                   )                                                                                                    \
                         );                                                                                                             \
                                        /* Generation de la suite courante de commandes.                                             */ \
                                                                                                                                        \
                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(suite_courante_de_commandes_sous_CSH);                                   \
                                        /* Execution de la suite courante de commandes.                                              */ \
                                                                                                                                        \
                    CALZ_FreCC(suite_courante_de_commandes_sous_CSH);                                                                   \
                                        /* Liberation de l'espace contenant la suite courante de commandes.                          */ \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$CSH' (introduite le 20050102162501).            */

#define   EXECUTION_D_UNE_COMMANDE_AVEC_ARGUMENTS_SOUS_CSH(suite_de_commandes)                                                          \
                    Bblock                                                                                                              \
                    CALS(FgEXECUTION_D_UNE_COMMANDE_AVEC_ARGUMENTS_SOUS_CSH(suite_de_commandes));                                       \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$CSH' avec des arguments mis sous cette forme    */ \
                                        /* le 20221128102945 afin de reduire la taille des '$c's et des '$X's...                     */
#define   gEXECUTION_D_UNE_COMMANDE_AVEC_ARGUMENTS_SOUS_CSH(suite_de_commandes)                                                         \
                    Bblock                                                                                                              \
                    DEFV(CHAR,INIC(POINTERc(suite_courante_de_commandes_sous_CSH)                                                       \
                                           ,chain_Aconcaten6(PERMETTRE_UN_USAGE_NORMAL_DE_Mor                                           \
                                                            ,FORCER_LE_MODE_NON_INTERACTIF                                              \
                                                            ,LANCEMENT_D_UNE_COMMANDE_SOUS_CSH                                          \
                                                            ,C_APOSTROPHE                                                               \
                                                            ,suite_de_commandes                                                         \
                                                            ,C_APOSTROPHE                                                               \
                                                             )                                                                          \
                                   )                                                                                                    \
                         );                                                                                                             \
                                        /* Generation de la suite courante de commandes avec encadrement de la commande a            */ \
                                        /* par des 'K_VERITABLE_APOSTROPHE's lorsque celle-ci a des arguments comme c'est le         */ \
                                        /* cas avec 'v $xig/fonct$vv$DEF LibDynam",C_BLANC,NOM_DE_LA_COMMANDE'. Ceci a ete introduit */ \
                                        /* le 20220825171755 et differencie de 'EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_CSH(...)'    */ \
                                        /* le 20220825171755...                                                                      */ \
                                                                                                                                        \
                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(suite_courante_de_commandes_sous_CSH);                                   \
                                        /* Execution de la suite courante de commandes.                                              */ \
                                                                                                                                        \
                    CALZ_FreCC(suite_courante_de_commandes_sous_CSH);                                                                   \
                                        /* Liberation de l'espace contenant la suite courante de commandes.                          */ \
                    Eblock                                                                                                              \
                                        /* Execution d'une suite de commandes sous '$CSH' avec des arguments (introduite             */ \
                                        /* le 20220825171755).                                                                       */

#define   C_SH__REDIRECTION_FICHIER                                                                                                     \
                    EGAs(chain_Aconcaten3(C_BLANC,C_SUPERIEUR,C_BLANC))
#define   C_SH__REDIRECTION_PROGRAMME                                                                                                   \
                    EGAs(chain_Aconcaten3(C_BLANC,C_PIPE,C_BLANC))

#define   C_CSH__REDIRECTION_FICHIER                                                                                                    \
                    EGAs(chain_Aconcaten3(C_BLANC,C_SUPERIEUR,C_BLANC))
#define   C_CSH__REDIRECTION_ERREUR_FICHIER                                                                                             \
                    EGAs(chain_Aconcaten4(C_BLANC,C_SUPERIEUR,C_ET,C_BLANC))
#define   C_CSH__REDIRECTION_PROGRAMME                                                                                                  \
                    EGAs(chain_Aconcaten3(C_BLANC,C_PIPE,C_BLANC))
#define   C_CSH__REDIRECTION_ERREUR_PROGRAMME                                                                                           \
                    EGAs(chain_Aconcaten4(C_BLANC,C_PIPE,C_ET,C_BLANC))
                                        /* Pour rediriger une entree-sortie vers un fichier ou un programme. Le 20101222085846       */
                                        /* furent introduites les redirections incluant les erreurs.                                 */
                                        /*                                                                                           */
                                        /* Le 20111117074059 fut faite la distinction entre '$SH' et '$CSH' d'ou les changements     */
                                        /* de nom. On notera que suivant que '$SH' est '/bin/sh' ou '/bin/bash', la syntaxe n'est    */
                                        /* pas la meme pour les erreurs :                                                            */
                                        /*                                                                                           */
                                        /*                  /bin/sh                                                                  */
                                        /*                                      1>        OK                                         */
                                        /*                                      2>        ERREUR                                     */
                                        /*                                                                                           */
                                        /*                  /bin/bash                                                                */
                                        /*                                      >         OK                                         */
                                        /*                                      &>        ERREUR                                     */
                                        /*                                                                                           */
                                        /* si je ne me trompe pas... Il est donc quasiment impossible de definir sans ambiguite      */
                                        /* 'C_SH__REDIRECTION_ERREUR_FICHIER' et 'C_SH__REDIRECTION_ERREUR_PROGRAMME'...             */
#define   PAS_D_ENTREES_SORTIES                                                                                                         \
                    GvarDefaut("nul","/dev/null")                                                                                       \
                                        /* Pseudo-peripherique sur lequel il ne se passe rien...                                     */
#define   COMMANDE_COPIE                                                                                                                \
                    "cp"                                                                                                                \
                                        /* Commande UNIX de copie d'un fichier (avec destruction de la copie                         */ \
                                        /* anterieure si elle existe...).                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   U N I X   ( E N T R E E S - S O R T I E S   S T A N D A R D S )  :                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Le symbole 'NO_UNIX_INTERFACE'                                                                                 */
/*                  permet de definir ou pas les definitions                                                                         */
/*                  des interfaces UNIX : on ne les fait pas                                                                         */
/*                  s'il est defini...                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifndef   NO_UNIX_INTERFACE
#    define    STREAM_IN                                                                                                                \
                         stdin                                                                                                          \
                                        /* Entree standard pour la fonction 'FPrint(...)'.                                           */
#    define    STREAM_OUT                                                                                                               \
                         stdout                                                                                                         \
                                        /* Sortie standard pour la fonction 'FPrint(...)'.                                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : reference dans 'v $xcc/cpp$Z STREAM_OUT'.                                     */
#    define    STREAM_ERREUR                                                                                                            \
                         stderr                                                                                                         \
                                        /* Erreur standard pour la fonction 'FPrint(...)'.                                           */

#    define    STANDARD_IN                                                                                                              \
                         ZERO                                                                                                           \
                                        /* Entree standard pour les fonctions 'Read(...)' et 'Writ(...)'.                            */
#    define    STANDARD_OUT                                                                                                             \
                         SUCC(STANDARD_IN)                                                                                              \
                                        /* Sortie standard pour les fonctions 'Read(...)' et 'Writ(...)'.                            */
#    define    STANDARD_ERREUR                                                                                                          \
                         SUCC(STANDARD_OUT)                                                                                             \
                                        /* Erreur standard pour les fonctions 'Read(...)' et 'Writ(...)'.                            */

#    define    STANDARD_IN_EST_UN_PIPE                                                                                                  \
                         IFEQ(Fflags(STANDARD_IN),OPEN_READ)                                                                            \
                                        /* Afin de pouvoir tester si 'STANDARD_IN' est un "pipe" (introduit le 20051117101713).      */
#    define    STANDARD_OUT_EST_UN_PIPE                                                                                                 \
                         IFNE(Fflags(STANDARD_OUT),OPEN_READ_AND_WRITE)                                                                 \
                                        /* Afin de pouvoir tester si 'STANDARD_OUT' est un "pipe" (introduit le 20051117101713).     */ \
                                        /*                                                                                           */ \
                                        /* Le 20210307181959, je note que 'STANDARD_OUT' peut etre aussi une redirection...          */
#    define    STANDARD_ERREUR_EST_UN_PIPE                                                                                              \
                         IFNE(Fflags(STANDARD_ERREUR),OPEN_READ_AND_WRITE)                                                              \
                                        /* Afin de pouvoir tester si 'STANDARD_ERREUR' est un "pipe" (introduit le 20051117101713).  */
#Aifndef  NO_UNIX_INTERFACE
#Eifndef  NO_UNIX_INTERFACE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   U N I X   ( G E S T I O N   D E   F I C H I E R S )  :                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Le symbole 'NO_UNIX_INTERFACE'                                                                                 */
/*                  permet de definir ou pas les definitions                                                                         */
/*                  des interfaces UNIX : on ne les fait pas                                                                         */
/*                  s'il est defini...                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   SEPARATEUR_DES_COMPOSANTES_D_UN_NOM                                                                                           \
                    K_POINT                                                                                                             \
                                        /* Separateur utilise pour separer les differentes composantes d'un nom. Ceci fut            */ \
                                        /* introduit le 20070423120018...                                                            */

#define   SEPARATEUR_DES_PATHS                                                                                                          \
                    K_SLASH                                                                                                             \
                                        /* Separateur utilise pour separer les differentes composantes d'un "path".                  */
#define   RACINE_DU_SYSTEME                                                                                                             \
                    SEPARATEUR_DES_PATHS                                                                                                \
                                        /* Nom de la racine du systeme de gestion de fichiers.                                       */
#define   DIRECTORY_COURANT                                                                                                             \
                    K_POINT                                                                                                             \
                                        /* Nom du directory courant.                                                                 */

#ifndef   NO_UNIX_INTERFACE
#    define    file_Rmode                                                                                                               \
                         "r"                                                                                                            \
                                        /* Mode "open for reading".                                                                  */
#    define    file_Wmode                                                                                                               \
                         "w"                                                                                                            \
                                        /* Mode "truncate or create for writing".                                                    */
#    define    file_Amode                                                                                                               \
                         "a"                                                                                                            \
                                        /* Mode "append" ("open for writing at end-of-file ou create for writing").                  */
#    define    file_RPmode                                                                                                              \
                         "r+"                                                                                                           \
                                        /* Mode "open for update" ("reading and writing").                                           */
#    define    file_WPmode                                                                                                              \
                         "w+"                                                                                                           \
                                        /* Mode "truncate or create for update".                                                     */
#    define    file_APmode                                                                                                              \
                         "a+"                                                                                                           \
                                        /* Mode "append" ("open or create for update at end-of-file").                               */
#    define    MODE_CREAT                                                                                                               \
                         PARE(0600)                                                                                                     \
                                        /* Mode de protection d'un fichier lors de sa creation.                                      */
#    define    FICHIER_VIDE                                                                                                             \
                         ZERO                                                                                                           \
                                        /* Nombre d'octets recuperes dans un fichier vide.                                           */

                                        /* ATTENTION, les definitions suivantes viennent de 'v /usr/include/sys/fcntl.h'.            */
                                        /*                                                                                           */
                                        /* Je le note le 20191118143107 (certainement tres tardivement...) que les definitions       */
                                        /* suivantes sont en fait sur 'v /usr/include/asm-generic/fcntl$h' en ce qui concerne en     */
                                        /* particulier '$LACT19' et '$LACT1A' (et que la aussi elles sont exprimees en octal et      */
                                        /* non pas en hexadecimal...).                                                               */

#    define    OPEN_READ                                                                                                                \
                         O_RDONLY                                                                                                       \
                                        /* Pour faire un open en lecture seule.                                                      */
#    define    OPEN_WRITE                                                                                                               \
                         O_WRONLY                                                                                                       \
                                        /* Pour faire un open en ecriture seule.                                                     */
#    define    OPEN_READ_AND_WRITE                                                                                                      \
                         O_RDWR                                                                                                         \
                                        /* Pour faire un open en lecture-ecriture.                                                   */
#    define    OPEN_MODE                                                                                                                \
                         O_ACCMODE                                                                                                      \
                                        /* Semble etre un masque pour {OPEN_READ,OPEN_WRITE,OPEN_READ_AND_WRITE} (introduit          */ \
                                        /* le 20150310162758).                                                                       */
#    define    OPEN_CREATION                                                                                                            \
                         O_CREAT                                                                                                        \
                                        /* Pour faire un open en mode "creer le fichier s'il n'existe pas" (introduit le             */ \
                                        /* 20070710104559).                                                                          */
#    define    OPEN_INEXISTANT                                                                                                          \
                         O_EXCL                                                                                                         \
                                        /* Pour faire un open uniquement si le fichier n'existe pas (introduit le 20070710104559).   */
#    define    OPEN_SANS_ATTENTE                                                                                                        \
                         O_NDELAY                                                                                                       \
                                        /* Pour faire un open sans attente si le fichier est vide (introduit le 20070710104559).     */
#    define    OPEN_LARGE_FILE                                                                                                          \
                         O_LARGEFILE                                                                                                    \
                                        /* Je ne sais pas tres bien ce qu'il signifie (introduit le 20191118143934)...               */
#    define    OPEN_READ_SANS_ATTENTE_EN_LECTURE_SI_LE_FICHIER_EST_VIDE                                                                 \
                         OUIN(OPEN_READ,OPEN_SANS_ATTENTE)                                                                              \
                                        /* Pour faire un open en lecture seule sans attente en lecture si le fichier est vide.       */
#    define    OPEN_READ_AND_WRITE_SANS_ATTENTE_EN_LECTURE_SI_LE_FICHIER_EST_VIDE                                                       \
                         OUIN(OPEN_READ_AND_WRITE,OPEN_SANS_ATTENTE)                                                                    \
                                        /* Pour faire un open en lecture-ecriture sans attente en lecture si le fichier est vide.    */
#    define    OPEN_READ_AND_WRITE_D_UN_FICHIER_INEXISTANT                                                                              \
                         OUI03(OPEN_READ_AND_WRITE,OPEN_CREATION,OPEN_INEXISTANT)                                                       \
                                        /* Pour faire un open en lecture-ecriture d'un fichier inexistant (introduit le              */ \
                                        /* 20070710104559 pour 'v $xig/fonct$vv$FON OPEN_READ_AND_WRITE_D_UN_FICHIER_INEXISTANT').   */
#Aifndef  NO_UNIX_INTERFACE
#Eifndef  NO_UNIX_INTERFACE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E N T R E E S - S O R T I E S   D E   C A R A C T E R E S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* A noter que 'getchar()', 'getc()', 'putchar()' et 'putc()' sont des                       */
                                        /* macros definies dans "stdio.h".                                                           */

#ifndef   getc
DEFV(Extern,DEFV(vrai_Int_de_base,getc()));
                                        /* Introduit le 20120626170423 (avec quelques annees de retard, mais cela s'est vu lors de   */
                                        /* l'introduction de 'v $xcc/LFonctions$vv$D/definitions$vv$Y FiLeT_CaTaLoGuE_FS'...).       */
#Aifndef  getc
#Eifndef  getc

#ifndef   getchar
DEFV(Extern,DEFV(vrai_Int_de_base,getchar()));
                                        /* Introduit le 20120626170423 (avec quelques annees de retard, mais cela s'est vu lors de   */
                                        /* l'introduction de 'v $xcc/LFonctions$vv$D/definitions$vv$Y FiLeT_CaTaLoGuE_FS'...).       */
#Aifndef  getchar
#Eifndef  getchar

#define   Getc                                                                                                                          \
                    getc
#define   Getchar                                                                                                                       \
                    getchar
                                        /* Entree d'un caractere.                                                                    */
#define   GetcharG(type,caractere)                                                                                                      \
                    IFNE(type(EGAL(caractere,Getchar())),type(NEUT(PROBLEMES)))                                                         \
                                        /* Recuperation du caractere courant dans le flot provenant de l'entree standard, avec       */ \
                                        /* un test de fin de flot (voir 'PROBLEMES') et ce quel que soit le type des informations.   */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on notera bien qu'en regle generale, le caractere 'caractere' sera de type     */ \
                                        /* 'Char' :                                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Char,INIT(caractere,K_UNDEF));                                      */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes contenues dans '$xcp'). Malgre tout, de temps en temps,   */ \
                                        /* il sera necessaire de le declarer de type 'Int' :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Int,INIT(caractere,UNDEF));                                         */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes 'v $xcg/chiffrage.11$K' et 'v $xcg/extract$K'), lorsque   */ \
                                        /* tous les codes possibles (de 0 a 255) sont potentiellement manipulables par le programme  */ \
                                        /* correspondant...                                                                          */
#define   GetcharT(caractere)                                                                                                           \
                    GetcharG(CARA,caractere)                                                                                            \
                                        /* Recuperation du caractere courant dans le flot provenant de l'entree standard, avec       */ \
                                        /* un test de fin de flot (voir 'PROBLEMES'). D'autre part, on notera les deux 'CARA(...)'   */ \
                                        /* qui sont rendus necessaires par certains systemes (afin de s'arreter un jour...).         */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on notera bien qu'en regle generale, le caractere 'caractere' sera de type     */ \
                                        /* 'Char' :                                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Char,INIT(caractere,K_UNDEF));                                      */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes contenues dans '$xcp'). Malgre tout, de temps en temps,   */ \
                                        /* il sera necessaire de le declarer de type 'Int' :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Int,INIT(caractere,UNDEF));                                         */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes 'v $xcg/chiffrage.11$K' et 'v $xcg/extract$K'), lorsque   */ \
                                        /* tous les codes possibles (de 0 a 255) sont potentiellement manipulables par le programme  */ \
                                        /* correspondant...                                                                          */
#define   GetcharQ(caractere)                                                                                                           \
                    GetcharG(NEUT,caractere)                                                                                            \
                                        /* Recuperation du caractere courant dans le flot provenant de l'entree standard, avec       */ \
                                        /* un test de fin de flot (voir 'PROBLEMES').                                                */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on notera bien qu'en regle generale, le caractere 'caractere' sera de type     */ \
                                        /* 'Char' :                                                                                  */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Char,INIT(caractere,K_UNDEF));                                      */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes contenues dans '$xcp'). Malgre tout, de temps en temps,   */ \
                                        /* il sera necessaire de le declarer de type 'Int' :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  DEFV(Int,INIT(caractere,UNDEF));                                         */ \
                                        /*                                                                                           */ \
                                        /* (voir par exemple les commandes 'v $xcg/chiffrage.11$K' et 'v $xcg/extract$K'), lorsque   */ \
                                        /* tous les codes possibles (de 0 a 255) sont potentiellement manipulables par le programme  */ \
                                        /* correspondant...                                                                          */

#define   Putc(caractere,stream)                                                                                                        \
                    putc(caractere,stream)
#define   Putchar(caractere)                                                                                                            \
                    Putc(caractere,STREAM_OUT)
                                        /* Sortie d'un caractere. On notera que jusqu'au 19990825120626, on avait :                  */
                                        /*                                                                                           */
                                        /*                  #define   Putchar(caractere)                                          \  */
                                        /*                                      putchar(caractere)                                   */
                                        /*                                                                                           */
                                        /* mais ainsi, c'est plus "symetrique"...                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   E N T R E E S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,scanf()));
#define   vrai_Scan(format_de_lecture,variable_unique)                                                                                  \
                    scanf(Cara(format_de_lecture),variable_unique)
#define   Scan(format_de_lecture,variable_unique)                                                                                       \
                    vrai_Scan(format_de_lecture,variable_unique)
                                        /* Definition de la fonction de lecture avec format d'une seule variable sur 'STANDARD_IN'.  */
                                        /* Ceci a ete introduit le 20051111120041. On notera l'absence de 'ADRESSE(...)' en ce qui   */
                                        /* concerne 'variable_unique' ; cela est du a l'usage 'v $xig/fonct$vv$FON Scan' pour lequel */
                                        /* 'variable_unique' est deja un pointeur sur une chaine de caracteres 'valeur_interactive'. */

DEFV(Extern,DEFV(vrai_Int_de_base,sscanf()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <stdio.h>'.  */
                                        /* La PASSE 6 du pre-processing a ete introduite pour traiter ce cas...                      */
#define   SScan                                                                                                                         \
                    sscanf                                                                                                              \
                                        /* Definition de la fonction d'entrees ; on ne peut faire mieux, car a priori on             */ \
                                        /* ne connait pas le nombre d'arguments : ce ne peut donc etre une macro...                  */

                                        /* ATTENTION, ci-dessous on n'ecrit pas :                                                    */
                                        /*                                                                                           */
                                        /*                  #define   SScaX(chaine,format[,...])                                  \  */
                                        /*                                                                                           */
                                        /*           -------------------------> Bblock                                            \  */
                                        /*          |                                                                                */
                                        /*          |                           SScan(Cara(chaine),Cara(format)[,...]);           \  */
                                        /*          |                                                                                */
                                        /*          |    ---------------------> Eblock                                .           \  */
                                        /*          |   |                                                            /|\             */
                                        /*          |   |                                                             |              */
                                        /*          |   |                                                             |              */
                                        /*                                                                                           */
                                        /* car en effet, ces fonction peuvent etre utilisees dans une affectation ainsi qu'on pourra */
                                        /* le voir pour 'SSca1(...)' dans 'v $xig/fonct$vv$FON'...                                   */

#define   SSca0(chaine,format)                                                                                                          \
                    SScan(Cara(chaine),Cara(format))
#define   SSca1(chaine,format,x1)                                                                                                       \
                    SScan(Cara(chaine),Cara(format),x1)
#define   SSca2(chaine,format,x1,x2)                                                                                                    \
                    SScan(Cara(chaine),Cara(format),x1,x2)
#define   SSca3(chaine,format,x1,x2,x3)                                                                                                 \
                    SScan(Cara(chaine),Cara(format),x1,x2,x3)
#define   SSca4(chaine,format,x1,x2,x3,x4)                                                                                              \
                    SScan(Cara(chaine),Cara(format),x1,x2,x3,x4)
                                        /* Definition des fonctions d'entrees en fonction du nombre d'arguments... ATTENTION, on     */
                                        /* notera que l'on ne peut pas ecrire :                                                      */
                                        /*                                                                                           */
                                        /*                  ...,ADRESSE(xn)...                                                       */
                                        /*                                                                                           */
                                        /* car, en effet, 'xn' peut tres bien etre un pointeur sur une chaine de caracteres ; on     */
                                        /* verra a ce propos la fonction 'RECHERCHE_D_UNE_VALEUR(...)' dans 'xig/fonct$vv$FON' qui   */
                                        /* utilise 'SScan(...)' sur des scalaires et sur des chaines de caracteres...                */

TypedefP(Float_SScan,_float)
                                        /* Malheureusement 'sscanf' autrefois ne connaissait pas la double precision                 */
                                        /* (contrairement d'ailleurs aux autres fonctions qui ne connaissent que cela                */
                                        /* pour le passage des arguments flottants...). D'ou ce type qui peut toujours servir...     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' I M P R E S S I O N  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,printf()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <stdio.h>'.  */
                                        /* La PASSE 6 du pre-processing a ete introduite pour traiter ce cas...                      */
#define   Print                                                                                                                         \
                    printf                                                                                                              \
                                        /* Definition de la fonction d'impression externe sur l'unite 'stdout' ; on ne peut faire    */ \
                                        /* mieux, car a priori on ne connait pas le nombre d'arguments : ce ne peut donc etre une    */ \
                                        /* macro...                                                                                  */

=define   Prerr     FPrint`STREAM_ERREUR`
                                        /* Definition de la fonction d'impression externe sur l'unite 'stderr' ; on ne peut faire    */
                                        /* mieux, car a priori on ne connait pas le nombre d'arguments : ce ne peut donc etre une    */
                                        /* macro. Cette fonction est provisoire, et destinee aux messages d'erreur. Le traitement    */
                                        /* complet sera effectue au cours de '$PASSE_4' ; dans l'etat actuel, on ne peut rien faire  */
                                        /* de plus simple, car en effet, les procedures du type 'Prerr' n'ont pas d'argument, et si  */
                                        /* elles en avaient, ce serait en nombre variable...                                         */
                                        /* ATTENTION : autrefois, il y avait ci-apres des definitions du type :                      */
                                        /*                                                                                           */
                                        /*                  #define   Prer0(format)                                               \  */
                                        /*                                      Prerr(format)                                        */
                                        /*                                                                                           */
                                        /* Depuis l'utilisation de 'FPrin?(...)', la definition de 'Prerr' n'a plus beaucoup         */
                                        /* d'interet, mais je laissse, on ne sait jamais...                                          */

DEFV(Extern,DEFV(vrai_Int_de_base,fprintf()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <stdio.h>'.  */
                                        /* La PASSE 6 du pre-processing a ete introduite pour traiter ce cas...                      */
#define   FPrint                                                                                                                        \
                    fprintf                                                                                                             \
                                        /* Definition de la fonction d'impression externe sur une une unite arbitraire ; on ne peut  */ \
                                        /* faire mieux, car a priori on ne connait pas le nombre d'arguments : ce ne peut donc etre  */ \
                                        /* une macro...                                                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : reference dans 'v $xcc/cpp$Z FPrint'.                                         */

#define   FLUSHER_LE_FILE                                                                                                               \
                    VRAI
#define   NE_PAS_FLUSHER_LE_FILE                                                                                                        \
                    NOTL(FLUSHER_LE_FILE)
                                        /* Valeurs que peut prendre l'argument 'flusher_le_File' de 'Fflush_conditionnel(...)'.      */
#define   Fflush_conditionnel(File,flusher_le_File)                                                                                     \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(flusher_le_File))                                                                                      \
                         Bblock                                                                                                         \
                         CALZ(Fflush(File));                                                                                            \
                                        /* Lorsque le "flush" est demande, on le fait...                                             */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* "Flush" conditionnel d'un "File"...                                                       */

#define   Ftraitement_des_formats_de_sortie_VERSION_01                                                                                  \
                                        /* Introduit le 20011203094157 pour 'v $xcc/cpp$Z D_TRAIT'. On notera au passage, qu'il      */ \
                                        /* est possible de considerer qu'anterieurement a cette date, 'Traitement(...)' etait        */ \
                                        /* defini par 'Cara(...)', meme si 'Cara(...)' figurait alors explicitement dans les         */ \
                                        /* definitions de 'FPrin?(...)'. En fait, suite a l'introduction le 20020418102555 de la     */ \
                                        /* variable 'format_effectivement_utilise_dans_FPrin' ci-apres, cette 'VERSION_01', plus     */ \
                                        /* "riche" que 'VERSION_02' a pu etre reactivee a cette date...                              */
#nodefine Ftraitement_des_formats_de_sortie_VERSION_02                                                                                  \
                                        /* Le 20020417101447, j'ai renonce a ce dispositif (provisoirement ?) lors de la generation  */ \
                                        /* de la sequence 'v _____xivPdf_14_1/027213_027724'. En effet, l'espace memoire de          */ \
                                        /* 'v $xrk/rdn_walk.52$K' croissait irreversiblement a cause de l'allocation memoire faite   */ \
                                        /* dans 'v $xig/fonct$vv$FON POINTERc.Ftraitement_des_formats_de_sortie' via la fonction     */ \
                                        /* 'chain_Acopie_avec_conversions_possibles_majuscules_minuscules(...)'. En effet, dans      */ \
                                        /* cette sequence le fichier 'v _____xivPdf_09_2/.REFL.v.11.$U LISTE_POINTS' est genere ;    */ \
                                        /* or celui-ci, pour etre genere, fait un nombre enorme de sorties via la procedure          */ \
                                        /* 'v $xrv/champs_5.11$I MEMORISATION_D_UN_POINT'. La fonction de traitement des formats     */ \
                                        /* de sortie fait donc de tres nombreuses allocations memoire sans que la liberation n'ait   */ \
                                        /* jamais lieu. Cette VERSION a donc ete desactivee le 20020418102555.                       */

#ifdef    Ftraitement_des_formats_de_sortie_VERSION_01
#    define    Traitement                                                                                                               \
                         Ftraitement_des_formats_de_sortie                                                                              \
                                        /* Ce commentaire est rendu obligatoire par la programmation de 'v $xcc/cpp$Z D_TRAIT'.      */
#Aifdef   Ftraitement_des_formats_de_sortie_VERSION_01
#Eifdef   Ftraitement_des_formats_de_sortie_VERSION_01

#ifdef    Ftraitement_des_formats_de_sortie_VERSION_02
#    define    Traitement                                                                                                               \
                         ptCARA                                                                                                         \
                                        /* Ce commentaire est rendu obligatoire par la programmation de 'v $xcc/cpp$Z D_TRAIT'.      */ \
                                        /* Le 20020702094637, j'ai remplace le 'NEUT' par un 'ptCARA' car, d'apres la modification   */ \
                                        /* faite ci-apres le 20020701155821, il semble que cela soit ce qu'il faut pour qu'il n'y    */ \
                                        /* ait pas de problemes de compilation...                                                    */
#Eifdef   Ftraitement_des_formats_de_sortie_VERSION_02

#define   DEBUT_DE_Ftraitement_des_formats_de_sortie(format)                                                                            \
                    Bblock                                                                                                              \
                    DEFV(CHAR,INIT(POINTERc(format_initialement_demande_dans_FPrin),ptCARA(format)));                                   \
                                        /* Ceci a ete introduit le 20020629115636 afin de permettre le 'IFDI(...)' qui suit...       */ \
                                        /* On notera que la 20020701155821, j'ai remplace le 'NEUT(...)' par un 'ptCARA(...)'        */ \
                                        /* car, en effet, il y a quelques formats qui sont appeles via la procedure 'Cara(...)'      */ \
                                        /* ('v $xiida/fonction$FON CAL2.Prin1.Cara')...                                              */ \
                                                                                                                                        \
                    _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                                  \
                                        /* Introduit le 20040515115723 pour reduire la longueur des lignes manipulees lors de la     */ \
                                        /* gestion de 'v $xig/fonct$vv$DEF PAS DE VERSIONS RECENSEES POUR CE PROGRAMME' et de        */ \
                                        /* 'v $xig/fonct$vv$DEF PAS DE BUGS RECENSES POUR CE PROGRAMME' ; cela posait des problemes  */ \
                                        /* (message "Output line too long" dans '$SE') sur '$LACT12' en particulier...               */ \
                                        /* Au passage je me demande le 20040604151352 qu'elle est la difference avec le              */ \
                                        /* '__NEW_LINE__' de 'v $xcp/cpp$D/beau_cpp$c __NEW_LINE__' ; en fait il me semble qu'il n'y */ \
                                        /* en a pas et que '_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____' pourrait donc etre   */ \
                                        /* supprime. Le 20040604154113, je comprends la difference subtile : '__NEW_LINE__'          */ \
                                        /* s'applique des que l'on utilise '$xcp/cpp$X', alors que la clef ici utilisee              */ \
                                        /* '_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____' s'applique en '$PASSE_2'.            */ \
                                                                                                                                        \
                    DEFV(CHAR,INIT(POINTERc(format_effectivement_utilise_dans_FPrin),Traitement(format)));                              \
                                        /* ATTENTION : reference dans 'v $xcc/cpp$Z format_effectivement_utilise_dans_FPrin'.        */ \
                                        /*                                                                                           */ \
                                        /* debut de traitement des formats de sortie...                                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : je note le 20230314102135 que 'format_effectivement_utilise_dans_FPrin' est   */ \
                                        /* reference dans 'v $xcc/cpp$Z ChAiNe4=.format_effectivement_utilise_dans_FPrin.'.          */ \
                                                                                                                                        \
                    _____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____                                                                  \
                                        /* Idem au '_____FORCER_UN_CHANGEMENT_DE_LIGNE_EN_PASSE_2_____' precedent...                 */

#ifdef    Ftraitement_des_formats_de_sortie_VERSION_01
#    define    FIN_DE_Ftraitement_des_formats_de_sortie(format)                                                                         \
                         Test(IFDI(format_effectivement_utilise_dans_FPrin,format_initialement_demande_dans_FPrin))                     \
                                        /* Ce test a ete introduit le 20020629115636, suite au probleme rencontre le 20020628163919  */ \
                                        /* sur '$LACT14' avec une commande du type :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  $xrv/AXPB.01$X      ne=0 fichier==                                       */ \
                                        /*                                                                                           */ \
                                        /* qui donne le message :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Segmentation fault                                                       */ \
                                        /*                                                                                           */ \
                                        /* juste apres le message "l'allocation memoire est impossible" emis par la fonction         */ \
                                        /* 'v $xig/fonct$vv$FON allocation_memoire_avec_validation'. Or, en effet, dans cette        */ \
                                        /* fonction 'Ftraitement_des_formats_de_sortie(...)' n'est pas encore definie et ne fait     */ \
                                        /* donc pas d'allocation memoire ; et donc le 'Free(...)' qui suit n'a pas de raison d'etre. */ \
                                        /*                                                                                           */ \
                                        /* On notera au passage que l'introduction des fonctions 'gFPrin?(...)' le 20020628163919    */ \
                                        /* etait inutile, mais maintenant qu'elles sont la, je les conserve...                       */ \
                              Bblock                                                                                                    \
                              CALZ_FreCC(format_effectivement_utilise_dans_FPrin);                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                    Eblock                                                                                                              \
                                        /* Fin de traitement des formats de sortie...                                                */
#Aifdef   Ftraitement_des_formats_de_sortie_VERSION_01
#Eifdef   Ftraitement_des_formats_de_sortie_VERSION_01

#ifdef    Ftraitement_des_formats_de_sortie_VERSION_02
#    define    FIN_DE_Ftraitement_des_formats_de_sortie(format)                                                                         \
                    Eblock                                                                                                              \
                                        /* Fin de traitement des formats de sortie...                                                */
#Aifdef   Ftraitement_des_formats_de_sortie_VERSION_02
#Eifdef   Ftraitement_des_formats_de_sortie_VERSION_02

#define   gFPrin0(File,flusher_le_File,format)                                                                                          \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format)));                                                                                    \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin1(File,flusher_le_File,format,x1)                                                                                       \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1));                                                                                 \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin2(File,flusher_le_File,format,x1,x2)                                                                                    \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2));                                                                              \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin3(File,flusher_le_File,format,x1,x2,x3)                                                                                 \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3));                                                                           \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin4(File,flusher_le_File,format,x1,x2,x3,x4)                                                                              \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4));                                                                        \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin5(File,flusher_le_File,format,x1,x2,x3,x4,x5)                                                                           \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5));                                                                     \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin6(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6)                                                                        \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6));                                                                  \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin7(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7)                                                                     \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7));                                                               \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin8(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8)                                                                  \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8));                                                            \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin9(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9)                                                               \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9));                                                         \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin10(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA)                                                           \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA));                                                      \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin11(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB)                                                        \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB));                                                   \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin12(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC)                                                     \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC));                                                \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin13(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD)                                                  \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD));                                             \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin14(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE)                                               \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE));                                          \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin15(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF)                                            \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF));                                       \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock
#define   gFPrin16(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF,xG)                                         \
                    Bblock                                                                                                              \
                    CALZ(FPrint(File,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF,xG));                                    \
                    CALZ(Fflush_conditionnel(File,flusher_le_File));                                                                    \
                    Eblock

#define   FPrin0(File,flusher_le_File,format)                                                                                           \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin0(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin1(File,flusher_le_File,format,x1)                                                                                        \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin1(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1                                                                                                     \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin2(File,flusher_le_File,format,x1,x2)                                                                                     \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin2(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2                                                                                                  \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin3(File,flusher_le_File,format,x1,x2,x3)                                                                                  \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin3(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3                                                                                               \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin4(File,flusher_le_File,format,x1,x2,x3,x4)                                                                               \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin4(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4                                                                                            \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin5(File,flusher_le_File,format,x1,x2,x3,x4,x5)                                                                            \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin5(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4,x5                                                                                         \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin6(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6)                                                                         \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin6(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4,x5,x6                                                                                      \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin7(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7)                                                                      \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin7(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4,x5,x6,x7                                                                                   \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin8(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8)                                                                   \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin8(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4,x5,x6,x7,x8                                                                                \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin9(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9)                                                                \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin9(File                                                                                                   \
                                ,flusher_le_File                                                                                        \
                                ,format_effectivement_utilise_dans_FPrin                                                                \
                                ,x1,x2,x3,x4,x5,x6,x7,x8,x9                                                                             \
                                 )                                                                                                      \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin10(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA)                                                            \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin10(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA                                                                         \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin11(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB)                                                         \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin11(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB                                                                      \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin12(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC)                                                      \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin12(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC                                                                   \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin13(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD)                                                   \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin13(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD                                                                \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin14(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE)                                                \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin14(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE                                                             \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin15(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF)                                             \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin15(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF                                                          \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
#define   FPrin16(File,flusher_le_File,format,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF,xG)                                          \
                    Bblock                                                                                                              \
                    DEBUT_DE_Ftraitement_des_formats_de_sortie(format);                                                                 \
                    CALZ(gFPrin16(File                                                                                                  \
                                 ,flusher_le_File                                                                                       \
                                 ,format_effectivement_utilise_dans_FPrin                                                               \
                                 ,x1,x2,x3,x4,x5,x6,x7,x8,x9,xA,xB,xC,xD,xE,xF,xG                                                       \
                                  )                                                                                                     \
                         );                                                                                                             \
                    FIN_DE_Ftraitement_des_formats_de_sortie(format);                                                                   \
                    Eblock
                                        /* Definition de la fonction d'impression externe sur une une unite arbitraire avec nombre   */
                                        /* d'arguments. ATTENTION : on notera l'introduction de la fonction 'Fflush(...)' ; elle     */
                                        /* est destinee a garantir que lors de sequences du type :                                   */
                                        /*                                                                                           */
                                        /*                  Prin?(...);                                                              */
                                        /*                  Prer?(...);                                                              */
                                        /*                  Prin?(...);                                                              */
                                        /*                  Prer?(...);                                                              */
                                        /*                  Prin?(...);                                                              */
                                        /*                                                                                           */
                                        /* l'ordre des sorties (quelles que soient les redirections et les "pipes") soit le meme que */
                                        /* celui qui est donne par cette sequence...                                                 */

DEFV(Extern,DEFV(vrai_Int_de_base,sprintf()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <stdio.h>'.  */
                                        /* La PASSE 6 du pre-processing a ete introduite pour traiter ce cas...                      */
#define   SPrint                                                                                                                        \
                    sprintf                                                                                                             \
                                        /* Definition de la fonction d'impression interne ; on ne peut faire mieux, car a priori on  */ \
                                        /* ne connait pas le nombre d'arguments : ce ne peut donc etre une macro...                  */
#define   SPrin0(chaine,format)                                                                                                         \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format)));                                                                            \
                    Eblock
#define   SPrin1(chaine,format,x1)                                                                                                      \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1));                                                                         \
                    Eblock
#define   SPrin2(chaine,format,x1,x2)                                                                                                   \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2));                                                                      \
                    Eblock
#define   SPrin3(chaine,format,x1,x2,x3)                                                                                                \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3));                                                                   \
                    Eblock
#define   SPrin4(chaine,format,x1,x2,x3,x4)                                                                                             \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3,x4));                                                                \
                    Eblock
#define   SPrin5(chaine,format,x1,x2,x3,x4,x5)                                                                                          \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3,x4,x5));                                                             \
                    Eblock
#define   SPrin6(chaine,format,x1,x2,x3,x4,x5,x6)                                                                                       \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3,x4,x5,x6));                                                          \
                    Eblock
#define   SPrin7(chaine,format,x1,x2,x3,x4,x5,x6,x7)                                                                                    \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3,x4,x5,x6,x7));                                                       \
                    Eblock
#define   SPrin8(chaine,format,x1,x2,x3,x4,x5,x6,x7,x8)                                                                                 \
                    Bblock                                                                                                              \
                    CALZ(SPrint(Cara(chaine),Cara(format),x1,x2,x3,x4,x5,x6,x7,x8));                                                    \
                    Eblock
                                        /* Definition de la fonction d'impression interne avec nombre d'arguments...                 */

DEFV(Extern,DEFV(vrai_Int_de_base,snprintf()));
                                        /* ATTENTION : cette fonction peut donc avoir ete declaree dans '@    include   <stdio.h>'.  */
                                        /* La PASSE 6 du pre-processing a ete introduite pour traiter ce cas...                      */
#define   SVPrint                                                                                                                       \
                    snprintf                                                                                                            \
                                        /* Definition de la fonction d'impression interne ; on ne peut faire mieux, car a priori on  */ \
                                        /* ne connait pas le nombre d'arguments : ce ne peut donc etre une macro. On notera la       */ \
                                        /* difference entre 'SPrint(...)' et 'SVPrint', cette derniere permettant de limiter le      */ \
                                        /* longueur de la chaine produite et donc de resoudre simplement le probleme de la           */ \
                                        /* pre-allocation memoire pour la chaine Resultante...                                       */
#define   SVPrin0(chaine,longueur_maximale,format)                                                                                      \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format)));                                                         \
                    Eblock
#define   SVPrin1(chaine,longueur_maximale,format,x1)                                                                                   \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1));                                                      \
                    Eblock
#define   SVPrin2(chaine,longueur_maximale,format,x1,x2)                                                                                \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2));                                                   \
                    Eblock
#define   SVPrin3(chaine,longueur_maximale,format,x1,x2,x3)                                                                             \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3));                                                \
                    Eblock
#define   SVPrin4(chaine,longueur_maximale,format,x1,x2,x3,x4)                                                                          \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3,x4));                                             \
                    Eblock
#define   SVPrin5(chaine,longueur_maximale,format,x1,x2,x3,x4,x5)                                                                       \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3,x4,x5));                                          \
                    Eblock
#define   SVPrin6(chaine,longueur_maximale,format,x1,x2,x3,x4,x5,x6)                                                                    \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3,x4,x5,x6));                                       \
                    Eblock
#define   SVPrin7(chaine,longueur_maximale,format,x1,x2,x3,x4,x5,x6,x7)                                                                 \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3,x4,x5,x6,x7));                                    \
                    Eblock
#define   SVPrin8(chaine,longueur_maximale,format,x1,x2,x3,x4,x5,x6,x7,x8)                                                              \
                    Bblock                                                                                                              \
                    CALZ(SVPrint(Cara(chaine),longueur_maximale,Cara(format),x1,x2,x3,x4,x5,x6,x7,x8));                                 \
                    Eblock
                                        /* Definition de la fonction d'impression interne avec nombre d'arguments...                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   M E S S A G E S   D ' E R R E U R S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   MESSAGE_DE_MESSAGE                                                                                                            \
                    "MESSAGE"                                                                                                           \
                                        /* Message "MESSAGE".                                                                        */

#define   MESSAGE_D_ATTENTION                                                                                                           \
                    "ATTENTION"                                                                                                         \
                                        /* Message "ATTENTION".                                                                      */
#define   MESSAGE_D_AVERTISSEMENT                                                                                                       \
                    "AVERTISSEMENT"                                                                                                     \
                                        /* Message "AVERTISSEMENT".                                                                  */

#define   MESSAGE_D_ERREUR                                                                                                              \
                    "ERREUR"                                                                                                            \
                                        /* Message "ERREUR".                                                                         */

#ifdef    MODE_DEBUG
#    define    MESSAGE_DE_DEBUG                                                                                                         \
                         "DEBUG"                                                                                                        \
                                        /* Message "DEBUG".                                                                          */
#Aifdef   MODE_DEBUG
#Eifdef   MODE_DEBUG

TypedefP(GetTime_t1,STRU(tm))
TypedefP(GetTime_t2,time_t)
                                        /* Structures definissant l'acces a la date et a l'heure.                                    */
DEFV(Extern,DEFV(Char,POINTERc(asctime())));
DEFV(Extern,DEFV(GetTime_t1,POINTERs(localtime())));
DEFV(Extern,DEFV(GetTime_t2,time()));
                                        /* Fonctions utiles...                                                                       */

#define   TIME_000000_01011970(argument)                                                                                                \
                    time(argument)                                                                                                      \
                                        /* Introduit le 20220723115922, bien tardivement !                                           */

#define   ACCES_A_LA_DATE_ET_A_L_HEURE_DU_DEFAUT                                                                                        \
                    ZERO                                                                                                                \
                                        /* Valeur de l'argument de la fonction 'time(...)' destine a recuperer le temps en secondes  */ \
                                        /* ecoule depuis une certaine date (en general le "00:00:00 UTC, January 1 1970").           */
#define   EDITER_LES_MESSAGES_DE_PRINT_DEFAUT                                                                                           \
                    VRAI
#define   NE_PAS_EDITER_LES_MESSAGES_DE_PRINT_DEFAUT                                                                                    \
                    NOTL(EDITER_LES_MESSAGES_DE_PRINT_DEFAUT)
                                        /* Valeurs possibles de l'indicateur 'PRINT_DEFAUT_____editer_les_messages' qui est defini   */
                                        /* dans 'v $xig/common$STR'.                                                                 */

#nodefine gPRINT_DEFAUT_VERSION_01
#nodefine gPRINT_DEFAUT_VERSION_02
#nodefine gPRINT_DEFAUT_VERSION_03
#nodefine gPRINT_DEFAUT_VERSION_04
#nodefine gPRINT_DEFAUT_VERSION_05
#define   gPRINT_DEFAUT_VERSION_06
                                        /* Choix de la version de 'gPRINT_DEFAUT(...)'.                                              */

#ifdef    gPRINT_DEFAUT_VERSION_01
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,ligne_courante)                                \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              DEFV(GetTime_t2,INIT(date_et_heure_du_defaut_en_secondes                                                  \
                                                  ,TIME_000000_01011970(ACCES_A_LA_DATE_ET_A_L_HEURE_DU_DEFAUT)                         \
                                                   )                                                                                    \
                                   );                                                                                                   \
                              begin_nouveau_block                                                                                       \
                                   Bblock                                                                                               \
                                        /* Le changement de 'block' est destine a garantir l'ordre d'evaluation des variables :      */ \
                                        /* 'date_et_heure_du_defaut_en_secondes' puis 'date_et_heure_du_defaut' qui utilise pour     */ \
                                        /* son evaluation la premiere d'entre-elles...                                               */ \
                                                                                                                                        \
                                   DEFV(Char,INIT(POINTERc(date_et_heure_du_defaut)                                                     \
                                                 ,asctime(localtime(ADRESSE(date_et_heure_du_defaut_en_secondes)))                      \
                                                  )                                                                                     \
                                        );                                                                                              \
                                        /* Recuperation de la date et heure du defaut. On notera que la conversion en ASCII faite    */ \
                                        /* par 'asctime(...)' introduit a la fin de la chaine un caractere 'K_LF' que l'on doit      */ \
                                        /* supprimer afin que tout soit sur la meme ligne ; ce nettoyage est fait grace a l'appel    */ \
                                        /* a 'PRED(NBRE(...))' dans le 'Prer9(...)' ci-apres...                                      */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : les fonctions de '$xig/fonct$vv$FON' 'chain_recherche_premier_caractere(...)' */ \
                                        /* et 'chain_recherche_dernier_caractere(...)' sont placees devant toutes les autres         */ \
                                        /* fonctions depuis l'edition de la date dans 'PRINT_DEFAUT(...)', ce qui autrement          */ \
                                        /* donnerait (sur 'SYSTEME_SGIND?GA_IRIX_CC') le message suivant :                           */ \
                                        /*                                                                                           */ \
                                        /*   cfe: Error: fonction.c, line ...: redeclaration of 'chain_recherche_dernier_caractere'; */ \
                                        /*                                     previous declaration at line ... in file 'fonction.c' */ \
                                        /*                                                                                           */ \
                                        /* lors de la compilation du fichier '$xbg/fonction$K".                                      */ \
                                                                                                                                        \
                                   CAL1(Prer9("\n['%s'][%.*s]['%s'][#%d][%s] %s : %s [%s].\n"                                           \
                                             ,Gvar_sHOTE                                                                                \
                                             ,PRED(NBRE(PREMIER_CARACTERE                                                               \
                                                       ,chain_recherche_dernier_caractere(date_et_heure_du_defaut,K_LF)                 \
                                                        )                                                                               \
                                                   )                                                                                    \
                                             ,date_et_heure_du_defaut                                                                   \
                                             ,fichier_courant                                                                           \
                                             ,ligne_courante                                                                            \
                                             ,MESSAGE_S                                                                                 \
                                             ,en_tete                                                                                   \
                                             ,message1                                                                                  \
                                             ,message2                                                                                  \
                                              )                                                                                         \
                                        );                                                                                              \
                                                                                                                                        \
                                        /* Le changement de 'block' est destine a garantir l'ordre d'evaluation des variables :      */ \
                                        /* 'date_et_heure_du_defaut_en_secondes' puis 'date_et_heure_du_defaut' qui utilise pour     */ \
                                        /* son evaluation la premiere d'entre-elles...                                               */ \
                                   Eblock                                                                                               \
                              end_nouveau_block                                                                                         \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '01'.    */
#Aifdef   gPRINT_DEFAUT_VERSION_01
#Eifdef   gPRINT_DEFAUT_VERSION_01

#define   CONVERSION_DUREE_DATE_TRANSLATION_DE_L_ANNEE                                                                                  \
                    PARE(1900)
#define   CONVERSION_DUREE_DATE_TRANSLATION_DU_MOIS                                                                                     \
                    UN
#define   CONVERSION_DUREE_DATE_TRANSLATION_DU_JOUR                                                                                     \
                    ZERO
#define   CONVERSION_DUREE_DATE_TRANSLATION_DE_L_HEURE                                                                                  \
                    ZERO
#define   CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_MINUTE                                                                                \
                    ZERO
#define   CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_SECONDE                                                                               \
                    ZERO
#define   CONVERSION_DUREE_DATE_NE_PAS_MODIFIER_LES_COMPOSANTES                                                                         \
                    NEGA(UN)
                                        /* Translation des valeurs renvoyees par 'localtime(...)' et "anti-translation" dans le      */
                                        /* cas de la fonction 'mktime(...)'.                                                         */

#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_L_ANNEE                                                               \
                    QUATRE
#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DU_MOIS                                                                  \
                    DEUX
#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DU_JOUR                                                                  \
                    DEUX
#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_L_HEURE                                                               \
                    DEUX
#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_LA_MINUTE                                                             \
                    DEUX
#define   DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_LA_SECONDE                                                            \
                    DEUX
                                        /* Nombre de chiffres a utiliser pour editer chaque composante.                              */

#define   CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(chaine)                                                                           \
                    SE22(C_VIDE,chaine)

#define   SEPARATEUR_DATE_____AAAA_MM                                                                                                   \
                    CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(C_SLASH)
#define   SEPARATEUR_DATE_____MM_JJ__                                                                                                   \
                    CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(C_SLASH)
#define   SEPARATEUR_DATE_____JJ_hh__                                                                                                   \
                    CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(SE22(C_BLANC,C_MOINS))
#define   SEPARATEUR_DATE_____hh_mm__                                                                                                   \
                    CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(C_DEUX_POINTS)
#define   SEPARATEUR_DATE_____mm_ss__                                                                                                   \
                    CHOIX_DU_SEPARATEUR_DES_COMPOSANTES_DE_DATE(C_DEUX_POINTS)
                                        /* Afin de selectionner la presentation d'une date definie au format 'AAAAMMJJhhmmss'        */
                                        /* (introduit le 20191018140516)...                                                          */

#define   MISE_DE_LA_DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss(date_AAAAMMJJhhmmss)                                                    \
                    Bblock                                                                                                              \
                    DEFV(GetTime_t2,INIT(date_et_heure_defaut_en_secondes                                                               \
                                        ,TIME_000000_01011970(ACCES_A_LA_DATE_ET_A_L_HEURE_DU_DEFAUT)                                   \
                                         )                                                                                              \
                         );                                                                                                             \
                                        /* Recuperation de la date et heure du defaut depuis le 19700101000000.                      */ \
                    DEFV(GetTime_t1,INIT(POINTERs(composantes_de_la_date_et_heure_defaut),ADRESSE_NON_ENCORE_DEFINIE));                 \
                                        /* "Deconcatenation" des composantes de la date et heure depuis le 19700101000000.           */ \
                                                                                                                                        \
                    EGAL(composantes_de_la_date_et_heure_defaut,localtime(ADRESSE(date_et_heure_defaut_en_secondes)));                  \
                                        /* "Deconcatenation" des composantes de la date et heure depuis le 19700101000000.           */ \
                                                                                                                                        \
                    EGAL(date_AAAAMMJJhhmmss                                                                                            \
                        ,EGAs(chain_Aconcaten11(EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_year)             \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DE_L_ANNEE                     \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_L_ANNEE       \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                               ,SEPARATEUR_DATE_____AAAA_MM                                                             \
                                               ,EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_mon)              \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DU_MOIS                        \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DU_MOIS          \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                               ,SEPARATEUR_DATE_____MM_JJ__                                                             \
                                               ,EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_mday)             \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DU_JOUR                        \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DU_JOUR          \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                               ,SEPARATEUR_DATE_____JJ_hh__                                                             \
                                               ,EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_hour)             \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DE_L_HEURE                     \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_L_HEURE       \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                               ,SEPARATEUR_DATE_____hh_mm__                                                             \
                                               ,EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_min)              \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_MINUTE                   \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_LA_MINUTE     \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                               ,SEPARATEUR_DATE_____mm_ss__                                                             \
                                               ,EGAs(chain_numero(bADD(ASI1(composantes_de_la_date_et_heure_defaut,tm_sec)              \
                                                                      ,CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_SECONDE                  \
                                                                       )                                                                \
                                                                 ,DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss_PRECISION_DE_LA_SECONDE    \
                                                                  )                                                                     \
                                                     )                                                                                  \
                                                )                                                                                       \
                              )                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Mise de la date courante au format AAAAMMJJhhmmss. Ceci fut introduit le 20070523090556   */ \
                                        /* pour 'v $xig/defin_2$vv$DEF MISE_DE_LA_DATE_COURANTE_AU_FORMAT_____AAAAMMJJhhmmss'...     */

#ifdef    gPRINT_DEFAUT_VERSION_02
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,ligne_courante)                                \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              CAL1(Prer9("\n[%s][%s]['%s'-'%s'][#%d][%s] %s : %s [%s].\n"                                               \
                                        ,mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss()                                        \
                                        ,Gvar_sHOTE                                                                                     \
                                        ,commande_courante                                                                              \
                                        ,fichier_courant                                                                                \
                                        ,ligne_courante                                                                                 \
                                        ,MESSAGE_S                                                                                      \
                                        ,en_tete                                                                                        \
                                        ,message1                                                                                       \
                                        ,message2                                                                                       \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Edition des informations utiles au defaut. Jusqu'au 19970324173045, on trouvait dans      */ \
                                        /* l'ordre '$sHOTE' puis la date ; a compter du 19970324173045, c'est l'inverse qui est      */ \
                                        /* fait afin de trouver pour chaque message erreur une stricte hierarchie d'informations,    */ \
                                        /* des plus importantes (la date), aux moins importantes ('ligne_courante').                 */ \
                                        /*                                                                                           */ \
                                        /* La fonction 'mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss(...)' a ete introduite */ \
                                        /* le 20110531112429...                                                                      */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '02'.    */
#Aifdef   gPRINT_DEFAUT_VERSION_02
#Eifdef   gPRINT_DEFAUT_VERSION_02

#ifdef    gPRINT_DEFAUT_VERSION_03
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,ligne_courante)                                \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              DEFV(CHAR,INIT(POINTERc(Message1),CHAINE_UNDEF));                                                         \
                              ckMalo(Message1,chain_taille(message1),print_defaut_____compteur_des_kMalo);                              \
                                        /* Copie de 'message1' destine a mettre en majuscule son premier caractere (ce dispositif    */ \
                                        /* a ete introduit le 20011029133410).                                                       */ \
                                                                                                                                        \
                              CALS(chain_copie(Message1,message1));                                                                     \
                              EGAL(PREMIER_CARACTERE_ITb0(Message1)                                                                     \
                                  ,conversion_d_un_caractere_minuscule_en_un_caractere_majuscule(PREMIER_CARACTERE_ITb0(Message1))      \
                                   );                                                                                                   \
                                        /* Mise en majuscule du premier caractere de 'message1'...                                   */ \
                                                                                                                                        \
                              CAL1(Prer9("\n[%s][%s]['%s'-'%s'][#%d][%s] %s : %s [%s].\n"                                               \
                                        ,mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss()                                        \
                                        ,Gvar_sHOTE                                                                                     \
                                        ,commande_courante                                                                              \
                                        ,fichier_courant                                                                                \
                                        ,ligne_courante                                                                                 \
                                        ,MESSAGE_S                                                                                      \
                                        ,en_tete                                                                                        \
                                        ,Message1                                                                                       \
                                        ,message2                                                                                       \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Edition des informations utiles au defaut. Jusqu'au 19970324173045, on trouvait dans      */ \
                                        /* l'ordre '$sHOTE' puis la date ; a compter du 19970324173045, c'est l'inverse qui est      */ \
                                        /* fait afin de trouver pour chaque message erreur une stricte hierarchie d'informations,    */ \
                                        /* des plus importantes (la date), aux moins importantes ('ligne_courante').                 */ \
                                        /*                                                                                           */ \
                                        /* La fonction 'mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss(...)' a ete introduite */ \
                                        /* le 20110531112429...                                                                      */ \
                                                                                                                                        \
                              CALZ_FreDD(Message1);                                                                                     \
                                        /* Liberation de l'espace contenant le message ameliore (introduit le 20031101192055 car,    */ \
                                        /* en effet, il manquait...).                                                                */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '03'.    */
#Aifdef   gPRINT_DEFAUT_VERSION_03
#Eifdef   gPRINT_DEFAUT_VERSION_03

#ifdef    gPRINT_DEFAUT_VERSION_04
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,fonction_courante,ligne_courante)              \
                                        /* Le nom de la fonction courante a ete introduit le 20051124085928...                       */ \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              DEFV(CHAR,INIT(POINTERc(Message1),CHAINE_UNDEF));                                                         \
                              ckMalo(Message1,chain_taille(message1),print_defaut_____compteur_des_kMalo);                              \
                                        /* Copie de 'message1' destine a mettre en majuscule son premier caractere (ce dispositif    */ \
                                        /* a ete introduit le 20011029133410).                                                       */ \
                                                                                                                                        \
                              CALS(chain_copie(Message1,message1));                                                                     \
                              EGAL(PREMIER_CARACTERE_ITb0(Message1)                                                                     \
                                  ,conversion_d_un_caractere_minuscule_en_un_caractere_majuscule(PREMIER_CARACTERE_ITb0(Message1))      \
                                   );                                                                                                   \
                                        /* Mise en majuscule du premier caractere de 'message1'...                                   */ \
                                                                                                                                        \
                              Test(IL_FAUT(gPRINT_DEFAUT_____n_editer_que_le_message_principal))                                        \
                                   Bblock                                                                                               \
                                   CAL1(Prer2("\n%s : %s.\n"                                                                            \
                                             ,en_tete                                                                                   \
                                             ,Message1                                                                                  \
                                              )                                                                                         \
                                        );                                                                                              \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   CAL1(Prer11("\n[%s][%s=%s]['%s'-'%s']['%s(...)'#%d][%s] %s : %s [%s].\n"                             \
                                              ,mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss()                                  \
                                              ,Gvar_sHOTE                                                                               \
                                              ,Gvar_HOST                                                                                \
                                              ,commande_courante                                                                        \
                                              ,fichier_courant                                                                          \
                                              ,fonction_courante                                                                        \
                                              ,ligne_courante                                                                           \
                                              ,MESSAGE_S                                                                                \
                                              ,en_tete                                                                                  \
                                              ,Message1                                                                                 \
                                              ,message2                                                                                 \
                                               )                                                                                        \
                                        );                                                                                              \
                                        /* Edition des informations utiles au defaut. Jusqu'au 19970324173045, on trouvait dans      */ \
                                        /* l'ordre '$sHOTE' puis la date ; a compter du 19970324173045, c'est l'inverse qui est      */ \
                                        /* fait afin de trouver pour chaque message erreur une stricte hierarchie d'informations,    */ \
                                        /* des plus importantes (la date), aux moins importantes ('ligne_courante').                 */ \
                                        /*                                                                                           */ \
                                        /* L'edition de '$vCOMPUTERd' a ete introduite le 20070420112557 et remplacee par '$HOST'    */ \
                                        /* le 20070420120642 (cette derniere variable etant plus "universelle" et, en particulier,   */ \
                                        /* dans le cas des MACHINEs de type 'sumix'...).                                             */ \
                                        /*                                                                                           */ \
                                        /* La fonction 'mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss(...)' a ete introduite */ \
                                        /* le 20110531112429...                                                                      */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              CALZ_FreDD(Message1);                                                                                     \
                                        /* Liberation de l'espace contenant le message ameliore (introduit le 20031101192055 car,    */ \
                                        /* en effet, il manquait...).                                                                */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '04'     */ \
                                        /* introduit le 20030912140554 pour alleger, si besoin est, les sorties des messages de      */ \
                                        /* type {ATTENTION,ERREUR,...}.                                                              */
#Aifdef   gPRINT_DEFAUT_VERSION_04
#Eifdef   gPRINT_DEFAUT_VERSION_04

#ifdef    gPRINT_DEFAUT_VERSION_05
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,fonction_courante,ligne_courante)              \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              DEFV(Logical,INIT(EN_TETE_Prin_Prer_Prme                                                                  \
                                               ,I3ET(IFEQ_chaine(en_tete,C_VIDE)                                                        \
                                                    ,IFEQ_chaine(message1,C_VIDE)                                                       \
                                                    ,IFEQ_chaine(message2,C_VIDE)                                                       \
                                                     )                                                                                  \
                                                )                                                                                       \
                                   );                                                                                                   \
                                        /* Afin de savoir si l'appel a 'print_defaut(...)' vient de 'PRINT_DEFAUT(...)' ou           */ \
                                        /* de 'PRINT_EN_TETE_Prin_Prer_Prme(...)' (introduit le 20111121164545...).                  */ \
                              DEFV(CHAR,INIT(POINTERc(Message1),CHAINE_UNDEF));                                                         \
                              ckMalo(Message1,chain_taille(message1),print_defaut_____compteur_des_kMalo);                              \
                                        /* Copie de 'message1' destine a mettre en majuscule son premier caractere.                  */ \
                                                                                                                                        \
                              CALS(chain_copie(Message1,message1));                                                                     \
                              EGAL(PREMIER_CARACTERE_ITb0(Message1)                                                                     \
                                  ,conversion_d_un_caractere_minuscule_en_un_caractere_majuscule(PREMIER_CARACTERE_ITb0(Message1))      \
                                   );                                                                                                   \
                                        /* Mise en majuscule du premier caractere de 'message1'...                                   */ \
                                                                                                                                        \
                              BSaveModifyVariable(Logical,Prer_____editer_les_messages_d_en_tete,FAUX);                                 \
                                        /* A cause des 'Prer?(...)' qui vont suivre...                                               */ \
                                                                                                                                        \
                              Test(IL_FAUT(gPRINT_DEFAUT_____n_editer_que_le_message_principal))                                        \
                                   Bblock                                                                                               \
                                   Test(EST_VRAI(EN_TETE_Prin_Prer_Prme))                                                               \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        CAL1(Prer2("\n%s : %s.\n"                                                                       \
                                                  ,en_tete                                                                              \
                                                  ,Message1                                                                             \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   DEFV(CHAR,INIC(POINTERc(format_EGAq____gPRINT_DEFAUT)                                                \
                                                 ,chain_Aconcaten2("\n[%s][%s=%s][%s]['%s'-'%s']['%s(...)'#%d][%s] "                    \
                                                                  ,COND(EST_VRAI(EN_TETE_Prin_Prer_Prme)                                \
                                                                       ," : "                                                           \
                                                                       ,"%s : %s [%s].\n"                                               \
                                                                        )                                                               \
                                                                   )                                                                    \
                                                  )                                                                                     \
                                        );                                                                                              \
                                                                                                                                        \
                                   CAL1(Prer12(format_EGAq____gPRINT_DEFAUT                                                             \
                                              ,mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss()                                  \
                                              ,Gvar_sHOTE                                                                               \
                                              ,Gvar_HOST                                                                                \
                                              ,identifiant_de_branches_paralleles                                                       \
                                              ,commande_courante                                                                        \
                                              ,fichier_courant                                                                          \
                                              ,fonction_courante                                                                        \
                                              ,ligne_courante                                                                           \
                                              ,MESSAGE_S                                                                                \
                                              ,en_tete                                                                                  \
                                              ,Message1                                                                                 \
                                              ,message2                                                                                 \
                                               )                                                                                        \
                                        );                                                                                              \
                                        /* Edition des informations utiles au defaut.                                                */ \
                                        /*                                                                                           */ \
                                        /* L'edition de 'identifiant_de_branches_paralleles' a ete introduit le 20111121141723 afin  */ \
                                        /* de faciliter l'usage de 'execRVB' par exemple...                                          */ \
                                        /*                                                                                           */ \
                                        /* Les 'IFEQ_chaine(...,C_VIDE)'s sont destines a detecter les usages de 'PRINT_DEFAUT(...)' */ \
                                        /* pour 'DEBUT_DES_Prin(...)', 'DEBUT_DES_Prer(...)' et 'DEBUT_DES_Prme(...)'...             */ \
                                                                                                                                        \
                                   CALZ_FreCC(format_EGAq____gPRINT_DEFAUT);                                                            \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              ESaveModifyVariable(Logical,Prer_____editer_les_messages_d_en_tete);                                      \
                                                                                                                                        \
                              CALZ_FreDD(Message1);                                                                                     \
                                        /* Liberation de l'espace contenant le message ameliore (introduit le 20031101192055 car,    */ \
                                        /* en effet, il manquait...).                                                                */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '05'     */ \
                                        /* introduit le 20111121143034 pour 'identifiant_de_branches_paralleles' et faciliter        */ \
                                        /* donc, par exemple, l'usage de 'execRVB'...                                                */
#Aifdef   gPRINT_DEFAUT_VERSION_05
#Eifdef   gPRINT_DEFAUT_VERSION_05

#ifdef    gPRINT_DEFAUT_VERSION_06
#    define    gPRINT_DEFAUT(en_tete,message1,message2,commande_courante,fichier_courant,fonction_courante,ligne_courante)              \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(PRINT_DEFAUT_____editer_les_messages))                                                            \
                              Bblock                                                                                                    \
                              DEFV(Logical,INIT(EN_TETE_Prin_Prer_Prme                                                                  \
                                               ,I3ET(IFEQ_chaine(en_tete,C_VIDE)                                                        \
                                                    ,IFEQ_chaine(message1,C_VIDE)                                                       \
                                                    ,IFEQ_chaine(message2,C_VIDE)                                                       \
                                                     )                                                                                  \
                                                )                                                                                       \
                                   );                                                                                                   \
                                        /* Afin de savoir si l'appel a 'print_defaut(...)' vient de 'PRINT_DEFAUT(...)' ou           */ \
                                        /* de 'PRINT_EN_TETE_Prin_Prer_Prme(...)'.                                                   */ \
                              DEFV(CHAR,INIT(POINTERc(Message1),CHAINE_UNDEF));                                                         \
                              ckMalo(Message1,chain_taille(message1),print_defaut_____compteur_des_kMalo);                              \
                                        /* Copie de 'message1' destine a mettre en majuscule son premier caractere.                  */ \
                                                                                                                                        \
                              CALS(chain_copie(Message1,message1));                                                                     \
                              EGAL(PREMIER_CARACTERE_ITb0(Message1)                                                                     \
                                  ,conversion_d_un_caractere_minuscule_en_un_caractere_majuscule(PREMIER_CARACTERE_ITb0(Message1))      \
                                   );                                                                                                   \
                                        /* Mise en majuscule du premier caractere de 'message1'...                                   */ \
                                                                                                                                        \
                              BSaveModifyVariable(Logical,Prer_____editer_les_messages_d_en_tete,FAUX);                                 \
                                        /* A cause des 'Prer?(...)' qui vont suivre...                                               */ \
                                                                                                                                        \
                              Test(IL_FAUT(gPRINT_DEFAUT_____n_editer_que_le_message_principal))                                        \
                                   Bblock                                                                                               \
                                   Test(EST_VRAI(EN_TETE_Prin_Prer_Prme))                                                               \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        CAL1(Prer2("\n%s : %s.\n"                                                                       \
                                                  ,en_tete                                                                              \
                                                  ,Message1                                                                             \
                                                   )                                                                                    \
                                             );                                                                                         \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   DEFV(CHAR,INIC(POINTERc(format_EGAq____gPRINT_DEFAUT)                                                \
                                                 ,chain_Aconcaten2("\n[%s][%s=%s][pid=%d][%s]['%s'-'%s']['%s(...)'#%d][%s] "            \
                                                                  ,COND(EST_VRAI(EN_TETE_Prin_Prer_Prme)                                \
                                                                       ," : "                                                           \
                                                                       ,"%s : %s [%s].\n"                                               \
                                                                        )                                                               \
                                                                   )                                                                    \
                                                  )                                                                                     \
                                        );                                                                                              \
                                                                                                                                        \
                                   CAL1(PrerD(format_EGAq____gPRINT_DEFAUT                                                              \
                                             ,mise_de_la_date_courante_au_format_____AAAAMMJJhhmmss()                                   \
                                             ,Gvar_sHOTE                                                                                \
                                             ,Gvar_HOST                                                                                 \
                                             ,Gpid()                                                                                    \
                                             ,identifiant_de_branches_paralleles                                                        \
                                             ,commande_courante                                                                         \
                                             ,fichier_courant                                                                           \
                                             ,fonction_courante                                                                         \
                                             ,ligne_courante                                                                            \
                                             ,MESSAGE_S                                                                                 \
                                             ,en_tete                                                                                   \
                                             ,Message1                                                                                  \
                                             ,message2                                                                                  \
                                              )                                                                                         \
                                        );                                                                                              \
                                        /* Edition des informations utiles au defaut.                                                */ \
                                                                                                                                        \
                                   CALZ_FreCC(format_EGAq____gPRINT_DEFAUT);                                                            \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              ESaveModifyVariable(Logical,Prer_____editer_les_messages_d_en_tete);                                      \
                                                                                                                                        \
                              CALZ_FreDD(Message1);                                                                                     \
                                        /* Liberation de l'espace contenant le message ameliore.                                     */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Macro generale d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...) version '06'     */ \
                                        /* introduite le 20181227120657 qui donne le 'pid' du process, ce qui est utile lorsque      */ \
                                        /* plusieurs commandes identiques se succedent (par exemple dans un '$Z')...                 */
#Aifdef   gPRINT_DEFAUT_VERSION_06
#Eifdef   gPRINT_DEFAUT_VERSION_05

#define   PRINT_DEFAUT(en_tete,message1,message2,editer_ces_messages)                                                                   \
                    Bblock                                                                                                              \
                    print_defaut(en_tete,message1,message2                                                                              \
                                ,nom_de_la_commande_courante                                                                            \
                                ,FICHIER_COURANT_ABSOLU_x                                                                               \
                                ,NomDeLaFonctionCourante                                                                                \
                                ,LIGNE_COURANTE                                                                                         \
                                ,editer_ces_messages                                                                                    \
                                 );                                                                                                     \
                                        /* Edition du message courant...                                                             */ \
                                        /*                                                                                           */ \
                                        /* Le nom de la fonction courante a ete introduit le 20051124085928...                       */ \
                    Eblock                                                                                                              \
                                        /* Macro d'edition d'un message de DEFAUT (ERREUR ou ATTENTION...). On notera le passage     */ \
                                        /* par la fonction 'print_defaut(...)' introduit le 1995040600 afin de reduire simultanement */ \
                                        /* la taille des source '$c' et des executable '$X'. On notera l'utilisation du symbole      */ \
                                        /* 'FICHIER_COURANT' et non pas de 'PROGRAMME_COURANT_RELATIF_A_x' (malheureusement...),     */ \
                                        /* car, en effet, 'FICHIER_COURANT' est reellement le fichier courant (compte-tenu de        */ \
                                        /* l'imbrication des 'include's) alors que 'PROGRAMME_COURANT_RELATIF_A_x' est le nom du     */ \
                                        /* programme que l'on compile ('v $xcc/cpp$Z').                                              */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20040924143541 le remplacement de 'FICHIER_COURANT_RELATIF' (qui en fait     */ \
                                        /* jusqu'au 20040924143237 s'appelait 'FICHIER_COURANT') par 'FICHIER_COURANT_ABSOLU' et     */ \
                                        /* ce afin de supprimer certaines ambiguites (par exemple entre les deux programmes          */ \
                                        /* 'v $xcg/scale$K' et 'v $xci/scale$K').                                                    */ \
                                        /*                                                                                           */ \
                                        /* En fait, le 20040924152929 je reviens a 'FICHIER_COURANT_RELATIF' d'une part pour des     */ \
                                        /* raisons de portabilite et d'autre part parce que le probleme d'ambiguite evoque ci-dessus */ \
                                        /* a ete regle grace a la modification 'v $xcc/cpp$Z 20040924141922'...                      */ \
                                        /*                                                                                           */ \
                                        /* Le 20120412092137, 'FICHIER_COURANT_ABSOLU_x' a remplace 'FICHIER_COURANT_RELATIF'        */ \
                                        /* suite a la modification 'v $Falias_vi 20120408185254' qui a supprime l'absolutisation     */ \
                                        /* des noms de fichier, si necessaire, sous 'vi'...                                          */

#define   PRINT_EN_TETE_Prin_Prer_Prme(editer_ces_messages)                                                                             \
                    Bblock                                                                                                              \
                    print_defaut(C_VIDE,C_VIDE,C_VIDE                                                                                   \
                                ,nom_de_la_commande_courante                                                                            \
                                ,FICHIER_COURANT_ABSOLU_x                                                                               \
                                ,NomDeLaFonctionCourante                                                                                \
                                ,LIGNE_COURANTE                                                                                         \
                                ,editer_ces_messages                                                                                    \
                                 );                                                                                                     \
                                        /* Edition du message courant...                                                             */ \
                    Eblock                                                                                                              \
                                        /* Macro d'edition de l'en-tete eventuelle des 'Prin(...)'s, 'Prer(...)'s et 'Prme(...)'s    */ \
                                        /* introduite le 20111121155246...                                                           */ \
                                        /*                                                                                           */ \
                                        /* J'ai essaye d'introduire un indicateur 'EN_TETE_Prin_Prer_Prme' qui aurait fait la        */ \
                                        /* difference entre 'PRINT_DEFAUT(...)' et 'PRINT_EN_TETE_Prin_Prer_Prme(...)' dans la       */ \
                                        /* fonction 'print_defaut(...)'. Malheureusement cette fonction est appelee avant sa         */ \
                                        /* definition 'v $xig/fonct$vv$FON print_defaut'. Alors un argument valant 'VRAI' (ou        */ \
                                        /* 'FAUX') se retrouve avec le type 'int' tant que 'EN_TETE_Prin_Prer_Prme' n'a pas ete      */ \
                                        /* type 'long int' dans la definition de 'print_defaut(...)'. D'ou cette solution qui        */ \
                                        /* consiste a tester les chaines vides...                                                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20120412092137, 'FICHIER_COURANT_ABSOLU_x' a remplace 'FICHIER_COURANT_RELATIF'        */ \
                                        /* suite a la modification 'v $Falias_vi 20120408185254' qui a supprime l'absolutisation     */ \
                                        /* des noms de fichier, si necessaire, sous 'vi'...                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   O B T E N I R   L A   D A T E  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
TypedefP(SecondesMicroSecondes,STRU(timeval))
                                        /* Structure definissant la duree ecoulee en {secondes,micro-secondes}.                      */
DEFV(Extern,DEFV(vrai_Int_de_base,gettimeofday()));

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#    define    GET_DUREE_ECOULEE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(SecondesMicroSecondes)                                   \
                         gettimeofday(SecondesMicroSecondes,ARGUMENT_INUTILE)                                                           \
                                        /* Acces a duree ecoulee en {secondes,micro-secondes}.                                       */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )
#    define    GET_DUREE_ECOULEE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(SecondesMicroSecondes)                                   \
                         gettimeofday(SecondesMicroSecondes)                                                                            \
                                        /* Acces a duree ecoulee en {secondes,micro-secondes}.                                       */
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
           )

#define   LE_01_01_1970_A_00_00_00_ANNEE                                                                                                \
                    Gval("ANNEE_1970")
#define   LE_01_01_1970_A_00_00_00_MOIS                                                                                                 \
                    INTE(01)
#define   LE_01_01_1970_A_00_00_00_JOUR                                                                                                 \
                    INTE(01)
#define   LE_01_01_1970_A_00_00_00_HEURES                                                                                               \
                    INTE(00)
#define   LE_01_01_1970_A_00_00_00_MINUTES                                                                                              \
                    INTE(00)
#define   LE_01_01_1970_A_00_00_00_SECONDES                                                                                             \
                    INTE(00)
#define   LE_01_01_1970_A_00_00_00_TZ                                                                                                   \
                    "UTC"
                                        /* Date de "naissance" de 'UNIX'. On notera que le fuseau horaire "UTC" correspond a une     */
                                        /* variable '$TZ' absente, c'est-a-dire pour laquelle a ete fait :                           */
                                        /*                                                                                           */
                                        /*                  unsetenv  TZ                                                             */
                                        /*                                                                                           */
                                        /* ce qui est different du cas ou '$TZ' serait existante, mais vide. La notion de fuseau     */
                                        /* horaire explique pourquoi, jusqu'au 19991108174034, j'ai cru que la date de "naissance"   */
                                        /* de 'UNIX' etait le 01/01/1970 a 01:00:00, alors qu'elle est le 01/01/1970 a 00:00:00.     */
                                        /*                                                                                           */
                                        /* A cause de 'v $xcg/dure01011970$K LE_01_01_1970_A_00_00_00_SECONDES' sur '$LACT19' qui    */
                                        /* donnait par exemple :                                                                     */
                                        /*                                                                                           */
                                        /*        duree en secondes ecoulee depuis le 01/01/1970 00:00:47695611822080 UTC = ...      */
                                        /*                                                             --------------                */
                                        /*                                                                                           */
                                        /* Cette anomalie etait liee de toute evidence au fait que les definitions precedentes       */
                                        /* (et en particulier 'LE_01_01_1970_A_00_00_00_SECONDES') etaient mal traitees dans les     */
                                        /* 'v $xcg/dure01011970$K CAL2.Prin7'...                                                     */

#define   DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Secondes,MicroSecondes)                                                         \
                    Bblock                                                                                                              \
                    DEFV(SecondesMicroSecondes,duree_ecoulee);                                                                          \
                    DEFV(SecondesMicroSecondes,INIT(POINTERs(Pduree_ecoulee),ADRESSE(duree_ecoulee)));                                  \
                                        /* Definition de la structure de recuperation de duree ecoulee en {secondes,micro-secondes}. */ \
                                                                                                                                        \
                    CALZ(GET_DUREE_ECOULEE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Pduree_ecoulee));                              \
                                        /* Acces a duree ecoulee en {secondes,micro-secondes}.                                       */ \
                                                                                                                                        \
                    EGAL(Secondes,ASI1(Pduree_ecoulee,tv_sec));                                                                         \
                                        /* Duree ecoulee depuis le 19700101000000 en secondes.                                       */ \
                    EGAL(MicroSecondes,ASI1(Pduree_ecoulee,tv_usec));                                                                   \
                                        /* Duree ecoulee depuis 00:00:00 ce jour en micro-secondes.                                  */ \
                    Eblock                                                                                                              \
                                        /* Acces a duree ecoulee en {secondes,micro-secondes}.                                       */

DEFV(Extern,DEFV(Char,POINTERc(ctime())));
#define   CONVERSION_D_UNE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00_EN_UNE_DATE(Date,Secondes)                                     \
                    Bblock                                                                                                              \
                    DEFV(GetTime_t2,INIT(duree,Secondes));                                                                              \
                                        /* Typage correct...                                                                         */ \
                                                                                                                                        \
                    EGAL(Date,ptCARA(ctime(ADRESSE(duree))));                                                                           \
                    Eblock                                                                                                              \
                                        /* Conversion d'une duree type                                                               */ \
                                        /* 'GET_DUREE_ECOULEE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(...)'                    */ \
                                        /* exprimee en secondes en une date en format "chaine de caracteres"...                      */

#define   CRITERE_1_DE_BISSEXTILITE_DES_ANNEES                                                                                          \
                    PARE(400)
#define   CRITERE_2_DE_BISSEXTILITE_DES_ANNEES                                                                                          \
                    PARE(100)
#define   CRITERE_3_DE_BISSEXTILITE_DES_ANNEES                                                                                          \
                    PARE(4)
#define   PREMIERE_ANNEE_DU_CALENDRIER                                                                                                  \
                    PARE(1900)
#define   DERNIERE_ANNEE_DU_CALENDRIER                                                                                                  \
                    PARE(2037)
                                        /* Pour valider l'annee.                                                                     */

#define   PREMIER_MOIS_DE_L_ANNEE                                                                                                       \
                    UN
#define   DERNIER_MOIS_DE_L_ANNEE                                                                                                       \
                    DOUZE
                                        /* Pour valider le mois.                                                                     */

#define   PREMIER_JOUR_DU_MOIS                                                                                                          \
                    UN
#define   DERNIER_JOUR_DU_MOIS                                                                                                          \
                    longueur_du_mois_courant
                                        /* Pour valider le jour.                                                                     */

#define   PREMIERE_HEURE_DU_JOUR                                                                                                        \
                    ZERO
#define   DERNIERE_HEURE_DU_JOUR                                                                                                        \
                    PRED(HEURES_PAR_JOUR)
                                        /* Pour valider les heures.                                                                  */

#define   PREMIERE_MINUTE_DE_L_HEURE                                                                                                    \
                    ZERO
#define   DERNIERE_MINUTE_DE_L_HEURE                                                                                                    \
                    PRED(MINUTES_PAR_HEURE)
                                        /* Pour valider les minutes.                                                                 */

#define   PREMIERE_SECONDE_DE_LA_MINUTE                                                                                                 \
                    ZERO
#define   DERNIERE_SECONDE_DE_LA_MINUTE                                                                                                 \
                    PRED(SECONDES_PAR_MINUTE)
                                        /* Pour valider les secondes.                                                                */

DEFV(Extern,DEFV(GetTime_t2,mktime()));
#define   CONVERSION_D_UNE_DATE_EN_UNE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Duree,Annee,Mois,Jour,Heures,Minutes,Secondes)     \
                    Bblock                                                                                                              \
                    DEFV(GetTime_t1,date);                                                                                              \
                                        /* Date que l'on cherche a convertir en une duree.                                           */ \
                    DEFV(GetTime_t2,INIT(duree,UNDEF));                                                                                 \
                                        /* Duree ecoulee depuis le 01/01/1970.                                                       */ \
                                                                                                                                        \
                    Test(IFEXff(Annee,PREMIERE_ANNEE_DU_CALENDRIER,DERNIERE_ANNEE_DU_CALENDRIER))                                       \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("l'annee est invalide");                                                                          \
                         CAL1(Prer2("elle doit etre dans [%d,%d]\n",PREMIERE_ANNEE_DU_CALENDRIER,DERNIERE_ANNEE_DU_CALENDRIER));        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFEXff(Mois,PREMIER_MOIS_DE_L_ANNEE,DERNIER_MOIS_DE_L_ANNEE))                                                  \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("le mois est invalide");                                                                          \
                         CAL1(Prer2("il doit etre dans [%d,%d]\n",PREMIER_MOIS_DE_L_ANNEE,PREMIER_MOIS_DE_L_ANNEE));                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         DEFV(Logical,INIT(l_Annee_est_bissextile,LUNDEF));                                                             \
                                        /* L'annee 'Annee' est-elle bissextile ?                                                     */ \
                         DEFV(Int,INIT(nombre_de_mois_de_l_annee,UNDEF));                                                               \
                                        /* Nombre de mois de l'annee.                                                                */ \
                         DEFV(Int,INIT(longueur_du_mois_courant,UNDEF));                                                                \
                                        /* Longueur du mois courant...                                                               */ \
                                                                                                                                        \
                         Test(IZEQ(REST(Annee,CRITERE_1_DE_BISSEXTILITE_DES_ANNEES)))                                                   \
                              Bblock                                                                                                    \
                              EGAL(l_Annee_est_bissextile,VRAI);                                                                        \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Test(IZEQ(REST(Annee,CRITERE_2_DE_BISSEXTILITE_DES_ANNEES)))                                              \
                                   Bblock                                                                                               \
                                   EGAL(l_Annee_est_bissextile,FAUX);                                                                   \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Test(IZEQ(REST(Annee,CRITERE_3_DE_BISSEXTILITE_DES_ANNEES)))                                         \
                                        Bblock                                                                                          \
                                        EGAL(l_Annee_est_bissextile,VRAI);                                                              \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        EGAL(l_Annee_est_bissextile,FAUX);                                                              \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(EST_FAUX(l_Annee_est_bissextile))                                                                         \
                              Bblock                                                                                                    \
                              DEFV(Local,DEFV(Int                                                                                       \
                                             ,INIS(DTb0(liste_des_mois_de_l_annee),IstructL12(31,28,31,30,31,30,31,31,30,31,30,31))     \
                                              )                                                                                         \
                                   );                                                                                                   \
                                        /* Definition des douze mois de l'annee non bissextile. L'utilisation de 'Local' est due     */ \
                                        /* a 'SYSTEME_HP???_HPUX_CC' qui sinon donne les messages :                                  */ \
                                        /*                                                                                           */ \
                                        /*                  Automatic aggregate initialization is an ANSI feature.                   */ \
                                        /*                                                                                           */ \
                                        /* puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Sizeof: zero size.                                                       */ \
                                        /*                                                                                           */ \
                                        /* ce qui est bien ennuyeux...                                                               */ \
                                                                                                                                        \
                              EGAL(nombre_de_mois_de_l_annee,bDIV(SIZE_GENERAL(liste_des_mois_de_l_annee),size_Int));                   \
                                        /* Nombre de mois de l'annee afin de valider 'liste_des_mois_de_l_annee' definie ci-dessus.  */ \
                              EGAL(longueur_du_mois_courant,ITb1(liste_des_mois_de_l_annee,INDX(Mois,PREMIER_MOIS_DE_L_ANNEE)));        \
                                        /* Longueur du mois courant de l'annee non bissextile...                                     */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              DEFV(Local,DEFV(Int                                                                                       \
                                             ,INIS(DTb0(liste_des_mois_de_l_annee),IstructL12(31,29,31,30,31,30,31,31,30,31,30,31))     \
                                              )                                                                                         \
                                   );                                                                                                   \
                                        /* Definition des douze mois de l'annee bissextile. L'utilisation de 'Local' est due         */ \
                                        /* a 'SYSTEME_HP???_HPUX_CC' qui sinon donne les messages :                                  */ \
                                        /*                                                                                           */ \
                                        /*                  Automatic aggregate initialization is an ANSI feature.                   */ \
                                        /*                                                                                           */ \
                                        /* puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Sizeof: zero size.                                                       */ \
                                        /*                                                                                           */ \
                                        /* ce qui est bien ennuyeux...                                                               */ \
                                                                                                                                        \
                              EGAL(nombre_de_mois_de_l_annee,bDIV(SIZE_GENERAL(liste_des_mois_de_l_annee),size_Int));                   \
                                        /* Nombre de mois de l'annee afin de valider 'liste_des_mois_de_l_annee' definie ci-dessus.  */ \
                              EGAL(longueur_du_mois_courant,ITb1(liste_des_mois_de_l_annee,INDX(Mois,PREMIER_MOIS_DE_L_ANNEE)));        \
                                        /* Longueur du mois courant de l'annee bissextile...                                         */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IFNE(nombre_de_mois_de_l_annee,NBRE(PREMIER_MOIS_DE_L_ANNEE,DERNIER_MOIS_DE_L_ANNEE)))                    \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("les mois de l'annee sont en nombre incorrect");                                             \
                              CAL1(Prer1("il en faut %d\n",NBRE(PREMIER_MOIS_DE_L_ANNEE,DERNIER_MOIS_DE_L_ANNEE)));                     \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IFEXff(Jour,PREMIER_JOUR_DU_MOIS,DERNIER_JOUR_DU_MOIS))                                                   \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("le jour est invalide");                                                                     \
                              CAL1(Prer2("il doit etre dans [%d,%d]\n",PREMIER_JOUR_DU_MOIS,DERNIER_JOUR_DU_MOIS));                     \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFEXff(Heures,PREMIERE_HEURE_DU_JOUR,DERNIERE_HEURE_DU_JOUR))                                                  \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("les heures sont invalides");                                                                     \
                         CAL1(Prer2("elles doivent etre dans [%d,%d]\n",PREMIERE_HEURE_DU_JOUR,DERNIERE_HEURE_DU_JOUR));                \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFEXff(Minutes,PREMIERE_MINUTE_DE_L_HEURE,DERNIERE_MINUTE_DE_L_HEURE))                                         \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("les minutes sont invalides");                                                                    \
                         CAL1(Prer2("elles doivent etre dans [%d,%d]\n",PREMIERE_MINUTE_DE_L_HEURE,DERNIERE_MINUTE_DE_L_HEURE));        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFEXff(Secondes,PREMIERE_SECONDE_DE_LA_MINUTE,DERNIERE_SECONDE_DE_LA_MINUTE))                                  \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("les secondes sont invalides");                                                                   \
                         CAL1(Prer2("elles doivent etre dans[  %d,%d]\n",PREMIERE_SECONDE_DE_LA_MINUTE,DERNIERE_SECONDE_DE_LA_MINUTE)); \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    EGAL(ASD1(date,tm_year),bSOU(Annee,CONVERSION_DUREE_DATE_TRANSLATION_DE_L_ANNEE));                                  \
                    EGAL(ASD1(date,tm_mon),bSOU(Mois,CONVERSION_DUREE_DATE_TRANSLATION_DU_MOIS));                                       \
                    EGAL(ASD1(date,tm_mday),bSOU(Jour,CONVERSION_DUREE_DATE_TRANSLATION_DU_JOUR));                                      \
                    EGAL(ASD1(date,tm_hour),bSOU(Heures,CONVERSION_DUREE_DATE_TRANSLATION_DE_L_HEURE));                                 \
                    EGAL(ASD1(date,tm_min),bSOU(Minutes,CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_MINUTE));                               \
                    EGAL(ASD1(date,tm_sec),bSOU(Secondes,CONVERSION_DUREE_DATE_TRANSLATION_DE_LA_SECONDE));                             \
                    EGAL(ASD1(date,tm_isdst),CONVERSION_DUREE_DATE_NE_PAS_MODIFIER_LES_COMPOSANTES);                                    \
                                        /* Initialisation correcte de la date...                                                     */ \
                                                                                                                                        \
                    EGAL(duree,mktime(ADRESSE(date)));                                                                                  \
                    EGAL(Duree,INTE(duree));                                                                                            \
                                        /* Duree ecoulee depuis le 01/01/1970. ATTENTION, la capacite de 'mktime(...)' fait que      */ \
                                        /* la date argument ne peut etre ni anterieure au 01/01/1970 00:00:00 UTC, ni posterieure    */ \
                                        /* au 19/01/2038 03:14:07 UTC.                                                               */ \
                    Eblock                                                                                                              \
                                        /* Conversion d'une date au format "AAAA/MM/JJ/HH/mm/ss" en une duree en secondes de type    */ \
                                        /* 'GET_DUREE_ECOULEE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(...)'.                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   F A I R E   " D O D O "  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(Positive,sleep()));

#define   DODO(duree)                                                                                                                   \
                    Bblock                                                                                                              \
                    Test(IZGT(duree))                                                                                                   \
                         Bblock                                                                                                         \
                         CALZ(sleep(INTE(duree)));                                                                                      \
                                        /* Definition de la mise en attente (non nulle). ATTENTION, on notera le 'INTE(...)' au      */ \
                                        /* cas ou la duree demandee contiendrait, par exemple, un operateur du type 'MOIT(...)'...   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Attente synchrone de 'duree' secondes. On notera que fut verifie a l'aide du programme    */ \
                                        /* 'v $xtc/minute$c' que la duree des attentes etait correcte (ce que l'on a vu en verifiant */ \
                                        /* que 60 attentes d'une seconde duraient bien au total une minute, soit 60 secondes...).    */

#if       (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
           )
TypedefP(NanoDuree,STRU(timespec))
                                        /* Structure definissant la duree des "nano-attentes".                                       */
DEFV(Extern,DEFV(vrai_Int_de_base,nanosleep()));

#    define    PETIT_DODO(duree)                                                                                                        \
                                        /* La duree est exprimee en nano-secondes...                                                 */ \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(duree_sec,DIVI(INTE(duree),nano_secondes)));                                                     \
                         DEFV(Int,INIT(duree_nsec,REST(INTE(duree),nano_secondes)));                                                    \
                                        /* Definition de la duree en secondes et de la duree residuelle en nano-secondes...          */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20110531165758 qu'en fait la duree en secondes ne peut exceder deux secondes */ \
                                        /* sous peine de debordement dans les 'INTE(...)'s ci-dessus...                              */ \
                                                                                                                                        \
                         DODO(duree_sec);                                                                                               \
                                        /* La possibilite d'avoir une attente superieure a une seconde a ete introduite le           */ \
                                        /* 20110531162555 pour 'v $xcg/PhaseCrit.01$K PETIT_DODO'. On notera que l'on utilise        */ \
                                        /* 'DODO(duree_sec)' plutot que 'EGAL(ASD1(petite_dureeA,tv_sec),duree_sec)' ci-dessous      */ \
                                        /* afin de na pas modifier le test vi-apres...                                               */ \
                                                                                                                                        \
                         Test(IFET(IZGE(duree_nsec),IFLE(duree_nsec,nano_secondes)))                                                    \
                              Bblock                                                                                                    \
                              Test(IZGT(duree))                                                                                         \
                                   Bblock                                                                                               \
                                   DEFV(NanoDuree,petite_dureeA);                                                                       \
                                   DEFV(NanoDuree,INIT(POINTERs(Ppetite_dureeA),ADRESSE(petite_dureeA)));                               \
                                        /* Definition de la petite duree demandee Argument.                                          */ \
                                   DEFV(NanoDuree,petite_dureeR);                                                                       \
                                   DEFV(NanoDuree,INIT(POINTERs(Ppetite_dureeR),ADRESSE(petite_dureeR)));                               \
                                        /* Definition de la petite duree demandee Resultat.                                          */ \
                                                                                                                                        \
                                   EGAL(ASD1(petite_dureeA,tv_sec),ZERO);                                                               \
                                   EGAL(ASD1(petite_dureeA,tv_nsec),duree_nsec);                                                        \
                                        /* Initialisation sur la duree Argument.                                                     */ \
                                                                                                                                        \
                                   Tant(IL_Y_A_ERREUR(nanosleep(Ppetite_dureeA,Ppetite_dureeR)))                                        \
                                        Bblock                                                                                          \
                                        EGAL(ASD1(petite_dureeA,tv_sec),ASD1(petite_dureeR,tv_sec));                                    \
                                        EGAL(ASD1(petite_dureeA,tv_nsec),ASD1(petite_dureeR,tv_nsec));                                  \
                                        /* Ainsi, on boucle tant que la duree demandee n'est pas completement ecoulee...             */ \
                                        Eblock                                                                                          \
                                   ETan                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                        /* Une duree nulle ne provoque aucune attente...                                             */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("l'attente inferieure a une seconde demandee est negative ou superieure a une seconde");     \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Attente synchrone de 'duree' nano-secondes.                                               */
#Aif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
           )
#    define    PETIT_DODO(duree)                                                                                                        \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("la fonction d'attente inferieure a une seconde n'est pas implementee sur ce SYSTEME");        \
                         Eblock                                                                                                         \
                                        /* Attente synchrone de 'duree' nano-secondes.                                               */
#Eif      (         (defined(SYSTEME_APC_LinuxDebian_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxMandrake_GCC))                                                                            \
          ||        (defined(SYSTEME_APC_LinuxRedHat_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUbuntu_ICC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_GCC))                                                                              \
          ||        (defined(SYSTEME_APC_LinuxUlmint_ICC))                                                                              \
          ||        (defined(SYSTEME_SGIND308_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND324_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND3GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND408_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND424_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND4GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND508_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND524_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND5GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND808_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND824_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGIND8GA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA08_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDA24_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGINDAGA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A1_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A2_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO200A4_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO25224_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VA_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGO252VN_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCM801_IRIX_CC))                                                                                 \
          ||        (defined(SYSTEME_SGPCMA01_IRIX_CC))                                                                                 \
           )

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

#if       (         (! defined(SYSTEME_NWS3000_NEWSOS))                                                                                 \
           )
TypedefP(Int_clock,clock_t)
DEFV(Extern,DEFV(Int_clock,clock()));
#    define    CLOK                                                                                                                     \
                         clock()                                                                                                        \
                                        /* Definition du chronometre.                                                                */
#    define    NOMBRE_DE_TOPS_D_HORLOGE_PAR_SECONDE                                                                                     \
                         CLOCKS_PER_SEC                                                                                                 \
                                        /* Definition de l'horloge.                                                                  */

#    define    Bclock(commentaire,editer_le_chronometrage)                                                                              \
                                        /* A cause de l'introduction de 'v $xig/common$STR chronometrer_la_commande_courante',       */ \
                                        /* les deux membres du couple {Bclock,Eclock} ne sont plus necessairement au meme niveau     */ \
                                        /* des {Bblock,Eblock}. Le 'Bblock' qui figurait ici est donc supprime...                    */ \
                         DEFV(Int_clock,INIT(valeur_initiale_du_chronometre,CLOK));                                                     \
                                        /* On notera que pour eviter des problemes de format dans les 'Prin?(...)' qui suivent sur   */ \
                                        /* 'SYSTEME_SGO200A2_IRIX_CC', la variable 'valeur_initiale_du_chronometre' est passe du     */ \
                                        /* type 'LongInt' au type 'Int' le 19980925104908.                                           */ \
                         Test(IL_FAUT(editer_le_chronometrage))                                                                         \
                              Bblock                                                                                                    \
                              CAL3(Prme1("DEBUT DE CHRONOMETRAGE : %s\n"                                                                \
                                        ,commentaire                                                                                    \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* Mise en route du chronometre.                                                             */

#    define    NOMBRE_DE_CHIFFRES_DES_SECONDES                                                                                          \
                         NOMBRE_DE_CHIFFRES_DECIMAUX(SECONDES_PAR_MINUTE)
#    define    NOMBRE_DE_CHIFFRES_DES_MINUTES_                                                                                          \
                         NOMBRE_DE_CHIFFRES_DECIMAUX(MINUTES_PAR_HEURE)
#    define    NOMBRE_DE_CHIFFRES_DES_HEURES__                                                                                          \
                         DEUX
                                        /* Definitions introduites le 20170518183325...                                              */
#    define    Eclock(commentaire,editer_le_chronometrage)                                                                              \
                         Test(IL_FAUT(editer_le_chronometrage))                                                                         \
                              Bblock                                                                                                    \
                              DEFV(Int,INIT(nombre_de_secondes_pour_Eclock                                                              \
                                           ,INTE(bDIV(bSOU(CLOK,valeur_initiale_du_chronometre),NOMBRE_DE_TOPS_D_HORLOGE_PAR_SECONDE))  \
                                            )                                                                                           \
                                   );                                                                                                   \
                              DEFV(Int,INIT(nombre_de_milli_secondes_pour_Eclock                                                        \
                                           ,FRAm1(INTE(REST(bSOU(CLOK,valeur_initiale_du_chronometre)                                   \
                                                           ,NOMBRE_DE_TOPS_D_HORLOGE_PAR_SECONDE                                        \
                                                            )                                                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                            )                                                                                           \
                                   );                                                                                                   \
                                        /* Je note le 20180504144955 que la precision des milli-secondes suffit (d'autant plus       */ \
                                        /* que le nombre de micro-secondes a toujours ete termine par "000"...). On notera au        */ \
                                        /* passage le 20180504145942 que le nombre de milli-secondes semble toujours se terminer     */ \
                                        /* par "0"...                                                                                */ \
                                                                                                                                        \
                              DEFV(Int,INIT(nombre_de_secondes,UNDEF));                                                                 \
                              DEFV(Int,INIT(nombre_de_minutes_,UNDEF));                                                                 \
                              DEFV(Int,INIT(nombre_d_heures___,UNDEF));                                                                 \
                                                                                                                                        \
                              EGAL(nombre_de_secondes,REST(nombre_de_secondes_pour_Eclock,SECONDES_PAR_MINUTE));                        \
                              EGAL(nombre_de_minutes_,QUOD(nombre_de_secondes_pour_Eclock,SECONDES_PAR_MINUTE));                        \
                              EGAL(nombre_d_heures___,QUOD(nombre_de_minutes_,MINUTES_PAR_HEURE));                                      \
                              EGAL(nombre_de_minutes_,REST(nombre_de_minutes_,MINUTES_PAR_HEURE));                                      \
                                                                                                                                        \
                              PRINT_MESSAGE(C_VIDE,"CHRONOMETRAGE");                                                                    \
                              CAL3(Prme11("FIN DE CHRONOMETRAGE   : %s - temps ecoule : %d %s (%0*d:%0*d:%0*d) + %d %s.\n"              \
                                         ,commentaire                                                                                   \
                                         ,nombre_de_secondes_pour_Eclock                                                                \
                                         ,PLURIEL_S("seconde",nombre_de_secondes_pour_Eclock)                                           \
                                         ,NOMBRE_DE_CHIFFRES_DES_HEURES__,nombre_d_heures___                                            \
                                         ,NOMBRE_DE_CHIFFRES_DES_MINUTES_,nombre_de_minutes_                                            \
                                         ,NOMBRE_DE_CHIFFRES_DES_SECONDES,nombre_de_secondes                                            \
                                         ,nombre_de_milli_secondes_pour_Eclock                                                          \
                                         ,PLURIEL_S("milli-seconde",nombre_de_milli_secondes_pour_Eclock)                               \
                                          )                                                                                             \
                                   );                                                                                                   \
                                        /* ATTENTION : je note le 20230314102135 que 'FIN DE CHRONOMETRAGE' est reference            */ \
                                        /* explicitement dans 'v $xcc/cpp$Z ChAiNe7=.FIN.DE.CHRONOMETRAGE..'.                        */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* A cause de l'introduction de 'v $xig/common$STR chronometrer_la_commande_courante',       */ \
                                        /* les deux membres du couple {Bclock,Eclock} ne sont plus necessairement au meme niveau     */ \
                                        /* des {Bblock,Eblock}. Le 'Eblock' qui figurait ici est donc supprime...                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20190111141455, j'ai introduit un "." en bout de ligne...                              */ \
                                                                                                                                        \
                                        /* Et enfin, edition du temps ecoule depuis la mise en route du chronometre.                 */
#Aif      (         (! defined(SYSTEME_NWS3000_NEWSOS))                                                                                 \
           )

@    ifdef     SYSTEME_NWS3000_NEWSOS
                                        /* Cette hierarchie un peu compliquee de tests est uniquement due a l'existence des fichiers */
                                        /* de type "bootstrappables" (par exemple le '$c' issu de 'v $xbg/fonction$K'). Les          */
                                        /* includes suivants etant conditionnels, cette conditionnalite doit apparaitre dans les     */
                                        /* fichiers '$c'...                                                                          */
@         include   <sys/resource.h>
@    Aifdef    SYSTEME_NWS3000_NEWSOS
@    Eifdef    SYSTEME_NWS3000_NEWSOS

TypedefP(Comptabilite,STRU(rusage))
                                        /* Structure definissant la comptabilite.                                                    */
DEFV(Extern,DEFV(Void,getrusage()));
#    define    CLOK(Pkomptabilite)                                                                                                      \
                         getrusage(RUSAGE_SELF,Pkomptabilite)                                                                           \
                                        /* Definition du chronometre.                                                                */

#    define    Bclock(commentaire,editer_le_chronometrage)                                                                              \
                                        /* A cause de l'introduction de 'v $xig/common$STR chronometrer_la_commande_courante',       */ \
                                        /* les deux membres du couple {Bclock,Eclock} ne sont plus necessairement au meme niveau     */ \
                                        /* des {Bblock,Eblock}. Le 'Bblock' qui figurait ici est donc supprime...                    */ \
                         DEFV(Comptabilite,comptabilite);                                                                               \
                         DEFV(Comptabilite,INIT(POINTERs(Pcomptabilite),ADRESSE(comptabilite)));                                        \
                                        /* Definition de la comptabilite a utiliser pour faire le chronometrage.                     */ \
                         DEFV(Int,INIT(valeur_initiale_du_chronometre,UNDEF));                                                          \
                         DEFV(Int,INIT(valeur_finale_du_chronometre,UNDEF));                                                            \
                                        /* Definition du temps au debut et a la fin du chronometrage.                                */ \
                         CALZ(CLOK(Pcomptabilite));                                                                                     \
                         EGAL(valeur_initiale_du_chronometre,ASI2(Pcomptabilite,ru_utime,tv_sec));                                      \
                                        /* Memorisation du temps de debut du chronometrage.                                          */ \
                         Test(IL_FAUT(editer_le_chronometrage))                                                                         \
                              Bblock                                                                                                    \
                              CAL3(Prme1("DEBUT DE CHRONOMETRAGE : %s\n"                                                                \
                                        ,commentaire                                                                                    \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* Mise en route du chronometre.                                                             */

#    define    Eclock(commentaire,editer_le_chronometrage)                                                                              \
                         CALZ(CLOK(Pcomptabilite));                                                                                     \
                         EGAL(valeur_finale_du_chronometre,ASI2(Pcomptabilite,ru_utime,tv_sec));                                        \
                                        /* Memorisation du temps de fin du chronometrage.                                            */ \
                         Test(IL_FAUT(editer_le_chronometrage))                                                                         \
                              Bblock                                                                                                    \
                              DEFV(Int,INIT(nombre_de_secondes_pour_Eclock                                                              \
                                           ,bSOU(valeur_finale_du_chronometre,valeur_initiale_du_chronometre)                           \
                                            )                                                                                           \
                                   );                                                                                                   \
                                                                                                                                        \
                              CAL3(Prme3("FIN DE CHRONOMETRAGE   : %s - temps ecoule : %d %s\n"                                         \
                                        ,commentaire                                                                                    \
                                        ,nombre_de_secondes_pour_Eclock                                                                 \
                                        ,PLURIEL_S("seconde",nombre_de_secondes_pour_Eclock)                                            \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                        /* A cause de l'introduction de 'v $xig/common$STR chronometrer_la_commande_courante',       */ \
                                        /* les deux membres du couple {Bclock,Eclock} ne sont plus necessairement au meme niveau     */ \
                                        /* des {Bblock,Eblock}. Le 'Eblock' qui figurait ici est donc supprime...                    */ \
                                                                                                                                        \
                                        /* Et enfin, edition du temps ecoule depuis la mise en route du chronometre.                 */
#Eif      (         (! defined(SYSTEME_NWS3000_NEWSOS))                                                                                 \
           )

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   M A T H E M A T I Q U E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Int_de_base,finite()));
DEFV(Extern,DEFV(vrai_Int_de_base,isnan()));
#define   EST_UN_BON_Float_FINI(x)                                                                                                      \
                    IZNE(finite(DPRE(x)))                                                                                               \
                                        /* Verifie que 'x' est un bon nombre de type 'Float' (introduit le 20030213090838, le nom    */ \
                                        /* ayant ete change de 'EST_UN_NON_Float_FINI(...)' en 'EST_UN_BON_Float_FINI(...)' le       */ \
                                        /* 20030301101611, le nom precedent n'etant pas correct par rapport au 'IZNE(...)').         */

DEFV(Extern,DEFV(vrai_Double_de_base,floor()));
#define   AINT(x)                                                                                                                       \
                    FLOT(floor(DPRE(x)))                                                                                                \
                                        /* Partie entiere exprimee en Double precision de 'x' lui-meme en double-precision.          */

DEFV(Extern,DEFV(vrai_Double_de_base,fmod()));
#define   fREST(a,b)                                                                                                                    \
                    FLOT(fmod(DPRE(a),DPRE(b)))                                                                                         \
                                        /* Reste "generalise" de la division de 'a' par 'b' en double-precision. On notera que       */ \
                                        /* 'fmod(...)' et donc 'fREST(a,b)' renvoient un reste du signe de 'a'. On notera que l'on   */ \
                                        /* a les proprietes suivantes :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  dividende = N*diviseur + reste                                           */ \
                                        /*                                                                                           */ \
                                        /* 'N' representant un entier,                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  |reste| < |diviseur|                                                     */ \
                                        /*                                                                                           */ \
                                        /* le dividende etant 'a' et le diviseur etant 'b'.                                          */
DEFV(Extern,DEFV(vrai_Double_de_base,frexp()));
#define   xFLOT(x,exposant)                                                                                                             \
                    FLOT(frexp(DPRE(x),ADRESSE(INT(exposant))))                                                                         \
                                        /* Extraction de la mantisse et de l'exposant du nombre flottant 'x'.                        */ \
DEFV(Extern,DEFV(vrai_Double_de_base,ldexp()));
#define   cFLOT(mantisse,exposant)                                                                                                      \
                    FLOT(ldexp(DPRE(mantisse),DPRE(exposant)))                                                                          \
                                        /* Construction d'un nombre flottant dont on se donne la mantisse et l'exposant.             */

DEFV(Extern,DEFV(vrai_Double_de_base,sqrt()));
#define   RACD(x)                                                                                                                       \
                    FLOT(sqrt(DPRE(x)))                                                                                                 \
                                        /* Racine carree de 'x' en double-precision.                                                 */

DEFV(Extern,DEFV(vrai_Double_de_base,log10()));
#define   LO1D(x)                                                                                                                       \
                    FLOT(log10(DPRE(x)))                                                                                                \
                                        /* Logarithme decimal de 'x' en double-precision.                                            */
DEFV(Extern,DEFV(vrai_Double_de_base,log()));
#define   LOGD(x)                                                                                                                       \
                    FLOT(log(DPRE(x)))                                                                                                  \
                                        /* Logarithme neperien de 'x' en double-precision.                                           */

DEFV(Extern,DEFV(vrai_Double_de_base,pow()));
#define   PUID(x,y)                                                                                                                     \
                    FLOT(pow(DPRE(x),DPRE(y)))                                                                                          \
                                        /* Elevation de 'x' a la puissance 'y' en double-precision.                                  */
#define   MOND(x,n)                                                                                                                     \
                    FLOT(pow(DPRE(x),DPRE(n)))                                                                                          \
                                        /* Elevation de 'x' a la puissance 'n' en double-precision ; cette subtilite a ete           */ \
                                        /* introduite uniquement pour permettre la derivation formelle de la fonction puissance      */ \
                                        /* entiere 'n' meme lorsque 'x' est negatif (voir a ce propos le commentaire relatif a       */ \
                                        /* 'd_PUIX(...)' dans '$xil/defi_K2$vv$DEF'). D'autre part, il ne suffisait pas de definir : */ \
                                        /*                                                                                           */ \
                                        /*                  #define   MONX(x,n)                                                   \  */ \
                                        /*                                      PUID(x,n)                                            */ \
                                        /*                                                                                           */ \
                                        /* dans '$xil/defi_K2$vv$DEF', et ce a cause du fichier '$xcc/cpp$D/derive_Fmath$sed' car    */ \
                                        /* alors de derivations d'ordre superieur a 1 on aurait vu 'MONX(...)' etre remplace par     */ \
                                        /* 'PUIX(...)' via 'PUID(...)'. Enfin, le nom 'MON' a ete choisi comme etant les premieres   */ \
                                        /* lettres de "monome"...                                                                    */
DEFV(Extern,DEFV(vrai_Double_de_base,exp()));
#define   EXPD(x)                                                                                                                       \
                    FLOT(exp(DPRE(x)))
#define   d_EXPD(x)                                                                                                                     \
                    EXPD(x)
                                        /* Elevation de 'e' a la puissance 'x' en double-precision.                                  */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20230605141412 (elle avait ete oubliee...).                  */

DEFV(Extern,DEFV(vrai_Double_de_base,cos()));
#define   COSD(x)                                                                                                                       \
                    FLOT(cos(DPRE(x)))
#define   d_COSD(x)                                                                                                                     \
                    FLOT(NEGA(SIND(x)))
                                        /* Cosinus double-precision "de base" de l'angle 'x' exprime en radian,                      */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20171016121953 par symetrie avec 'd_TANG(...)'.              */

#if       (         ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
           )
#    TestADef  BUG_SYSTEME_SG_C_sin                                                                                                     \
                                        /* La fonction 'sin(...)' donne un resultat imprecis au voisinage des multiples de PI (voir  */ \
                                        /* le programme 'v $Dbugs/SGPCM801$D/IRIX$D/CC$D/sin.01$c').                                 */
#Aif      (         ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
           )
#Eif      (         ((defined(SYSTEME_SG4D20G_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                              \
          ||        ((defined(SYSTEME_SG4D25TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D310VGX_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                           \
          ||        ((defined(SYSTEME_SG4D35TG_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SG4D85GT_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND308_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND324_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND3GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND408_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND424_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND4GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND508_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND524_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND5GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND808_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND824_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGIND8GA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA08_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDA24_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGINDAGA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A1_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A2_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO200A4_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO25224_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VA_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGO252VN_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCM801_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
          ||        ((defined(SYSTEME_SGPCMA01_IRIX_CC)) && (nSYSTEM_RELEASE >= 600010000))                                             \
           )

DEFV(Extern,DEFV(vrai_Double_de_base,sin()));
#define   SIND(x)                                                                                                                       \
                    FLOT(sin(DPRE(x)))
#define   d_SIND(x)                                                                                                                     \
                    FLOT(NEUT(COSD(x)))
                                        /* Sinus double-precision "de base" de l'angle 'x' exprime en radian.                        */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20171016121953 par symetrie avec 'd_TANG(...)'.              */

DEFV(Extern,DEFV(vrai_Double_de_base,tan()));
#define   TANG(x)                                                                                                                       \
                    FLOT(tan(DPRE(x)))
#define   d_TANG(x)                                                                                                                     \
                    FLOT(ADD2(FU,EXP2(TANG(x))))
                                        /* Tangente double-precision "de base" de l'angle 'x' exprime en radian.                     */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20171016121953 pour 'v $xcg/TANX.01$K TANG'...               */
DEFV(Extern,DEFV(vrai_Double_de_base,atan()));
#define   ATAD(x)                                                                                                                       \
                    FLOT(atan(DPRE(x)))                                                                                                 \
                                        /* Fonction inverse de 'TANG(...)' (introduite le 20120526193255).                           */

DEFV(Extern,DEFV(vrai_Double_de_base,atan2()));

#if       (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                     \
          ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                                  \
          ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND308_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND324_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND408_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND424_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND508_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND524_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND808_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND824_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO25224_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                                    \
           )
#    define    ARTG(y,x)                                                                                                                \
                         COND(IFOU(IZNE(x),IZNE(y))                                                                                     \
                             ,FLOT(atan2(DPRE(y),DPRE(x)))                                                                              \
                             ,FZERO                                                                                                     \
                              )                                                                                                         \
                                        /* Arc-tangente de l'argument y/x dans [-PI,+PI] ; cas des SYSTEMEs qui n'acceptent pas      */ \
                                        /* le cas indetermine (soit x=y=0)...                                                        */
#Aif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                     \
          ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                                  \
          ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND308_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND324_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND408_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND424_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND508_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND524_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND808_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND824_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO25224_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                                    \
           )
#    define    ARTG(y,x)                                                                                                                \
                         FLOT(atan2(DPRE(y),DPRE(x)))                                                                                   \
                                        /* Arc-tangente de l'argument y/x dans [-PI,+PI].                                            */
#Eif      (         (defined(SYSTEME_CRAY2_UNICOS))                                                                                     \
          ||        (defined(SYSTEME_CRAYC98_UNICOS))                                                                                   \
          ||        (defined(SYSTEME_CRAYC916_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP1_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP2_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_CRAYYMP4_UNICOS))                                                                                  \
          ||        (defined(SYSTEME_HP705_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP710_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP720_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP750_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP755_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_HP819_HPUX_CC))                                                                                    \
          ||        (defined(SYSTEME_SG4D20G_IRIX))                                                                                     \
          ||        (defined(SYSTEME_SG4D25TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D310VGX_IRIX))                                                                                  \
          ||        (defined(SYSTEME_SG4D35TG_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SG4D85GT_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND308_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND324_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND3GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND408_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND424_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND4GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND508_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND524_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND5GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND808_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND824_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGIND8GA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA08_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDA24_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGINDAGA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A1_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A2_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO200A4_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO25224_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VA_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGO252VN_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCM801_IRIX))                                                                                    \
          ||        (defined(SYSTEME_SGPCMA01_IRIX))                                                                                    \
           )

DEFV(Extern,DEFV(vrai_Double_de_base,acos()));
#define   ACOD(x)                                                                                                                       \
                    FLOT(acos(DPRE(x)))                                                                                                 \
                                        /* Arc-cosinus double-precision "de base" dans [0,pi].                                       */
DEFV(Extern,DEFV(vrai_Double_de_base,asin()));
#define   ASID(x)                                                                                                                       \
                    FLOT(asin(DPRE(x)))                                                                                                 \
                                        /* Arc-sinus double-precision "de base" dans [-pi/2,+pi/2].                                  */

                                        /* ATTENTION : les fonctions trigonometriques hyperboliques de "base" ont ete introduites    */
                                        /* le 19991213090923 car, en effet, les definitions donnees par 'COHX(...)', 'SIHX(...)' et  */
                                        /* 'TAHX(...)' dans 'v $xil/defi_K2$vv$DEF COHX' utilisent explicitement 'EXPX(...)' et      */
                                        /* sont donc sujettes a des debordements tres "rapides"...                                   */

DEFV(Extern,DEFV(vrai_Double_de_base,cosh()));
#define   COSH(x)                                                                                                                       \
                    FLOT(cosh(DPRE(x)))
#define   d_COSH(x)                                                                                                                     \
                    SINH(x)
                                        /* Cosinus hyperbolique double-precision "de base" de l'angle 'x' exprime en radian.         */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20130220100134 par "symetrie" avec 'TANH(...)'...            */
DEFV(Extern,DEFV(vrai_Double_de_base,sinh()));
#define   SINH(x)                                                                                                                       \
                    FLOT(sinh(DPRE(x)))
#define   d_SINH(x)                                                                                                                     \
                    COSH(x)
                                        /* Sinus hyperbolique double-precision "de base" de l'angle 'x' exprime en radian.           */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20130220100134 par "symetrie" avec 'TANH(...)'...            */

DEFV(Extern,DEFV(vrai_Double_de_base,tanh()));
#define   TANH(x)                                                                                                                       \
                    FLOT(tanh(DPRE(x)))
#define   d_TANH(x)                                                                                                                     \
                    INVE(EXP2(COSH(x)))
                                        /* Tangente hyperbolique double-precision "de base" de l'angle 'x' exprime en radian.        */
                                        /*                                                                                           */
                                        /* Sa derivee fut introduite le 20130220100134 pour 'v $xrs/inflation.11$I TANH'...          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   A L E A T O I R E   D I T   " S T A N D A R D "  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Extern,DEFV(vrai_Double_de_base,drand48()));
DEFV(Extern,DEFV(Void,srand48()));

#define   RDN_STANDARD                                                                                                                  \
                    FLOT(drand48())                                                                                                     \
                                        /* Generateur aleatoire standard donnant une valeur aleatoire dans [0,1]. Cela fut           */ \
                                        /* deplace depuis 'v $ximf/aleatoires$FON' le 20230809101814 et ce afin d'etre utilise dans  */ \
                                        /* 'v $xrk/dominos.01$K RDN_STANDARD'...                                                     */
#define   INITIALISATION_RDN_STANDARD(graine)                                                                                           \
                    Bblock                                                                                                              \
                    CALS(srand48(graine));                                                                                              \
                    Eblock                                                                                                              \
                                        /* Initialisation du generateur aleatoire standard avec une graine entiere signee. Cela fut  */ \
                                        /* deplace depuis 'v $ximf/aleatoires$FON' le 20230809101814 et ce afin d'etre utilise dans  */ \
                                        /* 'v $xrk/dominos.01$K RDN_STANDARD'...                                                     */



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