Commit Graph

3888 Commits

Author SHA1 Message Date
Guy Harris 77e59876a7 Use the right #define to control inclusion of "ui_util.h".
svn path=/trunk/; revision=1412
2000-01-03 06:28:44 +00:00
Guy Harris 91801fd5dd Make "menus_init()", set_menu_sensitivity()", and "grp" static to
"gtk/menu.c", as they're not used outside it.

Move the definition of "GTK_MENU_FUNC()" from "gtk/menu.h" to
"gtk/menu.c", as it's not used outside of "gtk/menu.c".

Get rid of the declaration of "menus_create()" in "gtk/menu.h", as that
routine doesn't exist.

svn path=/trunk/; revision=1411
2000-01-03 04:06:09 +00:00
Guy Harris 2ef301bcf6 Have "gtk/menu.c" (and, in the future, code for other UIs) export a set
of routines to enable and disable various sets of menu items; call only
those routines, not routines to enable or disable particular menu items,
from files in the top-level directory, as other UIs may not refer to
menu items with path strings of the sort used in GTK+, and as this
buries knowledge of the menu items available in "gtk/menu.c" rather than
requiring stuff outside of "gtk/menu.c" to know what menu items exist.

svn path=/trunk/; revision=1410
2000-01-03 03:57:04 +00:00
Gilbert Ramirez 5694165915 A little hack for the really lazy (i.e., me). Allow users to type a
directory name in the filename box in the file open dialoge box. If what
you type is a directory, the file selection gui chdir's to that diretory
and shows you the files in that directory.

svn path=/trunk/; revision=1405
2000-01-01 04:28:45 +00:00
Gilbert Ramirez 8be6563d38 Allow user to modify appearance of lines and expanders in GUI protocol
tree.

svn path=/trunk/; revision=1400
1999-12-30 23:02:56 +00:00
Gilbert Ramirez df9ce260fb Disallow multiple selections in the CTree and CList widgets.
In order to use GTK_SELECTION_BROWSE correctly, I had to set auto_resize
to TRUE for the GtkCTree column.

Yes, I'm using terminology that's opposite that of GTK+.

When I say the selection bar "browses", I mean that you can browse the rest
of the widget with an outline selection bar, without changing the
selection. This corresponds to mode GTK_SELECTION_SINGLE.

When I say "select", I mean that the arrow keys change the selection.
This corresponds to mode GTK_SELECTION_BROWSE.

Go figure. But I like my terminology better.

svn path=/trunk/; revision=1398
1999-12-30 19:53:11 +00:00
Gilbert Ramirez 8162d65615 Changed the protocol tree widget from a GtkTree to a GtkCTree. The two reasons
I did this:

First, Havoc Pennington, in "GTK+/Gnome Application Development", in
Appendix seciton A.3.88, recommends using GtkCTree instead of GtkTree
because GtkCtree is faster, and GtkTree has limitation on its total row
height: since it must fit inside a GdkWindow, it is limited to 32,768
pixels of height. GtkTree is more flexible with regards to the types of
widgets that can be placed in the tree, but since we deal only with text,
that doesn't matter, at least for now.

Secondly, a GtkTree doesn't allow arrow-key navigation (at least as far
as I could tell). It always bothered me that the up and down arrow keys
worked in the packet list and in the hex dump, but no in the protocol tree.
GtkCTree does allow arrow-key navigation. In fact, GtkCTree is a subclass
of GtkCList (the packet list widget), so they behave a lot alike.

I went ahead and fixed the selection bar which has been bothering Richard
for a long time now. :) In the GUI preferences dialogue, you can now set
both the packet list selection bar and the protocol tree selection bar
to either "browse" or "select" mode. "browse" mode is what you're used to:
the arrow keys move an outline of the selection bar, but do not change
the selection. "select" mode does change the selection when the arrow keys
are pressed. The default behavior is set to "select", which seems more
natural for a first-time user.

svn path=/trunk/; revision=1393
1999-12-29 20:10:12 +00:00
Guy Harris 868eb7518a Update a comment.
svn path=/trunk/; revision=1390
1999-12-29 07:39:51 +00:00
Guy Harris b0a46e6052 Move the definition of "prefs" from "gtk/prefs_dlg.c" to "prefs.c", so
that you don't have to have "gtk/prefs_dlg.c" to get it defined - future
non-GTK (text mode, curses, etc.) programs wouldn't have it.

svn path=/trunk/; revision=1387
1999-12-29 05:53:48 +00:00
Gerald Combs 335f0b4647 Add support for "--with-plugindir=<plugin install dir>" to configure.
Make the default plugindir $(libdir)/ethereal/plugins/0.8.  Ethereal now
looks for plugins in the following directories:
  /usr/lib/ethereal/plugins/0.8
  /usr/local/lib/ethereal/plugins/0.8
  $plugindir (if different from above)
  $HOME/.ethereal/plugins

svn path=/trunk/; revision=1382
1999-12-28 04:40:24 +00:00
Gerald Combs 45babe7bb5 Integrate libtool/libltdl with the plugin code. Add libtool and libltdl
to the distribution.

svn path=/trunk/; revision=1379
1999-12-26 22:38:07 +00:00
Guy Harris b96ac8c220 I thought I'd seen a problem with the combo box in the "Capture:Start"
dialog box if we hadn't found any interfaces on which we could capture,
but perhaps the problem was that "gtk_combo_set_popdown_strings()"
doesn't like it if you set the list of items to a NULL list - if you
don't set it at all, you get a combo box with only one blank entry in
the list, but you don't seem to get complaints from GTK+ 1.2.6, at
least.

Pop up the "Capture:Start" dialog box even if we don't find any
interfaces on which we could capture; at least this way, they won't just
get confronted with a

	There are no network interfaces that can be opened.
	Please check to make sure you have sufficient permission
	to capture packets.

message box and no way to give us any more information other than "it
said 'There are no network interfaces that can be opened...'" - they can
at least try the interfaces that *should* work, and report the error
messages they get, giving us a better chance at figuring out what the
problem is.

Trim white space from the entry in that combo box, and, if there isn't
anything other than possibly white space, pop up a

	You didn't specify an interface on which to capture packets.

message box and leave the dialog box up so that the user can supply an
interface name.

svn path=/trunk/; revision=1373
1999-12-23 09:31:09 +00:00
Guy Harris a4738ae15a Move the code to raise a window into a "reactivate_window()" routine,
and have that routine also de-iconify the window.

