diff options
author | Guy Harris <guy@alum.mit.edu> | 2000-07-05 09:41:07 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2000-07-05 09:41:07 +0000 |
commit | b1f950b377a99de3fdba8814434b0019c0df3506 (patch) | |
tree | 1b304d0bd143ae0727409660feb1e8c0b487eb8a /prefs-int.h | |
parent | ed5651a90939c40d1ca64a0b0e67b89b8031da21 (diff) | |
download | wireshark-b1f950b377a99de3fdba8814434b0019c0df3506.tar.gz wireshark-b1f950b377a99de3fdba8814434b0019c0df3506.tar.bz2 wireshark-b1f950b377a99de3fdba8814434b0019c0df3506.zip |
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.h | 79 |
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 */ |