move timestamp format options from "View->Options" dialog into
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 19 Jan 2004 03:46:43 +0000 (03:46 +0000)
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 19 Jan 2004 03:46:43 +0000 (03:46 +0000)
menuitems under "View->Time Display Format".
renamed timestamp enum items e.g. from ABSOLUTE to TS_ABSOLUTE,
to prevent conflicting definitions with MSVC

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@9729 f5534014-38df-0310-8fa8-9805f1628bb7

column.c
dftest.c
epan/column-utils.c
epan/timestamp.h
gtk/display_opts.c
gtk/main.c
gtk/menu.c
gtk/packet_list.c
gtk/recent.c
gtk/recent.h
tethereal.c

index d3bf6bcb8c85224ed509ba01bb7f042d50038119..639634881491d81d14c5c57fa92cc511b05a37c3 100644 (file)
--- a/column.c
+++ b/column.c
@@ -1,7 +1,7 @@
 /* column.c
  * Routines for handling column preferences
  *
- * $Id: column.c,v 1.44 2003/12/09 06:48:38 guy Exp $
+ * $Id: column.c,v 1.45 2004/01/19 03:46:41 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -212,9 +212,9 @@ get_column_longest_string(gint format)
       return "0000000";
       break;
     case COL_CLS_TIME:
-      if (timestamp_type == ABSOLUTE)
+      if (timestamp_type == TS_ABSOLUTE)
         return "00:00:00.000000";
-      else if (timestamp_type == ABSOLUTE_WITH_DATE)
+      else if (timestamp_type == TS_ABSOLUTE_WITH_DATE)
         return "0000-00-00 00:00:00.000000";
       else
         return "0000.000000";
index 35a46b4e7de620bca83c9c9b279c4be2c5a88427..ba8c0df315127e32187093aec2617a08af3d3ed2 100644 (file)
--- a/dftest.c
+++ b/dftest.c
@@ -1,6 +1,6 @@
 /* dftest.c.c
  *
- * $Id: dftest.c,v 1.6 2003/08/18 18:35:21 guy Exp $
+ * $Id: dftest.c,v 1.7 2004/01/19 03:46:41 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -58,7 +58,7 @@
 #include "register.h"
 
 packet_info    pi;
-ts_type                timestamp_type = RELATIVE;
+ts_type                timestamp_type = TS_RELATIVE;
 
 int
 main(int argc, char **argv)
index cebe7eb42d8e278e4ed4f5876c1ed3090b4fd99d..95c759e8179e0f784c476f9099a1c9049818d9d8 100644 (file)
@@ -1,7 +1,7 @@
 /* column-utils.c
  * Routines for column utilities.
  *
- * $Id: column-utils.c,v 1.41 2003/12/09 06:48:39 guy Exp $
+ * $Id: column-utils.c,v 1.42 2004/01/19 03:46:41 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -479,19 +479,19 @@ void
 col_set_cls_time(frame_data *fd, column_info *cinfo, int col)
 {
   switch (timestamp_type) {
-    case ABSOLUTE:
+    case TS_ABSOLUTE:
       col_set_abs_time(fd, cinfo, col);
       break;
 
-    case ABSOLUTE_WITH_DATE:
+    case TS_ABSOLUTE_WITH_DATE:
       col_set_abs_date_time(fd, cinfo, col);
       break;
 
-    case RELATIVE:
+    case TS_RELATIVE:
       col_set_rel_time(fd, cinfo, col);
       break;
 
-    case DELTA:
+    case TS_DELTA:
       col_set_delta_time(fd, cinfo, col);
       break;
   }
index 31067e0dceed6a65a870b9082d73f2fea6be60bf..291b71feb25ac973f9cd5aafe66d191f562a021c 100644 (file)
@@ -1,7 +1,7 @@
 /* timestamp.h
  * Defines for packet timestamps
  *
- * $Id: timestamp.h,v 1.2 2002/08/28 20:40:45 jmayer Exp $
+ * $Id: timestamp.h,v 1.3 2004/01/19 03:46:42 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
 #ifndef __TIMESTAMP_H__
 #define __TIMESTAMP_H__
 
-/* MS VC has these macros */
-#ifdef RELATIVE
-#undef RELATIVE
-#endif
-
-#ifdef ABSOLUTE
-#undef ABSOLUTE
-#endif
 
 /*
  * Type of time-stamp shown in the summary display.
  */
 typedef enum {
-       RELATIVE,
-       ABSOLUTE,
-       ABSOLUTE_WITH_DATE,
-       DELTA
+       TS_RELATIVE,
+       TS_ABSOLUTE,
+       TS_ABSOLUTE_WITH_DATE,
+       TS_DELTA
 } ts_type;
 
 extern ts_type timestamp_type;
 