svn path=/trunk/; revision=1365
1999-12-20 06:05:15 +00:00
Gilbert Ramirez f34e877593 Add a new page to the Preferences notebook: a GUI page. The sole
option right now is the placement of the vertical scrollbars in the 3 panes.
(it's one decision; you can't have the placement of the vertical scrollbar
in the packet list pane different than the placement in the protocol tree
pane, for example).

I did this because I find it convenient to have the vertical scrollbars
on the *left* side of the text. My mouse cursor is usually expanding and
collapsing the protocol tree widgets, and once the protocol tree changes
size, I usually have to scroll. I'd rather move my mouse cursor just a few
pixels over to find the vertical scrollbar.

svn path=/trunk/; revision=1351
1999-12-16 06:20:18 +00:00
Gilbert Ramirez 1063eaaecc Reduce the About box to a reasonable size. Gerald's name remains
with the copyright, and everyone else has been relegated to the
man page and AUTHORS file.

svn path=/trunk/; revision=1350
1999-12-16 04:11:33 +00:00
Guy Harris e588b8057b A first cut, untested.
svn path=/trunk/; revision=1347
1999-12-15 08:20:30 +00:00
Gilbert Ramirez e996e3d661 Oops. My last commit was made form the wrong tree and code that
was under development was accidentally checked in. This reverses the
changes.

svn path=/trunk/; revision=1342
1999-12-15 07:03:11 +00:00
Gilbert Ramirez b906ce0a17 Add Dearborn Group Technology's Gryphon dissector as our first
shipped plugin.

svn path=/trunk/; revision=1341
1999-12-15 06:53:36 +00:00
Guy Harris 096134536e Stuart Stanley's ISIS dissection support.
svn path=/trunk/; revision=1340
1999-12-15 04:34:44 +00:00
Gilbert Ramirez 423b152c0c Do a better check of 'bend'. The code works w/o it, but only because
I got lucky when I introduced 'bend'. The behavior is the same, but
now it's due to planning, not luck.

svn path=/trunk/; revision=1324
1999-12-14 06:52:09 +00:00
Gilbert Ramirez 66674a789e Remove the horizontal scroll bar under the hex dump. It did nothing
at all since the GtkText widget does not scroll horizontally (it says
so in the GTK+ docs and in the gtktext.c file in the GTK+ distribution).
Even if the Ethereal window is shrunk horizontally, the text widget will
line wrap (we could turn that off, but it just truncates the line, instead
of making the text widget horizontally-scrollable).

Also, change the packet list scrollbar policy to AUTOMATIC so that scroll
bars only appear when needed. This is how the protocol tree pane has
been configured already.

svn path=/trunk/; revision=1308
1999-12-13 04:20:33 +00:00
Gilbert Ramirez 490fcbb775 One final fix to the 3-pane GUI behavior. Now when the the Ethereal
window is extended veritically, either up or down, the packet list
and hex dump pane sizes stay the same, and the protocol tree pane
is the one that grows. Hurrah! Of course you can still modify the
size of each pane with the little separator between each pane.

svn path=/trunk/; revision=1307
1999-12-13 03:45:33 +00:00
Gilbert Ramirez 4a15f6582a Added Bert Driehuis <driehuis@playbeing.org>'s I4B wiretap module
and V.120 decoder.

svn path=/trunk/; revision=1304
1999-12-12 22:40:10 +00:00
Olivier Abad 7aef27dd3c Avoid loading "." and ".." when scanning directories for plugins
svn path=/trunk/; revision=1299
1999-12-12 10:22:41 +00:00
Gilbert Ramirez d85f804b4b Add the who protocol (rwho/rwhod/ruptime)
In packet_hex_print(), compute (bstart + blen) only once.

In time_secs_to_str(), return a meaningful string when time == 0, instead
of returing pointer to char buffer with old, inappropriate data in it.

svn path=/trunk/; revision=1297
1999-12-12 05:11:57 +00:00
Guy Harris 19af67b894 Change the comments to reflect the fact that this is now no longer a tab
of the "Edit:Preferences" dialog box.

svn path=/trunk/; revision=1279
1999-12-10 07:20:57 +00:00
Guy Harris f47ff8dfd0 Squelch a GCC complaint.
svn path=/trunk/; revision=1278
1999-12-10 07:04:30 +00:00
Gilbert Ramirez 53017596ca Make the protocol tree GUI pane associate with the packet list pane
instead of the hex dump pane.

svn path=/trunk/; revision=1276
1999-12-10 06:44:39 +00:00
Guy Harris 7537c5cc73 Jerry Talkington's patch to remove the filter stuff from
"Edit:Preferences" and put it directly under "Edit:Filters", and to add
an "Apply" button to it, which makes the currently selected filter the
current filter and applies it to the current capture.

svn path=/trunk/; revision=1275
1999-12-10 06:28:24 +00:00
Gilbert Ramirez 71b7cd5031 Move GTK code out of summary.c and into gtk/summary_dlg.c
summary.c now provides a struct of info (see summary.h)

Changed the name of the summary dialogue callback (hence the change
in menu.c), and added a close button to the dialogue.

Moved #include <gtk/gtk.h> out of print.c and into prefs.h where it
was needed for GdkColor.

svn path=/trunk/; revision=1273
1999-12-10 04:21:04 +00:00
Olivier Abad 7ce8202f00 Put in an RCS ID.
svn path=/trunk/; revision=1267
1999-12-09 20:55:49 +00:00
Olivier Abad 564a1c1d62 plugins support (i.e. Dynamically loadable dissectors)
depends on dlopen() being available on the target platform

svn path=/trunk/; revision=1263
1999-12-09 20:43:38 +00:00
Guy Harris 80618858d6 Move the GTK+ implementations of various UI utilities out of "util.c"
into "gtk/ui_util.c", and move the declarations of those UI utilities
out of "util.h" into "ui_util.h".  (The header file is in the top-level
directory, rather than the "gtk" directory, because it declares
window-system-independent interfaces to routines with
window-system-dependent implementations.)

Add to "gtk/ui_util.c" a routine to set the window and icon title.

Use that routine to make the title of an Ethereal top-level window be

	{filename} - Ethereal

if there's a capture open, and have "{filename}" be "<capture>" if it's
a temporary capture file.

