/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   L ' E T A T   D ' U N   F I C H I E R  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Utilisation :                                                                                                              */
/*                                                                                                                                   */
/*                    Cette commande a ete introduite                                                                                */
/*                  avec l'idee de l'utiliser dans                                                                                   */
/*                  'v $xcg/Xsauvegardes$Z', ou serait                                                                               */
/*                  alors utilise le "pseudo-age" comme                                                                              */
/*                  veritable age au dela duquel les fichiers                                                                        */
/*                  sont detruits. Ce "pseudo-age" varie de                                                                          */
/*                  plus en plus vite avec l'age reel et la                                                                          */
/*                  taille d'un fichier. Ainsi, un fichier                                                                           */
/*                  a la fois vieux et gros a plus de chance                                                                         */
/*                  d'etre detruit qu'un fichier de meme taille                                                                      */
/*                  et plus jeune, et a fortiori qu'un petit                                                                         */
/*                  fichier recent...                                                                                                */
/*                                                                                                                                   */
/*                    On notera que ce "pseudo-age" pourrait                                                                         */
/*                  etre utilise pour faire des '$TOUCH' des                                                                         */
/*                  des fichiers de '$xs' afin de les vieillir                                                                       */
/*                  artificiellement afin que '$FIN' teste donc                                                                      */
/*                  directement le "pseudo-age". ATTENTION, cela                                                                     */
/*                  pose malgre tout un petit probleme, au cas                                                                       */
/*                  ou un tel '$TOUCH' est applique plusieurs                                                                        */
/*                  fois de suite car alors un nouveau "pseudo-age"                                                                  */
/*                  est toujours calcule a partir du "pseudo-age"                                                                    */
/*                  precedent et non point de l'ancien age "reel"                                                                    */
/*                  qu'avait le fichier au debut de ce processus.                                                                    */
/*                  La solution, et donc de remplacer le '$FIN'                                                                      */
/*                  par la generation d'un fichier '$Y' dans lequel                                                                  */
/*                  on testera "manuellement" chacun des fichiers                                                                    */
/*                  de '$xs' (et sans jamais faire de '$TOUCH').                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xcg/fichier_etat$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19990712154622).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMPATIBILITE_20200327                                                                                                        \
                    FAUX                                                                                                                \
                                        /* Afin de permettre de faire l'edition du mode des fichiers dans le format anterieur au     */ \
                                        /* 20200327110036...                                                                         */

#define   LE_FICHIER_EST_COMPRESSE                                                                                                      \
                    FAUX                                                                                                                \
                                        /* Le fichier est-il compresse par {$bCOMPRES,$bUNCOMPRES} ('VRAI') auquel cas son nom       */ \
                                        /* est a completer par '$pCOM' ou pas ('FAUX') ? Ceci a ete introduit le 20040115101933.     */

#define   EDITER_LES_MESSAGES_D_ERREUR                                                                                                  \
                    EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS                                                                           \
                                        /* Indicateur a utiliser pour editer les messages d'erreur des fichiers.                     */

#define   EDITER_LES_MESSAGES_D_EN_TETE                                                                                                 \
                    VRAI

#define   EDITER_LE_NOM_DU_FICHIER                                                                                                      \
                    FAUX                                                                                                                \
                                        /* Introduit le 20030908093709.                                                              */
#define   INDIQUER_QUE_LE_FICHIER_ETAIT_COMPRESSE                                                                                       \
                    FAUX                                                                                                                \
                                        /* Introduit le 20040115122553.                                                              */

#define   TOUT_EDITER                                                                                                                   \
                    FAUX                                                                                                                \
                                        /* Permet d'editer tout ce qui est possible (introduit le 20040119090653).                   */

#define   EDITER_LE_NUMERO_D_INODE_DU_FICHIER                                                                                           \
                    FAUX
#define   EDITER_LE_MODE_DU_FICHIER                                                                                                     \
                    FAUX
#define   EDITER_LE_MODE_DU_FICHIER_EN_DECIMAL                                                                                          \
                    VRAI
#define   EDITER_LE_MODE_DU_FICHIER_EN_HEXA_DECIMAL                                                                                     \
                    VRAI
#define   EDITER_L_IDENTIFICATEUR_D_UTILISATEUR_DU_FICHIER                                                                              \
                    FAUX
#define   EDITER_L_IDENTIFICATEUR_DU_GROUPE_DU_FICHIER                                                                                  \
                    FAUX
#define   EDITER_LA_LONGUEUR_DU_FICHIER                                                                                                 \
                    FAUX
#define   EDITER_LA_LONGUEUR_DU_NOM_DU_FICHIER                                                                                          \
                    FAUX
#define   EDITER_LA_DATE_DU_DERNIER_ACCES                                                                                               \
                    FAUX
#define   EDITER_LA_DATE_DE_LA_DERNIERE_MODIFICATION                                                                                    \
                    FAUX
#define   EDITER_LA_DATE_DU_DERNIER_CHANGEMENT_D_ETAT                                                                                   \
                    FAUX

#define   TESTER_LA_NON_NEGATIVITE_DE_L_AGE                                                                                             \
                    VRAI
#define   EDITER_L_AGE                                                                                                                  \
                    VRAI
#define   EDITER_L_AGE_EN_JOURS                                                                                                         \
                    FAUX
                                        /* Indicateurs de controle des diverses editions, les donnees temporelles etant en secondes. */

#define   MARGE_DE_SECURITE_POUR_L_AGE_EN_JOURS                                                                                         \
                    ZERO                                                                                                                \
                                        /* Constante a ajouter a l'age en jours d'un fichier afin de constituer une marge de         */ \
                                        /* securite ('v $Falias_Majdep marge='). Ceci a ete introduit le 20011031160846.             */

#define   EDITER_LE_PSEUDO_AGE_EN_JOURS                                                                                                 \
                    FAUX
#define   DIVISEUR_DE_LA_LONGUEUR_DU_FICHIER_POUR_LE_CALCUL_DU_PSEUDO_AGE                                                               \
                    GRO5(GRO10(FLOT(MILLIARD)))
                                        /* Doit-on editer de plus un "pseudo-age" obtenu par vieillisement de l'age reel par une     */
                                        /* fonction de la taille du fichier (plus le fichier est gros, plus il vieillit vite...).    */

