huffman/src/arguments.c

66 lines
1.5 KiB
C

#include "arguments.h"
#include "common.h"
#include <argp.h>
#include <string.h>
error_t parseArgument(int key, char* arg, struct argp_state* state) {
Args* args = state->input;
switch (key) {
case 'v':
args->verbose = TRUE;
break;
case 'd':
args->compress = FALSE;
break;
case ARGP_KEY_ARG:
switch (state->arg_num) {
case 0:
// Premier argument : fichier d'entrée
args->source = fopen(arg, "rb");
if (args->source == NULL) {
argp_error(
state, "%s: %s",
arg, strerror(errno)
);
}
break;
case 1:
// Second argument : fichier de sortie. Si omis,
// utilisation de la sortie standard
args->dest = fopen(arg, "wb");
if (args->dest == NULL) {
argp_error(
state, "%s: %s",
arg, strerror(errno)
);
}
break;
default:
argp_error(
state, "trop d'arguments (l'argument %s, numéro %d "
"est superflu)", arg, state->arg_num + 1
);
}
break;
case ARGP_KEY_END:
if (state->arg_num < 1) {
argp_error(state, "fichier d'entrée manquant");
}
break;
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}