svn path=/trunk/; revision=1255
1999-12-09 07:19:20 +00:00
Guy Harris 6198327782 Add Dave Chapeskie's name to the list of contributors.
svn path=/trunk/; revision=1240
1999-12-07 22:59:31 +00:00
Guy Harris 4c691e81ad It appears that the IRIX SIOCSNOOPLEN "ioctl", as used by "libpcap" to
set the capture length on IRIX, may fail if the capture length supplied
is too large, rather than just truncating it.  Use MIN_PACKET_SIZE,
rather than WTAP_MAX_PACKET_SIZE, in our sample open.

Let's hope some *other* platform doesn't barf if the capture length is
too *small*....

(Sigh.  Would that "pcap_open_live()" accepted 0 as a capture size,
meaning "give me the whole packet".  Unfortunately, it doesn't, so IRIX
users may have to crank the capture size back in the capture dialog
box.)

svn path=/trunk/; revision=1239
1999-12-07 22:11:02 +00:00
Gilbert Ramirez 1b7ba3f862 Remove 3 GTK+ header files and have our gtkclist.c use
the the system version of the gtk header files.

svn path=/trunk/; revision=1238
1999-12-07 22:06:27 +00:00
Guy Harris b01c9d20d4 Add the "-R" flag to the usage message.
Don't list capture-oriented flags in the usage message if Ethereal was
built without "libpcap".

If a capture-oriented flag is given to an Ethereal built without
"libpcap", print a message noting that and give a usage message.

Print only one usage message, even if more than one bad command-line
flag is given.

svn path=/trunk/; revision=1236
1999-12-07 07:12:49 +00:00
Guy Harris e5f812d6ed James Coe's patch to add SRVLOC and NCP-over-IP support.
svn path=/trunk/; revision=1234
1999-12-07 06:13:19 +00:00
Guy Harris b5b4e3d57a Patch from Jerry Talkington to:
treat CONNECT as an HTTP request;

	add DELETE and OPTIONS as request names.

Make the order of names in the AUTHORS file match that of the man page
and the About box.

svn path=/trunk/; revision=1231
1999-12-06 20:27:40 +00:00
Guy Harris 38c23f5528 Add support for saving files in a format other than the one they're in
and other than "libpcap", now that Wiretap can write files other than
"libpcap".

svn path=/trunk/; revision=1225
1999-12-06 09:02:48 +00:00
Guy Harris 0de40f3c42 Add ^G as an accelerator for Display:Go To Frame.
svn path=/trunk/; revision=1222
1999-12-05 23:44:24 +00:00
Nathan Neulinger db76c02c9e patch to scroll byte view
svn path=/trunk/; revision=1190
1999-12-03 21:28:58 +00:00
Guy Harris 9f755766f0 Explain *why* you have to "g_strdup()" the argument to "-r" before
assigning it to "cf_name", so somebody else doesn't make the same
mistake I did.

svn path=/trunk/; revision=1181
1999-12-02 08:28:34 +00:00
Gilbert Ramirez 123d10e6a9 Fix bug which occurs when running ethereal with "-r" to load a file, then
loading a new file from within ethereal.

In main(), cf_name was being set to optarg, without g_strdup()'ing it.
Later, in file_open_cmd_cb(), we try to g_free last_open_dir, which is
cf_name, so blammo! We try to g_free something that we can't.

So, in main(), be sure to set cf_name to a g_strdup() of optarg, not
just optarg.

(At home I'm using debug/development versions of glib/gtk, so maybe
that's why I saw the problem only now. I could have sworn that I
have done this sequence of events successfully before).

svn path=/trunk/; revision=1180
1999-12-02 05:25:59 +00:00
Gerald Combs ee51e6534a Add stream window color preferences. We don't (yet) use cmaps, so this
may not work with pseudocolor systems.

svn path=/trunk/; revision=1179
1999-12-02 04:30:15 +00:00
Guy Harris dc548e7458 Allow the user to save either all of the current capture, or only the
packets that are currently being displayed from that capture.

Centralize the code to control whether "File:Save" and "File:Save As"
are enabled (and *always* have "File:Save As" enabled if you have a
capture; "File:Save" is enabled only if you have a live capture you've
not yet saved, although it does the same thing as "File:Save As").

Have the "save_file" member of a "capture_file" structure represent
*only* the file currently being *written* to by a capture, and, if there
is no capture currently in progress, have it be NULL; the name of the
file currently being *displayed" is in the "filename" member, and an
"is_tempfile" member indicates whether it's a temporary file for a live
capture or not.

Have "close_cap_file()" delete the current capture file if it's a
temporary capture file that hasn't been saved (in its entirety - saving
selected frames doesn't count).  Do the same (if there *is* a current
capture file) when exiting.

The "Ready to load or capture" message is the only statusbar message in
the "main" context; "close_cap_file()" should never pop it, it should
only pop whatever message exists in the "file" context, and thus has no
need to take, as an argument, the context for the message it should pop.

Update the man page to reflect the new behavior of "File:Save" and
"File:Save As", and to reflect recent changes to "Display:Match Selected".

svn path=/trunk/; revision=1170
1999-11-30 20:50:15 +00:00
Guy Harris 9a3791699c In "Go To Frame", distinguish between "there is no frame with that frame
number" and "there is a frame with that frame number, but it didn't pass
the current display filter".

svn path=/trunk/; revision=1164
1999-11-30 07:27:37 +00:00
Guy Harris e0597caf79 Stuff in "colors.c" largely need work only on a "colfilter", not on a
"capture_file" - when handed a "capture_file *", it only cared about the
"colors" entry.  The only time it cares about a "capture_file" is when
it's actually filtering the packets, as it needs to hand the
"capture_file *" to "colorize_packets()".

Make the stuff exported by "colors.c" in "colors.h" take "colfilter *"
arguments (or return a "colfilter *" to be stuffed into a
"capture_file").

svn path=/trunk/; revision=1162
1999-11-30 05:33:05 +00:00
Gilbert Ramirez f6147bfdd9 Change Olivier's e-mail address.
svn path=/trunk/; revision=1158
1999-11-29 22:45:34 +00:00
Gilbert Ramirez 7e957bf876 Made copyright date read "1998-1999".
svn path=/trunk/; revision=1157
1999-11-29 21:33:36 +00:00
Guy Harris 4d5a749309 Add a comment.
svn path=/trunk/; revision=1151
1999-11-29 08:28:45 +00:00
Guy Harris 1678a318da Get version number information for CMU SNMP.
svn path=/trunk/; revision=1142
1999-11-29 04:31:05 +00:00
Gilbert Ramirez 548be624ae Update copyright date in About box.
svn path=/trunk/; revision=1141
1999-11-29 03:56:26 +00:00
Guy Harris ef5b3fa9e2 Include, in the version message, information about whether the UCD or
CMU SNMP library was linked in and, if one of them was, information
about the version of the library, if that information is available.

