annotate m_option.h @ 20522:54162022411e

Remove special output for outdated SDL. It's doubtful such old versions still exist in the wild and we don't do this for other libs.
author diego
date Mon, 30 Oct 2006 20:23:24 +0000
parents 02a18c52a42a
children cca9ff25bed2
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
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
4 /// \defgroup Options
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
5 /// m_option allows to parse, print and copy data of various types.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
6 /// It is the base of the \ref OptionsStruct, \ref Config and
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
7 /// \ref Properties APIs.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
8 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
9
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
10 /// \file m_option.h
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
11
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
12 /// \ingroup OptionTypes
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 typedef struct m_option_type m_option_type_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
14 typedef struct m_option m_option_t;
9793
b2bf632d37b5 10L forgot to fix the forward declaration too.
albeu
parents: 9791
diff changeset
15 struct m_struct_st;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
17 /// \defgroup OptionTypes Options types
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
18 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
19 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
20
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
21 ///////////////////////////// Options types declarations ////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23 // Simple types
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
24 extern m_option_type_t m_option_type_flag;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 extern m_option_type_t m_option_type_int;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 extern m_option_type_t m_option_type_float;
11947
3ccd5dcf447c m_option_type_double
michael
parents: 10595
diff changeset
27 extern m_option_type_t m_option_type_double;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
28 extern m_option_type_t m_option_type_string;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
29 extern m_option_type_t m_option_type_string_list;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 extern m_option_type_t m_option_type_position;
19973
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
31 extern m_option_type_t m_option_type_time_size;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
32
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 extern m_option_type_t m_option_type_print;
8736
michael
parents: 8168
diff changeset
34 extern m_option_type_t m_option_type_print_indirect;
17470
21123e349463 New option type to print help text with a function.
albeu
parents: 17456
diff changeset
35 extern m_option_type_t m_option_type_print_func;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36 extern m_option_type_t m_option_type_subconfig;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 extern m_option_type_t m_option_type_imgfmt;
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 11947
diff changeset
38 extern m_option_type_t m_option_type_afmt;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
40 // Func-based types
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 extern m_option_type_t m_option_type_func_full;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42 extern m_option_type_t m_option_type_func_param;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 extern m_option_type_t m_option_type_func;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
45 /// Callback used to reset func options.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46 typedef void (*m_opt_default_func_t)(m_option_t *, char*);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
47
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
48 /// Callback used by m_option_type_func_full options.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49 typedef int (*m_opt_func_full_t)(m_option_t *, char *, char *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
50
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
51 /// Callback used by m_option_type_func_param options.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52 typedef int (*m_opt_func_param_t)(m_option_t *, char *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
53
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
54 /// Callback used by m_option_type_func options.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55 typedef int (*m_opt_func_t)(m_option_t *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
56
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
57 // Backwards compatibility
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
58 typedef m_opt_default_func_t cfg_default_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59 typedef m_opt_func_full_t cfg_func_arg_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 typedef m_opt_func_param_t cfg_func_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
61 typedef m_opt_func_t cfg_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
62
19973
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
63 #define END_AT_NONE 0
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
64 #define END_AT_TIME 1
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
65 #define END_AT_SIZE 2
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
66 typedef struct {
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
67 double pos;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
68 int type;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
69 } m_time_size_t;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
70
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
71 /// Extra definition needed for \ref m_option_type_obj_settings_list options.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
72 typedef struct {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
73 /// Pointer to an array of pointer to some object type description struct.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
74 void** list;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
75 /// Offset of the object type name (char*) in the description struct.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
76 void* name_off;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
77 /// Offset of the object type info string (char*) in the description struct.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
78 void* info_off;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
79 /// \brief Offset of the object type parameter description (\ref m_struct_st)
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
80 /// in the description struct.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
81 void* desc_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
82 } m_obj_list_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
83
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
84 /// The data type used by \ref m_option_type_obj_settings_list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
85 typedef struct m_obj_settings {
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
86 /// Type of the object.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
87 char* name;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
88 /// NULL terminated array of parameter/value pairs.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
89 char** attribs;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
90 } m_obj_settings_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
91
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
92 /// A parser to set up a list of objects.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
93 /** It creates a NULL terminated array \ref m_obj_settings. The option priv
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
94 * field (\ref m_option::priv) must point to a \ref m_obj_list_t describing
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
95 * the available object types.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
96 */
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
97 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
98
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
99 /// Extra definition needed for \ref m_option_type_obj_presets options.
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
100 typedef struct {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
101 /// Description of the struct holding the presets.
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
102 struct m_struct_st* in_desc;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
103 /// Description of the struct that should be set by the presets.
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
104 struct m_struct_st* out_desc;
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
105 /// Pointer to an array of structs defining the various presets.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
106 void* presets;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
107 /// Offset of the preset's name inside the in_struct.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
108 void* name_off;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
109 } m_obj_presets_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
110
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
111 /// Set several fields in a struct at once.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
112 /** For this two struct descriptions are used. One for the struct holding the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
113 * preset and one for the struct beeing set. Every field present in both
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
114 * structs will be copied from the preset struct to the destination one.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
115 * The option priv field (\ref m_option::priv) must point to a correctly
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
116 * filled \ref m_obj_presets_t.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
117 */
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
118 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
119
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
120 /// Parse an URL into a struct.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
121 /** The option priv field (\ref m_option::priv) must point to a
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
122 * \ref m_struct_st describing which fields of the URL must be used.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
123 */
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
124 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
125
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
126 /// Extra definition needed for \ref m_option_type_obj_params options.
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
127 typedef struct {
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
128 /// Field descriptions.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
129 struct m_struct_st* desc;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
130 /// Field separator to use.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
131 char separator;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
132 } m_obj_params_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
133
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
134 /// Parse a set of parameters.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
135 /** Parameters are separated by the given separator and each one
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
136 * successively sets a field from the struct. The option priv field
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
137 * (\ref m_option::priv) must point to a \ref m_obj_params_t.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
138 */
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
139 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
140
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
141 typedef struct {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
142 int start;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
143 int end;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
144 } m_span_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
145 /// Ready made settings to parse a \ref m_span_t with a start-end syntax.
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
146 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
147
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
148
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
149 // FIXME: backward compatibility
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 #define CONF_TYPE_FLAG (&m_option_type_flag)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151 #define CONF_TYPE_INT (&m_option_type_int)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152 #define CONF_TYPE_FLOAT (&m_option_type_float)
11947
3ccd5dcf447c m_option_type_double
michael
parents: 10595
diff changeset
153 #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
154 #define CONF_TYPE_STRING (&m_option_type_string)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 #define CONF_TYPE_FUNC (&m_option_type_func)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 #define CONF_TYPE_FUNC_PARAM (&m_option_type_func_param)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157 #define CONF_TYPE_PRINT (&m_option_type_print)
8736
michael
parents: 8168
diff changeset
158 #define CONF_TYPE_PRINT_INDIRECT (&m_option_type_print_indirect)
17470
21123e349463 New option type to print help text with a function.
albeu
parents: 17456
diff changeset
159 #define CONF_TYPE_PRINT_FUNC (&m_option_type_print_func)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
160 #define CONF_TYPE_FUNC_FULL (&m_option_type_func_full)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
161 #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
162 #define CONF_TYPE_STRING_LIST (&m_option_type_string_list)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163 #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
164 #define CONF_TYPE_IMGFMT (&m_option_type_imgfmt)
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 11947
diff changeset
165 #define CONF_TYPE_AFMT (&m_option_type_afmt)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 #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
167 #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
168 #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
169 #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
170 #define CONF_TYPE_OBJ_PARAMS (&m_option_type_obj_params)
19973
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
171 #define CONF_TYPE_TIME_SIZE (&m_option_type_time_size)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172
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
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
175 /// Option type description
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 struct m_option_type {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 char* name;
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
178 /// Syntax description, etc
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
179 char* comments;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
180 /// Size needed for the data.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
181 unsigned int size;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
182 /// See \ref OptionTypeFlags.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
183 unsigned int flags;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
184
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
185 /// Parse the data from a string.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
186 /** It is the only required function, all others can be NULL.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
187 *
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
188 * \param opt The option that is parsed.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
189 * \param name The full option name.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
190 * \param param The parameter to parse.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
191 * \param dst Pointer to the memory where the data should be written.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
192 * If NULL the parameter validity should still be checked.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
193 * \param src Source of the option, see \ref OptionParserModes.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
194 * \return On error a negative value is returned, on success the number of arguments
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
195 * consumed. For details see \ref OptionParserReturn.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
196 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 int (*parse)(m_option_t* opt,char *name, char *param, void* dst, int src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
198
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
199 /// Print back a value in string form.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
200 /** \param opt The option to print.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
201 * \param val Pointer to the memory holding the data to be printed.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
202 * \return An allocated string containing the text value or (void*)-1
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
203 * on error.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
204 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 char* (*print)(m_option_t* opt, void* val);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
207 /** \name
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
208 * These functions are called to save/set/restore the status of the
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
209 * variables. The difference between the 3 only matters for types like
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
210 * \ref m_option_type_func where 'setting' needs to do more than just
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
211 * copying some data.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
212 */
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
213 //@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
214
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
215 /// Update a save slot (dst) from the current value in the program (src).
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
216 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
217 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
218 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
219 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
220 void (*save)(m_option_t* opt,void* dst, void* src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
221
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
222 /// Set the value in the program (dst) from a save slot.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
223 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
224 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
225 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
226 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 void (*set)(m_option_t* opt,void* dst, void* src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
228
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
229 /// Copy the data between two save slots. If NULL and size is > 0 a memcpy will be used.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
230 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
231 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
232 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
233 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
234 void (*copy)(m_option_t* opt,void* dst, void* src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
235 //@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
236
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
237 /// Free the data allocated for a save slot.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
238 /** This is only needed for dynamic types like strings.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
239 * \param dst Pointer to the data, usually a pointer that should be freed and
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
240 * set to NULL.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
241 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
242 void (*free)(void* dst);
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
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
245 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
246
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
247 /// Option description
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
248 /** \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
249 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250 struct m_option {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
251 /// Option name.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
252 char *name;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
253
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
254 /// Reserved for higher level APIs, it shouldn't be used by parsers.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
255 /** The suboption parser and func types do use it. They should instead
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
256 * use the priv field but this was inherited from older versions of the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
257 * config code.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
258 */
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
259 void *p;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
260
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
261 /// Option type.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 m_option_type_t* type;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
263
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
264 /// See \ref OptionFlags.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
265 unsigned int flags;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
266
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
267 /// \brief Mostly useful for numeric types, the \ref M_OPT_MIN flags must
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
268 /// also be set.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
269 double min;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
270
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
271 /// \brief Mostly useful for numeric types, the \ref M_OPT_MAX flags must
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
272 /// also be set.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
273 double max;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
274
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
275 /// Type dependent data (for all kinds of extended settings).
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
276 /** This used to be a function pointer to hold a 'reverse to defaults' func.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
277 * Now it can be used to pass any type of extra args needed by the parser.
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
278 * Passing a 'default func' is still valid for all func based option types.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
279 */
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
280 void* priv;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
281 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
284 /// \defgroup OptionFlags Option flags
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
285 ///@{
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
287 /// The option has a minimum set in \ref m_option::min.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288 #define M_OPT_MIN (1<<0)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
289
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
290 /// The option has a maximum set in \ref m_option::max.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 #define M_OPT_MAX (1<<1)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
292
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
293 /// The option has a minimum and maximum in \ref m_option::min and \ref m_option::max.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
294 #define M_OPT_RANGE (M_OPT_MIN|M_OPT_MAX)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
295
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
296 /// The option is forbidden in config files.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
297 #define M_OPT_NOCFG (1<<2)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
298
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
299 /// The option is forbidden on the command line.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
300 #define M_OPT_NOCMD (1<<3)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
301
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
302 /// The option is global in the \ref Config.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
303 /** It won't be saved on push and the command line parser will set it when
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
304 * it's parsed (i.e. it won't be set later)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
305 * e.g options : -v, -quiet
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
306 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307 #define M_OPT_GLOBAL (1<<4)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
308
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
309 /// The \ref Config won't save this option on push.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
310 /** It won't be saved on push but the command line parser will add it with
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
311 * its entry (i.e. it may be set later)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
312 * e.g options : -include
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
313 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
314 #define M_OPT_NOSAVE (1<<5)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
315
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
316 /// \brief The \ref Config will emulate the old behavior by pushing the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
317 /// option only if it was set by the user.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318 #define M_OPT_OLD (1<<6)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
319
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
320 /// \defgroup OldOptionFlags Backward compatibility
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
321 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
322 /// These are kept for compatibility with older code.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
323 /// @{
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
324 #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
325 #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
326 #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
327 #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
328 #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
329 #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
330 #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
331 #define CONF_OLD M_OPT_OLD
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
332 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
333
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
334 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
335
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
336 /// \defgroup OptionTypeFlags Option type flags
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
337 /// \ingroup OptionTypes
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
338 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
339 /// These flags are used to describe special parser capabilities or behavior.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
340 ///
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
341 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
342
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
343 /// Suboption parser flag.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
344 /** When this flag is set, m_option::p should point to another m_option
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
345 * array. Only the parse function will be called. If dst is set, it should
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
346 * create/update an array of char* containg opt/val pairs. The options in
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
347 * the child array will then be set automatically by the \ref Config.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
348 * Also note that suboptions may be directly accessed by using
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
349 * -option:subopt blah.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
350 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351 #define M_OPT_TYPE_HAS_CHILD (1<<0)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
352
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
353 /// Wildcard matching flag.
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
354 /** If set the option type has a use for option names ending with a *
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
355 * (used for -aa*), this only affects the option name matching.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
356 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
357 #define M_OPT_TYPE_ALLOW_WILDCARD (1<<1)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
358
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
359 /// Dynamic data type.
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
360 /** This flag indicates that the data is dynamically allocated (m_option::p
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
361 * points to a pointer). It enables a little hack in the \ref Config wich
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
362 * replaces the initial value of such variables with a dynamic copy in case
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
363 * the initial value is statically allocated (pretty common with strings).
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
364 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
365 #define M_OPT_TYPE_DYNAMIC (1<<2)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
366
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
367 /// Indirect option type.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
368 /** If this is set the parse function doesn't directly return
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
369 * the wanted thing. Options use this if for some reasons they have to wait
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
370 * until the set call to be able to correctly set the target var.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
371 * So for those types new values must first be parsed, then set to the target
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
372 * var. If this flag isn't set then new values can be parsed directly to the
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
373 * target var. It's used by the callback-based options as the callback call
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
374 * may append later on.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
375 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
376 #define M_OPT_TYPE_INDIRECT (1<<3)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
377
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
378 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
379
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
380 ///////////////////////////// Parser flags ////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
381
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
382 /// \defgroup OptionParserModes Option parser modes
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
383 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
384 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
385 /// Some parsers behave differently depending on the mode passed in the src
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
386 /// parameter of m_option_type::parse. For example the flag type doesn't take
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
387 /// an argument when parsing from the command line.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
388 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
389
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
390 /// Set when parsing from a config file.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
391 #define M_CONFIG_FILE 0
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
392 /// Set when parsing command line arguments.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
393 #define M_COMMAND_LINE 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
394
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
395 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
396
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
397 /// \defgroup OptionParserReturn Option parser return code
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
398 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
399 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
400 /// On success parsers return the number of arguments consumed: 0 or 1.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
401 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
402 /// To indicate that MPlayer should exit without playing anything,
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
403 /// parsers return M_OPT_EXIT minus the number of parameters they
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
404 /// consumed: \ref M_OPT_EXIT or \ref M_OPT_EXIT-1.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
405 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
406 /// On error one of the following (negative) error codes is returned:
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
407 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
408
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
409 /// For use by higher level APIs when the option name is invalid.
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
410 #define M_OPT_UNKNOWN -1
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
411
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
412 /// Returned when a parameter is needed but wasn't provided.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
413 #define M_OPT_MISSING_PARAM -2
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
414
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
415 /// Returned when the given parameter couldn't be parsed.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 #define M_OPT_INVALID -3
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
417
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
418 /// \brief Returned if the value is "out of range". The exact meaning may
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
419 /// vary from type to type.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
420 #define M_OPT_OUT_OF_RANGE -4
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
421
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
422 /// Returned if the parser failed for any other reason than a bad parameter.
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
423 #define M_OPT_PARSER_ERR -5
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
424
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
425 /// Returned when MPlayer should exit. Used by various help stuff.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
426 /** M_OPT_EXIT must be the lowest number on this list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
427 */
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
428 #define M_OPT_EXIT -6
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
429
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
430 /// \defgroup OldOptionParserReturn Backward compatibility
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
431 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
432 /// These are kept for compatibility with older code.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
433 ///
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
434 ///@{
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
435 #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
436 #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
437 #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
438 #define ERR_FUNC_ERR M_OPT_PARSER_ERR
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
439 ///@}
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
440
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
441 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
442
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
443 /// Find the option matching the given name in the list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
444 /** \ingroup Options
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
445 * This function takes the possible wildcards into account (see
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
446 * \ref M_OPT_TYPE_ALLOW_WILDCARD).
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
447 *
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
448 * \param list Pointer to an array of \ref m_option.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
449 * \param name Name of the option.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
450 * \return The matching option or NULL.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
451 */
19053
75327b24e06f marks several string parameters as const, as they are not modified inside the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18316
diff changeset
452 m_option_t* m_option_list_find(m_option_t* list,const char* name);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
453
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
454 /// Helper to parse options, see \ref m_option_type::parse.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
455 inline static int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
456 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
457 return opt->type->parse(opt,name,param,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
458 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
459
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
460 /// Helper to print options, see \ref m_option_type::print.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
461 inline static char*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
462 m_option_print(m_option_t* opt, void* val_ptr) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
463 if(opt->type->print)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
464 return opt->type->print(opt,val_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
465 else
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
466 return (char*)-1;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
467 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
468
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
469 /// Helper around \ref m_option_type::save.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
470 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
471 m_option_save(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
472 if(opt->type->save)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
473 opt->type->save(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
474 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
475
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
476 /// Helper around \ref m_option_type::set.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
477 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
478 m_option_set(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
479 if(opt->type->set)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
480 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
481 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
482
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
483 /// Helper around \ref m_option_type::copy.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
484 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
485 m_option_copy(m_option_t* opt,void* dst, void* src) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
486 if(opt->type->copy)
17456
b8ce59172e6a 100L m_option_copy should use the copy callback and not the set one.
albeu
parents: 16345
diff changeset
487 opt->type->copy(opt,dst,src);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
488 else if(opt->type->size > 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
489 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
490 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
491
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
492 /// Helper around \ref m_option_type::free.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
493 inline static void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
494 m_option_free(m_option_t* opt,void* dst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
495 if(opt->type->free)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
496 opt->type->free(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
497 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
498
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
499 /*@}*/
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
500
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
501 #endif /* _M_OPTION_H */