changeset 1536:e89233dab4da

New feature for option processing: CONF_TYPE_FUNC_FULL
author folke
date Wed, 15 Aug 2001 19:26:22 +0000
parents 2a9c40e21fea
children 7bdf6a585b67
files cfg-mplayer.h cfgparser.c cfgparser.h
diffstat 3 files changed, 46 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- 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
 
       
--- 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 <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;
@@ -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;
--- 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 *);