diff options
Diffstat (limited to 'src')
| -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 | 
