diff options
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/main.c | 61 | ||||
-rw-r--r-- | src/til_args.c | 47 | ||||
-rw-r--r-- | src/til_args.h | 17 |
4 files changed, 73 insertions, 54 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index c0a20b5..6ca1d77 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,7 +1,7 @@ SUBDIRS = libs modules noinst_LTLIBRARIES = libtil.la -libtil_la_SOURCES = til_fb.c til_fb.h til_knobs.h til.c til.h til_settings.h til_settings.c til_threads.c til_threads.h til_util.c til_util.h +libtil_la_SOURCES = til_args.c til_args.h til_fb.c til_fb.h til_knobs.h til.c til.h til_settings.h til_settings.c til_threads.c til_threads.h til_util.c til_util.h libtil_la_CPPFLAGS = -I@top_srcdir@/src libtil_la_LIBADD = modules/compose/libcompose.la modules/drizzle/libdrizzle.la modules/flui2d/libflui2d.la modules/julia/libjulia.la modules/meta2d/libmeta2d.la modules/montage/libmontage.la modules/pixbounce/libpixbounce.la modules/plasma/libplasma.la modules/plato/libplato.la modules/ray/libray.la modules/roto/libroto.la modules/rtv/librtv.la modules/snow/libsnow.la modules/sparkler/libsparkler.la modules/spiro/libspiro.la modules/stars/libstars.la modules/submit/libsubmit.la modules/swab/libswab.la modules/swarm/libswarm.la libs/grid/libgrid.la libs/puddle/libpuddle.la libs/ray/libray.la libs/sig/libsig.la libs/txt/libtxt.la libs/ascii/libascii.la libs/din/libdin.la @@ -11,6 +11,7 @@ #include <unistd.h> #include "til.h" +#include "til_args.h" #include "til_settings.h" #include "til_fb.h" #include "til_util.h" @@ -44,48 +45,6 @@ typedef struct rototiller_t { static rototiller_t rototiller; -typedef struct argv_t { - const char *module; - const char *video; - - unsigned use_defaults:1; - unsigned help:1; -} argv_t; - -/* - * ./rototiller --video=drm,dev=/dev/dri/card3,connector=VGA-1,mode=640x480@60 - * ./rototiller --video=sdl,size=640x480 - * ./rototiller --module=roto,foo=bar,module=settings - * ./rototiller --defaults - */ -static int parse_argv(int argc, const char *argv[], argv_t *res_args) -{ - int i; - - assert(argc > 0); - assert(argv); - assert(res_args); - - /* this is intentionally being kept very simple, no new dependencies like getopt. */ - - for (i = 1; i < argc; i++) { - if (!strncmp("--video=", argv[i], 8)) { - res_args->video = &argv[i][8]; - } else if (!strncmp("--module=", argv[i], 9)) { - res_args->module = &argv[i][9]; - } else if (!strcmp("--defaults", argv[i])) { - res_args->use_defaults = 1; - } else if (!strcmp("--help", argv[i])) { - res_args->help = 1; - } else { - return -EINVAL; - } - } - - return 0; -} - - typedef struct setup_t { til_settings_t *module; til_settings_t *video; @@ -148,7 +107,7 @@ static int setup_video(til_settings_t *settings, til_setting_desc_t **next_setti /* turn args into settings, automatically applying defaults if appropriate, or interactively if appropriate. */ /* returns negative value on error, 0 when settings unchanged from args, 1 when changed */ -static int setup_from_args(argv_t *args, setup_t *res_setup) +static int setup_from_args(til_args_t *args, setup_t *res_setup) { int r, changes = 0; setup_t setup; @@ -232,15 +191,11 @@ _out: static int print_help(void) { - return printf( - "Run without any flags or partial settings for interactive mode.\n" + printf("Run without any flags or partial settings for interactive mode.\n" "\n" - "Supported flags:\n" - " --defaults use defaults for unspecified settings\n" - " --help this help\n" - " --module= module settings\n" - " --video= video settings\n" - ); + "Supported flags:\n"); + + return til_args_help(stdout); } @@ -282,10 +237,10 @@ static void * rototiller_thread(void *_rt) int main(int argc, const char *argv[]) { setup_t setup = {}; - argv_t args = {}; + til_args_t args = {}; int r; - exit_if(parse_argv(argc, argv, &args) < 0, + exit_if(til_args_parse(argc, argv, &args) < 0, "unable to process arguments"); if (args.help) diff --git a/src/til_args.c b/src/til_args.c new file mode 100644 index 0000000..ae1346c --- /dev/null +++ b/src/til_args.c @@ -0,0 +1,47 @@ +#include <assert.h> +#include <errno.h> +#include <string.h> + +#include "til_args.h" + +/* + * ./rototiller --video=drm,dev=/dev/dri/card3,connector=VGA-1,mode=640x480@60 + * ./rototiller --video=sdl,size=640x480 + * ./rototiller --module=roto,foo=bar,module=settings + * ./rototiller --defaults + */ +int til_args_parse(int argc, const char *argv[], til_args_t *res_args) +{ + assert(argc > 0); + assert(argv); + assert(res_args); + + /* this is intentionally being kept very simple, no new dependencies like getopt. */ + + for (int i = 1; i < argc; i++) { + if (!strncmp("--video=", argv[i], 8)) { + res_args->video = &argv[i][8]; + } else if (!strncmp("--module=", argv[i], 9)) { + res_args->module = &argv[i][9]; + } else if (!strcmp("--defaults", argv[i])) { + res_args->use_defaults = 1; + } else if (!strcmp("--help", argv[i])) { + res_args->help = 1; + } else { + return -EINVAL; + } + } + + return 0; +} + + +int til_args_help(FILE *out) +{ + return fprintf(out, + " --defaults use defaults for unspecified settings\n" + " --help this help\n" + " --module= module settings\n" + " --video= video settings\n" + ); +} diff --git a/src/til_args.h b/src/til_args.h new file mode 100644 index 0000000..018ae80 --- /dev/null +++ b/src/til_args.h @@ -0,0 +1,17 @@ +#ifndef _TIL_ARGS_H +#define _TIL_ARGS_H + +#include <stdio.h> + +typedef struct til_args_t { + const char *module; + const char *video; + + unsigned use_defaults:1; + unsigned help:1; +} til_args_t; + +int til_args_parse(int argc, const char *argv[], til_args_t *res_args); +int til_args_help(FILE *out); + +#endif |