/*************************************************************************************************************************************/ /* */ /* C A L C U L D E " C L E F S " A P A R T I R D ' U N F I C H I E R : */ /* */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * ** * * * * * ** * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * ** * * * * * ** */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* */ /* ATTENTION : */ /* */ /* J'ai note le 20030814103149 (suite a */ /* 'v $xig/fonct$vv$FON 20030805111250') */ /* que le programme 'v $xcg/chiffrage.01$K' */ /* ne gerait pas explicitement les debordements. */ /* Cela fait que les clefs calculees n'ont en */ /* toute generalite qu'une validite locale et */ /* qu'exploitee autrement, elles peuvent induire */ /* des problemes de portabilite... */ /* */ /* */ /* Author of '$xcg/chiffrage.01$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1989??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 /* Introduit le 20061114154725 (car tres utile dans '$xE'...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 BORNE_INFERIEURE \ UN #define BORNE_SUPERIEURE \ MILLION /* Pour limiter la croissane ces 'SOMME_N'... */ #define METTRE_UN_ESPACE \ VRAI #define EDITER_LE_NUMERO_DU_CARACTERE_COURANT \ VRAI #define EDITER_SOMME_0 \ VRAI #define EDITER_SOMME_1 \ VRAI #define EDITER_SOMME_2 \ VRAI /* Controle de l'edition finale... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define LIMITE(x) \ MODU(x,borne_inferieure,borne_superieure) \ /* Pour limiter la croissane ces 'SOMME_N'... */ #define EDITER_UNE_SOMME(editer_la_somme,somme_a_editer) \ Bblock \ Test(IL_FAUT(mettre_un_espace)) \ Bblock \ CAL2(Prin0(" ")); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ Test(IL_FAUT(editer_la_somme)) \ Bblock \ CAL2(Prin1("%d",somme_a_editer)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Edition d'une somme quelconque. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E " C L E F S " A P A R T I R D ' U N F I C H I E R : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(borne_inferieure,BORNE_INFERIEURE)); DEFV(Int,INIT(borne_superieure,BORNE_SUPERIEURE)); /* Pour limiter la croissane ces 'SOMME_N'... */ DEFV(Logical,INIT(mettre_un_espace,METTRE_UN_ESPACE)); DEFV(Logical,INIT(editer_le_numero_du_caractere_courant,EDITER_LE_NUMERO_DU_CARACTERE_COURANT)); DEFV(Logical,INIT(editer_somme_0,EDITER_SOMME_0)); DEFV(Logical,INIT(editer_somme_1,EDITER_SOMME_1)); DEFV(Logical,INIT(editer_somme_2,EDITER_SOMME_2)); /* Controle de l'edition finale... */ DEFV(Int,INIT(numero_du_caractere_courant,ZERO)); /* Numero du caractere courant. */ DEFV(Int,INIT(somme_0,ZERO)); /* Somme des caracteres, */ DEFV(Int,INIT(somme_1,ZERO)); /* Somme des caracteres pondere par leur numero, */ DEFV(Int,INIT(somme_2,ZERO)); /* Somme des caracteres pondere par le carre de leur numero. */ /* Nota : les trois sommes sont entieres afin d'eviter les overflows de conversion... */ DEFV(Char,INIT(caractere_courant,K_UNDEF)); /* Caractere courant. */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("inf=",borne_inferieure); GET_ARGUMENT_I("sup=",borne_superieure); GET_ARGUMENT_L("espace=",mettre_un_espace); GET_ARGUMENT_L("numero=",editer_le_numero_du_caractere_courant); GET_ARGUMENT_L("somme_0=",editer_somme_0); GET_ARGUMENT_L("somme_1=",editer_somme_1); GET_ARGUMENT_L("somme_2=",editer_somme_2); ) ); Tant(GetcharT(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. */ INCR(somme_0,NEUT(caractere_courant)); /* Somme des caracteres, */ /* */ /* ATTENTION : le debordement eventuel de 'somme_0' n'est pas gere explicitement... */ INCR(somme_1,MUL2(NEUT(numero_du_caractere_courant),caractere_courant)); EGAL(somme_1,LIMITE(somme_1)); /* Somme des caracteres pondere par leur numero, */ /* */ /* ATTENTION : le debordement eventuel de 'somme_1' n'est pas gere explicitement... */ INCR(somme_2,MUL2(EXP2(numero_du_caractere_courant),caractere_courant)); EGAL(somme_2,LIMITE(somme_2)); /* Somme des caracteres pondere par le carre de leur numero. */ /* */ /* ATTENTION : le debordement eventuel de 'somme_2' n'est pas gere explicitement... */ Eblock ETan EDITER_UNE_SOMME(editer_le_numero_du_caractere_courant,numero_du_caractere_courant); EDITER_UNE_SOMME(editer_somme_0,somme_0); EDITER_UNE_SOMME(editer_somme_1,somme_1); EDITER_UNE_SOMME(editer_somme_2,somme_2); RETU_Commande; Eblock ECommande