+static char *ts_type_text[] =
+       { "RELATIVE", "ABSOLUTE", "ABSOLUTE_WITH_DATE", "DELTA", NULL };
+
+
 #endif /* timestamp.h */
index 13060dc12c4ae6cf3ca8b0ca0822b50cb7b56142..92334425ef730a03c6bd0f86259103dfa5a35d75 100644 (file)
@@ -1,7 +1,7 @@
 /* display_opts.c
  * Routines for packet display windows
  *
- * $Id: display_opts.c,v 1.34 2004/01/10 16:27:41 ulfl Exp $
+ * $Id: display_opts.c,v 1.35 2004/01/19 03:46:42 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
 extern capture_file  cfile;
 
 /* Display callback data keys */
-#define E_DISPLAY_TIME_ABS_KEY          "display_time_abs"
-#define E_DISPLAY_DATE_TIME_ABS_KEY     "display_date_time_abs"
-#define E_DISPLAY_TIME_REL_KEY          "display_time_rel"
-#define E_DISPLAY_TIME_DELTA_KEY        "display_time_delta"
 #ifdef HAVE_LIBPCAP
 #define E_DISPLAY_AUTO_SCROLL_KEY       "display_auto_scroll"
 #endif
@@ -55,7 +51,6 @@ extern capture_file  cfile;
 static void display_opt_ok_cb(GtkWidget *, gpointer);
 static void display_opt_apply_cb(GtkWidget *, gpointer);
 static void get_display_options(GtkWidget *);
-static void update_display(void);
 static void display_opt_close_cb(GtkWidget *, gpointer);
 static void display_opt_destroy_cb(GtkWidget *, gpointer);
 
@@ -67,9 +62,6 @@ static void display_opt_destroy_cb(GtkWidget *, gpointer);
  */
 static GtkWidget *display_opt_w;
 
-static ts_type initial_timestamp_type;
-static ts_type current_timestamp_type;
-
 void
 display_opt_cb(GtkWidget *w _U_, gpointer d _U_) {
   GtkWidget     *button, *main_vb, *bbox, *ok_bt, *apply_bt, *cancel_bt;
@@ -83,17 +75,6 @@ display_opt_cb(GtkWidget *w _U_, gpointer d _U_) {
     return;
   }
 
-  /* Save the timestamp type value as of when the dialog box was first popped
-     up, so that "Cancel" can put it back if we've changed it with "Apply". */
-  initial_timestamp_type = timestamp_type;
-
-  /* Save the current timestamp type so that we know whether it has changed;
-     we don't want to redisplay the time fields unless we've changed the way
-     they should be displayed (as redisplaying the time fields could be
-     expensive - we have to scan through all the packets and rebuild the
-     packet list).*/
-  current_timestamp_type = timestamp_type;
-
   display_opt_w = dlg_window_new("Ethereal: View Options");
   SIGNAL_CONNECT(display_opt_w, "destroy", display_opt_destroy_cb, NULL);
 
@@ -111,39 +92,6 @@ display_opt_cb(GtkWidget *w _U_, gpointer d _U_) {
   gtk_container_add(GTK_CONTAINER(display_opt_w), main_vb);
   gtk_widget_show(main_vb);
 
-  button = RADIO_BUTTON_NEW_WITH_MNEMONIC(NULL, "_Time of day",
-                                                       accel_group);
-  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button),
-               (timestamp_type == ABSOLUTE));
-  OBJECT_SET_DATA(display_opt_w, E_DISPLAY_TIME_ABS_KEY, button);
-  gtk_box_pack_start(GTK_BOX(main_vb), button, TRUE, TRUE, 0);
-
-  gtk_widget_show(button);
-
-  button = RADIO_BUTTON_NEW_WITH_MNEMONIC(
-               button, "_Date and time of day", accel_group);
-  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button),
-               (timestamp_type == ABSOLUTE_WITH_DATE));
-  OBJECT_SET_DATA(display_opt_w, E_DISPLAY_DATE_TIME_ABS_KEY, button);
-  gtk_box_pack_start(GTK_BOX(main_vb), button, TRUE, TRUE, 0);
-  gtk_widget_show(button);
-
-  button = RADIO_BUTTON_NEW_WITH_MNEMONIC(
-               button, "Seconds since _beginning of capture", accel_group);
-  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button),
-               (timestamp_type == RELATIVE));
-  OBJECT_SET_DATA(display_opt_w, E_DISPLAY_TIME_REL_KEY, button);
-  gtk_box_pack_start(GTK_BOX(main_vb), button, TRUE, TRUE, 0);
-  gtk_widget_show(button);
-
-  button = RADIO_BUTTON_NEW_WITH_MNEMONIC(
-               button, "Seconds since _previous packet", accel_group);
-  gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button),
-               (timestamp_type == DELTA));
-  OBJECT_SET_DATA(display_opt_w, E_DISPLAY_TIME_DELTA_KEY, button);
-  gtk_box_pack_start(GTK_BOX(main_vb), button, TRUE, TRUE, 0);
-  gtk_widget_show(button);
-
 #ifdef HAVE_LIBPCAP
   button = CHECK_BUTTON_NEW_WITH_MNEMONIC(
                "_Automatic scrolling in live capture", accel_group);