svn path=/trunk/; revision=1140
1999-11-29 03:07:19 +00:00
Guy Harris 4fa99001a8 Include in the version message an indication of whether it was built
with "libz" and, if so, which version.

svn path=/trunk/; revision=1139
1999-11-29 02:45:23 +00:00
Gilbert Ramirez 789a0d467d Remove a couple commented-out lines that I had left in from an earlier
debug session.

svn path=/trunk/; revision=1133
1999-11-28 14:50:23 +00:00
Gerald Combs 664fde99e5 Add code to colorize TCP streams.
svn path=/trunk/; revision=1131
1999-11-28 03:35:20 +00:00
Gilbert Ramirez 29087f241f Make TCP follow put display filter in the text-entry box, but not in
the history of display filters. If it is deemed useful to put the filter in
the histor of filters also, then I can do that.

When Match Selected produces byte-range display filters (field[x:y] == x.y.z),
use notation without length, since the length is no longer needed.
(field[x] == x.y.z is produced)

When Match Selected prodcues a filter for FT_ETHER's, use ether_to_str()
instead of sprintf().

svn path=/trunk/; revision=1112
1999-11-26 05:23:40 +00:00
Gerald Combs e479d316a7 Change display filter entry widget to a GtkCombo.
Modify filter_packtes to return 1 on success, and 0 on failure.

svn path=/trunk/; revision=1106
1999-11-25 18:02:25 +00:00
Gilbert Ramirez 7bd50061f8 Move to version 0.7.8.
Document changes in this version.
Add Greg to ever-growing list of authors (he was in AUTHORS, but not
	in manpage nor in main.c)

svn path=/trunk/; revision=1097
1999-11-23 04:43:44 +00:00
Gilbert Ramirez 61604233f1 Add AIX doco and modify references to it.
svn path=/trunk/; revision=1096
1999-11-23 03:50:40 +00:00
Gilbert Ramirez 942b69ce9a A "character encoding" variable is now set per packet. The existence
of SNA in a packet changes the character encoding from the default ASCII
to EBCDIC.

The hex-printing routines in the GUI code and in the printing code convert
to EBCDIC if appropriate.

svn path=/trunk/; revision=1089
1999-11-22 06:24:56 +00:00
Laurent Deniel f7b3c5a4a9 Add a "Reset" button to reset the current display filter and
redisplay the packet list.

svn path=/trunk/; revision=1084
1999-11-21 15:06:07 +00:00
Gilbert Ramirez bfeff47889 Change ipv4 class to use ip_to_str() when converting IP address to string.
ip_to_str() is 7 times faster than my sprintf() implementation (both of
which take very little time for the single call that match_selected() makes,
but you know....)

svn path=/trunk/; revision=1071
1999-11-19 23:01:26 +00:00
Gilbert Ramirez b91d595c77 Change match_selected() to produce a display filter using the selected
field's name, if possible. (If the selected field is not a registered field,
then of course, we still have to use the frame[x:y] syntax).

tree_selected_start and tree_selected_len are on longer globals variables;
finfo_selected has replaced them.

svn path=/trunk/; revision=1070
1999-11-19 22:32:00 +00:00
Guy Harris b68f2dde89 Heikki Vatiainen's SAP (Session Announcement Protocol) dissector.
Rename the dissector for the Netware SAP protocol to "dissect_ipxsap()",
so as to keep its name from colliding with that of the dissector for the
Session Announcement Protocol.

svn path=/trunk/; revision=1046
1999-11-17 02:17:29 +00:00
Guy Harris a7aba0a288 Replace the ETT_ "enum" members, declared in "packet.h", with
dynamically-assigned "ett_" integer values, assigned by
"proto_register_subtree_array()"; this:

	obviates the need to update "packet.h" whenever you add a new
	subtree type - you only have to add a call to
	"proto_register_subtree_array()" to a "register" routine and an
	array of pointers to "ett_", if they're not already there, and
	add a pointer to the new "ett_" variable to the array, if they
	are there;

	would allow run-time-loaded dissectors to allocate subtree types
	when they're loaded.

svn path=/trunk/; revision=1043
1999-11-16 11:44:20 +00:00
Guy Harris 3a2f7f641a "gtk_object_get_data()" returns a pointer, so its return value shouldn't
be cast to a "gint" if that "gint" value is then going to be assigned to
a pointer.

svn path=/trunk/; revision=1042
1999-11-16 08:00:20 +00:00
Guy Harris cd708a6155 Remove an "#if 0"-ed out chunk of code that was supposed to cause the
hex window to scroll so that the data in the currently-selected field is
visible, but merely revealed core-dumping bugs in GTK+.

