aboutsummaryrefslogtreecommitdiffstats
path: root/prefs-int.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-int.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-int.h')
-rw-r--r--prefs-int.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/prefs-int.h b/prefs-int.h
new file mode 100644
index 0000000000..0e96f5ff39
--- /dev/null
+++ b/prefs-int.h
@@ -0,0 +1,79 @@
+/* prefs-int.h
+ * Definitions for implementation of preference handling routines;
+ * used by "friends" of the preferences type.
+ *
+ * $Id: prefs-int.h,v 1.1 2000/07/05 09:40:40 guy Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_INT_H__
+#define __PREFS_INT_H__
+
+struct pref_module {
+ const char *name; /* name of module */
+ const char *title; /* title of module (displayed in preferences notebook) */
+ void (*apply_cb)(void); /* routine to call when preferences applied */
+ GList *prefs; /* list of its preferences */
+ int numprefs; /* number of preferences */
+};
+
+typedef enum {
+ PREF_UINT,
+ PREF_BOOL,
+ PREF_ENUM,
+ PREF_STRING
+} pref_type_t;
+
+struct preference {
+ const char *name; /* name of preference */
+ const char *title; /* title to use in GUI */
+ const char *description; /* human-readable description of preference */
+ int ordinal; /* ordinal number of this preference */
+ pref_type_t type; /* type of that preference */
+ union {
+ guint *uint;
+ gboolean *bool;
+ gint *enump;
+ char **string;
+ } varp; /* pointer to variable storing the value */
+ union {
+ guint uint;
+ gboolean bool;
+ gint enumval;
+ char *string;
+ } saved_val; /* original value, when editing from the GUI */
+ union {
+ guint base; /* input/output base, for PREF_UINT */
+ struct {
+ const enum_val *enumvals; /* list of name & values */
+ gboolean radio_buttons; /* TRUE if it should be shown as
+ radio buttons rather than as an
+ option menu or combo box in
+ the preferences tab */
+ } enum_info; /* for PREF_ENUM */
+ } info; /* display/text file information */
+ void *control; /* handle for GUI control for this preference */
+};
+
+gint find_val_for_string(const char *needle, const enum_val *haystack,
+ gint default_value);
+
+#endif /* prefs-int.h */