@@ -217,14 +165,12 @@ display_opt_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) {
 
   gtk_widget_destroy(GTK_WIDGET(parent_w));
 
-  update_display();
 }
 
 static void
 display_opt_apply_cb(GtkWidget *ok_bt _U_, gpointer parent_w) {
   get_display_options(GTK_WIDGET(parent_w));
 
-  update_display();
 }
 
 static void
@@ -232,22 +178,6 @@ get_display_options(GtkWidget *parent_w)
 {
   GtkWidget *button;
 
-  button = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_DISPLAY_TIME_ABS_KEY);
-  if (GTK_TOGGLE_BUTTON (button)->active)
-    timestamp_type = ABSOLUTE;
-
-  button = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_DISPLAY_DATE_TIME_ABS_KEY);
-  if (GTK_TOGGLE_BUTTON (button)->active)
-    timestamp_type = ABSOLUTE_WITH_DATE;
-
-  button = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_DISPLAY_TIME_REL_KEY);
-  if (GTK_TOGGLE_BUTTON (button)->active)
-    timestamp_type = RELATIVE;
-
-  button = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_DISPLAY_TIME_DELTA_KEY);
-  if (GTK_TOGGLE_BUTTON (button)->active)
-    timestamp_type = DELTA;
-
 #ifdef HAVE_LIBPCAP
   button = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_DISPLAY_AUTO_SCROLL_KEY);
   auto_scroll_live = (GTK_TOGGLE_BUTTON (button)->active);
@@ -269,36 +199,9 @@ get_display_options(GtkWidget *parent_w)
 
 }
 
-static void
-update_display(void)
-{
-  if (timestamp_type != current_timestamp_type) {
-      /* Time stamp format changed; update the display.
-
-         XXX - redissecting the packets could actually be faster;
-        we have to find the row number for each frame, in order to
-        update the time stamp columns, and doing that is linear in
-        the row number, which means the whole process is N^2 in
-        the number of rows, whilst redissecting the packets is only
-        linear in the number of rows (assuming you're using our
-        CList code, or the GTK+ 1.2.8 CList code, or other CList
-        code which doesn't have to scan the entire list to find the
-        last element), even though the latter involves doing more work
-        per packet. */
-    current_timestamp_type = timestamp_type;
-    change_time_formats(&cfile);
-  }
-}
-
 static void
 display_opt_close_cb(GtkWidget *close_bt _U_, gpointer parent_w)
 {
-  /* Revert the timestamp type to the value it has when we started. */
-  timestamp_type = initial_timestamp_type;
-
-  /* Update the display if either of those changed. */
-  update_display();
-
   gtk_grab_remove(GTK_WIDGET(parent_w));
   gtk_widget_destroy(GTK_WIDGET(parent_w));
 }
