annotate m_option.h @ 14685:4b02f759f529

small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
author reynaldo
date Sat, 12 Feb 2005 15:11:02 +0000
parents 474a40917f73
children feb16d0117c8
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
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220
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
221 // 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
222 #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
223 #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
224 #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
225 #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
226
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
227 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
228
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 inline static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
230 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
231 return opt->type->parse(opt,name,param,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 }
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 char*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
235 m_option_print(m_option_t* opt, void* val_ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
236 if(opt->type->print)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
237 return opt->type->print(opt,val_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
238 else
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
239 return (char*)-1;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
240 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
241
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
242 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
243 m_option_save(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
244 if(opt->type->save)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
245 opt->type->save(opt,dst,src);
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
248 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
249 m_option_set(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250 if(opt->type->set)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251 opt->type->set(opt,dst,src);
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
254 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
255 m_option_copy(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
256 if(opt->type->copy)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
257 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
258 else if(opt->type->size > 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
259 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
260 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
261
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
263 m_option_free(m_option_t* opt,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
264 if(opt->type->free)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 opt->type->free(dst);
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
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
268 #endif /* _M_OPTION_H */