diff options
-rw-r--r-- | cfg-mplayer.h | 24 | ||||
-rw-r--r-- | cfgparser.c | 24 | ||||
-rw-r--r-- | cfgparser.h | 10 |
3 files changed, 46 insertions, 12 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 9e99852a1c..c0027487c5 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -2,6 +2,7 @@ * config for cfgparser */ + #ifdef HAVE_FBDEV extern char *fb_dev_name; extern char *fb_mode_cfgfile; @@ -50,12 +51,22 @@ extern char *mDisplayName; #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 @@ struct config conf[]={ #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 --git a/cfgparser.c b/cfgparser.c index 5cb1315198..97f54bdbd3 100644 --- a/cfgparser.c +++ b/cfgparser.c @@ -14,10 +14,6 @@ #include <string.h> #include <errno.h> -#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 @@ static int read_option(char *opt, char *param) 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 @@ static int read_option(char *opt, char *param) !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 @@ static int read_option(char *opt, char *param) } 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 --git a/cfgparser.h b/cfgparser.h index f94fc81aa9..9ad235185e 100644 --- a/cfgparser.h +++ b/cfgparser.h @@ -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 @@ struct config { 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 *); |