/*************************************************************************************************************************************/
/* */
/* C O M P R E S S I O N / D E C O M P R E S S I O N ' CDCM1 ' D ' U N E C H A I N E : */
/* */
/* */
/* Author of '$xrC/CompressionDeCompression_Compression.01$vv$c' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 20151227150148). */
/* */
/*************************************************************************************************************************************/
/*************************************************************************************************************************************/
/* */
/* A R G U M E N T S D ' A P P E L : */
/* */
/*************************************************************************************************************************************/
#define NOM_DE_L_OUTIL \
argv[0]
#define NOM_DU_FICHIER \
argv[1]
#define BWT_UTILISER \
argv[2]
#define HUF_UTILISER \
argv[3]
#define EDITER_UNIQUEMENT_K_ET_LD_CUMULEES \
argv[4]
#define EDITER_LES_COMPOSANTES_DES_K_PARTIELLES \
argv[5]
#define BWT_TAILLE_DES_PAQUETS \
argv[6]
#define CDC_TAILLE_DES_PAQUETS \
argv[7]
#define BWT_FICHIER_RLE_1 \
argv[8]
#define BWT_FICHIER_BWT__ \
argv[9]
#define BWT_FICHIER_RLE_2 \
argv[10]
#define BWT_FICHIER_HUF__ \
argv[11]
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N G E N E R A L E S : */
/* */
/*************************************************************************************************************************************/
#include "CompressionDeCompression_Compression.01.vv.I"
#define GET_ARGUMENTS(numero,sequence) \
{ \
if (argc >= numero) \
{ \
sequence; \
} \
else \
{ \
} \
}
/*************************************************************************************************************************************/
/* */
/* P R O G R A M M E P R I N C I P A L : */
/* */
/*************************************************************************************************************************************/
main(int argc,CHAR *argv[])
{
CDC_MettreEnConcurrenceLesDifferentesOptions=FAUX;
BWT_Utiliser=VRAI;
HUF_Utiliser=VRAI;
BWT_EditerLesChaines=FAUX;
CDC_EditerLesLongueurs=FAUX;
CDC_EditerArguments=VRAI;
CDC_EditerCDCBits=FAUX;
CDC_EditerChronometrage=FAUX;
CDC_Editer_K_bits=FAUX;
CDC_EditerUniquement_K_et_LD_Cumulees=VRAI;
CDC_EditerLesComposantesDes_K_Partielles=FAUX;
HUF_EditerArbre=FAUX;
HUF_EditerCodesDeHuffman=FAUX;
HUF_EditerFrequences=FAUX;
RLE_EditerLesChaines=FAUX;
/* Mis ici pour en faciliter la mise a jour... */
if (argc >= 2)
{
GET_ARGUMENTS(3 ,{BWT_Utiliser = atoi(BWT_UTILISER);});
GET_ARGUMENTS(4 ,{HUF_Utiliser = atoi(HUF_UTILISER);});
GET_ARGUMENTS(5 ,{CDC_EditerUniquement_K_et_LD_Cumulees = atoi(EDITER_UNIQUEMENT_K_ET_LD_CUMULEES);});
GET_ARGUMENTS(6 ,{CDC_EditerLesComposantesDes_K_Partielles = atoi(EDITER_LES_COMPOSANTES_DES_K_PARTIELLES);});
GET_ARGUMENTS(7 ,{BWT_TailleDesPaquets = atoi(BWT_TAILLE_DES_PAQUETS);});
GET_ARGUMENTS(8 ,{CDC_TailleDesPaquets = atoi(CDC_TAILLE_DES_PAQUETS);});
GET_ARGUMENTS(9 ,{BWT_Fichier_RLE_1 = BWT_FICHIER_RLE_1;});
GET_ARGUMENTS(10,{BWT_Fichier_BWT__ = BWT_FICHIER_BWT__;});
GET_ARGUMENTS(11,{BWT_Fichier_RLE_2 = BWT_FICHIER_RLE_2;});
GET_ARGUMENTS(12,{BWT_Fichier_HUF__ = BWT_FICHIER_HUF__;});
GET_ARGUMENTS(13,{fprintf(stderr,"ERREUR(CDC) : Les arguments en trop sont ignores.\n");});
{
int DescripteurDuFichier=open(NOM_DU_FICHIER,O_RDONLY);;
int etat_fichier;
struct stat EtatDuFichier;
if (DescripteurDuFichier >= 0)
{
if (fstat(DescripteurDuFichier,&EtatDuFichier) >= 0)
{
int TailleDuFichier=EtatDuFichier.st_size;
int NombreDOctetsLus;
char *BufferDuFichier;
BufferDuFichier = MALLOC(TailleDuFichier);
if (CDC_TailleDesPaquets > 0)
{
}
else
{
CDC_TailleDesPaquets = TailleDuFichier;
}
if (BWT_TailleDesPaquets > 0)
{
}
else
{
BWT_TailleDesPaquets = TailleDuFichier;
}
if (CDC_EditerArguments == VRAI)
{
printf("Fichier.............................. = %s\n"
,NOM_DU_FICHIER
);
printf("Outil................................ = %s\n"
,NOM_DE_L_OUTIL
);
/* Edition du nom de l'outil utilise (introduit le 20160224104551). */
printf("TailleFichier........................ = %d (%s)\n"
,CONVERSION_BITS_OCTET(TailleDuFichier*NBITOC)
,BITS_OU_OCTETS
);
printf("PaquetsDecoupageFichier.............. = %d (octets)\n"
,CDC_TailleDesPaquets
);
if (CDC_MettreEnConcurrenceLesDifferentesOptions == FAUX)
{
printf("BWT.................................. = %s\n"
,FORMAT_VRAI_FAUX(BWT_Utiliser)
);
if (BWT_Utiliser == VRAI)
{
printf("PaquetsBWT........................... = %d (octets)\n"
,BWT_TailleDesPaquets
);
}
else
{
}
printf("HUF.................................. = %s\n"
,FORMAT_VRAI_FAUX(HUF_Utiliser)
);
}
else
{
}
}
else
{
}
{
CHAR *nettoyage=MALLOC(1);
GENERE_FICHIER(BWT_Fichier_RLE_1,&nettoyage,0,"w");
GENERE_FICHIER(BWT_Fichier_BWT__,&nettoyage,0,"w");
GENERE_FICHIER(BWT_Fichier_RLE_2,&nettoyage,0,"w");
GENERE_FICHIER(BWT_Fichier_HUF__,&nettoyage,0,"w");
/* Initialisation eventuelle d'un ou plusieurs fichiers donnant le resultat des quatre */
/* etapes {RLE_1,BWT,RLE_2,HUF}. Le mode "w" et la longueur nulle permettent de detruire */
/* une eventuelle version pre-existante et de preparer ensuite la construction progressive */
/* de ces fichiers en mode "a" ("appending" c'est-a-dire "writing at end of file"). */
}
NombreDOctetsLus = read(DescripteurDuFichier,BufferDuFichier,TailleDuFichier);
if (NombreDOctetsLus == TailleDuFichier)
{
if (CDC_MettreEnConcurrenceLesDifferentesOptions == FAUX)
{
F_MesureDe_K_EtDe_LD_Globale(BufferDuFichier,TailleDuFichier);
/* Mesure de K et de LD du fichier argument... */
}
else
{
D_METTRE_EN_CONCURRENCE(VRAI,VRAI);
D_METTRE_EN_CONCURRENCE(VRAI,FAUX);
D_METTRE_EN_CONCURRENCE(FAUX,VRAI);
D_METTRE_EN_CONCURRENCE(FAUX,FAUX);
/* Mesure de K et de LD du fichier argument par concurrence de plusieurs methodes... */
if (CONVERSION_BITS_OCTET(Complexite_K__Cumulee__Minimale) >= TailleDuFichier)
{
Complexite_K__Cumulee__Minimale = TailleDuFichier*NBITOC;
Complexite_LD_Cumulee__Associee_A_Complexite_K__Cumulee__Minimale = 1;
/* Dans le cas ou K est superieure ou egale a la taille du ficher, on force K et LD... */
}
else
{
}
printf("BWT.................................. = %s\n"
,FORMAT_VRAI_FAUX(BWT_Utiliser__Associee_A_Complexite_K__Cumulee__Minimale)
);
if (BWT_Utiliser__Associee_A_Complexite_K__Cumulee__Minimale == VRAI)
{
printf("PaquetsBWT........................... = %d (octets)\n"
,BWT_TailleDesPaquets
);
}
else
{
}
printf("HUF.................................. = %s\n"
,FORMAT_VRAI_FAUX(HUF_Utiliser__Associee_A_Complexite_K__Cumulee__Minimale)
);
printf("K.................................... = %.0f (%s)\n"
,floor(CONVERSION_BITS_OCTET(Complexite_K__Cumulee__Minimale))
,BITS_OU_OCTETS
);
printf("LD................................... = %.0f (instructions)\n"
,Complexite_LD_Cumulee__Associee_A_Complexite_K__Cumulee__Minimale
);
}
}
else
{
fprintf(stderr
,"ERREUR(CDC) : %d octets ont ete lus au lieu de %d.\n"
,NombreDOctetsLus
,TailleDuFichier
);
}
}
else
{
fprintf(stderr
,"ERREUR(CDC) : Probleme avec le fichier '%s'.\n"
,NOM_DU_FICHIER
);
}
close(DescripteurDuFichier);
}
else
{
fprintf(stderr,"ERREUR(CDC) : Le fichier '%s' n'existe pas.\n",NOM_DU_FICHIER);
}
}
}
else
{
fprintf(stderr,"ERREUR(CDC) : Il n'y a pas assez d'arguments.\n");
}
}