Ethereal-dev: Re: [Ethereal-dev] help dir needs a Makefile.am
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Mon, 1 Dec 2003 17:08:02 -0800
On Nov 24, 2003, at 1:15 PM, Ulf Lamping wrote:
I'm still having problems, checking in the (already finished) changes of gtk/help_dlg.c, as still no one finds the time to write a Makefile.am in the new help dir.As I'm not able to write such (I have no knowledge of the automake things), I will check in the generated .h files to the .txt files, so the Unix generation process will not be broken by the changes in gtk/help_dlg.c.
Unfortunately, that caused problems when building on Windows, as it tried to overwrite the ".h" files.
Getting rid of those files didn't help - the script used to build them used "tr", which I don't have installed as part of my Cygwin.
Perhaps it should just read the help files from a "help" subdirectory of the data file directory at run time? That gets rid of the second Windows build problem I had *and* eliminates the need to generate ".h" files on UNIX (or Windows), and also allows help contents to be updated without recompiling Ethereal.
See the attached patch to "help_dlg.c". (It should be fixed to handle open errors and I/O errors, and should probably also try to handle "lines" (for which read paragraphs) of arbitrary size (read into the buffer with "fgets()"; if the string doesn't end with a "\n", double the length of the buffer, and repeat the "fgets()", reading stuff in after the "\n" - repeat until done).
Index: gtk/help_dlg.c =================================================================== RCS file: /cvsroot/ethereal/gtk/help_dlg.c,v retrieving revision 1.38 diff -c -r1.38 gtk/help_dlg.c *** gtk/help_dlg.c 27 Nov 2003 23:25:55 -0000 1.38 --- gtk/help_dlg.c 2 Dec 2003 01:05:07 -0000 *************** *** 31,36 **** --- 31,37 ---- #include <string.h> #include <stdio.h> + #include "epan/filesystem.h" #include "help_dlg.h" #include "prefs.h" #include "gtkglobals.h" *************** *** 38,60 **** #include "compat_macros.h" #include "dlg_utils.h" - - /* include texts from converted ascii ".txt" files */ - #include "../help/overview.h" - #include "../help/capture_filters.h" - #include "../help/display_filters.h" - #include "../help/well_known.h" - #include "../help/faq.h" - - typedef enum { OVERVIEW_HELP, CFILTER_HELP, DFILTER_HELP, WELL_KNOWN_HELP, ! FAQ_HELP } help_type_t; static void help_close_cb(GtkWidget *w, gpointer data); static void help_destroy_cb(GtkWidget *w, gpointer data); static void insert_text(GtkWidget *w, const char *buffer, int nchars); --- 39,63 ---- #include "compat_macros.h" #include "dlg_utils.h" typedef enum { OVERVIEW_HELP, CFILTER_HELP, DFILTER_HELP, WELL_KNOWN_HELP, ! FAQ_HELP, ! NUM_HELP_TYPES } help_type_t; + #define HELP_DIR "help" + + static const char *helpfile_names[NUM_HELP_TYPES] = { + HELP_DIR G_DIR_SEPARATOR_S "overview.txt", + HELP_DIR G_DIR_SEPARATOR_S "capture_filters.txt", + HELP_DIR G_DIR_SEPARATOR_S "display_filters.txt", + HELP_DIR G_DIR_SEPARATOR_S "well_known.txt", + HELP_DIR G_DIR_SEPARATOR_S "faq.txt" + }; + static void help_close_cb(GtkWidget *w, gpointer data); static void help_destroy_cb(GtkWidget *w, gpointer data); static void insert_text(GtkWidget *w, const char *buffer, int nchars); *************** *** 227,280 **** #endif } - static void set_help_text(GtkWidget *w, help_type_t type) { - int i; #ifndef HAVE_LIBPCAP char *tmp; #endif #if GTK_MAJOR_VERSION < 2 gtk_text_freeze(GTK_TEXT(w)); #endif - switch(type) { - - case OVERVIEW_HELP : - for (i=0; i<OVERVIEW_PARTS; i++) { - insert_text(w, overview_part[i], strlen(overview_part[i])); - } - break; - case CFILTER_HELP : #ifndef HAVE_LIBPCAP tmp = "NOTE: packet capturing is not enabled in this version!\n \n"; insert_text(w, tmp, strlen(tmp)); #endif ! for (i=0; i<CAPTURE_FILTERS_PARTS; i++) { ! insert_text(w, capture_filters_part[i], strlen(capture_filters_part[i])); ! } ! break; ! case DFILTER_HELP : ! for (i=0; i<DISPLAY_FILTERS_PARTS; i++) { ! insert_text(w, display_filters_part[i], strlen(display_filters_part[i])); } ! break; ! case WELL_KNOWN_HELP : ! for (i=0; i<WELL_KNOWN_PARTS; i++) { ! insert_text(w, well_known_part[i], strlen(well_known_part[i])); ! } ! break; ! case FAQ_HELP : ! for (i=0; i<FAQ_PARTS; i++) { ! insert_text(w, faq_part[i], strlen(faq_part[i])); ! } ! break; ! default : ! g_assert_not_reached(); ! break; ! } /* switch(type) */ #if GTK_MAJOR_VERSION < 2 gtk_text_thaw(GTK_TEXT(w)); #endif --- 230,267 ---- #endif } static void set_help_text(GtkWidget *w, help_type_t type) { #ifndef HAVE_LIBPCAP char *tmp; #endif + char *help_file_path; + FILE *help_file; + char line[4096+1]; /* XXX - size? */ + g_assert(type < NUM_HELP_TYPES); #if GTK_MAJOR_VERSION < 2 gtk_text_freeze(GTK_TEXT(w)); #endif #ifndef HAVE_LIBPCAP + if (type == CFILTER_HELP) { tmp = "NOTE: packet capturing is not enabled in this version!\n \n"; insert_text(w, tmp, strlen(tmp)); + } else #endif ! { ! help_file_path = get_datafile_path(helpfile_names[type]); ! help_file = fopen(help_file_path, "r"); ! if (help_file != NULL) { ! /* XXX - report open errors, and check for I/O errors */ ! while (fgets(line, sizeof line, help_file) != NULL) ! insert_text(w, line, strlen(line)); ! fclose(help_file); } ! g_free(help_file_path); ! } #if GTK_MAJOR_VERSION < 2 gtk_text_thaw(GTK_TEXT(w)); #endif
- Follow-Ups:
- Re: [Ethereal-dev] help dir needs a Makefile.am
- From: Guy Harris
- Re: [Ethereal-dev] help dir needs a Makefile.am
- Prev by Date: [Ethereal-dev] Removed unnecessary preferences callbacks
- Next by Date: Re: [Ethereal-dev] help dir needs a Makefile.am
- Previous by thread: Re: [Ethereal-dev] Removed unnecessary preferences callbacks
- Next by thread: Re: [Ethereal-dev] help dir needs a Makefile.am
- Index(es):