Accepte les options via Argp
This commit is contained in:
parent
c142d06464
commit
2b3162cd66
89
src/main.c
89
src/main.c
|
@ -1,20 +1,85 @@
|
|||
#include "../include/common.h"
|
||||
#include "../include/compress.h"
|
||||
#include <stdio.h>
|
||||
#include <argp.h>
|
||||
#include <locale.h>
|
||||
|
||||
int main(int argc, const char** argv) {
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Utilisation : compress <source>\n");
|
||||
/**
|
||||
* Définition de la configuration de Argp, qui affichera
|
||||
* ces informations dans la page d'aide entre autres
|
||||
*/
|
||||
static char doc[] = "Compresse ou décompresse des fichiers en "
|
||||
"utilisant l'algorithme de Huffman";
|
||||
static char args_doc[] = "FICHIER...";
|
||||
static struct argp_option options[] = {
|
||||
{
|
||||
"debug", 'd', 0, 0,
|
||||
"Afficher des informations de débogage sur la compression"
|
||||
},
|
||||
{0}
|
||||
};
|
||||
|
||||
if (argc == 1) {
|
||||
fprintf(stderr, "Paramètre fichier manquant.\n");
|
||||
} else {
|
||||
fprintf(stderr, "Trop de paramètres.\n");
|
||||
}
|
||||
/**
|
||||
* Contient les valeurs des arguments (options et opérandes)
|
||||
* passées au programme et interprétées via Argp
|
||||
*/
|
||||
typedef struct Args {
|
||||
int verbose;
|
||||
char **files;
|
||||
} Args;
|
||||
|
||||
return 1;
|
||||
/**
|
||||
* Fonction de rappel pour interpréter les arguments
|
||||
* passés au programme
|
||||
*/
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
Args *args = state->input;
|
||||
|
||||
switch (key) {
|
||||
case 'd':
|
||||
args->verbose = TRUE;
|
||||
break;
|
||||
|
||||
case ARGP_KEY_ARG:
|
||||
// Consommation de tous les fichiers en argument
|
||||
// et arrêt du parsage
|
||||
args->files = &state->argv[state->next - 1];
|
||||
state->next = state->argc;
|
||||
break;
|
||||
|
||||
case ARGP_KEY_NO_ARGS:
|
||||
argp_usage(state);
|
||||
break;
|
||||
|
||||
default:
|
||||
return ARGP_ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
compress(argv[1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = {options, parse_opt, args_doc, doc};
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
// Pour pouvoir afficher des caractères larges dans le terminal
|
||||
setlocale(LC_CTYPE, "");
|
||||
|
||||
// Interprétation des arguments passés au programme par Argv,
|
||||
// suivant la configuration définie au dessus
|
||||
Args args;
|
||||
|
||||
args.verbose = FALSE;
|
||||
args.files = NULL;
|
||||
|
||||
argp_parse(&argp, argc, argv, 0, 0, &args);
|
||||
|
||||
// Passage en mode verbeux si demandé
|
||||
setVerbose(args.verbose);
|
||||
|
||||
// Compression de chaque fichier en argument
|
||||
char** filepath = args.files;
|
||||
|
||||
while (*filepath != NULL) {
|
||||
compress(*filepath);
|
||||
filepath++;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue