aboutsummaryrefslogtreecommitdiffstats
path: root/prefs.h
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-07-05 09:41:07 +0000
committerGuy Harris <guy@alum.mit.edu>2000-07-05 09:41:07 +0000
commitb1f950b377a99de3fdba8814434b0019c0df3506 (patch)
tree1b304d0bd143ae0727409660feb1e8c0b487eb8a /prefs.h
parented5651a90939c40d1ca64a0b0e67b89b8031da21 (diff)
Add support for a global "ethereal.conf" preferences file, stored in the
same directory as the "manuf" file ("/etc" or "/usr/local/etc", most likely). Add a mechanism to allow modules (e.g., dissectors) to register preference values, which: can be put into the global or the user's preference file; can be set from the command line, with arguments to the "-o" flag; can be set from tabs in the "Preferences" dialog box. Use that mechanism to register the "Decode IPv4 TOS field as DiffServ field" variable for IP as a preference. Stuff that still needs to be done: documenting the API for registering preferences; documenting the "-o" values in the man page (probably needs a flag similar to "-G", and a Perl script to turn the output into documentation as is done with the list of field); handling error checking for numeric values (range checking, making sure that if the user changes the variable from the GUI they change it to a valid numeric value); using the callbacks to, for example, update the display when preferences are changed (could be expensive); panic if the user specifies a numeric value with a base other than 10, 8, or 16. We may also want to clean up the existing wired-in preferences not to take effect the instant you tweak the widget, and to add an "Apply" button to the "Preferences" dialog. svn path=/trunk/; revision=2117
Diffstat (limited to 'prefs.h')
-rw-r--r--prefs.h93
1 files changed, 91 insertions, 2 deletions
diff --git a/prefs.h b/prefs.h
index c13bb78dbe..ab628c0eb5 100644
--- a/prefs.h
+++ b/prefs.h
@@ -1,7 +1,7 @@
/* prefs.h
* Definitions for preference handling routines
*
- * $Id: prefs.h,v 1.15 2000/01/06 07:33:22 guy Exp $
+ * $Id: prefs.h,v 1.16 2000/07/05 09:40:42 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -50,7 +50,96 @@ typedef struct _e_prefs {
extern e_prefs prefs;
-e_prefs* read_prefs(char **);
+/*
+ * Routines to let modules that have preference settings register
+ * themselves by name, and to let them register preference settings
+ * by name.
+ */
+struct pref_module;
+
+typedef struct pref_module module_t;
+
+/*
+ * Register a module that will have preferences.
+ * Specify the name used for the module in the preferences file, the
+ * title used in the tab for it in a preferences dialog box, and a
+ * routine to call back when we apply the preferences.
+ */
+module_t *prefs_register_module(const char *name, const char *title,
+ void (*apply_cb)(void));
+
+typedef void (*module_cb)(module_t *module, gpointer user_data);
+
+/*
+ * Call a callback function, with a specified argument, for each module.
+ */
+void prefs_module_foreach(module_cb callback, gpointer user_data);
+
+/*
+ * Call the "apply" callback function for each module.
+ */
+void prefs_apply_all(void);
+
+struct preference;
+
+typedef struct preference pref_t;
+
+/*
+ * Register a preference with an unsigned integral value.
+ */
+void prefs_register_uint_preference(module_t *module, const char *name,
+ const char *title, const char *description, guint base, guint *var);
+
+/*
+ * Register a preference with an Boolean value.
+ */
+void prefs_register_bool_preference(module_t *module, const char *name,
+ const char *title, const char *description, gboolean *var);
+
+/*
+ * Register a preference with an enumerated value.
+ */
+typedef struct {
+ char *name;
+ gint value;
+} enum_val;
+
+void prefs_register_enum_preference(module_t *module, const char *name,
+ const char *title, const char *description, gint *var,
+ const enum_val *enumvals, gboolean radio_buttons);
+
+/*
+ * Register a preference with a character-string value.
+ */
+void prefs_register_string_preference(module_t *module, const char *name,
+ const char *title, const char *description, char **var);
+
+typedef void (*pref_cb)(pref_t *pref, gpointer user_data);
+
+/*
+ * Call a callback function, with a specified argument, for each preference
+ * in a given module.
+ */
+void prefs_pref_foreach(module_t *module, pref_cb callback, gpointer user_data);
+
+/*
+ * Register all non-dissector modules' preferences.
+ */
+void prefs_register_modules(void);
+
+e_prefs *read_prefs(int *, char **, int *, char **);
int write_prefs(char **);
+/*
+ * Given a string of the form "<pref name>:<pref value>", as might appear
+ * as an argument to a "-o" option, parse it and set the preference in
+ * question. Return an indication of whether it succeeded or failed
+ * in some fashion.
+ */
+#define PREFS_SET_OK 0 /* succeeded */
+#define PREFS_SET_SYNTAX_ERR 1 /* syntax error in string */
+#define PREFS_SET_NO_SUCH_PREF 2 /* no such preference */
+
+int prefs_set_pref(char *prefarg);
+
#endif /* prefs.h */