/*************************************************************************************************************************************/ /* */ /* O P E R A T I O N S A R I T H M E T I Q U E S S U R D E S F I C H I E R S */ /* A V E C A L L O C A T I O N D Y N A M I Q U E D E L A M E M O I R E : */ /* */ /* */ /* Author of '$xrv/ARITHMET.1d$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20060214124411). */ /* */ /*************************************************************************************************************************************/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N E T R E C U P E R A T I O N D E S F I C H I E R S : */ /* */ /*************************************************************************************************************************************/ #include xrv/ARITHMET.1g.I" #define iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs) \ Bblock \ MdTb1(liste_des_valeurs,nombre_maximal_d_elements_dans_le_fichier,Float,ADRESSE_NON_ENCORE_DEFINIE); \ Eblock \ /* Allocation memoire d'un fichier (introduit le 20060218102935). */ #define iGENERATION_D_UN_FICHIER(liste_des_valeurs,valeur_initiale) \ Bblock \ Test(IFEQ(liste_des_valeurs,ADRESSE_NON_ENCORE_DEFINIE)) \ Bblock \ iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs); \ /* Allocation dynamique de 'liste_des_valeurs' lorsque 'lTRANSFORMAT_01(...)' n'a pas eu */ \ /* lieu sur ce fichier... */ \ \ gINITIALISATION_LISTE(liste_des_valeurs \ ,valeur_initiale \ ,PREMIER_ELEMENT_D_UN_FICHIER \ ,nombre_maximal_d_elements_dans_le_fichier \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Initialisation d'un fichier... */ #define lGENERATION_D_UN_FICHIER(liste_des_valeurs,valeur_initiale) \ Bblock \ FdTb1(liste_des_valeurs,nombre_maximal_d_elements_dans_le_fichier,Float,ADRESSE_NON_ENCORE_DEFINIE); \ /* Liberation de la memoire 'liste_des_valeurs'... */ \ Eblock \ /* Liberation d'un fichier (introduit le 20080226150500 car, en effet, manquait a cette */ \ /* date...). */ #define lTRANSFORMAT_0d(fichier_des_valeurs,liste_des_valeurs,valeur_par_defaut) \ /* Le 20060215110928 le nom 'lTRANSFORMAT_01(...)' est devenu 'lTRANSFORMAT_0d(...)'... */ \ Bblock \ glTRANSFORMAT_01(fichier_des_valeurs \ ,liste_des_valeurs \ ,valeur_par_defaut \ ,BLOC( \ Bblock \ EGAL(nombre_maximal_d_elements_dans_le_fichier \ ,MAX2(liste_des_valeurs`____nombre_d_elements \ ,nombre_d_elements \ ) \ ); \ /* Le 20240930163259, l'initialisation : */ \ /* */ \ /* EGAL(nombre_maximal_d_elements_dans_le_fichier,nombre_d_elements); */ \ /* */ \ /* a ete remplace par quelque chose specifique a chaque fichier... */ \ iALLOCATION_MEMOIRE_D_UN_FICHIER(liste_des_valeurs); \ /* Allocation dynamique de la memoire du fichier 'liste_des_valeurs'... */ \ Eblock \ ) \ ); \ Eblock \ /* Recuperation d'un fichier contenant une liste. ATTENTION, le 19980317091800, le */ \ /* parametre : */ \ /* */ \ /* LE_NOM_DU_FICHIER_N_EST_PAS_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE */ \ /* */ \ /* est devenu : */ \ /* */ \ /* LE_NOM_DU_FICHIER_EST_CONVERTISSABLE_EN_UNE_VALEUR_NUMERIQUE */ \ /* */ \ /* car cela permet, par exemple, d'incrementer tous les elements d'un fichier d'une valeur */ \ /* constante... */ \ /* */ \ /* Je rappelle le 20170111102500 que si le nom du fichier est une "bonne" valeur numerique, */ \ /* c'est elle qui l'emporte, meme si il existe un fichier portant ce nom. Cela ne peut */ \ /* evidemment se produire que si ce dernier fichier est designe de facon relative (et donc */ \ /* dans '$CWD'). Pour forcer l'acces a ce fichier (et donc ne pas utiliser la valeur */ \ /* numerique correspondant a son nom), il suffit d'absolutiser ce nom, qui alors ne */ \ /* ressemblera plus a une "bonne" valeur numerique... */