index dd3dfcdf9824442cb60bc3991da73869a1149b2c..d6d40cb7bbb4862b4207636f4644493f40a36231 100644 (file)
@@ -1,6 +1,6 @@
 /* main.c
  *
- * $Id: main.c,v 1.358 2004/01/19 00:42:09 ulfl Exp $
+ * $Id: main.c,v 1.359 2004/01/19 03:46:42 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -155,7 +155,9 @@ static gboolean updated_last_open_dir = FALSE;
 static gint root_x = G_MAXINT, root_y = G_MAXINT, top_width, top_height;
 static gboolean updated_geometry = FALSE;
 
-ts_type timestamp_type = RELATIVE;
+/* init with an invalid value, so that "recent" can detect this and */
+/* distinguish it from a command line value */
+ts_type timestamp_type = -1;
 
 #if GTK_MAJOR_VERSION < 2
 GtkStyle *item_style;
@@ -1805,13 +1807,13 @@ main(int argc, char *argv[])
         break;
       case 't':        /* Time stamp type */
         if (strcmp(optarg, "r") == 0)
-          timestamp_type = RELATIVE;
+          timestamp_type = TS_RELATIVE;
         else if (strcmp(optarg, "a") == 0)
-          timestamp_type = ABSOLUTE;
+          timestamp_type = TS_ABSOLUTE;
         else if (strcmp(optarg, "ad") == 0)
-          timestamp_type = ABSOLUTE_WITH_DATE;
+          timestamp_type = TS_ABSOLUTE_WITH_DATE;
         else if (strcmp(optarg, "d") == 0)
-          timestamp_type = DELTA;
+          timestamp_type = TS_DELTA;
         else {
           fprintf(stderr, "ethereal: Invalid time stamp type \"%s\"\n",
             optarg);
index 6bbeb1c3714dd07d472c5b4dffc207b30527069c..7a44d49e8b4b607411afde8de1cf05a73118b3f1 100644 (file)
@@ -1,7 +1,7 @@
 /* menu.c
  * Menu routines
  *
- * $Id: menu.c,v 1.137 2004/01/19 00:42:10 ulfl Exp $
+ * $Id: menu.c,v 1.138 2004/01/19 03:46:42 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -85,6 +85,10 @@ static void packet_list_show_cb(GtkWidget *w _U_, gpointer d _U_);
 static void tree_view_show_cb(GtkWidget *w _U_, gpointer d _U_);
 static void byte_view_show_cb(GtkWidget *w _U_, gpointer d _U_);
 static void statusbar_show_cb(GtkWidget *w _U_, gpointer d _U_);
+static void timestamp_absolute_cb(GtkWidget *w _U_, gpointer d _U_);
+static void timestamp_absolute_date_cb(GtkWidget *w _U_, gpointer d _U_);
+static void timestamp_relative_cb(GtkWidget *w _U_, gpointer d _U_);
+static void timestamp_delta_cb(GtkWidget *w _U_, gpointer d _U_);
 
 /* This is the GtkItemFactoryEntry structure used to generate new menus.
        Item 1: The menu path. The letter after the underscore indicates an
@@ -183,15 +187,19 @@ static GtkItemFactoryEntry menu_items[] =
     ITEM_FACTORY_ENTRY("/View/Show/Packet Data", NULL, byte_view_show_cb, 0, "<CheckItem>", NULL),
     ITEM_FACTORY_ENTRY("/View/Show/<separator>", NULL, NULL, 0, "<Separator>", NULL),
     ITEM_FACTORY_ENTRY("/View/Show/Status Bar", NULL, statusbar_show_cb, 0, "<CheckItem>", NULL),
-#if 0
        /* XXX: the settings in the "Options" dialog could be seperated into the following menu items. */
        /* before this, some effort must be taken to transfer the functionality of this dialog to the menu items */
        /* (getting the current values, handling the radioitems, ...) */
     ITEM_FACTORY_ENTRY("/View/_Time Display Format", NULL, NULL, 0, "<Branch>", NULL),
-    ITEM_FACTORY_ENTRY("/View/Time Display Format/Time of day", NULL, NULL, 0, "<RadioItem>", NULL),
-    ITEM_FACTORY_ENTRY("/View/Time Display Format/Date and time of day", NULL, NULL, 0, "<RadioItem>", NULL),
-    ITEM_FACTORY_ENTRY("/View/Time Display Format/Seconds since beginning of capture", NULL, NULL, 0, "<RadioItem>", NULL),
-    ITEM_FACTORY_ENTRY("/View/Time Display Format/Seconds since previous capture", NULL, NULL, 0, "<RadioItem>", NULL),
+    ITEM_FACTORY_ENTRY("/View/Time Display Format/Time of day", NULL, timestamp_absolute_cb, 
+                        0, "<RadioItem>", NULL),
+    ITEM_FACTORY_ENTRY("/View/Time Display Format/Date and time of day", NULL, timestamp_absolute_date_cb, 
+                        0, "/View/Time Display Format/Time of day", NULL),
+    ITEM_FACTORY_ENTRY("/View/Time Display Format/Seconds since beginning of capture", NULL, timestamp_relative_cb, 
+                        0, "/View/Time Display Format/Time of day", NULL),
+    ITEM_FACTORY_ENTRY("/View/Time Display Format/Seconds since previous capture", NULL, timestamp_delta_cb, 
+                        0, "/View/Time Display Format/Time of day", NULL),
+#if 0
     ITEM_FACTORY_ENTRY("/View/_Name Resolution", NULL, NULL, 0, "<Branch>", NULL),
     ITEM_FACTORY_ENTRY("/View/Name Resolution/Enable MAC", NULL, NULL, 0, "<CheckItem>", NULL),
     ITEM_FACTORY_ENTRY("/View/Name Resolution/Enable Network", NULL, NULL, 0, "<CheckItem>", NULL),
@@ -962,6 +970,47 @@ statusbar_show_cb(GtkWidget *w _U_, gpointer d _U_)
 }
 
 
