added command line arguments handler
This commit is contained in:
parent
27d025348f
commit
77cfbea689
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ bin
|
||||
build
|
||||
debug
|
||||
!.gitignore
|
||||
*.out
|
||||
|
74
src/main.c
74
src/main.c
@ -1,6 +1,74 @@
|
||||
#include <stdio.h>
|
||||
#include "utilities.h"
|
||||
#include <getopt.h>
|
||||
|
||||
int main(void) {
|
||||
printf("Hello World!\n");
|
||||
#define NOERROR 0
|
||||
#define ARGERROR 1
|
||||
|
||||
void help(int exit_code) {
|
||||
puts("Usage:");
|
||||
puts("surfaces-unies -i path [-o path] [-options]\n");
|
||||
puts("The default action is to compress the mandatory input image to a .sf");
|
||||
puts("file saved in the current directory.");
|
||||
puts("The input image MUST be saved in the ppm format.");
|
||||
puts("Options available:");
|
||||
puts("-h --help\n\tdisplay the current message");
|
||||
puts("-i --input\n\tpath to the input file (MANDATORY)");
|
||||
puts("-o --output");
|
||||
puts("\tpath to the output file (if the file already exists, it will be\n");
|
||||
puts("-c --compress\n\tcompress the input file");
|
||||
puts("-u --uncompress\n\tuncompresses the input file to the output file.");
|
||||
exit(exit_code);
|
||||
}
|
||||
|
||||
struct Argres {
|
||||
char *input;
|
||||
char *output;
|
||||
bool compress;
|
||||
};
|
||||
typedef struct Argres Argres;
|
||||
|
||||
void get_args(Argres *args, int *c) {
|
||||
switch (*c) {
|
||||
case 0: break;
|
||||
case 'h': help(NOERROR); break;
|
||||
case 'i': (*args).input = optarg; break;
|
||||
case 'o': (*args).output = optarg; break;
|
||||
case 'c': (*args).compress = true; break;
|
||||
case 'u': (*args).compress = false; break;
|
||||
case '?':
|
||||
default: help(ARGERROR);
|
||||
}
|
||||
}
|
||||
|
||||
Argres process_args(int t_argc, char *t_argv[]) {
|
||||
Argres res;
|
||||
res.input = NULL;
|
||||
res.output = NULL;
|
||||
while (true) {
|
||||
int option_index = 0;
|
||||
static struct option long_options[] = {
|
||||
{"help", no_argument, NULL, 'h'}, {"input", required_argument, NULL, 'i'},
|
||||
{"output", required_argument, NULL, 'o'}, {"compress", no_argument, NULL, 'c'},
|
||||
{"uncompress", no_argument, NULL, 'u'}, {NULL, 0, NULL, 0}};
|
||||
int c = getopt_long(t_argc, t_argv, "hi:o:cu", long_options, &option_index);
|
||||
if (c == -1) break;
|
||||
get_args(&res, &c);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
Argres argresults = process_args(argc, argv);
|
||||
if (argresults.input) {
|
||||
printf("input: %s\n", argresults.input);
|
||||
} else {
|
||||
fprintf(stderr, "ERROR: no input file.");
|
||||
help(ARGERROR);
|
||||
}
|
||||
if (!argresults.output) {
|
||||
argresults.output = "output.fs";
|
||||
}
|
||||
printf("output: %s\n", argresults.output);
|
||||
printf("Compress? %s\n", (argresults.compress) ? "true" : "false");
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user