svn path=/trunk/; revision=1040
1999-11-16 06:59:17 +00:00
Gilbert Ramirez 7ae788f94d Don't store both "start" and "length" in each GUI proto_tree item. Just
store the field_info pointer, from which we can get both "start" and
"length" (and "hfinfo" and "value", which I'm working towards, so that
match_selected, or a new function, and create a display filter based on
the field's name, instead of byte offset ).

svn path=/trunk/; revision=1039
1999-11-15 22:52:03 +00:00
Guy Harris f2b8eb42d0 Change my e-mail address to the forwarding address my *alma mater*
provides.  "Every problem in computer science can be solved by adding a
layer of indirection."

svn path=/trunk/; revision=1008
1999-11-11 08:45:34 +00:00
Gilbert Ramirez 0bf0d908ae More small memleak fixes.
colors.c wasn't freeing path in one place
main.c wasn't freeing rc_file
the frame_buffer fix in wtap.c didn't clear everything.

svn path=/trunk/; revision=1001
1999-11-10 19:58:54 +00:00
Guy Harris ac4026f37a Add a "Go To Frame" menu item, which lets you go to a frame by frame
number.

svn path=/trunk/; revision=994
1999-11-10 07:01:53 +00:00
Guy Harris 0caff51de0 Add a "Go To Frame" menu item, which lets you go to a frame by frame
number.

svn path=/trunk/; revision=989
1999-11-08 01:03:40 +00:00
Guy Harris f633fe0259 Pop up a message box if a search for a frame fails.
svn path=/trunk/; revision=985
1999-11-06 06:54:24 +00:00
Guy Harris 2d7950fffc Clean up some stuff I failed to cleanup before the initial checkin.
svn path=/trunk/; revision=984
1999-11-06 06:42:41 +00:00
Guy Harris f0889e55c1 Add a "Find Frame" menu item under "Display"; it lets you use a display
filter to search forward or backward in the list of displayed frames for
a matching frame.

When filtering the display, readjust the display to show the "current"
frame if it passed the display filter.  When a file is read in, the
first frame becomes the "current" frame; when a frame is selected, it
becomes the "current" frame, and remains so *even if you unselect it*,
until another frame is selected.

Select the first frame when a file is read in.

Disable most of the "Display" and "Tools" menu items if there's no
current capture file, and enable the relevant ones if there is.

svn path=/trunk/; revision=982
1999-11-06 06:28:07 +00:00
Guy Harris cdee2e23cb Get rid of an unused #define.
svn path=/trunk/; revision=980
1999-11-06 02:05:32 +00:00
Guy Harris fc31243da0 For the "-v" flag, dump the "libpcap" version number, if we were built
with "libpcap".

svn path=/trunk/; revision=974
1999-11-04 21:04:35 +00:00
Guy Harris b99cfa28c8 Warren Young's patch to add a "Print" button to the "Follow TCP Stream"
data window.

Some (belated) man page updates.

svn path=/trunk/; revision=950
1999-10-30 06:42:10 +00:00
Guy Harris 21c466ed25 Uwe Girlich's ONC RPC and NFS dissectors.
svn path=/trunk/; revision=945
1999-10-29 01:04:44 +00:00
Guy Harris da1fdf005f Kojak's ICQ dissector.
svn path=/trunk/; revision=919
1999-10-24 00:56:11 +00:00
Guy Harris 047b8751f3 Generalize the "ip_src" and "ip_dst" members of the "packet_info"
structure to "dl_src"/"dl_dst", "net_src"/"net_dst", and "src"/"dst"
addresses, where an address is an address type, an address length in
bytes, and a pointer to that many bytes.

"dl_{src,dst}" are the link-layer source/destination; "net_{src,dst}"
are the network-layer source/destination; "{src,dst}" are the
source/destination from the highest of those two layers that we have in
the packet.

Add a port type to "packet_info" as well, specifying whether it's a TCP
or UDP port.

Don't set the address and port columns in the dissector functions; just
set the address and port members of the "packet_info" structure.  Set
the columns in "fill_in_columns()"; this means that if we're showing
COL_{DEF,RES,UNRES}_SRC" or "COL_{DEF,RES,UNRES}_DST", we only generate
the string from "src" or "dst", we don't generate a string for the
link-layer address and then overwrite it with a string for the
network-layer address (generating those strings costs CPU).

Add support for "conversations", where a "conversation" is (at present)
a source and destination address and a source and destination port.  (In
the future, we may support "conversations" above the transport layer,
e.g. a TFTP conversation, where the first packet goes from the client to
the TFTP server port, but the reply comes back from a different port,
and all subsequent packets go between the client address/port and the
server address/new port, or an NFS conversation, which might include
lock manager, status monitor, and mount packets, as well as NFS
packets.)

Currently, all we support is a call that takes the source and
destination address/port pairs, looks them up in a hash table, and:

	if nothing is found, creates a new entry in the hash table, and
	assigns it a unique 32-bit conversation ID, and returns that
	conversation ID;

	if an entry is found, returns its conversation ID.

Use that in the SMB and AFS code to keep track of individual SMB or AFS
conversations.  We need to match up requests and replies, as, for
certain replies, the operation code for the request to which it's a
reply doesn't show up in the reply - you have to find the request with a
matching transaction ID.  Transaction IDs are per-conversation, so the
hash table for requests should include a conversation ID and transaction
ID as the key.

This allows SMB and AFS decoders to handle IPv4 or IPv6 addresses
transparently (and should allow the SMB decoder to handle NetBIOS atop
other protocols as well, if the source and destination address and port
values in the "packet_info" structure are set appropriately).

In the "Follow TCP Connection" code, check to make sure that the
addresses are IPv4 addressses; ultimately, that code should be changed
to use the conversation code instead, which will let it handle IPv6
transparently.

svn path=/trunk/; revision=909
1999-10-22 07:18:23 +00:00
Guy Harris 6921a22ac5 Additional NTP changes:
added misc. constants for parsing flags, and converting time
	stamps;

	added flags and primary sources explanations;

	added function for converting time stamps;

	improved item analysis;

	new item definitions;

from Tomislav Vujec.

svn path=/trunk/; revision=908
1999-10-22 06:31:39 +00:00
Guy Harris d4964f4944 Have Ethereal check for a first command-line argument of "-G", rather
than a command name of "ethereal-dump-fields", to decide whether to run
as normal Ethereal or to just dump out the list of fields that can be
used in a display filter.

This allows us to continue to make that check without doing the regular
command line flag parsing (which we don't want to do, as we don't want
to call "gtk_init()" before making that check, as "gtk_init()" tries to
open an X display, and some people want not to have to have X running in
order to build Ethereal, or want not to have Ethereal try to open an X
connection over a slow line if it's just going to print field names to
the standard output), without having to make a link to "../ethereal"
from the "doc" directory (said link couldn't be a hard link, as ATK
apparently disallows hard links between directories, and I have the
vague impression that a symbolic link might cause other problems).

svn path=/trunk/; revision=902
1999-10-21 21:47:08 +00:00
Gilbert Ramirez 7de739b851 And add the new file to the list of gtk/libui.a sources, for distribution.
svn path=/trunk/; revision=898
1999-10-20 22:53:43 +00:00
Gilbert Ramirez b0cfa34169 Move GTK-related stuff out of globals.h and put it in gtk/gtkglobals.h
svn path=/trunk/; revision=896
1999-10-20 22:36:05 +00:00
Gilbert Ramirez 2dd24ea353 Add ASCII/EBCDIC conversion to TCP Follow window. Also add Close button
for ease-of-use with window managers w/o "destroy" buttons (twm).

svn path=/trunk/; revision=884
1999-10-19 04:11:23 +00:00
Gilbert Ramirez 10fcfef266 Move display.[ch] --> gtk/display_opts.[ch]
svn path=/trunk/; revision=883
1999-10-18 12:48:14 +00:00
Guy Harris 6f56cbf07e Phil Techau's patch to add "col_append_str()".
svn path=/trunk/; revision=845
1999-10-15 20:33:06 +00:00
Jun-ichiro itojun Hagino 45ca99c55b avoid mistakingly commit dynamically generated files, like "Makefile".
svn path=/trunk/; revision=837
1999-10-15 04:40:28 +00:00
Guy Harris 364274edf3 Nathan Neulinger's dissector for the Yahoo messenger and pager
protocols.

svn path=/trunk/; revision=824
1999-10-14 01:29:07 +00:00
Guy Harris f3da72ef2f Have "dfilter_compile()" return 0 on success and 1 on failure, and
return the pointer to the compiled filter through a pointer argument.

Have it check whether the filter is a null filter and, if so, free up
the filter and supply a filter pointer, rather than obliging its callers
to check whether the filter actually has any code.  (Well, they may want
to check if the filter is null, so that they don't save a pointer to the
filter text, e.g. so that the display filter displays as "none" rather
than as a blank string in the summary box.)

In the process, fix the check in "gtk/file_dlg.c" that tests whether the
read filter compiled successfully.

svn path=/trunk/; revision=812
1999-10-12 05:01:07 +00:00
Guy Harris 817465175d Oops! Forgot to commit the change that adds Christophe Tronche to the
list of authors.

svn path=/trunk/; revision=809
1999-10-11 18:04:48 +00:00
Guy Harris 3b9013d393 When a new display filter is to be applied, don't set "cf.dfilter" or
"cf.dfcode" if the new filter doesn't compile, because the filter
currently in effect will be the one that was last applied - just free up
the text of the new filter, and whatever memory was allocated for the
new filter code.

This means we allocate a new dfilter when a new filter is to be applied,
rather than recycling stuff from the old filter, as we want the old
filter code to remain around if the new filter doesn't compile.

This means that "cf.dfilter" and "cf.dfcode" will be null if there's no
filter in effect.

svn path=/trunk/; revision=803
1999-10-11 06:39:26 +00:00
Laurent Deniel 69cc7f5b6b - fix a segmentation violation with big "match selected" filters.
- fix a memory leak.

svn path=/trunk/; revision=795
1999-10-09 14:05:04 +00:00
Guy Harris 50f137829c Include "main.h", to pull in the external declarations of several
routines defined in this file.

svn path=/trunk/; revision=786
1999-10-08 07:31:10 +00:00
Guy Harris 07790d8e19 Fix the include-guard #define to be "__MAIN_H__", matching the name of
the file.

svn path=/trunk/; revision=785
1999-10-08 07:29:42 +00:00
Guy Harris dcb17b4bb6 Don't initialize the file name field in the "File/Open" dialog box with
the name of the current save file - we no longer have the "-F" flag, and
"-S" automatically reads from the capture file as packets arrive, so
there's no need to manually open the capture file.

svn path=/trunk/; revision=757
1999-10-02 20:25:45 +00:00
Guy Harris 79ec5a3ba9 Get rid of "-F" - "-S" works, and has a more convenient UI.
Print a usage message if an illegal command-line flag is seen.

Clean up the usage message a bit.

svn path=/trunk/; revision=755
1999-10-02 20:00:46 +00:00
Guy Harris 37aa821603 Wrap stufff that's used only if we have "libpcap" in "#ifdef
HAVE_LIBPCAP"/"#endif".

svn path=/trunk/; revision=754
1999-10-02 19:33:14 +00:00
Guy Harris 3395559532 Move the declaration of global variables involved with packet capture
from "globals.h" to "capture.h".

Only "capture.c" needs to include <pcap.h>; move the include of <pcap.h>
from "capture.h" to "capture.c".

We no longer need any DLT_ defines (that's handled inside Wiretap);
remove the defines of DLT_ from "capture.h".

svn path=/trunk/; revision=753
1999-10-02 19:24:27 +00:00
Guy Harris efe95352f9 Add a file name field to the "Capture/Start" dialog box; if it's blank,
the capture will be done to a temporary file, otherwise it'll be done to
the specified file.

svn path=/trunk/; revision=749
1999-10-02 07:13:20 +00:00
Guy Harris 3d2cc0cb06 Have "do_capture()" take, as an argument, a pointer to the name of the
file to which to write the capture; if it's NULL, create a temporary
file and use that.

Have "-w" set a local variable, which starts out null, and, for "-k"
captures, call "do_capture()" and pass it that local variable as an
argument; this lets you do "-k" without "-w", which makes it use a
temporary file for the capture.

This means "run_capture()" no longer serves a useful purpose, as its
only caller is "do_capture()"; swallow it into "do_capture()".

svn path=/trunk/; revision=748
1999-10-02 06:26:53 +00:00
Guy Harris b34d0437c9 A child process for a "-S" or "-F" capture should *always* exit when the
capture is done; make it do so, and don't bother passing it a "-Q" flag
to tell it to do so.

"capture()" is called in two places; in one place, it's in a child
process, and it shouldn't read in the capture file.  Move the reading of
the capture file out of "capture()" itself to the place where we
*should* read in the capture file after it returns.  Also, have it
return an indication of whether it succeeded or failed, so we know
whether we should read in the capture file.

svn path=/trunk/; revision=747
1999-10-02 06:00:07 +00:00
Guy Harris 60f385ac01 Move the definitions of "sync_mode", "sync_pipe", "fork_mode",
"quit_after_cap", and "capture_child" from "gtk/main.c" to "capture.c",
so that the definitions don't have to be duplicated in "main.c" for
other UIs if, as, and when we do versions of Ethereal with other UIs.

svn path=/trunk/; revision=746
1999-10-01 21:52:03 +00:00
Guy Harris 4423330034 If we specify a save file name with "-w", mark it as "user saved", so
that we don't delete it if we later start a new capture.

svn path=/trunk/; revision=742
1999-09-30 07:19:35 +00:00
Guy Harris bab015f5e5 Add a new global flag "capture_child", which is TRUE if we're a child
process for a sync mode or fork mode capture.

Have that flag control whether we do things that *only* the parent or
*only* the child should do, rather than basing it solely on the setting
of "sync_mode" or "fork_mode" (or, in the case of stuff done in the
child process either in sync mode or fork mode, rather than basing it on
the setting of those flags at all).

Split "do_capture()" into a "run_capture()" routine that starts a
capture (possibly by forking off and execing a child process, if we're
supposed to do sync mode or fork mode captures), and that assumes the
file to which the capture is to write has already been opened and that
"cf.save_file_fd" is the file descriptor for that file, and a
"do_capture()" routine that creates a temporary file, getting an FD for
it, and calls "run_capture()".

Use "run_capture()", rather than "capture()", for "-k" captures, so that
it'll do the capture in a child process if "-S" or "-F" was specified
("do_capture()" won't do because "-k" captures should write to the file
specified by the "-w" flag, not some random temporary file).

For child process captures, however, just use "capture()" - the child
process shouldn't itself fork off a child if we're in sync or fork mode,
and should just write to the file whose file descriptor was specified by
the "-W" flag on the command line.

All this allows you to do "ethereal -S -w <file> -i <interface> -k" to
start a sync mode capture from the command line.

svn path=/trunk/; revision=740
1999-09-30 06:50:01 +00:00
Guy Harris 062cb007f1 If we're given the "-k" flag, don't start the capture until after we've:
popped up the top-level window (so that it looks like a capture
	started from "Capture/Start");

	initialized the colors (so that we don't dump core when reading
	in the capture file);

	popped up any message box for failure to read the preferences
	file.

This means we start the capture in "main()", rather than in the realize
callback for the main window, so get rid of that callback.

If we're a child process that's just capturing to a file for our parent
to read, however, we shouldn't pop up the top-level window, because
that's our parent's job; when running that child, set its "argv[0]" to a
special name, so that

	1) it shows up in a "ps" with a special name;

	2) we don't have to invent Yet Another Flag to say "you're the
	   child".