#define   SEUIL_DE_L_AGE_EN_JOURS                                                                                                       \
                    INFINI
#define   SEUIL_DU_PSEUDO_AGE_EN_JOURS                                                                                                  \
                    INFINI
                                        /* Afin d'editer un message si le fichier est trop vieux (respectivement "pseudo-vieux").    */

#define   MODIFIER_LA_DATE_DU_DERNIER_ACCES_ET_LA_DATE_DE_DERNIERE_MODIFICATION                                                         \
                    FAUX                                                                                                                \
                                        /* Doit-on modifier les dates de dernier acces et de derniere modification ('VRAI') ou pas   */ \
                                        /* ('FAUX') ? Cela a ete introduit le 19991104095138.                                        */
#define   ANNEE_ARBITRAIRE                                                                                                              \
                    LE_01_01_1970_A_00_00_00_ANNEE
#define   MOIS_ARBITRAIRE                                                                                                               \
                    LE_01_01_1970_A_00_00_00_MOIS
#define   JOUR_ARBITRAIRE                                                                                                               \
                    LE_01_01_1970_A_00_00_00_JOUR
#define   HEURES_ARBITRAIRES                                                                                                            \
                    LE_01_01_1970_A_00_00_00_HEURES
#define   MINUTES_ARBITRAIRES                                                                                                           \
                    LE_01_01_1970_A_00_00_00_MINUTES
#define   SECONDES_ARBITRAIRES                                                                                                          \
                    LE_01_01_1970_A_00_00_00_SECONDES
                                        /* Date arbitraire a utiliser a la place de la date courante.                                */

#define   MODIFIER_LE_MODE                                                                                                              \
                    FAUX                                                                                                                \
                                        /* Doit-on modifier le mode ('VRAI') ou pas ('FAUX') ? Cela a ete introduit le               */ \
                                        /* 19991104095138.                                                                           */
#define   MODE_ARBITRAIRE                                                                                                               \
                    ZERO                                                                                                                \
                                        /* Mode arbitraire a utiliser (ce mode donne un fichier "invisible"...).                     */

#define   GENERER_LA_CLEF                                                                                                               \
                    FAUX                                                                                                                \
                                        /* Doit-on generer la clef du fichier ('VRAI') ou pas ('FAUX') ? Cela a ete introduit le     */ \
                                        /* 20030805112607.                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE                                                                               \
                    IFET(EST_VRAI(le_fichier_est_compresse),EST_VRAI(le_fichier_a_bien_ete_decompresse))                                \
                                        /* Introduit le 20070907182407 pour ameliorer la lisibilite...                               */

