# HG changeset patch # User folke # Date 997903582 0 # Node ID e89233dab4da5bc99a2d71cc3a81b362bad4f444 # Parent 2a9c40e21feaecd9fb1cf91683fd4c47820db1b1 New feature for option processing: CONF_TYPE_FUNC_FULL diff -r 2a9c40e21fea -r e89233dab4da cfg-mplayer.h --- a/cfg-mplayer.h Wed Aug 15 19:24:33 2001 +0000 +++ b/cfg-mplayer.h Wed Aug 15 19:26:22 2001 +0000 @@ -2,6 +2,7 @@ * config for cfgparser */ + #ifdef HAVE_FBDEV extern char *fb_dev_name; extern char *fb_mode_cfgfile; @@ -50,12 +51,22 @@ #endif #ifdef HAVE_AA -extern int aaopt_osdcolor; -extern int aaopt_extended; -extern int aaopt_eight; -extern char aaopt_driver; +extern int vo_aa_parseoption(struct config * conf, char *opt, char * param); #endif +/* + * CONF_TYPE_FUNC_FULL : + * allows own implemtations for passing the params + * + * the function receives parameter name and argument (if it does not start with - ) + * useful with a conf.name like 'aa*' to parse several parameters to a function + * return 0 =ok, but we didn't need the param (could be the filename) + * return 1 =ok, we accepted the param + * negative values: see cfgparser.h, ERR_XXX + * + * by Folke + */ + struct config conf[]={ /* name, pointer, type, flags, min, max */ {"include", cfg_include, CONF_TYPE_FUNC_PARAM, 0, 0, 0}, /* this must be the first!!! */ @@ -203,10 +214,7 @@ #endif #ifdef HAVE_AA - {"aaosdfont", &aaopt_osdcolor, CONF_TYPE_INT, CONF_RANGE, 0, 5 }, - {"aaextended", &aaopt_extended, CONF_TYPE_FLAG, 0, 0, 1 }, - {"aaeight", &aaopt_eight, CONF_TYPE_FLAG, 0, 0, 1 }, - {"aadriver", &aaopt_driver, CONF_TYPE_STRING, 0, 0, 0 }, + {"aa*", vo_aa_parseoption, CONF_TYPE_FUNC_FULL, 0, 0, 0 }, #endif diff -r 2a9c40e21fea -r e89233dab4da cfgparser.c --- a/cfgparser.c Wed Aug 15 19:24:33 2001 +0000 +++ b/cfgparser.c Wed Aug 15 19:26:22 2001 +0000 @@ -14,10 +14,6 @@ #include #include -#define ERR_NOT_AN_OPTION -1 -#define ERR_MISSING_PARAM -2 -#define ERR_OUT_OF_RANGE -3 -#define ERR_FUNC_ERR -4 #define COMMAND_LINE 0 #define CONFIG_FILE 1 @@ -65,6 +61,14 @@ char *endptr; for (i = 0; i < nr_options; i++) { + int namelength; + /* allow 'aa*' in config.name */ + namelength=strlen(config[i].name); + if ( (config[i].name[namelength-1]=='*') && + !memcmp(opt, config[i].name, namelength-1)) + break; + + if (!strcasecmp(opt, config[i].name)) break; } @@ -93,6 +97,7 @@ !strcasecmp(param, "si") || !strcasecmp(param, "igen") || !strcasecmp(param, "y") || + !strcasecmp(param, "j") || !strcasecmp(param, "i") || !strcmp(param, "1")) *((int *) config[i].p) = config[i].max; @@ -202,6 +207,17 @@ } ret = 1; break; + case CONF_TYPE_FUNC_FULL: + if (param!=NULL && param[0]=='-'){ + ret=((cfg_func_arg_param_t) config[i].p)(config + i, opt, NULL); + if (ret>=0) ret=0; + /* if we return >=0: param is processed again (if there is any) */ + }else{ + ret=((cfg_func_arg_param_t) config[i].p)(config + i, opt, param); + /* if we return 0: need no param, precess it again */ + /* if we return 1: accepted param */ + } + break; case CONF_TYPE_FUNC: if ((((cfg_func_t) config[i].p)(config + i)) < 0) { ret = ERR_FUNC_ERR; diff -r 2a9c40e21fea -r e89233dab4da cfgparser.h --- a/cfgparser.h Wed Aug 15 19:24:33 2001 +0000 +++ b/cfgparser.h Wed Aug 15 19:26:22 2001 +0000 @@ -12,6 +12,15 @@ #define CONF_TYPE_FUNC 4 #define CONF_TYPE_FUNC_PARAM 5 #define CONF_TYPE_PRINT 6 +#define CONF_TYPE_FUNC_FULL 7 + + +#define ERR_NOT_AN_OPTION -1 +#define ERR_MISSING_PARAM -2 +#define ERR_OUT_OF_RANGE -3 +#define ERR_FUNC_ERR -4 + + #define CONF_MIN (1<<0) #define CONF_MAX (1<<1) @@ -27,6 +36,7 @@ float min,max; }; +typedef int (*cfg_func_arg_param_t)(struct config *, char *, char *); typedef int (*cfg_func_param_t)(struct config *, char *); typedef int (*cfg_func_t)(struct config *);