/*************************************************************************************************************************************/ /* */ /* C O M P R E S S I O N / D E C O M P R E S S I O N " R U N - L E N G T H E N C O D I N G " : */ /* */ /* */ /* Author of '$xtc/RunLengthEncoding.11$vv$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20151223103358). */ /* */ /*************************************************************************************************************************************/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E S : */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" #include "RunLengthEncoding.11.vv.I" #define NUMERO_DU_TEST \ 12 \ /* Selecteur des chaines de test {12,22,32,...}. */ /*************************************************************************************************************************************/ /* */ /* C H O I X D E L A C H A I N E D E T E S T : */ /* */ /*************************************************************************************************************************************/ #define CONCATENE_1(argument1,argument2) \ argument1 ## _ ## argument2 #define CONCATENE_2(argument1,argument2) \ CONCATENE_1(argument1,argument2) /* On notera que l'on ne peut ecritre directement : */ /* */ /* CONCATENE_2(argument1,argument2) \ */ /* argument1 ## _ ## argument2 */ /* */ /* car cela n'assure pas la substitution de 'NUMERO_DU_TEST' par sa valeur, mais au lieu */ /* de cela, concatene la chaine "NUMERO_DU_TEST" et produit donc des symboles aberrants */ /* tels 'ChaineA_NUMERO_DU_TEST' au lieu, par exemple, de 'ChaineA_02'... */ #define CHAINE_A \ CONCATENE_2(ChaineA,NUMERO_DU_TEST) #define LONGUEUR_CHAINE_A \ strlen(CONCATENE_2(ChaineA,NUMERO_DU_TEST)) /*************************************************************************************************************************************/ /* */ /* P R O G R A M M E P R I N C I P A L : */ /* */ /*************************************************************************************************************************************/ main() { CHAR ChaineA_12[]="ABBCCCDDDDEEEEEFFFFFFGGGGGGGHHHHHHHHIIIIIIIIIJJJJJJJJJJ"; CHAR ChaineA_22[]="ABBCCCDDDDEEEEE"; CHAR ChaineA_32[]="ABBCCCDDDD"; /* Quelques chaines... */ RunLengthEncoding_InitialisationChaineATraiter(RunLengthEncoding_ChaineACompresser,CHAINE_A,LONGUEUR_CHAINE_A); RunLengthEncoding_InitialisationTransformationDirecte(RunLengthEncoding_ChaineCompressee); RunLengthEncoding_TransformationDirecte(RunLengthEncoding_ChaineCompressee,RunLengthEncoding_ChaineACompresser); RunLengthEncoding_DesinitialisationsTransformationDirecte(); RunLengthEncoding_InitialisationTransformationInverse(RunLengthEncoding_ChaineDecompressee); RunLengthEncoding_TransformationInverse(RunLengthEncoding_ChaineDecompressee,RunLengthEncoding_ChaineCompressee); RunLengthEncoding_Verifications(RunLengthEncoding_ChaineDecompressee,RunLengthEncoding_ChaineACompresser); RunLengthEncoding_DesinitialisationsTransformationInverse(RunLengthEncoding_ChaineDecompressee ,RunLengthEncoding_ChaineCompressee ); RunLengthEncoding_DesinitialisationChaineATraiter(RunLengthEncoding_ChaineACompresser); }