(We may want to use the name to turn on *all* behaviors that the capture
child, and only the capture child, should exhibit.)

If "-w" and "-k" were both specified, attempt to open the file specified
by "-w" and, if that succeeds, set "cf.save_file_fd" to refer to it, so
that "-w" plus "-k" works again, rather than popping up a "The file to
which the capture would be saved ... could not be opened: Bad file
descriptor." message box.

svn path=/trunk/; revision=739
1999-09-30 06:11:51 +00:00
Guy Harris 7caca1db1d GTK 1.2.5 version (not that it matters, given that GLib declares
"gboolean" to be a typedef of "gint").

svn path=/trunk/; revision=738
1999-09-30 02:57:26 +00:00
Guy Harris 080ddfb691 Enable "Print hex" only if "Print detail" is on.
svn path=/trunk/; revision=737
1999-09-29 22:25:41 +00:00
Guy Harris e4f7809763 Add an item to the "File/Print" dialog box to ask that the full hex data
of the packet be printed (this is only done if "Print detail" is
selected; it should be grayed out of "Print summary" is selected).

If that item is selected, suppress the hex printing of uninterpreted
data items in the protocol tree.

Move some GTK+ keys not used outside of "gtk/print_dlg.c" from
"gtk/keys.h" into "gtk/print_dlg.c".

