1998-09-16 02:39:15 +00:00
|
|
|
/* print.c
|
|
|
|
* Routines for printing packet analysis trees.
|
|
|
|
*
|
2001-06-18 01:49:17 +00:00
|
|
|
* $Id: print.c,v 1.36 2001/06/18 01:49:17 guy Exp $
|
1998-09-16 03:22:19 +00:00
|
|
|
*
|
2000-01-22 06:22:44 +00:00
|
|
|
* Gilbert Ramirez <gram@xiexie.org>
|
1998-09-16 02:39:15 +00:00
|
|
|
*
|
|
|
|
* Ethereal - Network traffic analyzer
|
2001-06-08 08:50:51 +00:00
|
|
|
* By Gerald Combs <gerald@ethereal.com>
|
1998-09-16 02:39:15 +00:00
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
|
|
# include <sys/types.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "packet.h"
|
|
|
|
#include "print.h"
|
1998-09-27 22:12:47 +00:00
|
|
|
#include "ps.h"
|
1999-11-22 08:03:31 +00:00
|
|
|
#include "util.h"
|
2001-06-08 08:50:51 +00:00
|
|
|
#include "tvbuff.h"
|
1998-09-16 02:39:15 +00:00
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
static void proto_tree_print_node_text(GNode *node, gpointer data);
|
|
|
|
static void proto_tree_print_node_ps(GNode *node, gpointer data);
|
1998-09-16 02:39:15 +00:00
|
|
|
static void ps_clean_string(unsigned char *out, const unsigned char *in,
|
|
|
|
int outbuf_size);
|
2000-01-06 07:33:35 +00:00
|
|
|
static void print_hex_data_text(FILE *fh, register const u_char *cp,
|
|
|
|
register u_int length, char_enc encoding);
|
1999-11-22 06:24:56 +00:00
|
|
|
static void print_hex_data_ps(FILE *fh, register const u_char *cp,
|
|
|
|
register u_int length, char_enc encoding);
|
1998-09-16 02:39:15 +00:00
|
|
|
|
1999-07-15 15:33:52 +00:00
|
|
|
extern int proto_data; /* in packet-data.c */
|
1998-09-16 02:39:15 +00:00
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int level;
|
|
|
|
FILE *fh;
|
2001-06-08 08:50:51 +00:00
|
|
|
GSList *src_list;
|
1999-09-12 20:23:43 +00:00
|
|
|
gboolean print_all_levels;
|
1999-09-29 22:19:24 +00:00
|
|
|
gboolean print_hex_for_data;
|
1999-11-22 06:24:56 +00:00
|
|
|
char_enc encoding;
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
} print_data;
|
|
|
|
|
1999-07-23 08:29:24 +00:00
|
|
|
FILE *open_print_dest(int to_file, const char *dest)
|
1998-09-16 02:39:15 +00:00
|
|
|
{
|
|
|
|
FILE *fh;
|
|
|
|
|
|
|
|
/* Open the file or command for output */
|
1999-07-23 08:29:24 +00:00
|
|
|
if (to_file)
|
|
|
|
fh = fopen(dest, "w");
|
|
|
|
else
|
1999-07-23 08:30:57 +00:00
|
|
|
fh = popen(dest, "w");
|
1998-09-16 02:39:15 +00:00
|
|
|
|
1999-07-23 08:29:24 +00:00
|
|
|
return fh;
|
|
|
|
}
|
|
|
|
|
|
|
|
void close_print_dest(int to_file, FILE *fh)
|
|
|
|
{
|
|
|
|
/* Close the file or command */
|
|
|
|
if (to_file)
|
|
|
|
fclose(fh);
|
|
|
|
else
|
|
|
|
pclose(fh);
|
|
|
|
}
|
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
void print_preamble(FILE *fh, gint format)
|
1999-07-23 21:09:25 +00:00
|
|
|
{
|
2000-01-06 07:33:35 +00:00
|
|
|
if (format == PR_FMT_PS)
|
1999-07-23 21:09:25 +00:00
|
|
|
print_ps_preamble(fh);
|
|
|
|
}
|
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
void print_finale(FILE *fh, gint format)
|
1999-07-23 21:09:25 +00:00
|
|
|
{
|
2000-01-06 07:33:35 +00:00
|
|
|
if (format == PR_FMT_PS)
|
1999-07-23 21:09:25 +00:00
|
|
|
print_ps_finale(fh);
|
|
|
|
}
|
|
|
|
|
1999-09-29 22:19:24 +00:00
|
|
|
void proto_tree_print(gboolean print_one_packet, print_args_t *print_args,
|
2001-06-08 08:50:51 +00:00
|
|
|
GNode *protocol_tree, frame_data *fd, FILE *fh)
|
1999-07-23 08:29:24 +00:00
|
|
|
{
|
|
|
|
print_data data;
|
1998-09-16 02:39:15 +00:00
|
|
|
|
|
|
|
/* Create the output */
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
data.level = 0;
|
|
|
|
data.fh = fh;
|
2001-06-08 08:50:51 +00:00
|
|
|
data.src_list = fd->data_src;
|
2000-04-13 20:39:38 +00:00
|
|
|
data.encoding = fd->flags.encoding;
|
1999-09-29 22:19:24 +00:00
|
|
|
data.print_all_levels = print_args->expand_all;
|
|
|
|
data.print_hex_for_data = !print_args->print_hex;
|
|
|
|
/* If we're printing the entire packet in hex, don't
|
|
|
|
print uninterpreted data fields in hex as well. */
|
1999-07-23 21:09:25 +00:00
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
if (print_args->format == PR_FMT_TEXT) {
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
g_node_children_foreach((GNode*) protocol_tree, G_TRAVERSE_ALL,
|
|
|
|
proto_tree_print_node_text, &data);
|
|
|
|
} else {
|
|
|
|
g_node_children_foreach((GNode*) protocol_tree, G_TRAVERSE_ALL,
|
|
|
|
proto_tree_print_node_ps, &data);
|
1998-09-16 02:39:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-06-08 08:50:51 +00:00
|
|
|
/*
|
|
|
|
* Find the data source tvbuff with a specified name, and return a
|
|
|
|
* pointer to the data in it.
|
|
|
|
*/
|
|
|
|
static const guint8 *
|
2001-06-08 10:07:55 +00:00
|
|
|
get_field_data(GSList *src_list, field_info *fi)
|
2001-06-08 08:50:51 +00:00
|
|
|
{
|
|
|
|
GSList *src;
|
|
|
|
tvbuff_t *src_tvb;
|
|
|
|
|
|
|
|
for (src = src_list; src != NULL; src = g_slist_next(src)) {
|
|
|
|
src_tvb = src->data;
|
2001-06-08 10:07:55 +00:00
|
|
|
if (strcmp(fi->ds_name, tvb_get_name(src_tvb)) == 0) {
|
2001-06-08 08:50:51 +00:00
|
|
|
/*
|
|
|
|
* Found it.
|
|
|
|
*/
|
2001-06-08 10:07:55 +00:00
|
|
|
return tvb_get_ptr(src_tvb, fi->start, fi->length);
|
2001-06-08 08:50:51 +00:00
|
|
|
}
|
|
|
|
}
|
2001-06-08 10:07:55 +00:00
|
|
|
g_assert_not_reached();
|
2001-06-08 08:50:51 +00:00
|
|
|
return NULL; /* not found */
|
|
|
|
}
|
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* Print a tree's data, and any child nodes, in plain text */
|
|
|
|
static
|
|
|
|
void proto_tree_print_node_text(GNode *node, gpointer data)
|
1998-09-16 02:39:15 +00:00
|
|
|
{
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
field_info *fi = (field_info*) (node->data);
|
|
|
|
print_data *pdata = (print_data*) data;
|
|
|
|
int i;
|
1999-09-12 20:23:43 +00:00
|
|
|
int num_spaces;
|
1998-09-16 02:39:15 +00:00
|
|
|
char space[41];
|
2001-06-08 08:50:51 +00:00
|
|
|
const guint8 *pd;
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
gchar label_str[ITEM_LABEL_LENGTH];
|
|
|
|
gchar *label_ptr;
|
|
|
|
|
1999-09-12 20:23:43 +00:00
|
|
|
/* Don't print invisible entries. */
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
if (!fi->visible)
|
|
|
|
return;
|
1998-09-16 02:39:15 +00:00
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* was a free format label produced? */
|
|
|
|
if (fi->representation) {
|
|
|
|
label_ptr = fi->representation;
|
|
|
|
}
|
|
|
|
else { /* no, make a generic label */
|
|
|
|
label_ptr = label_str;
|
|
|
|
proto_item_fill_label(fi, label_str);
|
|
|
|
}
|
|
|
|
|
1998-09-16 02:39:15 +00:00
|
|
|
/* Prepare the tabs for printing, depending on tree level */
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
num_spaces = pdata->level * 4;
|
1998-09-16 02:39:15 +00:00
|
|
|
if (num_spaces > 40) {
|
|
|
|
num_spaces = 40;
|
|
|
|
}
|
|
|
|
for (i = 0; i < num_spaces; i++) {
|
|
|
|
space[i] = ' ';
|
|
|
|
}
|
|
|
|
/* The string is NUL-terminated */
|
|
|
|
space[num_spaces] = 0;
|
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* Print the text */
|
|
|
|
fprintf(pdata->fh, "%s%s\n", space, label_ptr);
|
1998-09-16 02:39:15 +00:00
|
|
|
|
1999-09-29 22:19:24 +00:00
|
|
|
/* If it's uninterpreted data, dump it (unless our caller will
|
|
|
|
be printing the entire packet in hex). */
|
2001-06-08 08:50:51 +00:00
|
|
|
if (fi->hfinfo->id == proto_data && pdata->print_hex_for_data) {
|
|
|
|
/*
|
2001-06-08 10:07:55 +00:00
|
|
|
* Find the data for this field.
|
2001-06-08 08:50:51 +00:00
|
|
|
*/
|
2001-06-08 10:07:55 +00:00
|
|
|
pd = get_field_data(pdata->src_list, fi);
|
|
|
|
print_hex_data_text(pdata->fh, pd, fi->length, pdata->encoding);
|
2001-06-08 08:50:51 +00:00
|
|
|
}
|
1998-09-16 02:39:15 +00:00
|
|
|
|
1999-09-12 20:23:43 +00:00
|
|
|
/* If we're printing all levels, or if this level is expanded,
|
|
|
|
recurse into the subtree, if it exists. */
|
|
|
|
if (pdata->print_all_levels || tree_is_expanded[fi->tree_type]) {
|
|
|
|
if (g_node_n_children(node) > 0) {
|
|
|
|
pdata->level++;
|
|
|
|
g_node_children_foreach(node, G_TRAVERSE_ALL,
|
|
|
|
proto_tree_print_node_text, pdata);
|
|
|
|
pdata->level--;
|
|
|
|
}
|
1998-09-16 02:39:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-03-23 18:44:20 +00:00
|
|
|
void print_hex_data(FILE *fh, gint format, frame_data *fd)
|
2000-01-06 07:33:35 +00:00
|
|
|
{
|
2001-03-23 18:44:20 +00:00
|
|
|
gboolean multiple_sources;
|
|
|
|
GSList *src;
|
|
|
|
tvbuff_t *tvb;
|
|
|
|
char *name;
|
|
|
|
char *line;
|
|
|
|
const u_char *cp;
|
|
|
|
guint length;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set "multiple_sources" iff this frame has more than one
|
|
|
|
* data source; if it does, we need to print the name of
|
|
|
|
* the data source before printing the data from the
|
|
|
|
* data source.
|
|
|
|
*/
|
|
|
|
multiple_sources = (fd->data_src->next != NULL);
|
|
|
|
|
|
|
|
for (src = fd->data_src; src != NULL; src = src->next) {
|
|
|
|
tvb = src->data;
|
|
|
|
if (multiple_sources) {
|
|
|
|
name = tvb_get_name(tvb);
|
2001-03-24 09:39:47 +00:00
|
|
|
print_line(fh, format, "\n");
|
2001-03-23 18:44:20 +00:00
|
|
|
line = g_malloc(strlen(name) + 3); /* <name>:\n\0 */
|
|
|
|
strcpy(line, name);
|
2001-03-24 23:49:14 +00:00
|
|
|
strcat(line, ":\n");
|
2001-03-23 18:44:20 +00:00
|
|
|
print_line(fh, format, line);
|
|
|
|
g_free(line);
|
|
|
|
}
|
|
|
|
length = tvb_length(tvb);
|
|
|
|
cp = tvb_get_ptr(tvb, 0, length);
|
|
|
|
if (format == PR_FMT_PS)
|
|
|
|
print_hex_data_ps(fh, cp, length, fd->flags.encoding);
|
|
|
|
else
|
|
|
|
print_hex_data_text(fh, cp, length, fd->flags.encoding);
|
|
|
|
}
|
2000-01-06 07:33:35 +00:00
|
|
|
}
|
|
|
|
|
1998-09-16 02:39:15 +00:00
|
|
|
/* This routine was created by Dan Lasley <DLASLEY@PROMUS.com>, and
|
|
|
|
only slightly modified for ethereal by Gilbert Ramirez. */
|
2000-01-06 07:33:35 +00:00
|
|
|
static
|
|
|
|
void print_hex_data_text(FILE *fh, register const u_char *cp,
|
|
|
|
register u_int length, char_enc encoding)
|
1998-09-16 02:39:15 +00:00
|
|
|
{
|
2001-06-18 01:49:17 +00:00
|
|
|
register unsigned int ad, i, j, k;
|
1998-09-16 02:39:15 +00:00
|
|
|
u_char c;
|
2001-05-16 21:32:05 +00:00
|
|
|
u_char line[80];
|
2000-01-07 00:36:25 +00:00
|
|
|
static u_char binhex[16] = {
|
|
|
|
'0', '1', '2', '3', '4', '5', '6', '7',
|
|
|
|
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
1998-09-16 02:39:15 +00:00
|
|
|
|
|
|
|
memset (line, ' ', sizeof line);
|
|
|
|
line[sizeof (line)-1] = 0;
|
|
|
|
for (ad=i=j=k=0; i<length; i++) {
|
|
|
|
c = *cp++;
|
|
|
|
line[j++] = binhex[c>>4];
|
|
|
|
line[j++] = binhex[c&0xf];
|
2001-05-16 21:32:05 +00:00
|
|
|
j++;
|
1999-11-22 06:24:56 +00:00
|
|
|
if (encoding == CHAR_EBCDIC) {
|
|
|
|
c = EBCDIC_to_ASCII1(c);
|
|
|
|
}
|
2001-05-16 21:32:05 +00:00
|
|
|
line[50+k++] = c >= ' ' && c < 0x7f ? c : '.';
|
1998-09-16 02:39:15 +00:00
|
|
|
if ((i & 15) == 15) {
|
2001-05-16 21:32:05 +00:00
|
|
|
fprintf (fh, "\n%04x %s", ad, line);
|
1998-09-16 02:39:15 +00:00
|
|
|
/*if (i==15) printf (" %d", length);*/
|
|
|
|
memset (line, ' ', sizeof line);
|
|
|
|
line[sizeof (line)-1] = j = k = 0;
|
|
|
|
ad += 16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-05-16 21:32:05 +00:00
|
|
|
if (line[0] != ' ') fprintf (fh, "\n%04x %s", ad, line);
|
1998-09-16 02:39:15 +00:00
|
|
|
fprintf(fh, "\n");
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#define MAX_LINE_LENGTH 256
|
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* Print a node's data, and any child nodes, in PostScript */
|
1998-09-16 02:39:15 +00:00
|
|
|
static
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
void proto_tree_print_node_ps(GNode *node, gpointer data)
|
1998-09-16 02:39:15 +00:00
|
|
|
{
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
field_info *fi = (field_info*) (node->data);
|
|
|
|
print_data *pdata = (print_data*) data;
|
|
|
|
gchar label_str[ITEM_LABEL_LENGTH];
|
|
|
|
gchar *label_ptr;
|
2001-06-08 08:50:51 +00:00
|
|
|
const guint8 *pd;
|
1998-09-16 02:39:15 +00:00
|
|
|
char psbuffer[MAX_LINE_LENGTH]; /* static sized buffer! */
|
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
if (!fi->visible)
|
|
|
|
return;
|
1998-09-16 02:39:15 +00:00
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* was a free format label produced? */
|
|
|
|
if (fi->representation) {
|
|
|
|
label_ptr = fi->representation;
|
|
|
|
}
|
|
|
|
else { /* no, make a generic label */
|
|
|
|
label_ptr = label_str;
|
|
|
|
proto_item_fill_label(fi, label_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Print the text */
|
|
|
|
ps_clean_string(psbuffer, label_ptr, MAX_LINE_LENGTH);
|
|
|
|
fprintf(pdata->fh, "%d (%s) putline\n", pdata->level, psbuffer);
|
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
/* If it's uninterpreted data, dump it (unless our caller will
|
|
|
|
be printing the entire packet in hex). */
|
|
|
|
if (fi->hfinfo->id == proto_data && pdata->print_hex_for_data) {
|
2001-06-08 08:50:51 +00:00
|
|
|
/*
|
2001-06-08 10:07:55 +00:00
|
|
|
* Find the data for this field.
|
2001-06-08 08:50:51 +00:00
|
|
|
*/
|
2001-06-08 10:07:55 +00:00
|
|
|
pd = get_field_data(pdata->src_list, fi);
|
|
|
|
print_hex_data_ps(pdata->fh, pd, fi->length, pdata->encoding);
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
}
|
1998-09-16 02:39:15 +00:00
|
|
|
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
/* Recurse into the subtree, if it exists */
|
|
|
|
if (g_node_n_children(node) > 0) {
|
|
|
|
pdata->level++;
|
|
|
|
g_node_children_foreach(node, G_TRAVERSE_ALL,
|
|
|
|
proto_tree_print_node_ps, pdata);
|
|
|
|
pdata->level--;
|
1998-09-16 02:39:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static
|
|
|
|
void ps_clean_string(unsigned char *out, const unsigned char *in,
|
|
|
|
int outbuf_size)
|
|
|
|
{
|
|
|
|
int rd, wr;
|
|
|
|
char c;
|
|
|
|
|
|
|
|
for (rd = 0, wr = 0 ; wr < outbuf_size; rd++, wr++ ) {
|
|
|
|
c = in[rd];
|
|
|
|
switch (c) {
|
|
|
|
case '(':
|
|
|
|
case ')':
|
|
|
|
case '\\':
|
|
|
|
out[wr] = '\\';
|
|
|
|
out[++wr] = c;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
out[wr] = c;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (c == 0) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
|
|
|
|
static
|
2000-01-06 07:33:35 +00:00
|
|
|
void print_hex_data_ps(FILE *fh, register const u_char *cp,
|
|
|
|
register u_int length, char_enc encoding)
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
{
|
2001-06-18 01:49:17 +00:00
|
|
|
register unsigned int ad, i, j, k;
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
u_char c;
|
|
|
|
u_char line[60];
|
2000-01-07 00:36:25 +00:00
|
|
|
static u_char binhex[16] = {
|
|
|
|
'0', '1', '2', '3', '4', '5', '6', '7',
|
|
|
|
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
|
|
|
u_char psline[MAX_LINE_LENGTH];
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
print_ps_hex(fh);
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
memset (line, ' ', sizeof line);
|
|
|
|
line[sizeof (line)-1] = 0;
|
|
|
|
for (ad=i=j=k=0; i<length; i++) {
|
|
|
|
c = *cp++;
|
|
|
|
line[j++] = binhex[c>>4];
|
|
|
|
line[j++] = binhex[c&0xf];
|
|
|
|
if (i&1) j++;
|
1999-11-22 06:24:56 +00:00
|
|
|
if (encoding == CHAR_EBCDIC) {
|
|
|
|
c = EBCDIC_to_ASCII1(c);
|
|
|
|
}
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
line[42+k++] = c >= ' ' && c < 0x7f ? c : '.';
|
|
|
|
if ((i & 15) == 15) {
|
1999-11-22 06:24:56 +00:00
|
|
|
ps_clean_string(psline, line, MAX_LINE_LENGTH);
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
fprintf (fh, "(%4x %s) hexdump\n", ad, psline);
|
|
|
|
memset (line, ' ', sizeof line);
|
|
|
|
line[sizeof (line)-1] = j = k = 0;
|
|
|
|
ad += 16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (line[0] != ' ') {
|
2000-01-07 00:36:25 +00:00
|
|
|
ps_clean_string(psline, line, MAX_LINE_LENGTH);
|
|
|
|
fprintf (fh, "(%4x %s) hexdump\n", ad, psline);
|
|
|
|
}
|
When printing a packet, do it from the protocol tree, not from the GTK+
tree constructed from the protocol tree:
1) The value of "level" field of GTK+ tree items appears to
depend on various random things - see a change I made to
"packet-dns.c" a while ago, to change the order in which
items were put in the tree, so that DNS trees printed with
correct indentation - and, right now, we appear to be doing
*something* wrong, as some packets I printed from one file
here had randomly bogus indentation; I could probably track
the problem down and fix it, but that might just hold us
until we accidentally do something *else* wrong by GTK+'s
lights.
The new code provides its own tree level as it goes.
2) The new code is independent of GTK+, so it could be used with
other toolkits, or with non-GUI variants of Ethereal.
3) This may make it easier to add a "Print..." menu item to let
the user print packets other than the currently selected
packet.
Make the internal routines used to print the packet static.
For the "Print Packet" menu item, put up a message box if they haven't
yet selected a packet.
svn path=/trunk/; revision=362
1999-07-13 04:38:15 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
1999-10-30 06:42:10 +00:00
|
|
|
|
2000-01-06 07:33:35 +00:00
|
|
|
void print_line(FILE *fh, gint format, char *line)
|
|
|
|
{
|
|
|
|
char psbuffer[MAX_LINE_LENGTH]; /* static sized buffer! */
|
|
|
|
|
|
|
|
if (format == PR_FMT_PS) {
|
|
|
|
ps_clean_string(psbuffer, line, MAX_LINE_LENGTH);
|
|
|
|
fprintf(fh, "(%s) hexdump\n", psbuffer);
|
|
|
|
} else
|
|
|
|
fputs(line, fh);
|
|
|
|
}
|