/*************************************************************************************************************************************/
/* */
/* C H I F F R A G E C H A O T I Q U E I N V E R S I B L E D ' U N F I C H I E R : */
/* */
/* */
/* Author of '$xcg/chiffrage.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_MINI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define TAUX_DE_CROISSANCE \
FLOT(TROIS) \
/* Taux de croissance. */
#define X0 \
FDU \
/* Valeur de la premiere iteration. */
#define N0 \
ZERO \
/* Numero de la premiere iteration... */
#define NOMBRE_D_ITERATIONS_AVEUGLES \
MILLION \
/* Nombre d'iterations inutiles faites avant le chiffrage... */
#define PERIODICITE_DE_LA_TRONCATURE \
VINGT \
/* Periodicite de la troncature des decimales... */
#define IMPORTANCE_DE_LA_TRONCATURE \
MILLION \
/* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme */ \
/* de la dependance vis a vis du code genere et de la structure des machines... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define DYNAMIQUE(x) \
SOUS(MUL2(SUCC(taux_de_croissance),EXP1(x)) \
,MUL2(taux_de_croissance,EXP2(x)) \
) \
/* Definition du systeme dynamique utilise... */
#define CODAGE(c,x) \
MODS(OUEX(c,INTE(MUL2(FLOT(MOCD),DYNAMIQUE(x)))),ZERO,MOCD) \
/* Definition du codage inversible utilise... */
#define SYSTEME_DYNAMIQUE \
Bblock \
INCR(numero_de_l_iteration,I); \
EGAL(xn,DYNAMIQUE(xn)); \
/* Iteration du systeme dynamique... */ \
Test(DIVISIBLE(SOUS(numero_de_l_iteration,N0),periodicite_de_la_troncature)) \
Bblock \
EGAL(xn,DIVI(fINTE(MUL2(FLOT(importance_de_la_troncature),xn)),FLOT(importance_de_la_troncature))); \
/* Periodiquement, les dernieres decimales ont eliminees afin d'eliminer le probleme de la */ \
/* vis a vis du code genere et de la structure des machines... */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Definition du systeme dynamique de chiffrage... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H I F F R A G E C H A O T I Q U E I N V E R S I B L E D ' U N F I C H I E R : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Int,INIT(numero_du_caractere_courant,ZERO));
/* Numero du caractere courant. */
DEFV(Int,INIT(numero_de_l_iteration,N0));
/* Numero 'n' de l'iteration courante. */
DEFV(Int,INIT(nombre_d_iterations_aveugles,NOMBRE_D_ITERATIONS_AVEUGLES));
/* Nombre d'iterations inutilies faites avant le chiffrage... */
DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE));
/* Taux de croissance. */
DEFV(Float,INIT(x0,X0));
/* Valeur de la premiere iteration. */
DEFV(Float,INIT(xn,FLOT__UNDEF));
/* Valeur de l'iteration courante. */
DEFV(Int,INIT(periodicite_de_la_troncature,PERIODICITE_DE_LA_TRONCATURE));
/* Periodicite de la troncature des decimales... */
DEFV(Int,INIT(importance_de_la_troncature,IMPORTANCE_DE_LA_TRONCATURE));
/* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme */
/* de la dependance vis a vis du code genere et de la structure des machines... */
DEFV(Int,INIT(caractere_courant,UNDEF));
/* Caractere courant. ATTENTION, on utilise le type 'Int' et non pas 'Char' a cause de */
/* de l'usage qui sera fait ci-apres de 'GetcharQ(...)', et ce afin que le test de fin */
/* de fichier fonctionne correctement... */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_I("aveugle=",nombre_d_iterations_aveugles);
GET_ARGUMENT_F("taux=""r=""R=",taux_de_croissance);
GET_ARGUMENT_F("x0=""X0=",x0);
GET_ARGUMENT_I("p=",periodicite_de_la_troncature);
GET_ARGUMENT_I("t=",importance_de_la_troncature);
)
);
EGAL(xn,x0);
/* Initialisation du processus dynamique... */
Repe(nombre_d_iterations_aveugles)
Bblock
SYSTEME_DYNAMIQUE;
/* Ces quelques iterations aveugles sont destinees a nous faire arriver dans le chaos... */
Eblock
ERep
Tant(GetcharQ(caractere_courant))
Bblock
/* Le caractere courant de l'entree courante est recupere ; et on boucle */
/* sur cette recuperation tant que l'on n'est pas au bout du fichier. */
INCR(numero_du_caractere_courant,I);
/* Numero du caractere courant. */
Test(IFNE(caractere_courant,CODAGE(CODAGE(caractere_courant,xn),xn)))
Bblock
PRINT_ERREUR("le codage n'est pas inversible");
Eblock
ATes
Bblock
Eblock
ETes
CALS(Putchar(CODAGE(caractere_courant,xn)));
/* Le caractere courant est code puis emis... */
SYSTEME_DYNAMIQUE;
Eblock
ETan
RETU_Commande;
Eblock
ECommande