From f8a4fbeeb230157f73789dc860ffbe84f76d0002 Mon Sep 17 00:00:00 2001 From: Gediminas Jakutis Date: Thu, 13 Feb 2020 21:44:27 +0200 Subject: initial commit. Signed-off-by: Gediminas Jakutis --- src/main.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/meson.build | 5 +++ 2 files changed, 106 insertions(+) create mode 100644 src/main.c create mode 100644 src/meson.build (limited to 'src') diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..ee80826 --- /dev/null +++ b/src/main.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include + +static struct settings_s { + size_t fetchpos; + size_t fetchto; + char *filein; + char *fileout; + int mode; +} settings = {0}; + +static int parseargs(int argc, char **argv, struct settings_s * settings); +void printhelp(const char * const name); + +int main(int argc, char **argv) +{ + int ret = 0; + + if ((ret = parseargs(argc, argv, &settings))) { + goto out; + } + +out: + return ret; +} + +static int parseargs(int argc, char **argv, struct settings_s * settings) +{ + struct settings_s s = {0}; + ssize_t i; + int ret = 0; + + if (argc < 2) { + goto err; + } + + for (i = 1; i < argc - 1; ++i) { + if (!(strcmp(argv[i], "--sort"))) { + s.mode = 0; + } else if (!(strcmp(argv[i], "--fetch"))) { + s.mode = 1; + } else if (!(strncmp(argv[i], "--position=", 11))) { + if (strlen(argv[i]) > 11) { + s.fetchpos = strtoul(argv[i] + 11, NULL, 10); + } else { + goto err; + } + } else if (!(strncmp(argv[i], "--num=", 6))) { + if (strlen(argv[i]) > 6) { + s.fetchto = strtoul(argv[i] + 11, NULL, 10); + } else { + goto err; + } + } else if (!(strncmp(argv[i], "--out=", 6))) { + if (strlen(argv[i]) > 6) { + s.fileout = argv[i] + 6; + } else { + goto err; + } + } else { + goto err; + } + } + + if (!strncmp(argv[i], "--", 2)) { + goto err; + } else { + s.filein = argv[i]; + } + + *settings = s; + if (0) { +err: + ret = EINVAL; + printhelp(*argv); + } + + return ret; +} + +void printhelp(const char * const name) +{ + printf( "This is a mergesort program and such\n" + "\n" + "usage:\t%s [options]\n FILE" + "\n" + "Options:\n" + " --sort sort mode (default)\n" + " --fetch fetch element\n" + " --position= fetch element from position \n" + " --num= of elements to fetch\n" + " --out= write output to file\n" + "\n" + "In case more than one same option is provided, the last one take precedence\n" + "\n", + name); + return; +} diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..d639f02 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,5 @@ +source_files = [ + 'main.c', +] + +sources = files(source_files) -- cgit v1.2.3