svn path=/trunk/; revision=736
1999-09-29 22:19:24 +00:00
Laurent Deniel a673e8bb2c Added name resolution in GUI part:
- Capture->Start->"Active name resolution"

Allows the user to turn on/off name resolution
during a live capture.

- Display->Options->"Name resolution"

Turn on/off name resolution for the displayed
data (or during the -S mode).
E.g. clicking on a packet captured with
resolution disabled will resolve names in
the detailed list if this option is set.
And applying or resetting a display filter
allows the update of the packet list as well.

svn path=/trunk/; revision=726
1999-09-26 14:40:01 +00:00
Gilbert Ramirez 4740872e1f Packaging changes
svn path=/trunk/; revision=715
1999-09-24 03:43:09 +00:00
Guy Harris f0e861465c Close the capture file in "do_capture()", right before unlinking the
current capture file if it's a temporary file, out of paranoia (so that
we don't get into a state where we have a capture file open but unlinked
- it's probably harmless to be in that state, as the file will remain
around until close, modulo NFS fun, and we may never be in that state
for very long, but I'd rather have it obviously stated in the code).

Remove the close in "capture()", and put one before the other call to
"capture()", in "main_realize_cb()" (is that call necessary, e.g. if you
pass "-r <filename>" *and* "-k", for some perverse reason, as
command-line arguments?).

If "cf.save_file" is non-null, free it before setting it, regardless of
whether it refers to a temporary file name or not.

svn path=/trunk/; revision=712
1999-09-23 07:57:23 +00:00
Guy Harris b2b8994f15 If we forcibly turn off "fork_mode" if the user doesn't enable "Update
list of packets in real time" in the "Capture/Start" dialog box,
"ethereal -F" won't work - you get your choice of non-forked capture or
"-S".

Don't have "fork_mode" track "sync_mode"; instead, in those places where
we check for "fork_mode", check for "sync_mode" as well.

svn path=/trunk/; revision=711
1999-09-23 07:20:20 +00:00
Guy Harris 12d3278d0b Move the toolkit-independent code to create a temporary capture file,
and to fork off and run a separate copy of "ethereal" for "-S" and "-F"
captures or just call "capture()" otherwise, out of "gtk/capture_dlg.c"
and into a routine in "capture.c".

If the attempt to create said temporary capture file fails, pop up a
dialog box and don't do the capture.

Have the child capture process send a message upstream after it either
successfully starts the capture and syncs out the header of the capture
file, or fails to start the capture; the message indicates whether it
succeeded or failed, and, if it failed, includes a failure message.
This:

	avoids the use of a signal, and thus means we don't have to
	worry about whether to capture the signal, or whether to start
	or stop capturing depending on whether this particular capture
	is in sync mode or not;

	lets us pop up the message box for the error in the parent
	process if we're in sync mode, rather than doing it in the
	child, which didn't work well.


Add a check button to the Capture/Start dialog box, so that we can
control, for each capture, whether it's to be done in sync mode or not.

