void afficher_dictionnaire(Dictionnaire *dico, char* str) { int i,longueur, valeur_dico; Dictionnaire* pointeur_dico; char car; char* str_fille; for (i=0; i<MAX; i++) { car = obtenirElementDico(*dico,i); valeur_dico = dico->AdRFils[i].finDeMot; pointeur_dico = dico->AdRFils[i].pointeur; if (valeur_dico == 1) { printf("%s%c\n",str,car); } if (pointeur_dico != NULL) { longueur = strlen(str); str_fille = (char*)calloc(longueur+2,sizeof(char)); strcat(str_fille,str); str_fille[longueur] = car; str_fille[longueur+1] = '\0'; afficher_dictionnaire(pointeur_dico,str_fille); free(str_fille); } } }
int main (int argc, char * argv[]) { t_ptr_arbre dictionnaire = NULL; unsigned int choix = 1; char fichier_entree[256], fichier_sortie[256]; double temps_debut = 0.0, temps_fin = 0.0; printf ("\n\n"); printf (" ---------- Compression et Decompression LZW ---------------\n\n"); if (argc == 2 && strcmp ("h", argv[1]) == 0) { printf ("\n\n"); printf (" lzw <c|d|h> <fichier_d_entree> <fichier_de_sortie>\n"); printf (" \tc : compression\n"); printf (" \td : decompression\n"); printf (" \th : affichage de l'aide\n"); printf (" \tfichier_d_entree : nom du fichier d'entree\n"); printf (" \tfichier_de_sortie : nom du fichier de sortie\n"); printf ("\n\n"); return EXIT_SUCCESS; } else if (argc == 4) { if (strcmp ("c", argv[1]) == 0) { printf ("COMPRESSION\n"); temps_debut = (double)clock (); dictionnaire = initialiser_dictionnaire (); ouvrir_fichier_entree (argv[2], 0); ouvrir_fichier_sortie (argv[3], 1); compresser (dictionnaire); temps_fin = (double)clock (); afficher_statistiques (1, temps_debut, temps_fin); fermer_fichiers (); detruire_dictionnaire (dictionnaire); } else if (strcmp ("d", argv[1]) == 0) { printf ("DECOMPRESSION\n"); temps_debut = (double)clock (); dictionnaire = initialiser_dictionnaire (); ouvrir_fichier_entree (argv[2], 1); ouvrir_fichier_sortie (argv[3], 0); decompresser (dictionnaire); temps_fin = (double)clock (); afficher_statistiques (0, temps_debut, temps_fin); fermer_fichiers (); detruire_dictionnaire (dictionnaire); } printf ("\n\n"); return EXIT_SUCCESS; } /* Menu si aucun argument n'a ete donne en ligne de commande */ while (choix != 0) { printf ("\n\n"); printf (" \t1 - Compresser un fichier (fichier texte)\n"); printf (" \t2 - Decompresser un fichier (fichier binaire)\n"); printf (" \t3 - Affichage du dernier dictionnaire utilise\n"); printf (" \t0 - Quitter le programme\n"); printf (" Votre choix : "); scanf ("%d", &choix); fgets (fichier_entree, 256, stdin); /* Recupere le caractere \n lu apres le choix */ printf ("\n"); switch (choix) { case 1 : printf ("COMPRESSION\n"); if (dictionnaire != NULL) detruire_dictionnaire (dictionnaire); temps_debut = (double)clock (); dictionnaire = initialiser_dictionnaire (); demander_nom_fichiers (fichier_entree, fichier_sortie); ouvrir_fichier_entree (fichier_entree, 0); ouvrir_fichier_sortie (fichier_sortie, 1); compresser (dictionnaire); temps_fin = (double)clock (); afficher_statistiques (1, temps_debut, temps_fin); fermer_fichiers (); break; case 2 : printf ("DECOMPRESSION\n"); if (dictionnaire != NULL) detruire_dictionnaire (dictionnaire); temps_debut = (double)clock (); dictionnaire = initialiser_dictionnaire (); demander_nom_fichiers (fichier_entree, fichier_sortie); ouvrir_fichier_entree (fichier_entree, 1); ouvrir_fichier_sortie (fichier_sortie, 0); decompresser (dictionnaire); temps_fin = (double)clock (); afficher_statistiques (0, temps_debut, temps_fin); fermer_fichiers (); break; case 3 : printf ("AFFICHAGE DU DICTIONNAIRE\n"); if (dictionnaire != NULL) afficher_dictionnaire (dictionnaire, 0); break; default : choix = 0; break; } } printf ("\n"); return EXIT_SUCCESS; }