annotate m_option.h @ 9593:e9a2af584986

Add the new -vf option wich is the same as vop in reverse order. Syntax is we decided, so you can give the nomes or not with both vop and vf. vf take precedence over vop.
author albeu
date Sat, 15 Mar 2003 18:01:02 +0000
parents d3b750570887
children c5b63e88253d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
2 #ifndef NEW_CONFIG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
3 #warning "Including m_option.h but NEW_CONFIG is disabled"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
4 #else
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
6 typedef struct m_option_type m_option_type_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7 typedef struct m_option m_option_t;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
8 struct m_struct;
8164
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 ///////////////////////////// Options types declarations ////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 // Simple types
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 extern m_option_type_t m_option_type_flag;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
14 extern m_option_type_t m_option_type_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15 extern m_option_type_t m_option_type_float;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16 extern m_option_type_t m_option_type_string;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 extern m_option_type_t m_option_type_string_list;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
18 extern m_option_type_t m_option_type_position;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
20 extern m_option_type_t m_option_type_print;
8736
michael
parents: 8168
diff changeset
21 extern m_option_type_t m_option_type_print_indirect;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 extern m_option_type_t m_option_type_subconfig;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23 extern m_option_type_t m_option_type_imgfmt;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
40 // Track/Chapter range
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 // accept range in the form 1[hh:mm:ss.zz]-5[hh:mm:ss.zz]
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42 // ommited fields are assumed to be 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 // Not finished !!!!
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44 typedef struct {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
45 int idx; // in the e.g 1 or 5
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46 unsigned int seconds; // hh:mm:ss converted in seconds
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
47 unsigned int sectors; // zz
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48 } m_play_pos_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
50 typedef struct {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51 m_play_pos_t start;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52 m_play_pos_t end;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
53 } m_span_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 extern m_option_type_t m_option_type_span;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
56 typedef struct {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
57 void** list;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
58 void* name_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
59 void* info_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
60 void* desc_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
61 } m_obj_list_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
62
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
63 typedef struct {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
64 char* name;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
65 char** attribs;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
66 } m_obj_settings_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
67 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
68
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
69 // 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
70
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
71
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
72 typedef struct {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
73 struct m_struct* in_desc;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
74 struct m_struct* out_desc;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
75 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
76 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
77 } m_obj_presets_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
78 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
79
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
80 // Don't be stupid keep tho old names ;-)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 #define CONF_TYPE_FLAG (&m_option_type_flag)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 #define CONF_TYPE_INT (&m_option_type_int)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 #define CONF_TYPE_FLOAT (&m_option_type_float)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 #define CONF_TYPE_STRING (&m_option_type_string)
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)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 #define CONF_TYPE_STRING_LIST (&m_option_type_string_list)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 #define CONF_TYPE_POSITION (&m_option_type_position)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 #define CONF_TYPE_IMGFMT (&m_option_type_imgfmt)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
94 #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
95 #define CONF_TYPE_OBJ_SETTINGS_LIST (&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
96 #define CONF_TYPE_OBJ_PRESETS (&m_option_type_obj_presets)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
97
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
98 /////////////////////////////////////////////////////////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
99
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
100 struct m_option_type {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
101 char* name;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
102 char* comments; // syntax desc, etc
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 unsigned int size; // size needed for a save slot
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 unsigned int flags;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 // parse is the only requiered function all others can be NULL
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 // 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
108 // 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
109 // 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
110 // It should return 1 if param was used, 0 if not.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 // On error it must return 1 of the error code below
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 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
113 // Print back a value in human form
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 char* (*print)(m_option_t* opt, void* val);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
115
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 // 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
117 // 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
118 // 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
119 void (*save)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 // set the current value (dst) from a save slot
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 void (*set)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122 // 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
123 void (*copy)(m_option_t* opt,void* dst, void* src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 // Free the data allocated for a save slot if needed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 void (*free)(void* dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 /// This is the same thing as a struct config it have been renamed
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 /// to remove this config_t, m_config_t mess. Sorry about that,
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 /// config_t is still provided for backward compat.
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;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 float min,max;
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
164 ///////////////////////////// Option type flags ///////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
165
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 // 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
167 // based parsers (ie. cmd line and config file parsers)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 // 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
169
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 // This flag is used for the subconfig
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171 // 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
172 // 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
173 // an array of char* containg opt/val pairs.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 // 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
175 // You can only affect the way suboption are parsed.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 // 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
177 #define M_OPT_TYPE_HAS_CHILD (1<<0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
178 // 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
179 // 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
180 // the needed stuff.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 #define M_OPT_TYPE_ALLOW_WILDCARD (1<<1)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 // 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
183 // 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
184 // 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
185 #define M_OPT_TYPE_DYNAMIC (1<<2)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186 /// If this is set the parse function doesn't directly return
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 // 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
188 // 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
189 // 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
190 // 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
191 // 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
192 // later on.
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
193 #define M_OPT_TYPE_INDIRECT (1<<3)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
194
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 ///////////////////////////// Parser flags ////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 // Config mode : some parser type behave differently depending
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 // 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
200 #define M_CONFIG_FILE 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 #define M_COMMAND_LINE 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
203 // Option parser error code
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 #define M_OPT_UNKNOW -1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 #define M_OPT_MISSING_PARAM -2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 #define M_OPT_INVALID -3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 #define M_OPT_OUT_OF_RANGE -4
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 #define M_OPT_PARSER_ERR -5
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
210 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
211
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
212 inline static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
213 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
214 return opt->type->parse(opt,name,param,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217 inline static char*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
218 m_option_print(m_option_t* opt, void* val_ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
219 if(opt->type->print)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220 return opt->type->print(opt,val_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
221 else
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
222 return (char*)-1;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
223 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
224
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
225 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
226 m_option_save(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 if(opt->type->save)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
228 opt->type->save(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
230
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 m_option_set(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
233 if(opt->type->set)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
235 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
236
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
237 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
238 m_option_copy(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
239 if(opt->type->copy)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
240 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
241 else if(opt->type->size > 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
242 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
243 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
244
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
245 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
246 m_option_free(m_option_t* opt,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
247 if(opt->type->free)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
248 opt->type->free(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
249 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251 #endif