+static void 
+timestamp_absolute_cb(GtkWidget *w _U_, gpointer d _U_)
+{
+    if (recent.gui_time_format != TS_ABSOLUTE) {
+        timestamp_type          = TS_ABSOLUTE;
+        recent.gui_time_format  = timestamp_type;
+        change_time_formats(&cfile);
+    }
+}
+
+static void 
+timestamp_absolute_date_cb(GtkWidget *w _U_, gpointer d _U_)
+{
+    if (recent.gui_time_format != TS_ABSOLUTE_WITH_DATE) {
+        timestamp_type          = TS_ABSOLUTE_WITH_DATE;
+        recent.gui_time_format  = timestamp_type;
+        change_time_formats(&cfile);
+    }
+}
+
+static void 
+timestamp_relative_cb(GtkWidget *w _U_, gpointer d _U_)
+{
+    if (recent.gui_time_format != TS_RELATIVE) {
+        timestamp_type          = TS_RELATIVE;
+        recent.gui_time_format  = timestamp_type;
+        change_time_formats(&cfile);
+    }
+}
+
+static void 
+timestamp_delta_cb(GtkWidget *w _U_, gpointer d _U_)
+{
+    if (recent.gui_time_format != TS_DELTA) {
+        timestamp_type          = TS_DELTA;
+        recent.gui_time_format  = timestamp_type;
+        change_time_formats(&cfile);
+    }
+}
+
+
 /* the recent file read has finished, update the menu corresponding */
 void
 menu_recent_read_finished(void) {
@@ -986,6 +1035,42 @@ menu_recent_read_finished(void) {
     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), recent.statusbar_show);
 
     main_widgets_rearrange();
+
+    /* don't change the time format, if we had a command line value */
+    if (timestamp_type != -1) {
+        recent.gui_time_format = timestamp_type;
+    }
+
+    switch(recent.gui_time_format) {
+    case(TS_ABSOLUTE):
+        menu = gtk_item_factory_get_widget(main_menu_factory, 
+            "/View/Time Display Format/Time of day");
+        /* set_active will not trigger the callback when activating an active item! */
+        recent.gui_time_format = -1;
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), FALSE);
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+        break;
+    case(TS_ABSOLUTE_WITH_DATE):
+        menu = gtk_item_factory_get_widget(main_menu_factory, 
+            "/View/Time Display Format/Date and time of day");
+        recent.gui_time_format = -1;
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+        break;
+    case(TS_RELATIVE):
+        menu = gtk_item_factory_get_widget(main_menu_factory, 
+            "/View/Time Display Format/Seconds since beginning of capture");
+        recent.gui_time_format = -1;
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+        break;
+    case(TS_DELTA):
+        menu = gtk_item_factory_get_widget(main_menu_factory, 
+            "/View/Time Display Format/Seconds since previous capture");
+        recent.gui_time_format = -1;
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE);
+        break;
+    default:
+        g_assert_not_reached();
+    }
 }
 
 