svn path=/trunk/; revision=708
1999-09-23 06:27:27 +00:00
Ashok Narayanan 3dfa56c498 This commit contains support for reading capture files compressed using
gzip. The zLib library is used for this purpose. If zLib is not available
(or it's use is disabled by the --disable-zlib option to configure), you
can still compile Ethereal but it will be unable to read compressed capture
files.

IMPORTANT:

Now all file accesses to capture files should be done through special macros.
Specifically, for any use of the following functions on capture files, replace them.
The arguments for the right-side functions are exactly the same as for the
original stdio functions.

	fopen			file_open
	fdopen			filed_open
	fread			file_read
	fwrite			file_write
	fseek			file_seek
	fclose			file_close
	ferror			file_error

svn path=/trunk/; revision=695
1999-09-22 01:26:50 +00:00
Gerald Combs 2cbdb02208 Fixed a bug found by Derek W Poon <dpoon@uclink.berkeley.edu>, where deleted
filter list items were improperly removed from the filter list.

svn path=/trunk/; revision=690
1999-09-19 14:27:44 +00:00
Guy Harris f4ac555e90 Peter Torvals' Internet Cache Protocol dissector.
svn path=/trunk/; revision=677
1999-09-14 08:06:47 +00:00
Guy Harris f5e3d82e50 Make "Expand all levels" and "Print as displayed" radio
buttons insensitive if "Print summary" is selected, and make them
sensitive if "Print detail" is selected, as they apply only to the
"print detail" output.

svn path=/trunk/; revision=672
1999-09-12 23:54:09 +00:00
Guy Harris 3823ab23be Add a "Expand all levels"/"Print as displayed" pair of radio buttons to
the "File/Print" dialog box; "Expand all levels" means that all levels
of the protocol tree should be printed, while "Print as displayed" means
that only those levels shown in the display should be printed.

Free the table of column widths once printing is done.

svn path=/trunk/; revision=671
1999-09-12 20:23:43 +00:00
Guy Harris 55dff94484 Add summary-vs-detail radio buttons to the print dialog box; detail
prints the protocol tree, and summary prints the fields in the summary
clist, with a header line at the beginning of the printout.

Print only packets selected by the current packet filter.

Just have "ARP" and "RARP" in the "Protocol" field for ARP packets;
whether it's a request or a reply can be seen in the "Info" field.

Add to the "Frame" section of the protocol tree the time between the
current packet and the previous displayed packet, and the packet number.
Have FT_RELATIVE_TIME fields be a "struct timeval", and display them as
seconds and fractional seconds (we didn't have any fields of that type,
and that type of time fits the delta time above).

Add an FT_DOUBLE field type (although we don't yet have anything using
it).

svn path=/trunk/; revision=666
1999-09-12 06:11:51 +00:00
Laurent Deniel e466de51ad Collapse/Expand All protocol tree added in Display menu.
svn path=/trunk/; revision=660
1999-09-11 12:38:18 +00:00
Guy Harris 4c6f416754 "capture.c" doesn't do socket "ioctl"s any more - the code to do that is
now in "gtk/capture_dlg.c" - so it doesn't need to include
<sys/sockio.h> on, for example, Solaris...

...but "gtk/capture_dlg.c" does need to include it.

"gtk/capture_dlg.c" also may need to include "snprintf.h", as it uses
"snprintf()".

svn path=/trunk/; revision=655
1999-09-11 06:23:28 +00:00
Guy Harris dc298db578 Give "globals.h" an RCS ID and copyright/GPL notice.
Move some defines that would be used even by a non-GTK+-based Ethereal
from "gtk/main.h" to "globals.h".

Remove the byte-order #defines from "packet.h", as they're now in
"globals.h" (having been moved there from "gtk/main.h").

Fix up some files that use those #defines to include "globals.h".

"resolv.c" doesn't use any GTK stuff, so it needn't include <gtk/gtk.h>
nor "gtk/main.h" - it only did so to get the byte-order #defines for the
benefit of "packet-ipv6.h", and "packet-ipv6.h" now includes them
itself.

svn path=/trunk/; revision=649
1999-09-10 07:19:51 +00:00
Guy Harris 046c060f98 We need to catch a "window delete" event for the preferences dialog box
- that event happens if, say, you nuke the dialog box from a window
manager - and call "delete" routines for each of the preferences tabs,
so that, for preferences tabs that include list widgets, we can set a
flag on the preferences tab widget telling the selection callback for
the list widget that the buttons it would normally set the sensitivity
of, based on whether any row in the list is selected or not, have Joined
the Choir Invisible, and therefore that we shouldn't change their
sensitivity because GTK+ will whine at us if we do, just as is the case
if we press the "OK" or "Cancel" button (which also cause the window to
go away).

Can we just do this in the "window delete" handler?  I.e., does that get
called if we explicitly destroy the widget?  Or should we catch a
"destroy" event instead?

(There must be a better way to do this....)

svn path=/trunk/; revision=647
1999-09-10 06:53:32 +00:00
Guy Harris 7e1ce9e122 Make stuff used only in "filter_prefs.c" static to it.
svn path=/trunk/; revision=646
1999-09-10 06:01:02 +00:00
Guy Harris d32b5f829f Put RCS IDs (and a copyright notice and GPL notice) in several files,
and fix up the introductory comment on some other files.

svn path=/trunk/; revision=640
1999-09-09 04:25:49 +00:00
Guy Harris 338f3ff2ad Put in an RCS ID (and a copyright notice and GPL notice; unfortunately,
this causes "Makefile.in" to have two GPL notices - "Makefile.in" and
the "Makefile" generated from it are generated files, so maybe that's
OK).

svn path=/trunk/; revision=639
1999-09-09 03:55:49 +00:00
Gilbert Ramirez fee5f126ff I forgot to include this file move in my last commit.
svn path=/trunk/; revision=637
1999-09-09 03:35:32 +00:00
Gilbert Ramirez 8617c58f3c More shuffling of GTK-related routines to gtk subdirectory.
svn path=/trunk/; revision=636
1999-09-09 03:32:03 +00:00
Gilbert Ramirez 3c49e45cf7 More shuffling of GTK-related files to gtk subdirectory.
svn path=/trunk/; revision=635
1999-09-09 02:42:40 +00:00
Gilbert Ramirez 65c3e8d9bf Moved GTK-dependent routines for file dialogues, print dialogues, print
preferences, and menus to gtk subdirectory.

svn path=/trunk/; revision=623
1999-09-01 03:04:24 +00:00
Gilbert Ramirez bf20c06bea Changed gtk subdirectory to use only Makefile.am, and not have a configure
script. The configuration is faster this way. Also, moved version to 0.7.3.

svn path=/trunk/; revision=614
1999-08-31 05:52:08 +00:00
Guy Harris 55d77f70d8 A slightly cleaner version - hide the "if it's the last row, the element
is pointed to by 'row_list_end', otherwise use 'g_list_nth()'" stuff
inside a macro.

Use that macro in place of an additional "g_list_nth()" call.

svn path=/trunk/; revision=603
1999-08-28 18:48:55 +00:00
Gilbert Ramirez f7951bd593 Touched these files to make 'make dist' happy.
svn path=/trunk/; revision=595
1999-08-27 23:39:32 +00:00
Gilbert Ramirez e62dfe591b Added gtk subdirectory, with patched gtkclist.c in it. We can use this
optimized gtkclist until Guy's changes appear in the offical GTK+.

svn path=/trunk/; revision=593
1999-08-27 22:27:18 +00:00