CVS: main cfg-mplayer.h,1.76,1.77 cfgparser.c,1.24,1.25 cfgparser.h,1.5,1.6
Update of /cvsroot/mplayer/main In directory mplayer:/var/tmp.root/cvs-serv25967 Modified Files: cfg-mplayer.h cfgparser.c cfgparser.h Log Message: New feature for option processing: CONF_TYPE_FUNC_FULL Index: cfg-mplayer.h =================================================================== RCS file: /cvsroot/mplayer/main/cfg-mplayer.h,v retrieving revision 1.76 retrieving revision 1.77 diff -u -r1.76 -r1.77 --- cfg-mplayer.h 14 Aug 2001 19:00:00 -0000 1.76 +++ cfg-mplayer.h 15 Aug 2001 19:26:22 -0000 1.77 @@ -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 Index: cfgparser.c =================================================================== RCS file: /cvsroot/mplayer/main/cfgparser.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- cfgparser.c 12 Jul 2001 15:08:02 -0000 1.24 +++ cfgparser.c 15 Aug 2001 19:26:22 -0000 1.25 @@ -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 @@ 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; @@ -201,6 +206,17 @@ goto out; } 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) { Index: cfgparser.h =================================================================== RCS file: /cvsroot/mplayer/main/cfgparser.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- cfgparser.h 19 Mar 2001 03:45:49 -0000 1.5 +++ cfgparser.h 15 Aug 2001 19:26:22 -0000 1.6 @@ -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 *);
participants (1)
-
Folke Ashberg