aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/decode_as_dlg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/decode_as_dlg.c')
-rw-r--r--gtk/decode_as_dlg.c129
1 files changed, 93 insertions, 36 deletions
diff --git a/gtk/decode_as_dlg.c b/gtk/decode_as_dlg.c
index d403fc887b..5dd826756b 100644
--- a/gtk/decode_as_dlg.c
+++ b/gtk/decode_as_dlg.c
@@ -1,6 +1,6 @@
/* decode_as_dlg.c
*
- * $Id: decode_as_dlg.c,v 1.31 2003/03/01 13:08:59 deniel Exp $
+ * $Id: decode_as_dlg.c,v 1.32 2003/09/07 00:47:57 guy Exp $
*
* Routines to modify dissector tables on the fly.
*
@@ -97,7 +97,7 @@ enum srcdst_type {
* Columns for a "Display" list
*/
#define E_LIST_D_TABLE 0
-#define E_LIST_D_PORT 1
+#define E_LIST_D_SELECTOR 1
#define E_LIST_D_INITIAL 2
#define E_LIST_D_CURRENT 3
#define E_LIST_D_MAX E_LIST_D_CURRENT
@@ -151,8 +151,13 @@ static enum action_type requested_action = -1;
struct dissector_delete_item {
/* The name of the dissector table */
const gchar *ddi_table_name;
- /* The port number in the dissector table */
- guint ddi_port;
+ /* The type of the selector in that dissector table */
+ ftenum_t ddi_selector_type;
+ /* The selector in the dissector table */
+ union {
+ guint sel_uint;
+ char *sel_string;
+ } ddi_selector;
};
/*
@@ -188,14 +193,32 @@ GSList *dissector_reset_list = NULL;
* @param user_data Unused.
*/
static void
-decode_build_reset_list (gchar *table_name, gpointer key,
- gpointer value _U_, gpointer user_data _U_)
+decode_build_reset_list (gchar *table_name, ftenum_t selector_type,
+ gpointer key, gpointer value _U_,
+ gpointer user_data _U_)
{
dissector_delete_item_t *item;
item = g_malloc(sizeof(dissector_delete_item_t));
item->ddi_table_name = table_name;
- item->ddi_port = GPOINTER_TO_UINT(key);
+ item->ddi_selector_type = selector_type;
+ switch (selector_type) {
+
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT24:
+ case FT_UINT32:
+ item->ddi_selector.sel_uint = GPOINTER_TO_UINT(key);
+ break;
+
+ case FT_STRING:
+ case FT_STRINGZ:
+ item->ddi_selector.sel_string = key;
+ break;
+
+ default:
+ g_assert_not_reached();
+ }
dissector_reset_list = g_slist_prepend(dissector_reset_list, item);
}
@@ -224,8 +247,8 @@ decode_build_reset_list (gchar *table_name, gpointer key,
* should be stored.
*/
static void
-decode_build_show_list (gchar *table_name, gpointer key,
- gpointer value, gpointer user_data)
+decode_build_show_list (gchar *table_name, ftenum_t selector_type,
+ gpointer key, gpointer value, gpointer user_data)
{
#if GTK_MAJOR_VERSION < 2
GtkCList *clist;
@@ -258,42 +281,59 @@ decode_build_show_list (gchar *table_name, gpointer key,
initial_proto_name = dissector_handle_get_short_name(initial);
text[E_LIST_D_TABLE] = get_dissector_table_ui_name(table_name);
- switch (get_dissector_table_base(table_name)) {
-
- case BASE_DEC:
- sprintf(string1, "%u", GPOINTER_TO_UINT(key));
- break;
+ switch (selector_type) {
- case BASE_HEX:
- switch (get_dissector_table_type(table_name)) {
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT24:
+ case FT_UINT32:
+ switch (get_dissector_table_base(table_name)) {
- case FT_UINT8:
- sprintf(string1, "0x%02x", GPOINTER_TO_UINT(key));
+ case BASE_DEC:
+ sprintf(string1, "%u", GPOINTER_TO_UINT(key));
break;
- case FT_UINT16:
- sprintf(string1, "0x%04x", GPOINTER_TO_UINT(key));
- break;
+ case BASE_HEX:
+ switch (get_dissector_table_selector_type(table_name)) {
- case FT_UINT24:
- sprintf(string1, "0x%06x", GPOINTER_TO_UINT(key));
- break;
+ case FT_UINT8:
+ sprintf(string1, "0x%02x", GPOINTER_TO_UINT(key));
+ break;
- case FT_UINT32:
- sprintf(string1, "0x%08x", GPOINTER_TO_UINT(key));
+ case FT_UINT16:
+ sprintf(string1, "0x%04x", GPOINTER_TO_UINT(key));
+ break;
+
+ case FT_UINT24:
+ sprintf(string1, "0x%06x", GPOINTER_TO_UINT(key));
+ break;
+
+ case FT_UINT32:
+ sprintf(string1, "0x%08x", GPOINTER_TO_UINT(key));
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
break;
- default:
- g_assert_not_reached();
+ case BASE_OCT:
+ sprintf(string1, "%#o", GPOINTER_TO_UINT(key));
break;
}
+ text[E_LIST_D_SELECTOR] = string1;
break;
- case BASE_OCT:
- sprintf(string1, "%#o", GPOINTER_TO_UINT(key));
+ case FT_STRING:
+ case FT_STRINGZ:
+ text[E_LIST_D_SELECTOR] = key;
+ break;
+
+ default:
+ g_assert_not_reached();
break;
}
- text[E_LIST_D_PORT] = string1;
text[E_LIST_D_INITIAL] = initial_proto_name;
text[E_LIST_D_CURRENT] = current_proto_name;
#if GTK_MAJOR_VERSION < 2
@@ -301,7 +341,7 @@ decode_build_show_list (gchar *table_name, gpointer key,
#else
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, E_LIST_D_TABLE, text[E_LIST_D_TABLE],
- E_LIST_D_PORT, text[E_LIST_D_PORT],
+ E_LIST_D_SELECTOR, text[E_LIST_D_SELECTOR],
E_LIST_D_INITIAL, text[E_LIST_D_INITIAL],
E_LIST_D_CURRENT, text[E_LIST_D_CURRENT], -1);
#endif
@@ -344,7 +384,24 @@ decode_show_reset_cb (GtkWidget *reset_bt _U_, gpointer parent_w)
for (tmp = dissector_reset_list; tmp; tmp = g_slist_next(tmp)) {
item = tmp->data;
- dissector_reset(item->ddi_table_name, item->ddi_port);
+ switch (item->ddi_selector_type) {
+
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT24:
+ case FT_UINT32:
+ dissector_reset(item->ddi_table_name, item->ddi_selector.sel_uint);
+ break;
+
+ case FT_STRING:
+ case FT_STRINGZ:
+ dissector_reset_string(item->ddi_table_name,
+ item->ddi_selector.sel_string);
+ break;
+
+ default:
+ g_assert_not_reached();
+ }
g_free(item);
}
g_slist_free(dissector_reset_list);
@@ -538,7 +595,7 @@ decode_show_cb (GtkWidget * w _U_, gpointer data _U_)
* buffer.
*/
static void
-decode_change_one_dissector(gchar *table_name, gint selector, GtkWidget *list)
+decode_change_one_dissector(gchar *table_name, guint selector, GtkWidget *list)
{
dissector_handle_t handle;
gchar *abbrev;
@@ -644,7 +701,7 @@ decode_simple (GtkWidget *notebook_pg)
gchar *string;
#endif
gchar *table_name;
- gint value;
+ guint value;
list = OBJECT_GET_DATA(notebook_pg, E_PAGE_LIST);
if (requested_action == E_DECODE_NO)
@@ -660,7 +717,7 @@ decode_simple (GtkWidget *notebook_pg)
#endif
table_name = OBJECT_GET_DATA(notebook_pg, E_PAGE_TABLE);
- value = GPOINTER_TO_INT(OBJECT_GET_DATA(notebook_pg, E_PAGE_VALUE));
+ value = GPOINTER_TO_UINT(OBJECT_GET_DATA(notebook_pg, E_PAGE_VALUE));
decode_change_one_dissector(table_name, value, list);
}