index 41d906dd79ac287d500bac595ea0fae21b3bd138..f00df8dc6f0d37b2bae12b740066e9cde5f5b130 100644 (file)
@@ -1,7 +1,7 @@
 /* packet_list.c
  * packet list related functions   2002 Olivier Abad
  *
- * $Id: packet_list.c,v 1.10 2004/01/19 00:42:10 ulfl Exp $
+ * $Id: packet_list.c,v 1.11 2004/01/19 03:46:42 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -110,8 +110,8 @@ packet_list_compare(EthCList *clist, gconstpointer  ptr1, gconstpointer  ptr2)
   gint  col_fmt = cfile.cinfo.col_fmt[clist->sort_column];
 
   if ((col_fmt == COL_NUMBER) || (col_fmt == COL_REL_TIME) || (col_fmt == COL_DELTA_TIME) ||
-      ((col_fmt == COL_CLS_TIME) && (timestamp_type == RELATIVE)) ||
-      ((col_fmt == COL_CLS_TIME) && (timestamp_type == DELTA))    ||
+      ((col_fmt == COL_CLS_TIME) && (timestamp_type == TS_RELATIVE)) ||
+      ((col_fmt == COL_CLS_TIME) && (timestamp_type == TS_DELTA))    ||
       (col_fmt == COL_UNRES_SRC_PORT) || (col_fmt == COL_UNRES_DST_PORT) ||
       ((num1 != 0) && (num2 != 0) && ((col_fmt == COL_DEF_SRC_PORT) || (col_fmt == COL_RES_SRC_PORT) ||
                                       (col_fmt == COL_DEF_DST_PORT) || (col_fmt == COL_RES_DST_PORT))) ||
index 4a7584816239dd9bbbcbbd257dc4c74df75c7423..26830c8ed4b154faf97aafa45feae76891bd4208 100644 (file)
@@ -2,7 +2,7 @@
  * Recent "preference" handling routines
  * Copyright 2004, Ulf Lamping <ulf.lamping@web.de>
  *
- * $Id: recent.c,v 1.2 2004/01/19 01:00:58 guy Exp $
+ * $Id: recent.c,v 1.3 2004/01/19 03:46:43 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -49,6 +49,29 @@ extern void menu_recent_read_finished(void);
 recent_settings_t recent;
 
 
+
+
+/* Takes an string and a pointer to an array of strings, and a default int value.
+ * The array must be terminated by a NULL string. If the string is found in the array
+ * of strings, the index of that string in the array is returned. Otherwise, the
+ * default value that was passed as the third argument is returned.
+ */
+static int
+find_index_from_string_array(char *needle, char **haystack, int default_value)
+{
+       int i = 0;
+
+       while (haystack[i] != NULL) {
+               if (strcmp(needle, haystack[i]) == 0) {
+                       return i;
+               }
+               i++;
+       }
+       return default_value;
+}
+
+
+
 /* Write out "recent" to the user's recent file, and return 0.
    If we got an error, stuff a pointer to the path of the recent file
    into "*pf_path_return", and return the errno. */
@@ -116,6 +139,11 @@ write_recent(char **rf_path_return)
   fprintf(rf, RECENT_KEY_STATUSBAR_SHOW ": %s\n",
                  recent.statusbar_show == TRUE ? "TRUE" : "FALSE");
 
+  fprintf(rf, "\n# Timestamp display format.\n");
+  fprintf(rf, "# One of: RELATIVE, ABSOLUTE, ABSOLUTE_WITH_DATE, DELTA\n");
+  fprintf(rf, RECENT_GUI_TIME_FORMAT ": %s\n",
+          ts_type_text[recent.gui_time_format]);
+
   fclose(rf);
 
   /* XXX - catch I/O errors (e.g. "ran out of disk space") and return
@@ -177,6 +205,9 @@ read_set_recent_pair(gchar *key, gchar *value)
     else {
         recent.statusbar_show = FALSE;
     }
+  } else if (strcmp(key, RECENT_GUI_TIME_FORMAT) == 0) {
+        recent.gui_time_format =
+           find_index_from_string_array(value, ts_type_text, TS_RELATIVE);
   }
 
   return PREFS_SET_OK;
@@ -192,12 +223,13 @@ read_recent(char **rf_path_return, int *rf_errno_return)
 
 
   /* set defaults */
