From a10db2328b82791a75bf7d8a97273e6402e62f17 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Thu, 24 Nov 2016 19:33:05 +0000 Subject: [PATCH] Add args and usage output --- makefile | 2 +- src/args.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/args.h | 20 ++++++++++++++++ src/conf.c | 6 +---- src/conf.h | 2 +- src/main.c | 5 +++- 6 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/args.c create mode 100644 src/args.h diff --git a/makefile b/makefile index 5dde712..f50f074 100644 --- a/makefile +++ b/makefile @@ -16,7 +16,7 @@ LDFLAGS ?= -lncursesw -lical # Sources PROG ?= lackey -PROG_SRC ?= main view date cal conf util +PROG_SRC ?= main view date cal args conf util TEST ?= test TEST_SRC ?= test date cal conf util VIEWS ?= day week month year events todo settings help edit diff --git a/src/args.c b/src/args.c new file mode 100644 index 0000000..afc0b48 --- /dev/null +++ b/src/args.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2016 Andy Spencer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#include "args.h" +#include "util.h" + +/* Setup info */ +static int argc; +static char **argv; + +/* Options */ +const char *short_options = "h"; + +struct option long_options[] = { + {"help", 0, NULL, 'h'}, +}; + +/* Usage */ +static void usage(char *name) +{ + printf("Usage:\n"); + printf(" %s [OPTION...]\n", name); + printf("\n"); + printf("Options:\n"); + printf(" -h, --help Print usage information\n"); +} + +/* Initialize */ +void args_setup(int _argc, char **_argv) +{ + argc = _argc; + argv = _argv; +} + +/* Initialize */ +void args_init(void) +{ + while (1) { + int c = getopt_long(argc, argv, + short_options, long_options, NULL); + if (c == -1) + break; + switch (c) { + case 'h': + usage(argv[0]); + exit(0); + break; + } + } +} diff --git a/src/args.h b/src/args.h new file mode 100644 index 0000000..cca1b5e --- /dev/null +++ b/src/args.h @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2016 Andy Spencer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* Functions */ +void args_setup(int argc, char **argv); +void args_init(void); diff --git a/src/conf.c b/src/conf.c index e379cbf..1a81b91 100644 --- a/src/conf.c +++ b/src/conf.c @@ -44,8 +44,6 @@ static const char *booleans[] = { /* Setup info */ static char *filename; static parser_t parser; -static int argc; -static char **argv; /* Static data */ static line_t *settings; @@ -316,14 +314,12 @@ void conf_save(const char *path) } /* Initialize */ -void conf_setup(int _argc, char **_argv, const char *_name, parser_t _parser) +void conf_setup(const char *_name, parser_t _parser) { const char *home = getenv("HOME"); filename = alloc0(strlen(home) + 1 + strlen(_name) + 1); sprintf(filename, "%s/%s", home, _name); parser = _parser; - argc = _argc; - argv = _argv; } /* Initialize */ diff --git a/src/conf.h b/src/conf.h index 9b0c593..b716cf6 100644 --- a/src/conf.h +++ b/src/conf.h @@ -40,6 +40,6 @@ void set_name(const char *group, const char *name, const char *value); /* Functions */ -void conf_setup(int argc, char **argv, const char *name, parser_t parser); +void conf_setup(const char *name, parser_t parser); void conf_init(void); void conf_sync(void); diff --git a/src/main.c b/src/main.c index c10ea67..f957575 100644 --- a/src/main.c +++ b/src/main.c @@ -18,6 +18,7 @@ #include #include +#include "args.h" #include "util.h" #include "conf.h" #include "date.h" @@ -45,9 +46,11 @@ int main(int argc, char **argv) signal(SIGINT, on_sigint); /* Configuration */ - conf_setup(argc, argv, ".lackeyrc", on_config); + args_setup(argc, argv); + conf_setup(".lackeyrc", on_config); /* Initialize */ + args_init(); util_init(); conf_init(); date_init(); -- 2.41.0