#define   EDITER_UNE_VALEUR(valeur,editer,format,message_d_en_tete)                                                                     \
                    Bblock                                                                                                              \
                    Test(IFOU(IL_FAUT(editer),IL_FAUT(tout_editer)))                                                                    \
                                        /* L'indicateur global 'tout_editer' fut introduit le 20040119090653...                      */ \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(editer_les_messages_d_en_tete))                                                                   \
                              Bblock                                                                                                    \
                              CAL2(Prin1("%s=",message_d_en_tete));                                                                     \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         CAL2(Prin1(Cara(chain_Aconcaten2(format,"\n")),valeur));                                                       \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure d'edition conditionnelle. On notera que dans le cas de valeurs de type "date",  */ \
                                        /* ces valeurs sont des durees depuis le 19700101000000 (notees ci-apres "DUREE") et         */ \
                                        /* qu'elles peuvent etre converties en de "vraies" dates (au format de la commande 'date')   */ \
                                        /* grace a la commande :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                  $xcg/dure01011970$X inverser=VRAI duree=DUREE                            */ \
                                        /*                                                                                           */ \
                                        /* ou 'DUREE' represente la date renvoyee par '$xcg/fichier_etat$X' (avec, par exemple       */ \
                                        /* l'argument "modification=VRAI" pour avoir la date de derniere modification). Enfin,       */ \
                                        /*                                                                                           */ \
                                        /*                  $xcg/dure01011970$X inverser=VRAI duree=DUREE                    |    \  */ \
                                        /*                  $SE                 -f $xcg/dure01011970$vv$sed                          */ \
                                        /*                                                                                           */ \
                                        /* permet de mettre cette 'DUREE' au format 'GDateC'. On notera que ceci peut etre realise   */ \
                                        /* globalement et simplement a l'aide de l'alias 'DATEM'...                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   L ' E T A T   D ' U N   F I C H I E R  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(compatibilite_20200327,COMPATIBILITE_20200327));
                                        /* Afin de permettre de faire l'edition du mode des fichiers dans le format anterieur au     */
                                        /* 20200327110036...                                                                         */

     DEFV(CHAR,INIC(POINTERc(nom_fichier),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_fichier_compresse),NOM_UNDEF));

     DEFV(Logical,INIT(le_fichier_est_compresse,LE_FICHIER_EST_COMPRESSE));
                                        /* Le fichier est-il compresse par {$bCOMPRES,$bUNCOMPRES} ('VRAI') auquel cas son nom       */
                                        /* est a completer par '$pCOM' ou pas ('FAUX') ? Ceci a ete introduit le 20040115101933.     */
     DEFV(Logical,INIT(le_fichier_a_bien_ete_decompresse,LUNDEF));
                                        /* Au cas ou 'EST_VRAI(le_fichier_est_compresse)', afin de savoir si la decompression        */
                                        /* s'est bien passee...                                                                      */

     DEFV(Logical,INIT(editer_les_messages_d_erreur,EDITER_LES_MESSAGES_D_ERREUR));
                                        /* Indicateur a utiliser pour editer les messages d'erreur des fichiers.                     */

     DEFV(Logical,INIT(editer_les_messages_d_en_tete,EDITER_LES_MESSAGES_D_EN_TETE));

     DEFV(Logical,INIT(editer_le_nom_du_fichier,EDITER_LE_NOM_DU_FICHIER));
                                        /* Introduit le 20030908093709.                                                              */
     DEFV(Logical,INIT(indiquer_que_le_fichier_etait_compresse,INDIQUER_QUE_LE_FICHIER_ETAIT_COMPRESSE));
                                        /* Introduit le 20040115122553.                                                              */

     DEFV(Logical,INIT(tout_editer,TOUT_EDITER));
                                        /* Permet d'editer tout ce qui est possible (introduit le 20040119090653).                   */

     DEFV(Logical,INIT(editer_le_numero_d_Inode_du_fichier,EDITER_LE_NUMERO_D_INODE_DU_FICHIER));
     DEFV(Logical,INIT(editer_le_mode_du_fichier,EDITER_LE_MODE_DU_FICHIER));
     DEFV(Logical,INIT(editer_le_mode_du_fichier_en_decimal,EDITER_LE_MODE_DU_FICHIER_EN_DECIMAL));
     DEFV(Logical,INIT(editer_le_mode_du_fichier_en_hexa_decimal,EDITER_LE_MODE_DU_FICHIER_EN_HEXA_DECIMAL));
     DEFV(Logical,INIT(editer_l_identificateur_d_utilisateur_du_fichier,EDITER_L_IDENTIFICATEUR_D_UTILISATEUR_DU_FICHIER));
     DEFV(Logical,INIT(editer_l_identificateur_du_groupe_du_fichier,EDITER_L_IDENTIFICATEUR_DU_GROUPE_DU_FICHIER));
     DEFV(Logical,INIT(editer_la_longueur_du_fichier,EDITER_LA_LONGUEUR_DU_FICHIER));
     DEFV(Logical,INIT(editer_la_longueur_du_nom_du_fichier,EDITER_LA_LONGUEUR_DU_NOM_DU_FICHIER));
     DEFV(Logical,INIT(editer_la_date_du_dernier_acces,EDITER_LA_DATE_DU_DERNIER_ACCES));
     DEFV(Logical,INIT(editer_la_date_de_la_derniere_modification,EDITER_LA_DATE_DE_LA_DERNIERE_MODIFICATION));
     DEFV(Logical,INIT(editer_la_date_du_dernier_changement_d_etat,EDITER_LA_DATE_DU_DERNIER_CHANGEMENT_D_ETAT));
     DEFV(Logical,INIT(tester_la_non_negativite_de_l_age,TESTER_LA_NON_NEGATIVITE_DE_L_AGE));
     DEFV(Logical,INIT(editer_l_age,EDITER_L_AGE));
     DEFV(Logical,INIT(editer_l_age_en_jours,EDITER_L_AGE_EN_JOURS));
                                        /* Indicateurs de controle des diverses editions, les donnees temporelles etant en secondes. */
                                        /* On notera que "age" signifie en fait "duree ecoulee depuis la derniere modification"...   */
                                        /*                                                                                           */
                                        /* L'introduction de l'edition delective du "mode" suivant la base a ete introduite le       */
                                        /* 20030625091418.                                                                           */
     DEFV(Int,INIT(marge_de_securite_pour_l_age_en_jours,MARGE_DE_SECURITE_POUR_L_AGE_EN_JOURS));
                                        /* Constante a ajouter a l'age en jours d'un fichier afin de constituer une marge de         */
                                        /* securite ('v $Falias_Majdep marge='). Ceci a ete introduit le 20011031160846.             */
     DEFV(Logical,INIT(editer_le_pseudo_age_en_jours,EDITER_LE_PSEUDO_AGE_EN_JOURS));
     DEFV(Float,INIT(diviseur_de_la_longueur_du_fichier_pour_le_calcul_du_pseudo_age
                    ,DIVISEUR_DE_LA_LONGUEUR_DU_FICHIER_POUR_LE_CALCUL_DU_PSEUDO_AGE
                     )
          );
                                        /* Doit-on editer de plus un "pseudo-age" obtenu par vieillisement de l'age reel par une     */
                                        /* fonction de la taille du fichier (plus le fichier est gros, plus il vieillit vite...).    */
                                        /* Ceci peut etre etudie grace au programme 'v $xtc/pseudo_ag.01$c'.                         */
     DEFV(Int,INIT(seuil_de_l_age_en_jours,SEUIL_DE_L_AGE_EN_JOURS));
     DEFV(Int,INIT(seuil_du_pseudo_age_en_jours,SEUIL_DU_PSEUDO_AGE_EN_JOURS));
                                        /* Afin d'editer un message si le fichier est trop vieux (respectivement "pseudo-vieux").    */

     DEFV(Logical,INIT(modifier_la_date_du_dernier_acces_et_date_de_la_derniere_modification
                      ,MODIFIER_LA_DATE_DU_DERNIER_ACCES_ET_LA_DATE_DE_DERNIERE_MODIFICATION
                       )
          );
                                        /* Doit-on modifier les dates de dernier acces et de derniere modification ('VRAI') ou pas   */
                                        /* ('FAUX'). Cela a ete introduit le 19991104095138.                                         */
     DEFV(Int,INIT(annee_arbitraire,ANNEE_ARBITRAIRE));
     DEFV(Int,INIT(mois_arbitraire,MOIS_ARBITRAIRE));
     DEFV(Int,INIT(jour_arbitraire,JOUR_ARBITRAIRE));
     DEFV(Int,INIT(heures_arbitraires,HEURES_ARBITRAIRES));
     DEFV(Int,INIT(minutes_arbitraires,MINUTES_ARBITRAIRES));
     DEFV(Int,INIT(secondes_arbitraires,SECONDES_ARBITRAIRES));
                                        /* Date arbitraire a utiliser a la place de la date courante.                                */

     DEFV(Logical,INIT(modifier_le_mode,MODIFIER_LE_MODE));
                                        /* Doit-on modifier le mode ('VRAI') ou pas ('FAUX') ? Cela a ete introduit le               */
                                        /* 19991104095138.                                                                           */
     DEFV(Positive,INIT(mode_arbitraire,MODE_ARBITRAIRE));
                                        /* Mode arbitraire a utiliser (ce mode donne un fichier "invisible"...).                     */

     DEFV(Logical,INIT(generer_la_clef,GENERER_LA_CLEF));
                                        /* Doit-on generer la clef du fichier ('VRAI') ou pas ('FAUX') ? Cela a ete introduit le     */
                                        /* 20030805112607.                                                                           */

     DEFV(Positive,INIT(numero_d_Inode____________________de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(mode______________________________de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(identificateur_d_utilisateur______de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(identificateur_de_groupe__________de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(date_du_dernier_acces_____________de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(date_de_la_derniere_modification__de_l_eventuel_fichier_compresse_decompresse,UNDEF));
     DEFV(Positive,INIT(date_du_dernier_changement_d_etat_de_l_eventuel_fichier_compresse_decompresse,UNDEF));
                                        /* Introduit le 20041007093320, ces informations concernent l'eventuel fichier compresse     */
                                        /* que l'on decompresse ; ce sont evidemment ces informations qu'il faut editer et non pas   */
                                        /* celles du fichier decompresse (on trouverait alors evidemment la date courante...).       */
                                        /*                                                                                           */
                                        /* La sauvegarde du mode a ete introduite le 20070907164635 car elle manquait gravement      */
                                        /* ('v $Falias_catalf 20070307134958'), ainsi que le numero d'I-node...                      */
                                        /*                                                                                           */
                                        /* La sauvegarde des identificateurs d'utilisateur et de groupe ont ete introduites          */
                                        /* le 20070907183135...                                                                      */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("compatibilite_20200327=",compatibilite_20200327);

                         GET_ARGUMENT_C("fichier=""f=""F=",nom_fichier);
                         GET_ARGUMENT_L("fichier_inexistant=""inexistant=""finex=",Ftest_fichier_____accepter_un_fichier_inexistant);
                         GET_ARGUMENT_N("fichier_existant=""existant=""fex=",Ftest_fichier_____accepter_un_fichier_inexistant);
                                        /* Parametre introduit le 20250102084227...                                                  */
                         GET_ARGUMENT_L("ouvrir=""open=",Ftest_fichier_____ouvrir_le_fichier);
                                        /* Le parametre 'Ftest_fichier_____ouvrir_le_fichier' fut introduit le 20060520094158...     */
                         GET_ARGUMENT_L("decompresser_compresser=""compresser=""compresse=""COMPRES=",le_fichier_est_compresse);
                         GET_ARGUMENT_N("decompresse=",le_fichier_est_compresse);
                         GET_ARGUMENT_L("erreurs=",editer_les_messages_d_erreur);
                         GET_ARGUMENT_L("messages=""message=""en_tete=",editer_les_messages_d_en_tete);
                         GET_ARGUMENT_L("nom=",editer_le_nom_du_fichier);
                         GET_ARGUMENT_L("nom_compresse=""nc=",indiquer_que_le_fichier_etait_compresse);
                         GET_ARGUMENT_L("tout=""all=",tout_editer);
                         GET_ARGUMENT_L("numero_d_Inode=""Inode=",editer_le_numero_d_Inode_du_fichier);
                         GET_ARGUMENT_L("mode=",editer_le_mode_du_fichier);
                         GET_ARGUMENT_L("mode10=""m10=",editer_le_mode_du_fichier_en_decimal);
                         GET_ARGUMENT_L("mode16=""m16=",editer_le_mode_du_fichier_en_hexa_decimal);
                         GET_ARGUMENT_L("utilisateur=""UID=",editer_l_identificateur_d_utilisateur_du_fichier);
                         GET_ARGUMENT_L("groupe=""GID=",editer_l_identificateur_du_groupe_du_fichier);
                         GET_ARGUMENT_L("taille=""longueur_du_fichier=""longueur=""lf=",editer_la_longueur_du_fichier);
                         GET_ARGUMENT_L("longueur_du_nom=""ln=",editer_la_longueur_du_nom_du_fichier);
                         GET_ARGUMENT_L("date_du_dernier_acces=""acces=",editer_la_date_du_dernier_acces);
                         GET_ARGUMENT_L("modification=""modif=""date_de_la_derniere_modification="
                                       ,editer_la_date_de_la_derniere_modification
                                        );
                         GET_ARGUMENT_L("date_du_dernier_changement_d_etat=""changement=""change="
                                       ,editer_la_date_du_dernier_changement_d_etat
                                        );
                         GET_ARGUMENT_L("tester_age=""tester=",tester_la_non_negativite_de_l_age);
                         GET_ARGUMENT_L("duree_derniere_modification=""age=",editer_l_age);
                         GET_ARGUMENT_L("jours=""duree_derniere_modification_en_jours=""age_en_jours=",editer_l_age_en_jours);
                         GET_ARGUMENT_I("marge=",marge_de_securite_pour_l_age_en_jours);
                         GET_ARGUMENT_L("pseudo_age=",editer_le_pseudo_age_en_jours);
                         GET_ARGUMENT_F("diviseur=",diviseur_de_la_longueur_du_fichier_pour_le_calcul_du_pseudo_age);
                         GET_ARGUMENT_I("seuil_age=",seuil_de_l_age_en_jours);
                         GET_ARGUMENT_I("seuil_pseudo_age=",seuil_du_pseudo_age_en_jours);

                         GET_ARGUMENT_L("modifier_date=""Dmodifier="
                                       ,modifier_la_date_du_dernier_acces_et_date_de_la_derniere_modification
                                        );
                         GET_ARGUMENT_I("annee=""Annee=""A=",annee_arbitraire);
                         GET_ARGUMENT_I("mois=""Mois=""M=",mois_arbitraire);
                         GET_ARGUMENT_I("jour=""Jour=""J=",jour_arbitraire);
                         GET_ARGUMENT_I("heures=""Heures=""H=",heures_arbitraires);
                         GET_ARGUMENT_I("minutes=""m=""Minutes=",minutes_arbitraires);
                         GET_ARGUMENT_I("Secondes=""S=",secondes_arbitraires);

                         GET_ARGUMENT_L("modifier_mode=""Mmodifier=",modifier_le_mode);
                         GET_ARGUMENT_I("nouveau_mode=",mode_arbitraire);

                         GET_ARGUMENT_L("generer_clef=""clef=",generer_la_clef);
                         GET_ARGUMENT_I("seuil_clef="
                                       ,Ftest_fichier_____longueur_maximale_du_fichier_pour_generer_une_clef_du_fichier
                                        );
                         )
                    );

     Test(EST_VRAI(le_fichier_est_compresse))
          Bblock
          EGAL(nom_fichier_compresse,chain_Aconcaten2(nom_fichier,Gvar("pCOM")));
                                        /* Introduit le 20040901133953...                                                            */

          EGAL(le_fichier_a_bien_ete_decompresse,FAUX);
                                        /* A priori, afin de ne pas faire le '$bCOMPRES' a la fin...                                 */

          Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier_compresse
                                                    ,editer_les_messages_d_erreur
                                                     )
                                       )
                            )
               )
               Bblock
               EGAL(numero_d_Inode____________________de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____numero_d_Inode
                    );
               EGAL(mode______________________________de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____mode
                    );
               EGAL(identificateur_d_utilisateur______de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____identificateur_d_utilisateur
                    );
               EGAL(identificateur_de_groupe__________de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____identificateur_de_groupe
                    );
               EGAL(date_du_dernier_acces_____________de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____date_du_dernier_acces
                    );
               EGAL(date_de_la_derniere_modification__de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____date_de_la_derniere_modification
                    );
               EGAL(date_du_dernier_changement_d_etat_de_l_eventuel_fichier_compresse_decompresse
                   ,Ftest_fichier_____date_du_dernier_changement_d_etat
                    );
                                        /* Introduit le 20041007093320, ces informations concernent l'eventuel fichier compresse     */
                                        /* que l'on decompresse ; ce sont evidemment ces informations qu'il faut editer et non pas   */
                                        /* celles du fichier decompresse (on trouverait alors evidemment la date courante...).       */
                                        /*                                                                                           */
                                        /* La sauvegarde du mode a ete introduite le 20070907164635 car elle manquait gravement      */
                                        /* ('v $Falias_catalf 20070307134958').                                                      */

               Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier
                                                         ,editer_les_messages_d_erreur
                                                          )
                                            )
                                 )
                    )
                    Bblock
                    PRINT_ERREUR("le fichier decompresse existe deja");
                    CAL1(Prer1("il s'agit du fichier decompresse de nom '%s'.\n",nom_fichier));
                    Eblock
               ATes
                    Bblock
                    EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH(chain_Aconcaten5(Gvar("bUNCOMPRES")
                                                                               ," --stdout "
                                                                               ,nom_fichier_compresse
                                                                               ," > "
                                                                               ,nom_fichier
                                                                                )
                                                               );
                                        /* Decompression du fichier de nom '$nom_fichier$pCOM' (introduit le 20040115101933). On     */
                                        /* notera que cette operation conserve tous les attributs (mode, date,...) du fichier...     */
                                        /*                                                                                           */
                                        /* ATTENTION : la date du fichier reste donc inchangee. Malheureusement, il n'en est pas     */
                                        /* de meme avec la date du directory contenant ce fichier qui, elle, est mise a jour avec    */
                                        /* la date courante ; cela a donc des consequences sur le comportement de 'v $Fgenere MKDIR' */
                                        /* qui risque de generer donc des '$MKDIR' qui a priori n'ont pas de raison d'etre. Cela a   */
                                        /* ete observe aux environs du 20040119132529 lors d'un 'trouvgu' destine a '$CMAP28'...     */
                                        /*                                                                                           */
                                        /* Le 20040903101804 a ete introduit l'option "--stdout" qui permet de preserver le fichier  */
                                        /* compresse et ainsi d'eviter des pertes d'informations lors de la suite d'operations       */
                                        /* {$bUNCOMPRES,$bCOMPRES}, en particulier au cas ou l'espace disque serait "tangent"...     */

                    Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier
                                                              ,editer_les_messages_d_erreur
                                                               )
                                                 )
                                      )
                         )
                                        /* Ce test a ete ajoute le 20040901124505 afin de prendre en compte le cas ou le             */
                                        /* '$bUNCOMPRES' s'est mal passe (manque d'espace disque par exemple, comme cela s'est       */
                                        /* quelques temps avant sur '$LACT12'). Dans ce cas, le fichier '$pCOM' n'est pas detruit... */
                         Bblock
                         EGAL(le_fichier_a_bien_ete_decompresse,VRAI);
                                        /* Afin de faire le '$bCOMPRES' a la fin...                                                  */
                         Eblock
                    ATes
                         Bblock
                         PRINT_ERREUR("le fichier compresse n'a pu etre decompresse (manque d'espace disque,...)");
                         CAL1(Prer1("il s'agit du fichier compresse de nom '%s'.\n",nom_fichier_compresse));
                         Eblock
                    ETes
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("le fichier compresse (a decompresser) n'existe pas");
               CAL1(Prer1("il s'agit du fichier compresse de nom '%s'.\n",nom_fichier_compresse));
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier
                                               ,editer_les_messages_d_erreur
                                                )
                                  )
                       )
          )
                                        /* Ce test a ete ajoute le 20000113091549 afin d'eviter que des messages de validation par   */
                                        /* 'CONVERSION_D_UNE_DATE_EN_UNE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(...)' ne      */
                                        /* soient emis ci-apres. La non existence du fichier n'est pas signalee ici car, en effet,   */
                                        /* un test similaire sera fait de nouveau un peu plus loin...                                */
          Bblock
          Test(EST_VALIDE(Ftest_fichier_____informations_utiles))
                                        /* Ce test a ete ajoute le 20000113091549 afin d'eviter que des messages de validation par   */
                                        /* 'CONVERSION_D_UNE_DATE_EN_UNE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(...)' ne      */
                                        /* soient emis ci-apres. La non existence du fichier n'est pas signalee ici car, en effet,   */
                                        /* un test similaire sera fait de nouveau un peu plus loin...                                */
               Bblock
               Test(IL_FAUT(modifier_la_date_du_dernier_acces_et_date_de_la_derniere_modification))
                    Bblock
                    DEFV(Positive,INIT(Secondes,UNDEF));
                                        /* Duree en secondes ecoulee depuis le 19700101000000 jusqu'a la date arbitraire.            */

                    CONVERSION_D_UNE_DATE_EN_UNE_DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Secondes
                                                                                              ,annee_arbitraire
                                                                                              ,mois_arbitraire
                                                                                              ,jour_arbitraire
                                                                                              ,heures_arbitraires
                                                                                              ,minutes_arbitraires
                                                                                              ,secondes_arbitraires
                                                                                               );
                                        /* Calcul de la duree en {secondes} ecoulee entre le 19700101000000 et la date arbitraire.   */

                    EGAL(Ftest_fichier_____modifier_date_du_dernier_acces_et_date_de_la_derniere_modification,VRAI);
                    EGAL(Ftest_fichier_____nouvelle_date_du_dernier_acces,Secondes);
                    EGAL(Ftest_fichier_____nouvelle_date_de_la_derniere_modification,Secondes);
                                        /* Ainsi, lors de l'appel suivant a 'Ftest_fichier(...)' les dates de dernier acces et de    */
                                        /* derniere modification seront mises a jour avec la date arbitraire...                      */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(modifier_le_mode))
                    Bblock
                    EGAL(Ftest_fichier_____modifier_mode,VRAI);
                    EGAL(Ftest_fichier_____nouveau_mode,mode_arbitraire);
                                        /* Ainsi, lors de l'appel suivant a 'Ftest_fichier(...)' le mode sera mis a jour...          */
                    Eblock
               ATes
                    Bblock
                    EGAL(Ftest_fichier_____modifier_mode,FAUX);
                                        /* Ajoute le 20030805120013, on n'est jamais assez prudent...                                */
                    Eblock
               ETes

               Test(IFOU(IL_FAUT(generer_la_clef),IL_FAUT(tout_editer)))
                                        /* L'indicateur global 'tout_editer' fut introduit le 20040119090653...                      */
                    Bblock
                    EGAL(Ftest_fichier_____generer_une_clef_du_fichier,VRAI);
                                        /* Ainsi, lors de l'appel suivant a 'Ftest_fichier(...)' la clef sera generee...             */
                    Eblock
               ATes
                    Bblock
                    EGAL(Ftest_fichier_____generer_une_clef_du_fichier,FAUX);
                                        /* Ajoute le 20030805120013, on n'est jamais assez prudent...                                */
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier
                                               ,editer_les_messages_d_erreur
                                                )
                                  )
                       )
          )
          Bblock
          Test(EST_VALIDE(Ftest_fichier_____informations_utiles))
               Bblock
               Test(IFET(IL_NE_FAUT_PAS(modifier_la_date_du_dernier_acces_et_date_de_la_derniere_modification)
                        ,IL_NE_FAUT_PAS(modifier_le_mode)
                         )
                    )
                    Bblock
                    DEFV(Int,INIT(age_du_fichier_en_secondes,UNDEF));
                                        /* Le 20030628192211, la variable 'age_du_fichier_en_secondes' est passee de 'Positive'      */
                                        /* a 'Int' pour permettre le test 'IZLT(...)' qui va suivre...                               */
                    DEFV(Positive,INIT(age_du_fichier_en_jours,UNDEF));
                    DEFV(Positive,INIT(pseudo_age_du_fichier_en_jours,UNDEF));

                    DEFV(Positive,INIT(Secondes,UNDEF));
                    DEFV(Positive,INIT(MicroSecondes,UNDEF));
                    DUREE_ECOULEE_DEPUIS_LE_01_01_1970_A_00_00_00(Secondes,MicroSecondes);
                                        /* Calcul de la duree en {secondes,micro-secondes} ecoulee depuis le 19700101000000.         */

                    EGAL(age_du_fichier_en_secondes
                        ,SOUS(Secondes
                             ,COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                  ,date_de_la_derniere_modification__de_l_eventuel_fichier_compresse_decompresse
                                  ,Ftest_fichier_____date_de_la_derniere_modification
                                   )
                              )
                         );

                    Test(IL_FAUT(tester_la_non_negativite_de_l_age))
                         Bblock
                         Test(IZLT(age_du_fichier_en_secondes))
                                        /* Ce test a ete introduit le 20030628192211 apres avoir rencontre un probleme lors d'un     */
                                        /* 'majdep' de '$LACT14' vers '$LACT15', '$LACT14' etant en retard de plusieurs minutes      */
                                        /* par rapport a '$LACT15' (le fichier 'majdep' s'est alors retrouve vide...).               */
                              Bblock
                              PRINT_ERREUR("l'age en secondes du fichier est negatif, il est donc ne dans le futur de cette MACHINE");
                              PRINT_ERREUR("il y a peut-etre un probleme de synchronisation des horloges quelque part");
                              CAL1(Prer1("il s'agit du fichier de nom '%s'.\n",nom_fichier));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    EGAL(age_du_fichier_en_jours
                        ,DIVI(age_du_fichier_en_secondes,MUL3(HEURES_PAR_JOUR,MINUTES_PAR_HEURE,SECONDES_PAR_MINUTE))
                         );
                                        /* Age du fichier en secondes, puis en jours...                                              */
                    EGAL(pseudo_age_du_fichier_en_jours
                        ,INTE(MUL2(AXPB(DIVI(NEUT(Ftest_fichier_____longueur_du_fichier)
                                            ,diviseur_de_la_longueur_du_fichier_pour_le_calcul_du_pseudo_age
                                             )
                                       ,EXP2(FLOT(age_du_fichier_en_jours))
                                       ,FU
                                        )
                                  ,FLOT(age_du_fichier_en_jours)
                                   )
                              )
                         );
                                        /* "Pseudo-age" du fichier, c'est-a-dire age augmente en fonction de l'age reel et de la     */
                                        /* taille : un gros fichier age parait encore plus age...                                    */
                                        /*                                                                                           */
                                        /* Le 20060520122341, passage de 'FLOT(...)' a 'NEUT(...)' a cause du probleme               */
                                        /* 'v $xcg/fichier_etat$K 20060519191756'...                                                 */

                    EDITER_UNE_VALEUR(chain_Aconcaten2(nom_fichier
                                                      ,COND(IFET(EST_VRAI(le_fichier_est_compresse)
                                                                ,IL_FAUT(indiquer_que_le_fichier_etait_compresse)
                                                                 )
                                                           ,chain_Aconcaten3("(",Gvar("pCOM"),")")
                                                           ,ccCHAR(C_VIDE)
                                                            )
                                                       )
                                     ,editer_le_nom_du_fichier
                                     ,"%s"
                                     ,"nom"
                                      );
                                        /* Le postfixe '$pCOM' a ete introduit le 20040115120327...                                  */

                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,numero_d_Inode____________________de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____numero_d_Inode
                                           )
                                     ,editer_le_numero_d_Inode_du_fichier
                                     ,"%d"
                                     ,"Inode"
                                      );

                    Test(IL_FAUT(compatibilite_20200327))
                         Bblock
                         EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                               ,mode______________________________de_l_eventuel_fichier_compresse_decompresse
                                               ,Ftest_fichier_____mode
                                                )
                                          ,IFET(IL_FAUT(editer_le_mode_du_fichier),IL_FAUT(editer_le_mode_du_fichier_en_decimal))
                                          ,"%d"
                                          ,"mode(base10)"
                                           );
                         EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                               ,mode______________________________de_l_eventuel_fichier_compresse_decompresse
                                               ,Ftest_fichier_____mode
                                                )
                                          ,IFET(IL_FAUT(editer_le_mode_du_fichier),IL_FAUT(editer_le_mode_du_fichier_en_hexa_decimal))
                                          ,"0x%08x"
                                          ,"mode(base16)"
                                           );
                         Eblock
                    ATes
                         Bblock
                         EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                               ,mode______________________________de_l_eventuel_fichier_compresse_decompresse
                                               ,Ftest_fichier_____mode
                                                )
                                          ,IFET(IL_FAUT(editer_le_mode_du_fichier),IL_FAUT(editer_le_mode_du_fichier_en_decimal))
                                          ,"%d"
                                          ,"ModeBase10"
                                           );
                         EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                               ,mode______________________________de_l_eventuel_fichier_compresse_decompresse
                                               ,Ftest_fichier_____mode
                                                )
                                          ,IFET(IL_FAUT(editer_le_mode_du_fichier),IL_FAUT(editer_le_mode_du_fichier_en_hexa_decimal))
                                          ,"0x%08x"
                                          ,"ModeBase16"
                                           );
                         Eblock
                    ETes
                                        /* ATTENTION, la signification des differents bits est dans 'v /usr/include/sys/stat.h MODE' */
                                        /* et qu'en ce qui concerne le mode, au sens 'chmod', les valeurs donnees dans ce fichier    */
                                        /* sont on octal et non en hexa-decimal. Ainsi, par exemple, un fichier en mode 'ro/EXEC'    */
                                        /* (ce qui donne par 'll' le mode '-r-x------'), donnera ici la valeur '0x8140', ce qui      */
                                        /* correspond aux bits :                                                                     */
                                        /*                                                                                           */
                                        /*                  S_IFREG             0x8000                                               */
                                        /*                  S_IREAD             00400                                                */
                                        /*                  S_IEXEC             00100                                                */
                                        /*                                                                                           */
                                        /* surprenant...                                                                             */
                                        /*                                                                                           */
                                        /* Le 19991104095138, j'ai mis en place l'edition du mode en base 10 et en base 16 afin      */
                                        /* de simplifier l'utilisation de 'IL_FAUT(modifier_le_mode)'. L'edition de "0x" devant      */
                                        /* la valeur hexa-decimale est compatible avec le traitement qui est fait dans le fichier    */
                                        /* 'v $xig/fonct$vv$FON SOUS_TITRE_D_UNE_VALEUR_HEXA_DECIMALE'.                              */
                                        /*                                                                                           */
                                        /* Le 20030625091418, j'ai introduit le choix entre les bases 10 et 16...                    */
                                        /*                                                                                           */
                                        /* Le 20030908100606, j'ai supprime les espaces dans "mode (base 10)" et "mode (base 16)"    */
                                        /* afin de faciliter des traitements automatises (l'espace etant alors un limiteur...).      */
                                        /*                                                                                           */
                                        /* Le 20200327110036, "mode(base10)" et ""mode(base16)" ont vu disparaitre les deux          */
                                        /* parentheses afin d'eviter le message :                                                    */
                                        /*                                                                                           */
                                        /*                  set: Variable name must begin with a letter.                             */
                                        /*                                                                                           */
                                        /* lors de la definition de '$ReFeReNcE' dans l'alias 'v $Fmachines alias.....reference',    */
                                        /* suite a l'introduction de 'v $Falias_Prefer EtAt_DiStAnT_FoRcE'...                        */

                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,identificateur_d_utilisateur______de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____identificateur_d_utilisateur
                                           )
                                     ,editer_l_identificateur_d_utilisateur_du_fichier
                                     ,"%d"
                                     ,"UID"
                                      );
                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,identificateur_de_groupe__________de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____identificateur_de_groupe
                                           )
                                     ,editer_l_identificateur_du_groupe_du_fichier
                                     ,"%d"
                                     ,"GID"
                                      );

                    EDITER_UNE_VALEUR(Ftest_fichier_____longueur_du_fichier
                                     ,editer_la_longueur_du_fichier
                                     ,"%.0f"
                                     ,"longueur"
                                      );
                                        /* Le 20060520122341, passage de "%d" a "%.0f" a cause du probleme                           */
                                        /* 'v $xcg/fichier_etat$K 20060519191756'...                                                 */

                    EDITER_UNE_VALEUR(chain_Xtaille(nom_fichier)
                                     ,editer_la_longueur_du_nom_du_fichier
                                     ,"%d"
                                     ,"longueur_nom"
                                      );
                                        /* ATTENTION : jusqu'au 20040115120327, il y avait ici "nom" par erreur...                   */

                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,date_du_dernier_acces_____________de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____date_du_dernier_acces
                                           )
                                     ,editer_la_date_du_dernier_acces
                                     ,"%d"
                                     ,"acces"
                                      );
                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,date_de_la_derniere_modification__de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____date_de_la_derniere_modification
                                           )
                                     ,editer_la_date_de_la_derniere_modification
                                     ,"%d"
                                     ,"modification"
                                      );
                    EDITER_UNE_VALEUR(COND(LE_FICHIER_ETAIT_COMPRESSE_ET_A_ETE_DECOMPRESSE
                                          ,date_du_dernier_changement_d_etat_de_l_eventuel_fichier_compresse_decompresse
                                          ,Ftest_fichier_____date_du_dernier_changement_d_etat
                                           )
                                     ,editer_la_date_du_dernier_changement_d_etat
                                     ,"%d"
                                     ,"changement"
                                      );

                    EDITER_UNE_VALEUR(COND(IL_FAUT(editer_l_age_en_jours)
                                          ,ADD2(age_du_fichier_en_jours,marge_de_securite_pour_l_age_en_jours)
                                          ,age_du_fichier_en_secondes
                                           )
                                     ,editer_l_age
                                     ,"%d"
                                     ,"age"
                                      );

                    EDITER_UNE_VALEUR(pseudo_age_du_fichier_en_jours
                                     ,editer_le_pseudo_age_en_jours
                                     ,"%d"
                                     ,"pseudo_age"
                                      );

                    Test(IFGE(age_du_fichier_en_jours,seuil_de_l_age_en_jours))
                         Bblock
                         CAL3(Prme3("Le fichier '%s' est trop vieux (%d>=%d)\n"
                                   ,nom_fichier
                                   ,age_du_fichier_en_jours
                                   ,seuil_de_l_age_en_jours
                                    )
                              );
                                        /* Le 20040402130709 le 'Prin3(...)' a ete remplace par un 'Prer3(...)' plus coherent et     */
                                        /* par un 'Prme3(...)' encore plus logique le 20040402140845...                              */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    Test(IFGE(pseudo_age_du_fichier_en_jours,seuil_du_pseudo_age_en_jours))
                         Bblock
                         CAL3(Prme3("Le fichier '%s' est trop pseudo-vieux (%d>=%d)\n"
                                   ,nom_fichier
                                   ,pseudo_age_du_fichier_en_jours
                                   ,seuil_du_pseudo_age_en_jours
                                    )
                              );
                                        /* Le 20040402130709 le 'Prin3(...)' a ete remplace par un 'Prer3(...)' plus coherent et     */
                                        /* par un 'Prme3(...)' encore plus logique le 20040402140845...                              */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes

                    EDITER_UNE_VALEUR(Ftest_fichier_____clef_du_fichier
                                     ,generer_la_clef
                                     ,"%u"
                                     ,"clef"
                                      );
                                        /* La clef a ete introduite le 20030805112607...                                             */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("les informations du fichier recupere sont invalides");
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          gTest__CODE_ERREUR__ERREUR07(BLOC(Bblock
                                            PRINT_ATTENTION("la fin de flot a ete rencontree");
                                            Eblock
                                            )
                                      ,BLOC(Bblock
                                            PRINT_ERREUR("le fichier demande est inaccessible");
                                            CAL1(Prer1("il s'agit du fichier de nom '%s'.\n\n",nom_fichier));
                                            CAL1(Prer0("Les raisons possibles sont :\n\n"));
                                            CAL1(Prer0("1-Il n'existe pas.\n"));
                                            CAL1(Prer0("2-Son acces est interdit (voir ses droits et son proprietaire).\n"));

                                            Test(IL_FAUT(Ftest_fichier_____ouvrir_le_fichier))
                                                 Bblock
                                                 CAL1(Prer0("3-Il est trop volumineux.\n\n"));
                                                 Eblock
                                            ATes
                                                 Bblock
                                                 Eblock
                                            ETes
                                        /* Le "\n" en queue de message a ete introduit le 20030827141902 afin d'ameliorer la         */
                                        /* lisibilite de '$Z's qui utiliseraient cette commande sur de nombreux fichiers, certains   */
                                        /* pouvant ne pas exister...                                                                 */
                                        /*                                                                                           */
                                        /* Le 20060519191756, a cause du fichier '$Dsauvegardes_LACT15/disque.hda5.20060519104500',  */
                                        /* j'ai decouvert qu'un fichier trop gros ne pouvait etre ouvert (sur '$LACT15'...). Cela    */
                                        /* a conduit a modification 'v $xig/fonct$vv$FON 20060520092111' et du 20060520094158 ici... */
                                            Eblock
                                            )
                                       );
          Eblock
     ETes

     Test(EST_VRAI(le_fichier_est_compresse))
          Bblock
          Test(EST_VRAI(le_fichier_a_bien_ete_decompresse))
               Bblock
               CALS(Fdelete_fichier(nom_fichier,editer_les_messages_d_erreur));
                                        /* Destruction du fichier decompresse (introduite le 20040903101804), le fichier compresse   */
                                        /* lui, etant conserve...                                                                    */
                                        /*                                                                                           */
                                        /* ATTENTION : la date du fichier reste donc inchangee. Malheureusement, il n'en est pas     */
                                        /* de meme avec la date du directory contenant ce fichier qui, elle, est mise a jour avec    */
                                        /* la date courante ; cela a donc des consequences sur le comportement de 'v $Fgenere MKDIR' */
                                        /* qui risque de generer donc des '$MKDIR' qui a priori n'ont pas de raison d'etre. Cela a   */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(PAS_D_ERREUR(CODE_ERROR(Ftest_fichier(nom_fichier_compresse
                                                    ,editer_les_messages_d_erreur
                                                     )
                                       )
                            )
               )
               Bblock
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("le fichier compresse n'existe plus (ou n'existait pas avant...)");
               CAL1(Prer1("il s'agit du fichier compresse de nom '%s'.\n",nom_fichier_compresse));
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETU_Commande;
     Eblock
ECommande



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.