-  recent.main_toolbar_show  = TRUE;
-  recent.filter_toolbar_show= TRUE;
-  recent.packet_list_show   = TRUE;
-  recent.tree_view_show     = TRUE;
-  recent.byte_view_show     = TRUE;
-  recent.statusbar_show     = TRUE;
+  recent.main_toolbar_show      = TRUE;
+  recent.filter_toolbar_show    = TRUE;
+  recent.packet_list_show       = TRUE;
+  recent.tree_view_show         = TRUE;
+  recent.byte_view_show         = TRUE;
+  recent.statusbar_show         = TRUE;
+  recent.gui_time_format        = TS_RELATIVE;
 
   /* Construct the pathname of the user's recent file. */
   rf_path = get_persconffile_path(RECENT_FILE_NAME, FALSE);
index bf317f935cc1f519068c755e585ca738e14e17be..1e603f98bfe85e6deb04cd18fbe8ea20d61ee895 100644 (file)
@@ -2,7 +2,7 @@
  * Definitions for recent "preference" handling routines
  * Copyright 2004, Ulf Lamping <ulf.lamping@web.de>
  *
- * $Id: recent.h,v 1.1 2004/01/19 00:42:11 ulfl Exp $
+ * $Id: recent.h,v 1.2 2004/01/19 03:46:43 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
 #define RECENT_KEY_TREE_VIEW_SHOW       "gui.tree_view_show"
 #define RECENT_KEY_BYTE_VIEW_SHOW       "gui.byte_view_show"
 #define RECENT_KEY_STATUSBAR_SHOW       "gui.statusbar_show"
-
+#define RECENT_GUI_TIME_FORMAT          "gui.time_format"
 
 typedef struct recent_settings_tag {
     gboolean    main_toolbar_show;
     gboolean    filter_toolbar_show;
     gboolean    packet_list_show;
-    /*gboolean    packet_list_height;*/
+    /*gboolean  packet_list_height;*/
     gboolean    tree_view_show;
-    /*gboolean    tree_view_height;*/
+    /*gboolean  tree_view_height;*/
     gboolean    byte_view_show;
     gboolean    statusbar_show;
+    gint        gui_time_format;
 } recent_settings_t;
 
 extern recent_settings_t recent;
index 2590be2025ba9196605e02289adea777206b1140..17eff12468a094cf6526aec99fca1f1dda0e1795 100644 (file)
@@ -1,6 +1,6 @@
 /* tethereal.c
  *
- * $Id: tethereal.c,v 1.221 2004/01/18 04:13:44 guy Exp $
+ * $Id: tethereal.c,v 1.222 2004/01/19 03:46:41 ulfl Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -182,7 +182,7 @@ static int pipe_dispatch(int, loop_data *, struct pcap_hdr *, \
 #endif
 
 capture_file cfile;
-ts_type timestamp_type = RELATIVE;
+ts_type timestamp_type = TS_RELATIVE;
 #ifdef HAVE_LIBPCAP
 typedef struct {
        int snaplen;                    /* Maximum captured packet length */
@@ -1176,13 +1176,13 @@ main(int argc, char *argv[])
         break;
       case 't':        /* Time stamp type */
         if (strcmp(optarg, "r") == 0)
-          timestamp_type = RELATIVE;
+          timestamp_type = TS_RELATIVE;
         else if (strcmp(optarg, "a") == 0)
-          timestamp_type = ABSOLUTE;
+          timestamp_type = TS_ABSOLUTE;
         else if (strcmp(optarg, "ad") == 0)
-          timestamp_type = ABSOLUTE_WITH_DATE;
+          timestamp_type = TS_ABSOLUTE_WITH_DATE;
         else if (strcmp(optarg, "d") == 0)
-          timestamp_type = DELTA;
+          timestamp_type = TS_DELTA;
         else {
           fprintf(stderr, "tethereal: Invalid time stamp type \"%s\"\n",
             optarg);