annotate m_option.h @ 35556:970ae81f8aee

Change internal automatic audio CD track advancing. Don't call uiNext() if not playing. (Though it won't hurt calling it, it changes the track number.)
author ib
date Mon, 10 Dec 2012 11:30:54 +0000
parents 1495455e6d22
children 97446d4850cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30429
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
1 /*
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
3 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
8 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
13 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
17 */
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29263
diff changeset
18
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25229
diff changeset
19 #ifndef MPLAYER_M_OPTION_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25229
diff changeset
20 #define MPLAYER_M_OPTION_H
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
21
26131
83c95bd31aab Add necessary #includes to pass 'make checkheaders'.
diego
parents: 26029
diff changeset
22 #include <string.h>
83c95bd31aab Add necessary #includes to pass 'make checkheaders'.
diego
parents: 26029
diff changeset
23
34200
87a1b3a11b33 Fix a bunch of Doxygen syntax errors that caused warnings.
diego
parents: 34169
diff changeset
24 /// \defgroup options Options
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
25 /// m_option allows to parse, print and copy data of various types.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
26 /// It is the base of the \ref OptionsStruct, \ref Config and
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
27 /// \ref Properties APIs.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
28 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
29
33882
08a90b0e44e1 doxygen: drop filename from @file directive
diego
parents: 32428
diff changeset
30 /// \file
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
31
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
32 /// \ingroup OptionTypes
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 typedef struct m_option_type m_option_type_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
34 typedef struct m_option m_option_t;
9793
b2bf632d37b5 10L forgot to fix the forward declaration too.
albeu
parents: 9791
diff changeset
35 struct m_struct_st;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
37 /// \defgroup OptionTypes Options types
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
38 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
39 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
40
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 ///////////////////////////// Options types declarations ////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 // Simple types
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
44 extern const m_option_type_t m_option_type_flag;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
45 extern const m_option_type_t m_option_type_int;
28759
af274aef6b81 Add a 64 bit integer type to the suboption parser.
reimar
parents: 26408
diff changeset
46 extern const m_option_type_t m_option_type_int64;
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
47 extern const m_option_type_t m_option_type_float;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
48 extern const m_option_type_t m_option_type_double;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
49 extern const m_option_type_t m_option_type_string;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
50 extern const m_option_type_t m_option_type_string_list;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
51 extern const m_option_type_t m_option_type_position;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
52 extern const m_option_type_t m_option_type_time;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
53 extern const m_option_type_t m_option_type_time_size;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
55 extern const m_option_type_t m_option_type_print;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
56 extern const m_option_type_t m_option_type_print_indirect;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
57 extern const m_option_type_t m_option_type_print_func;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
58 extern const m_option_type_t m_option_type_subconfig;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
59 extern const m_option_type_t m_option_type_imgfmt;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
60 extern const m_option_type_t m_option_type_afmt;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
61
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
62 // Func-based types
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
63 extern const m_option_type_t m_option_type_func_full;
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
64 extern const m_option_type_t m_option_type_func_param;
34169
9b617726812c Sanitize include behaviour.
reimar
parents: 34149
diff changeset
65 extern const m_option_type_t m_option_type_func_param_immediate;
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
66 extern const m_option_type_t m_option_type_func;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
67
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
68 /// Callback used to reset func options.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
69 typedef void (*m_opt_default_func_t)(const m_option_t *, const char*);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
70
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
71 /// Callback used by m_option_type_func_full options.
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
72 typedef int (*m_opt_func_full_t)(const m_option_t *, const char *, const char *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
73
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
74 /// Callback used by m_option_type_func_param options.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
75 typedef int (*m_opt_func_param_t)(const m_option_t *, const char *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
76
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
77 /// Callback used by m_option_type_func options.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
78 typedef int (*m_opt_func_t)(const m_option_t *);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
79
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
80 // Backwards compatibility
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 typedef m_opt_default_func_t cfg_default_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 typedef m_opt_func_full_t cfg_func_arg_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 typedef m_opt_func_param_t cfg_func_param_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84 typedef m_opt_func_t cfg_func_t;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85
19973
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
86 #define END_AT_NONE 0
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
87 #define END_AT_TIME 1
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
88 #define END_AT_SIZE 2
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
89 typedef struct {
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
90 double pos;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
91 int type;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
92 } m_time_size_t;
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
93
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
94 /// 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
95 typedef struct {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
96 /// 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
97 void** list;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
98 /// 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
99 void* name_off;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
100 /// 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
101 void* info_off;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
102 /// \brief Offset of the object type parameter description (\ref m_struct_st)
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
103 /// 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
104 void* desc_off;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
105 } m_obj_list_t;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
106
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
107 /// The data type used by \ref m_option_type_obj_settings_list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
108 typedef struct m_obj_settings {
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
109 /// 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
110 char* name;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
111 /// 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
112 char** attribs;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
113 } m_obj_settings_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
114
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
115 /// 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
116 /** It creates a NULL terminated array \ref m_obj_settings. The option priv
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
117 * field (\ref m_option::priv) must point to a \ref m_obj_list_t describing
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
118 * the available object types.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
119 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
120 extern const m_option_type_t m_option_type_obj_settings_list;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
121
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
122 /// 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
123 typedef struct {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
124 /// 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
125 struct m_struct_st* in_desc;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
126 /// 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
127 struct m_struct_st* out_desc;
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
128 /// Pointer to an array of structs defining the various presets.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
129 void* presets;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
130 /// Offset of the preset's name inside the in_struct.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
131 void* name_off;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
132 } m_obj_presets_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
133
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
134 /// Set several fields in a struct at once.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
135 /** For this two struct descriptions are used. One for the struct holding the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
136 * 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
137 * structs will be copied from the preset struct to the destination one.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
138 * The option priv field (\ref m_option::priv) must point to a correctly
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
139 * filled \ref m_obj_presets_t.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
140 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
141 extern const m_option_type_t m_option_type_obj_presets;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 8736
diff changeset
142
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
143 /// Parse an URL into a struct.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
144 /** The option priv field (\ref m_option::priv) must point to a
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
145 * \ref m_struct_st describing which fields of the URL must be used.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
146 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
147 extern const m_option_type_t m_option_type_custom_url;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
148
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
149 /// 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
150 typedef struct {
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
151 /// Field descriptions.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
152 const struct m_struct_st* desc;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
153 /// Field separator to use.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
154 char separator;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
155 } m_obj_params_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
156
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
157 /// Parse a set of parameters.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
158 /** 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
159 * successively sets a field from the struct. The option priv field
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
160 * (\ref m_option::priv) must point to a \ref m_obj_params_t.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
161 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
162 extern const m_option_type_t m_option_type_obj_params;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
163
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
164 typedef struct {
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
165 int start;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
166 int end;
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
167 } m_span_t;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
168 /// Ready made settings to parse a \ref m_span_t with a start-end syntax.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
169 extern const m_obj_params_t m_span_params_def;
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
170
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
171
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
172 // FIXME: backward compatibility
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 #define CONF_TYPE_FLAG (&m_option_type_flag)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 #define CONF_TYPE_INT (&m_option_type_int)
28759
af274aef6b81 Add a 64 bit integer type to the suboption parser.
reimar
parents: 26408
diff changeset
175 #define CONF_TYPE_INT64 (&m_option_type_int64)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 #define CONF_TYPE_FLOAT (&m_option_type_float)
11947
3ccd5dcf447c m_option_type_double
michael
parents: 10595
diff changeset
177 #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
178 #define CONF_TYPE_STRING (&m_option_type_string)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179 #define CONF_TYPE_FUNC (&m_option_type_func)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 #define CONF_TYPE_FUNC_PARAM (&m_option_type_func_param)
34169
9b617726812c Sanitize include behaviour.
reimar
parents: 34149
diff changeset
181 #define CONF_TYPE_FUNC_PARAM_IMMEDIATE (&m_option_type_func_param_immediate)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 #define CONF_TYPE_PRINT (&m_option_type_print)
8736
michael
parents: 8168
diff changeset
183 #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
184 #define CONF_TYPE_PRINT_FUNC (&m_option_type_print_func)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 #define CONF_TYPE_FUNC_FULL (&m_option_type_func_full)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
186 #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
187 #define CONF_TYPE_STRING_LIST (&m_option_type_string_list)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188 #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
189 #define CONF_TYPE_IMGFMT (&m_option_type_imgfmt)
14246
474a40917f73 CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
alex
parents: 11947
diff changeset
190 #define CONF_TYPE_AFMT (&m_option_type_afmt)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 #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
192 #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
193 #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
194 #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
195 #define CONF_TYPE_OBJ_PARAMS (&m_option_type_obj_params)
22312
cca9ff25bed2 Move parsing of the -ss option to the option code.
uau
parents: 19973
diff changeset
196 #define CONF_TYPE_TIME (&m_option_type_time)
19973
02a18c52a42a after a long time, finally i could add -endpos option to mplayer executable.
ptt
parents: 19053
diff changeset
197 #define CONF_TYPE_TIME_SIZE (&m_option_type_time_size)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 /////////////////////////////////////////////////////////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
201 /// Option type description
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202 struct m_option_type {
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
203 const char* name;
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
204 /// Syntax description, etc
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
205 const char* comments;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
206 /// Size needed for the data.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
207 unsigned int size;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
208 /// See \ref OptionTypeFlags.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 unsigned int flags;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
210
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
211 /// Parse the data from a string.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
212 /** It is the only required function, all others can be NULL.
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
213 *
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
214 * \param opt The option that is parsed.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
215 * \param name The full option name.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
216 * \param param The parameter to parse.
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
217 * \param dst Pointer to the memory where the data should be written.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
218 * If NULL the parameter validity should still be checked.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
219 * \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
220 * \return On error a negative value is returned, on success the number of arguments
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
221 * consumed. For details see \ref OptionParserReturn.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
222 */
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
223 int (*parse)(const m_option_t* opt,const char *name, const char *param, void* dst, int src);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
224
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
225 /// Print back a value in string form.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
226 /** \param opt The option to print.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
227 * \param val Pointer to the memory holding the data to be printed.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
228 * \return An allocated string containing the text value or (void*)-1
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
229 * on error.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
230 */
25229
4f611a555224 Option print functions may not and do not modify value
reimar
parents: 24966
diff changeset
231 char* (*print)(const m_option_t* opt, const void* val);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
233 /** \name
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
234 * 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
235 * 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
236 * \ref m_option_type_func where 'setting' needs to do more than just
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
237 * copying some data.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
238 */
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
239 //@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
240
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
241 /// Update a save slot (dst) from the current value in the program (src).
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
242 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
243 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
244 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
245 */
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
246 void (*save)(const m_option_t* opt,void* dst, const void* src);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
247
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
248 /// Set the value in the program (dst) from a save slot.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
249 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
250 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
251 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
252 */
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
253 void (*set)(const m_option_t* opt,void* dst, const void* src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
254
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
255 /// 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
256 /** \param opt The option to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
257 * \param dst Pointer to the destination memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
258 * \param src Pointer to the source memory.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
259 */
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
260 void (*copy)(const m_option_t* opt,void* dst, const void* src);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
261 //@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
262
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
263 /// Free the data allocated for a save slot.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
264 /** This is only needed for dynamic types like strings.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
265 * \param dst Pointer to the data, usually a pointer that should be freed and
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
266 * set to NULL.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
267 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
268 void (*free)(void* dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
269 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
271 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
272
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
273 /// Option description
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
274 /** \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
275 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 struct m_option {
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
277 /// Option name.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
278 const char *name;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
279
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
280 /// Reserved for higher level APIs, it shouldn't be used by parsers.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
281 /** 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
282 * use the priv field but this was inherited from older versions of the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
283 * config code.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
284 */
30954
e8b0797970b6 Revert marking m_option struct member as const.
diego
parents: 30947
diff changeset
285 void *p;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
286
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
287 /// Option type.
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
288 const m_option_type_t* type;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
289
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
290 /// See \ref OptionFlags.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
291 unsigned int flags;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
292
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
293 /// \brief Mostly useful for numeric types, the \ref M_OPT_MIN flags must
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
294 /// also be set.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
295 double min;
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
296
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
297 /// \brief Mostly useful for numeric types, the \ref M_OPT_MAX flags must
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
298 /// also be set.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
299 double max;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
300
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
301 /// 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
302 /** This used to be a function pointer to hold a 'reverse to defaults' func.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
303 * 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
304 * Passing a 'default func' is still valid for all func based option types.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
305 */
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
306 void* priv;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
307 };
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
308
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
309
34149
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
310 /// \defgroup PrivFlags Private data
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
311 /// @{
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
312 /// Don't exit after printing a CONF_TYPE_PRINT option.
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
313 #define PRIV_NO_EXIT (void *)-1
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
314 ///@}
11d9ef2177ec Improve option type CONF_TYPE_PRINT.
ib
parents: 33882
diff changeset
315
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
316 /// \defgroup OptionFlags Option flags
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
317 ///@{
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
318
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
319 /// 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
320 #define M_OPT_MIN (1<<0)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
321
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
322 /// 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
323 #define M_OPT_MAX (1<<1)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
324
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
325 /// 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
326 #define M_OPT_RANGE (M_OPT_MIN|M_OPT_MAX)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
327
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
328 /// The option is forbidden in config files.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
329 #define M_OPT_NOCFG (1<<2)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
330
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
331 /// The option is forbidden on the command line.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
332 #define M_OPT_NOCMD (1<<3)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
333
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
334 /// The option is global in the \ref Config.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
335 /** 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
336 * it's parsed (i.e. it won't be set later)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
337 * e.g options : -v, -quiet
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
338 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
339 #define M_OPT_GLOBAL (1<<4)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
340
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
341 /// 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
342 /** 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
343 * its entry (i.e. it may be set later)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
344 * e.g options : -include
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
345 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
346 #define M_OPT_NOSAVE (1<<5)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
347
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
348 /// \brief The \ref Config will emulate the old behavior by pushing the
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
349 /// option only if it was set by the user.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
350 #define M_OPT_OLD (1<<6)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
351
26408
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
352 /// The option should be set during command line pre-parsing
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
353 #define M_OPT_PRE_PARSE (1<<7)
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
354
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
355 /// \defgroup OldOptionFlags Backward compatibility
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
356 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
357 /// These are kept for compatibility with older code.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
358 /// @{
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
359 #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
360 #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
361 #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
362 #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
363 #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
364 #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
365 #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
366 #define CONF_OLD M_OPT_OLD
26408
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
367 #define CONF_PRE_PARSE M_OPT_PRE_PARSE
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
368 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
369
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
370 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
371
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
372 /// \defgroup OptionTypeFlags Option type flags
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
373 /// \ingroup OptionTypes
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
374 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
375 /// These flags are used to describe special parser capabilities or behavior.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
376 ///
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
377 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
378
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
379 /// Suboption parser flag.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
380 /** When this flag is set, m_option::p should point to another m_option
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
381 * array. Only the parse function will be called. If dst is set, it should
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
382 * create/update an array of char* containg opt/val pairs. The options in
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
383 * 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
384 * Also note that suboptions may be directly accessed by using
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
385 * -option:subopt blah.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
386 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
387 #define M_OPT_TYPE_HAS_CHILD (1<<0)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
388
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
389 /// Wildcard matching flag.
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
390 /** 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
391 * (used for -aa*), this only affects the option name matching.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
392 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
393 #define M_OPT_TYPE_ALLOW_WILDCARD (1<<1)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
394
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
395 /// Dynamic data type.
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
396 /** 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
397 * 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
398 * 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
399 * the initial value is statically allocated (pretty common with strings).
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
400 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
401 #define M_OPT_TYPE_DYNAMIC (1<<2)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
402
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
403 /// Indirect option type.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
404 /** If this is set the parse function doesn't directly return
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
405 * the wanted thing. Options use this if for some reasons they have to wait
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
406 * until the set call to be able to correctly set the target var.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
407 * So for those types new values must first be parsed, then set to the target
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
408 * 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
409 * target var. It's used by the callback-based options as the callback call
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
410 * may append later on.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
411 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
412 #define M_OPT_TYPE_INDIRECT (1<<3)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
413
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
414 ///@}
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
415
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
416 ///////////////////////////// Parser flags ////////////////////////////////////////
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
417
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
418 /// \defgroup OptionParserModes Option parser modes
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
419 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
420 ///
18316
b3be7df634b0 spelling/grammar/wording fixes in doxygen and non-doxygen comments
diego
parents: 18283
diff changeset
421 /// Some parsers behave differently depending on the mode passed in the src
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
422 /// parameter of m_option_type::parse. For example the flag type doesn't take
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
423 /// an argument when parsing from the command line.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
424 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
425
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
426 /// Set when parsing from a config file.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
427 #define M_CONFIG_FILE 0
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
428 /// Set when parsing command line arguments.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
429 #define M_COMMAND_LINE 1
26408
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
430 /// Set when pre-parsing the command line
7a36d5941fd8 Replace the trivial command line preparser with a more robust version
albeu
parents: 26131
diff changeset
431 #define M_COMMAND_LINE_PRE_PARSE 2
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
432
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
433 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
434
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
435 /// \defgroup OptionParserReturn Option parser return code
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
436 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
437 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
438 /// On success parsers return the number of arguments consumed: 0 or 1.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
439 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
440 /// To indicate that MPlayer should exit without playing anything,
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
441 /// parsers return M_OPT_EXIT minus the number of parameters they
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
442 /// consumed: \ref M_OPT_EXIT or \ref M_OPT_EXIT-1.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
443 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
444 /// On error one of the following (negative) error codes is returned:
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
445 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
446
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
447 /// 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
448 #define M_OPT_UNKNOWN -1
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
449
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
450 /// Returned when a parameter is needed but wasn't provided.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
451 #define M_OPT_MISSING_PARAM -2
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
452
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
453 /// Returned when the given parameter couldn't be parsed.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
454 #define M_OPT_INVALID -3
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
455
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
456 /// \brief Returned if the value is "out of range". The exact meaning may
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
457 /// vary from type to type.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
458 #define M_OPT_OUT_OF_RANGE -4
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
459
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
460 /// 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
461 #define M_OPT_PARSER_ERR -5
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
462
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
463 /// Returned when MPlayer should exit. Used by various help stuff.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
464 /** M_OPT_EXIT must be the lowest number on this list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
465 */
9791
c5b63e88253d Fix some 10L typo in header (m_struct_s instead of m_struct_st).
albeu
parents: 9593
diff changeset
466 #define M_OPT_EXIT -6
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
467
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
468 /// \defgroup OldOptionParserReturn Backward compatibility
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
469 ///
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
470 /// These are kept for compatibility with older code.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
471 ///
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
472 ///@{
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
473 #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
474 #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
475 #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
476 #define ERR_FUNC_ERR M_OPT_PARSER_ERR
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
477 ///@}
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
478
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
479 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
480
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
481 /// Find the option matching the given name in the list.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
482 /** \ingroup Options
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
483 * This function takes the possible wildcards into account (see
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
484 * \ref M_OPT_TYPE_ALLOW_WILDCARD).
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28759
diff changeset
485 *
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
486 * \param list Pointer to an array of \ref m_option.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
487 * \param name Name of the option.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
488 * \return The matching option or NULL.
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
489 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
490 const m_option_t* m_option_list_find(const m_option_t* list,const char* name);
8164
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 to parse options, see \ref m_option_type::parse.
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34200
diff changeset
493 static inline int
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
494 m_option_parse(const m_option_t* opt,const char *name, const char *param, void* dst, int src) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
495 return opt->type->parse(opt,name,param,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
496 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
497
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
498 /// Helper to print options, see \ref m_option_type::print.
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34200
diff changeset
499 static inline char*
25229
4f611a555224 Option print functions may not and do not modify value
reimar
parents: 24966
diff changeset
500 m_option_print(const m_option_t* opt, const void* val_ptr) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
501 if(opt->type->print)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
502 return opt->type->print(opt,val_ptr);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
503 else
8168
ff6a98628e6c Fix the Gui with NEW_CONFIG
albeu
parents: 8164
diff changeset
504 return (char*)-1;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
505 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
506
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
507 /// Helper around \ref m_option_type::save.
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34200
diff changeset
508 static inline void
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
509 m_option_save(const m_option_t* opt,void* dst, const void* src) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
510 if(opt->type->save)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
511 opt->type->save(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
512 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
513
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
514 /// Helper around \ref m_option_type::set.
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34200
diff changeset
515 static inline void
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
516 m_option_set(const m_option_t* opt,void* dst, const void* src) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
517 if(opt->type->set)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
518 opt->type->set(opt,dst,src);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
519 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
520
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
521 /// Helper around \ref m_option_type::copy.
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
522 inline static void
30695
a26f6577d338 Make more option-parsing related function arguments const.
reimar
parents: 30429
diff changeset
523 m_option_copy(const m_option_t* opt,void* dst, const void* src) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
524 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
525 opt->type->copy(opt,dst,src);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
526 else if(opt->type->size > 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
527 memcpy(dst,src,opt->type->size);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
528 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
529
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
530 /// Helper around \ref m_option_type::free.
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34200
diff changeset
531 static inline void
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
532 m_option_free(const m_option_t* opt,void* dst) {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
533 if(opt->type->free)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
534 opt->type->free(dst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
535 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
536
18258
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
537 /*@}*/
96568be4bfdc Doxygen attack!
albeu
parents: 17470
diff changeset
538
32428
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
539 /**
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
540 * Parse a string as a timestamp.
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
541 *
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
542 * @param[in] str the string to parse.
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
543 * @param[out] time parsed time.
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
544 * @param[in] endchar return an error of the next character after the
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
545 * timestamp is neither nul nor endchar.
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
546 * @return Number of chars in the timestamp.
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
547 */
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
548 int parse_timestring(const char *str, double *time, char endchar);
92b92a78ca2a Make the parse_timestring public, with a slightly extended API.
cigaes
parents: 30954
diff changeset
549
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25229
diff changeset
550 #endif /* MPLAYER_M_OPTION_H */