annotate m_option.h @ 16345:feb16d0117c8

allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net " This one makes mplayer -vo help -ao help -ac help -vc help -pphelp -af help -vfm help -vf help -afm help -fstype help produce the desired output. From the thread: Date: Jul 16, 2005 8:25 PM Subject: [MPlayer-dev-eng] [PATCH] allow multiple help clauses on the command line
author gpoirier
date Fri, 02 Sep 2005 08:29:30 +0000
parents 474a40917f73
children b8ce59172e6a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
1 #ifndef _M_OPTION_H
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
2 #define _M_OPTION_H
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
4 typedef struct m_option_type m_option_type_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5 typedef struct m_option m_option_t;
9793
b2bf632d37b5 10L forgot to fix the forward declaration too.
albeu
parents: 9791
diff changeset
6 struct m_struct_st;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
8 ///////////////////////////// Options types declarations ////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
9
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10 // Simple types
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11 extern m_option_type_t m_option_type_flag;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 extern m_option_type_t m_option_type_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 extern m_option_type_t m_option_type_float;
11947
3ccd5dcf447c m_option_type_double
michael
parents: 10595
diff changeset
14 extern m_option_type_t m_option_type_double;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15 extern m_option_type_t m_option_type_string;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16 extern m_option_type_t m_option_type_string_list;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 extern m_option_type_t m_option_type_position;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
18
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19 extern m_option_type_t m_option_type_print;
8736
michael
parents: 8168
diff changeset
20 extern m_option_type_t m_option_type_print_indirect;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
21 extern m_option_type_t m_option_type_subconfig;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 extern m_option_type_t m_option_type_imgfmt;
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 11947
diff changeset
23 extern m_option_type_t m_option_type_afmt;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
24
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 // Func based types
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 extern m_option_type_t m_option_type_func_full;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
27 extern m_option_type_t m_option_type_func_param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
28 extern m_option_type_t m_option_type_func;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
29
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 typedef void (*m_opt_default_func_t)(m_option_t *, char*);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
31 typedef int (*m_opt_func_full_t)(m_option_t *, char *, char *);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
32 typedef int (*m_opt_func_param_t)(m_option_t *, char *);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 typedef int (*m_opt_func_t)(m_option_t *);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
34 ///////////// Backward compat
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
35 typedef m_opt_default_func_t cfg_default_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36 typedef m_opt_func_full_t cfg_func_arg_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 typedef m_opt_func_param_t cfg_func_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
38 typedef m_opt_func_t cfg_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
40 typedef struct {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
41 void** list;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
42 void* name_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
43 void* info_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
44 void* desc_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
45 } m_obj_list_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
46
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
47 typedef struct {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
48 char* name;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
49 char** attribs;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
50 } m_obj_settings_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
51 extern m_option_type_t m_option_type_obj_settings_list;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
52
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
53 // Presets are mean to be used with options struct
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
54
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
55
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
56 typedef struct {
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
57 struct m_struct_st* in_desc;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
58 struct m_struct_st* out_desc;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
59 void* presets; // Pointer to an arry of struct defined by in_desc
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
60 void* name_off; // Offset of the preset name inside the in_struct
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
61 } m_obj_presets_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
62 extern m_option_type_t m_option_type_obj_presets;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
63
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
64 extern m_option_type_t m_option_type_custom_url;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
65
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
66 typedef struct {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
67 struct m_struct_st* desc; // Fields description
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
68 char separator; // Field separator to use
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
69 } m_obj_params_t;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
70 extern m_option_type_t m_option_type_obj_params;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
71
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
72 typedef struct {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
73 int start;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
74 int end;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
75 } m_span_t;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
76 extern m_obj_params_t m_span_params_def;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
77
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
78
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
79 // FIXME: backward compatibility
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
80 #define CONF_TYPE_FLAG (&m_option_type_flag)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 #define CONF_TYPE_INT (&m_option_type_int)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 #define CONF_TYPE_FLOAT (&m_option_type_float)
11947
3ccd5dcf447c m_option_type_double
michael
parents: 10595
diff changeset
83 #define CONF_TYPE_DOUBLE (&m_option_type_double)
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
84 #define CONF_TYPE_STRING (&m_option_type_string)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 #define CONF_TYPE_FUNC (&m_option_type_func)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 #define CONF_TYPE_FUNC_PARAM (&m_option_type_func_param)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 #define CONF_TYPE_PRINT (&m_option_type_print)
8736
michael
parents: 8168
diff changeset
88 #define CONF_TYPE_PRINT_INDIRECT (&m_option_type_print_indirect)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
89 #define CONF_TYPE_FUNC_FULL (&m_option_type_func_full)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90 #define CONF_TYPE_SUBCONFIG (&m_option_type_subconfig)
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
91 #define CONF_TYPE_STRING_LIST (&m_option_type_string_list)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 #define CONF_TYPE_POSITION (&m_option_type_position)
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
93 #define CONF_TYPE_IMGFMT (&m_option_type_imgfmt)
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 11947
diff changeset
94 #define CONF_TYPE_AFMT (&m_option_type_afmt)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
95 #define CONF_TYPE_SPAN (&m_option_type_span)
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
96 #define CONF_TYPE_OBJ_SETTINGS_LIST (&m_option_type_obj_settings_list)
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
97 #define CONF_TYPE_OBJ_PRESETS (&m_option_type_obj_presets)
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
98 #define CONF_TYPE_CUSTOM_URL (&m_option_type_custom_url)
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
99 #define CONF_TYPE_OBJ_PARAMS (&m_option_type_obj_params)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
100
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
101 /////////////////////////////////////////////////////////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
102
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 struct m_option_type {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 char* name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 char* comments; // syntax desc, etc
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 unsigned int size; // size needed for a save slot
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 unsigned int flags;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
108
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 // parse is the only requiered function all others can be NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 // If dst if non-NULL it should create/update the save slot
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 // If dst is NULL it should just test the validity of the arg if possible
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 // Src tell from where come this setting (ie cfg file, command line, playlist, ....
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 // It should return 1 if param was used, 0 if not.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 // On error it must return 1 of the error code below
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
115 int (*parse)(m_option_t* opt,char *name, char *param, void* dst, int src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 // Print back a value in human form
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 char* (*print)(m_option_t* opt, void* val);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119 // These 3 will be a memcpy in 50% of the case, it's called to save/restore the status of
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 // the var it's there for complex type like CONF_TYPE_FUNC*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 // update a save slot (dst) from the current value in the prog (src)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122 void (*save)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 // set the current value (dst) from a save slot
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 void (*set)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 // Copy betewen 2 slot (if NULL and size > 0 a memcpy will be used
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 void (*copy)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 // Free the data allocated for a save slot if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 void (*free)(void* dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131 struct m_option {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 char *name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 void *p;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 m_option_type_t* type;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135 unsigned int flags;
10590
73e7a5165bcd 1000l, thanks Pierre
alex
parents: 9793
diff changeset
136 double min,max;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137 // This used to be function pointer to hold a 'reverse to defaults' func.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 // Nom it can be used to pass any type of extra args.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 // Passing a 'default func' is still valid for all func based option types
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 void* priv; // Type dependent data (for all kind of extended setting)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144 //////////////////////////////// Option flags /////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
146 // Option flags
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147 #define M_OPT_MIN (1<<0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148 #define M_OPT_MAX (1<<1)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 #define M_OPT_RANGE (M_OPT_MIN|M_OPT_MAX)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 #define M_OPT_NOCFG (1<<2)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151 #define M_OPT_NOCMD (1<<3)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152 // This option is global : it won't be saved on push and the command
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 // line parser will set it when it's parsed (ie. it won't be set later)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
154 // e.g options : -v, -quiet
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 #define M_OPT_GLOBAL (1<<4)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 // Do not save this option : it won't be saved on push but the command
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157 // line parser will put it with it's entry (ie : it may be set later)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
158 // e.g options : -include
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
159 #define M_OPT_NOSAVE (1<<5)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 // Emulate old behaviour by pushing the option only if it was set by the user
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
161 #define M_OPT_OLD (1<<6)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
163 // FIXME: backward compatibility
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
164 #define CONF_MIN M_OPT_MIN
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
165 #define CONF_MAX M_OPT_MAX
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
166 #define CONF_RANGE M_OPT_RANGE
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
167 #define CONF_NOCFG M_OPT_NOCFG
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
168 #define CONF_NOCMD M_OPT_NOCMD
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
169 #define CONF_GLOBAL M_OPT_GLOBAL
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
170 #define CONF_NOSAVE M_OPT_NOSAVE
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
171 #define CONF_OLD M_OPT_OLD
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
172
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 ///////////////////////////// Option type flags ///////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
175
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 // These flags are for the parsers. The description here apply to the m_config_t
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 // based parsers (ie. cmd line and config file parsers)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 // Some parser will refuse option types that have some of these flags
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 // This flag is used for the subconfig
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 // When this flag is set, opt->p should point to another m_option_t array
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 // Only the parse function will be called. If dst is set, it should create/update
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
183 // an array of char* containg opt/val pairs.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
184 // Then the options in the child array will then be set automaticly.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 // You can only affect the way suboption are parsed.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186 // Also note that suboptions may be directly accessed by using -option:subopt blah :-)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 #define M_OPT_TYPE_HAS_CHILD (1<<0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188 // If this flag is set the option type support option name with * at the end (used for -aa*)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189 // This only affect the option name matching, the option type have to implement
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190 // the needed stuff.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 #define M_OPT_TYPE_ALLOW_WILDCARD (1<<1)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 // This flag indicate that the data is dynamicly allocated (opt->p point to a pointer)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193 // It enable a little hack wich replace the initial value by a dynamic copy
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
194 // in case the initial value is staticly allocated (pretty common with strings)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195 #define M_OPT_TYPE_DYNAMIC (1<<2)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 /// If this is set the parse function doesn't directly return
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 // the wanted thing. Options use this if for some reasons they have to wait
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 // until the set call to be able to correctly set the target var.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 // So for those types you have to first parse and then set the target var
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200 // If this flag isn't set you can parse directly to the target var
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 // It's used for the callback based option as the callback call may append
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202 // later on.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
203 #define M_OPT_TYPE_INDIRECT (1<<3)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 ///////////////////////////// Parser flags ////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 // Config mode : some parser type behave differently depending
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 // on config->mode value wich is passed in the src param of parse()
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 #define M_CONFIG_FILE 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
211 #define M_COMMAND_LINE 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
213 // Option parser error code
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
214 #define M_OPT_UNKNOWN -1
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215 #define M_OPT_MISSING_PARAM -2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216 #define M_OPT_INVALID -3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217 #define M_OPT_OUT_OF_RANGE -4
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
218 #define M_OPT_PARSER_ERR -5
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
219 #define M_OPT_EXIT -6
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 14246
diff changeset
220 // M_OPT_EXIT must be the lowest number on this list.
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 14246
diff changeset
221 // To indicate that mplayer should exit without playing anything,
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 14246
diff changeset
222 // a parsing function needs to return M_OPT_EXIT less the number
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 14246
diff changeset
223 // of additional command line parameters it consumed.
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 14246
diff changeset
224 // Generally it will return either M_OPT_EXIT or M_OPT_EXIT - 1.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
225
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
226 // FIXME: backward compatibility
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
227 #define ERR_NOT_AN_OPTION M_OPT_UNKNOWN
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
228 #define ERR_MISSING_PARAM M_OPT_MISSING_PARAM
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
229 #define ERR_OUT_OF_RANGE M_OPT_OUT_OF_RANGE
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
230 #define ERR_FUNC_ERR M_OPT_PARSER_ERR
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
231
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
232 m_option_t* m_option_list_find(m_option_t* list,char* name);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
233
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234 inline static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
235 m_option_parse(m_option_t* opt,char *name, char *param, void* dst, int src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
236 return opt->type->parse(opt,name,param,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
237 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
238
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
239 inline static char*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
240 m_option_print(m_option_t* opt, void* val_ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
241 if(opt->type->print)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
242 return opt->type->print(opt,val_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
243 else
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
244 return (char*)-1;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
245 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
246
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
247 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
248 m_option_save(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
249 if(opt->type->save)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250 opt->type->save(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
252
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
253 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
254 m_option_set(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
255 if(opt->type->set)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
256 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
257 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
258
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
259 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
260 m_option_copy(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
261 if(opt->type->copy)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
263 else if(opt->type->size > 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
264 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
266
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
267 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268 m_option_free(m_option_t* opt,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 if(opt->type->free)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 opt->type->free(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
272
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10590
diff changeset
273 #endif /* _M_OPTION_H */