summaryrefslogtreecommitdiffstats
path: root/options/m_config.h
diff options
context:
space:
mode:
Diffstat (limited to 'options/m_config.h')
-rw-r--r--options/m_config.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/options/m_config.h b/options/m_config.h
new file mode 100644
index 0000000000..8a8865d68e
--- /dev/null
+++ b/options/m_config.h
@@ -0,0 +1,216 @@
+/*
+ * This file is part of MPlayer.
+ *
+ * MPlayer is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_M_CONFIG_H
+#define MPLAYER_M_CONFIG_H
+
+#include <stddef.h>
+#include <stdbool.h>
+
+#include "mpvcore/bstr.h"
+
+// m_config provides an API to manipulate the config variables in MPlayer.
+// It makes use of the Options API to provide a context stack that
+// allows saving and later restoring the state of all variables.
+
+typedef struct m_profile m_profile_t;
+struct m_option;
+struct m_option_type;
+struct m_sub_options;
+struct m_obj_desc;
+struct m_obj_settings;
+
+// Config option
+struct m_config_option {
+ bool is_generated : 1; // Automatically added ("no-" options)
+ bool is_set_from_cmdline : 1; // Set by user from command line
+ const char *name; // Full name (ie option-subopt)
+ const struct m_option *opt; // Option description
+ void *data; // Raw value of the option
+ const void *default_data; // Raw default value
+};
+
+// Config object
+/** \ingroup Config */
+typedef struct m_config {
+ // Registered options.
+ struct m_config_option *opts; // all options, even suboptions
+ int num_opts;
+
+ // List of defined profiles.
+ struct m_profile *profiles;
+ // Depth when recursively including profiles.
+ int profile_depth;
+
+ struct m_opt_backup *backup_opts;
+
+ bool use_profiles;
+ bool is_toplevel;
+ int (*includefunc)(struct m_config *conf, char *filename, int flags);
+
+ void *optstruct; // struct mpopts or other
+} m_config_t;
+
+// Create a new config object.
+// talloc_ctx: talloc parent context for the m_config allocation
+// size: size of the optstruct (where option values are stored)
+// size==0 creates a config object with no option struct allocated
+// defaults: if not NULL, points to a struct of same type as optstruct, which
+// contains default values for all options
+// options: list of options. Each option defines a member of the optstruct
+// and a corresponding option switch or sub-option field.
+// suboptinit: if not NULL, initialize the suboption string (used for presets)
+// Note that the m_config object will keep pointers to defaults and options.
+struct m_config *m_config_new(void *talloc_ctx, size_t size,
+ const void *defaults,
+ const struct m_option *options);
+
+struct m_config *m_config_from_obj_desc(void *talloc_ctx,
+ struct m_obj_desc *desc);
+
+struct m_config *m_config_from_obj_desc_noalloc(void *talloc_ctx,
+ struct m_obj_desc *desc);
+
+int m_config_set_obj_params(struct m_config *conf, char **args);
+
+// Search for the object with the given name in the defaults list, and apply
+// its parameters.
+int m_config_apply_defaults(struct m_config *config, const char *name,
+ struct m_obj_settings *defaults);
+
+// Make sure the option is backed up. If it's already backed up, do nothing.
+// All backed up options can be restored with m_config_restore_backups().
+void m_config_backup_opt(struct m_config *config, const char *opt);
+
+// Call m_config_backup_opt() on all options.
+void m_config_backup_all_opts(struct m_config *config);
+
+// Restore all options backed up with m_config_backup_opt(), and delete the
+// backups afterwards.
+void m_config_restore_backups(struct m_config *config);
+
+enum {
+ M_SETOPT_PRE_PARSE_ONLY = 1, // Silently ignore non-M_OPT_PRE_PARSE opt.
+ M_SETOPT_CHECK_ONLY = 2, // Don't set, just check name/value
+ M_SETOPT_FROM_CONFIG_FILE = 4, // Reject M_OPT_NOCFG opt. (print error)
+ M_SETOPT_FROM_CMDLINE = 8, // Mark as set by command line
+ M_SETOPT_BACKUP = 16, // Call m_config_backup_opt() before
+ M_SETOPT_PRESERVE_CMDLINE = 32, // Don't set if already marked as FROM_CMDLINE
+};
+
+// Set the named option to the given string.
+// flags: combination of M_SETOPT_* flags (0 for normal operation)
+// Returns >= 0 on success, otherwise see OptionParserReturn.
+int m_config_set_option_ext(struct m_config *config, struct bstr name,
+ struct bstr param, int flags);
+
+/* Set an option. (Like: m_config_set_option_ext(config, name, param, 0))
+ * \param config The config object.
+ * \param name The option's name.
+ * \param param The value of the option, can be NULL.
+ * \return See \ref OptionParserReturn.
+ */
+int m_config_set_option(struct m_config *config, struct bstr name,
+ struct bstr param);
+
+static inline int m_config_set_option0(struct m_config *config,
+ const char *name, const char *param)
+{
+ return m_config_set_option(config, bstr0(name), bstr0(param));
+}
+
+int m_config_parse_suboptions(struct m_config *config, char *name,
+ char *subopts);
+
+
+/* Get the option matching the given name.
+ * \param config The config object.
+ * \param name The option's name.
+ */
+const struct m_option *m_config_get_option(const struct m_config *config,
+ struct bstr name);
+
+struct m_config_option *m_config_get_co(const struct m_config *config,
+ struct bstr name);
+
+// Return the n-th option by position. n==0 is the first option. If there are
+// less than (n + 1) options, return NULL.
+const char *m_config_get_positional_option(const struct m_config *config, int n);
+
+// Return a hint to the option parser whether a parameter is/may be required.
+// The option may still accept empty/non-empty parameters independent from
+// this, and this function is useful only for handling ambiguous options like
+// flags (e.g. "--a" is ok, "--a=yes" is also ok).
+// Returns: error code (<0), or number of expected params (0, 1)
+int m_config_option_requires_param(struct m_config *config, bstr name);
+
+/* Print a list of all registered options.
+ * \param config The config object.
+ */
+void m_config_print_option_list(const struct m_config *config);
+
+
+/* Find the profile with the given name.
+ * \param config The config object.
+ * \param arg The profile's name.
+ * \return The profile object or NULL.
+ */
+struct m_profile *m_config_get_profile0(const struct m_config *config,
+ char *name);
+struct m_profile *m_config_get_profile(const struct m_config *config, bstr name);
+
+/* Get the profile with the given name, creating it if necessary.
+ * \param config The config object.
+ * \param arg The profile's name.
+ * \return The profile object.
+ */
+struct m_profile *m_config_add_profile(struct m_config *config, char *name);
+
+/* Set the description of a profile.
+ * Used by the config file parser when defining a profile.
+ *
+ * \param p The profile object.
+ * \param arg The profile's name.
+ */
+void m_profile_set_desc(struct m_profile *p, bstr desc);
+
+/* Add an option to a profile.
+ * Used by the config file parser when defining a profile.
+ *
+ * \param config The config object.
+ * \param p The profile object.
+ * \param name The option's name.
+ * \param val The option's value.
+ */
+int m_config_set_profile_option(struct m_config *config, struct m_profile *p,
+ bstr name, bstr val);
+
+/* Enables profile usage
+ * Used by the config file parser when loading a profile.
+ *
+ * \param config The config object.
+ * \param p The profile object.
+ * \param flags M_SETOPT_* bits
+ */
+void m_config_set_profile(struct m_config *config, struct m_profile *p,
+ int flags);
+
+void *m_config_alloc_struct(void *talloc_ctx,
+ const struct m_sub_options *subopts);
+
+#endif /* MPLAYER_M_CONFIG_H */