Printing multiple pages of PostScript wasn't as tricky as I thought; add
support for printing in PostScript to the "Print..." dialog box. svn path=/trunk/; revision=1426
This commit is contained in:
parent
4d638e5045
commit
c4a7eb6457
49
file.c
49
file.c
|
@ -1,7 +1,7 @@
|
|||
/* file.c
|
||||
* File I/O routines
|
||||
*
|
||||
* $Id: file.c,v 1.148 2000/01/05 07:22:47 guy Exp $
|
||||
* $Id: file.c,v 1.149 2000/01/06 07:33:20 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -844,6 +844,8 @@ colorize_packets(capture_file *cf)
|
|||
gtk_clist_thaw(GTK_CLIST(packet_list));
|
||||
}
|
||||
|
||||
#define MAX_LINE_LENGTH 256
|
||||
|
||||
int
|
||||
print_packets(capture_file *cf, print_args_t *print_args)
|
||||
{
|
||||
|
@ -856,19 +858,15 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
gint *col_widths = NULL;
|
||||
gint data_width;
|
||||
gboolean print_separator;
|
||||
char line_buf[MAX_LINE_LENGTH+1]; /* static-sized buffer! */
|
||||
char *cp;
|
||||
int sprintf_len;
|
||||
|
||||
cf->print_fh = open_print_dest(print_args->to_file, print_args->dest);
|
||||
if (cf->print_fh == NULL)
|
||||
return FALSE; /* attempt to open destination failed */
|
||||
|
||||
/* XXX - printing multiple frames in PostScript looks as if it's
|
||||
tricky - you have to deal with page boundaries, I think -
|
||||
and I'll have to spend some time learning enough about
|
||||
PostScript to figure it out, so, for now, we only print
|
||||
multiple frames as text. */
|
||||
#if 0
|
||||
print_preamble(cf->print_fh);
|
||||
#endif
|
||||
print_preamble(cf->print_fh, print_args->format);
|
||||
|
||||
if (print_args->print_summary) {
|
||||
/* We're printing packet summaries.
|
||||
|
@ -877,6 +875,7 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
width of the title and the width of the data - and print
|
||||
the column titles. */
|
||||
col_widths = (gint *) g_malloc(sizeof(gint) * cf->cinfo.num_cols);
|
||||
cp = &line_buf[0];
|
||||
for (i = 0; i < cf->cinfo.num_cols; i++) {
|
||||
/* Don't pad the last column. */
|
||||
if (i == cf->cinfo.num_cols - 1)
|
||||
|
@ -890,14 +889,17 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
|
||||
/* Right-justify the packet number column. */
|
||||
if (cf->cinfo.col_fmt[i] == COL_NUMBER)
|
||||
fprintf(cf->print_fh, "%*s", col_widths[i], cf->cinfo.col_title[i]);
|
||||
sprintf_len = sprintf(cp, "%*s", col_widths[i], cf->cinfo.col_title[i]);
|
||||
else
|
||||
fprintf(cf->print_fh, "%-*s", col_widths[i], cf->cinfo.col_title[i]);
|
||||
sprintf_len = sprintf(cp, "%-*s", col_widths[i], cf->cinfo.col_title[i]);
|
||||
cp += sprintf_len;
|
||||
if (i == cf->cinfo.num_cols - 1)
|
||||
fputc('\n', cf->print_fh);
|
||||
*cp++ = '\n';
|
||||
else
|
||||
fputc(' ', cf->print_fh);
|
||||
*cp++ = ' ';
|
||||
}
|
||||
*cp = '\0';
|
||||
print_line(cf->print_fh, print_args->format, line_buf);
|
||||
}
|
||||
|
||||
print_separator = FALSE;
|
||||
|
@ -944,20 +946,24 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
}
|
||||
dissect_packet(cf->pd, fd, NULL);
|
||||
fill_in_columns(fd);
|
||||
cp = &line_buf[0];
|
||||
for (i = 0; i < cf->cinfo.num_cols; i++) {
|
||||
/* Right-justify the packet number column. */
|
||||
if (cf->cinfo.col_fmt[i] == COL_NUMBER)
|
||||
fprintf(cf->print_fh, "%*s", col_widths[i], cf->cinfo.col_data[i]);
|
||||
sprintf_len = sprintf(cp, "%*s", col_widths[i], cf->cinfo.col_data[i]);
|
||||
else
|
||||
fprintf(cf->print_fh, "%-*s", col_widths[i], cf->cinfo.col_data[i]);
|
||||
sprintf_len = sprintf(cp, "%-*s", col_widths[i], cf->cinfo.col_data[i]);
|
||||
cp += sprintf_len;
|
||||
if (i == cf->cinfo.num_cols - 1)
|
||||
fputc('\n', cf->print_fh);
|
||||
*cp++ = '\n';
|
||||
else
|
||||
fputc(' ', cf->print_fh);
|
||||
*cp++ = ' ';
|
||||
}
|
||||
*cp = '\0';
|
||||
print_line(cf->print_fh, print_args->format, line_buf);
|
||||
} else {
|
||||
if (print_separator)
|
||||
fputc('\n', cf->print_fh);
|
||||
print_line(cf->print_fh, print_args->format, "\n");
|
||||
|
||||
/* Create the logical protocol tree. */
|
||||
protocol_tree = proto_tree_create_root();
|
||||
|
@ -971,7 +977,8 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
|
||||
if (print_args->print_hex) {
|
||||
/* Print the full packet data as hex. */
|
||||
print_hex_data(cf->print_fh, cf->pd, fd->cap_len, fd->encoding);
|
||||
print_hex_data(cf->print_fh, print_args->format, cf->pd,
|
||||
fd->cap_len, fd->encoding);
|
||||
}
|
||||
|
||||
/* Print a blank line if we print anything after this. */
|
||||
|
@ -983,9 +990,7 @@ print_packets(capture_file *cf, print_args_t *print_args)
|
|||
if (col_widths != NULL)
|
||||
g_free(col_widths);
|
||||
|
||||
#if 0
|
||||
print_finale(cf->print_fh);
|
||||
#endif
|
||||
print_finale(cf->print_fh, print_args->format);
|
||||
|
||||
close_print_dest(print_args->to_file, cf->print_fh);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* keys.h
|
||||
* Key definitions for various objects
|
||||
*
|
||||
* $Id: keys.h,v 1.8 1999/12/09 20:41:41 oabad Exp $
|
||||
* $Id: keys.h,v 1.9 2000/01/06 07:33:33 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -37,7 +37,6 @@
|
|||
#define PRINT_CMD_TE_KEY "printer_command_entry"
|
||||
#define PRINT_FILE_BT_KEY "printer_file_button"
|
||||
#define PRINT_FILE_TE_KEY "printer_file_entry"
|
||||
#define PRINT_DEST_RB_KEY "printer_destination_radio_button"
|
||||
|
||||
#define PLUGINS_DFILTER_TE "plugins_dfilter_te"
|
||||
|
||||
|
|
10
gtk/main.c
10
gtk/main.c
|
@ -1,6 +1,6 @@
|
|||
/* main.c
|
||||
*
|
||||
* $Id: main.c,v 1.82 2000/01/05 22:31:46 gerald Exp $
|
||||
* $Id: main.c,v 1.83 2000/01/06 07:33:33 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -394,9 +394,11 @@ static void follow_print_stream(GtkWidget *w, gpointer parent_w)
|
|||
E_FOLLOW_FILENAME_KEY);
|
||||
|
||||
if (filename != NULL) {
|
||||
print_preamble(fh);
|
||||
print_file(fh, filename);
|
||||
print_finale(fh);
|
||||
/* XXX - make this look at the preferences and print in
|
||||
PostScript if that's what the user specified. */
|
||||
print_preamble(fh, PR_FMT_TEXT);
|
||||
print_file(fh, filename, PR_FMT_TEXT);
|
||||
print_finale(fh, PR_FMT_TEXT);
|
||||
close_print_dest(to_file, fh);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* print_dlg.c
|
||||
* Dialog boxes for printing
|
||||
*
|
||||
* $Id: print_dlg.c,v 1.12 2000/01/03 06:59:24 guy Exp $
|
||||
* $Id: print_dlg.c,v 1.13 2000/01/06 07:33:35 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -63,6 +63,15 @@ static void print_close_cb(GtkWidget *close_bt, gpointer parent_w);
|
|||
*/
|
||||
static int print_to_file;
|
||||
|
||||
/*
|
||||
* Remember whether we printed as text or PostScript the last time we
|
||||
* printed something.
|
||||
*/
|
||||
static gint print_format = PR_FMT_TEXT;
|
||||
|
||||
#define PRINT_FORMAT_RB_KEY "printer_format_radio_button"
|
||||
#define PRINT_DEST_RB_KEY "printer_destination_radio_button"
|
||||
|
||||
#define PRINT_SUMMARY_RB_KEY "printer_summary_radio_button"
|
||||
#define PRINT_HEX_CB_KEY "printer_hex_check_button"
|
||||
#define PRINT_EXPAND_ALL_RB_KEY "printer_expand_all_radio_button"
|
||||
|
@ -74,10 +83,9 @@ file_print_cmd_cb(GtkWidget *widget, gpointer data)
|
|||
{
|
||||
GtkWidget *print_w;
|
||||
GtkWidget *main_vb, *main_tb, *button;
|
||||
#if 0
|
||||
GtkWidget *format_rb;
|
||||
GtkWidget *format_hb, *format_lb;
|
||||
GSList *format_grp;
|
||||
#endif
|
||||
GtkWidget *dest_rb;
|
||||
GtkWidget *dest_hb, *dest_lb;
|
||||
GtkWidget *cmd_lb, *cmd_te;
|
||||
|
@ -108,12 +116,6 @@ file_print_cmd_cb(GtkWidget *widget, gpointer data)
|
|||
gtk_table_set_col_spacings(GTK_TABLE(main_tb), 15);
|
||||
gtk_widget_show(main_tb);
|
||||
|
||||
/* XXX - printing multiple frames in PostScript looks as if it's
|
||||
tricky - you have to deal with page boundaries, I think -
|
||||
and I'll have to spend some time learning enough about
|
||||
PostScript to figure it out, so, for now, we only print
|
||||
multiple frames as text. */
|
||||
#if 0
|
||||
/* Output format */
|
||||
format_lb = gtk_label_new("Format:");
|
||||
gtk_misc_set_alignment(GTK_MISC(format_lb), 1.0, 0.5);
|
||||
|
@ -125,18 +127,17 @@ file_print_cmd_cb(GtkWidget *widget, gpointer data)
|
|||
gtk_widget_show(format_hb);
|
||||
|
||||
button = gtk_radio_button_new_with_label(NULL, "Plain Text");
|
||||
if (prefs.pr_format == PR_FMT_TEXT)
|
||||
if (print_format == PR_FMT_TEXT)
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
|
||||
format_grp = gtk_radio_button_group(GTK_RADIO_BUTTON(button));
|
||||
gtk_box_pack_start(GTK_BOX(format_hb), button, FALSE, FALSE, 10);
|
||||
gtk_widget_show(button);
|
||||
|
||||
button = gtk_radio_button_new_with_label(format_grp, "PostScript");
|
||||
if (prefs.pr_format == PR_FMT_PS)
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
|
||||
gtk_box_pack_start(GTK_BOX(format_hb), button, FALSE, FALSE, 10);
|
||||
gtk_widget_show(button);
|
||||
#endif
|
||||
format_rb = gtk_radio_button_new_with_label(format_grp, "PostScript");
|
||||
if (print_format == PR_FMT_PS)
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(format_rb), TRUE);
|
||||
gtk_box_pack_start(GTK_BOX(format_hb), format_rb, FALSE, FALSE, 10);
|
||||
gtk_widget_show(format_rb);
|
||||
|
||||
/* Output destination */
|
||||
dest_lb = gtk_label_new("Print to:");
|
||||
|
@ -265,6 +266,7 @@ file_print_cmd_cb(GtkWidget *widget, gpointer data)
|
|||
gtk_widget_show(bbox);
|
||||
|
||||
ok_bt = gtk_button_new_with_label ("OK");
|
||||
gtk_object_set_data(GTK_OBJECT(ok_bt), PRINT_FORMAT_RB_KEY, format_rb);
|
||||
gtk_object_set_data(GTK_OBJECT(ok_bt), PRINT_DEST_RB_KEY, dest_rb);
|
||||
gtk_object_set_data(GTK_OBJECT(ok_bt), PRINT_CMD_TE_KEY, cmd_te);
|
||||
gtk_object_set_data(GTK_OBJECT(ok_bt), PRINT_FILE_TE_KEY, file_te);
|
||||
|
@ -394,6 +396,14 @@ print_ok_cb(GtkWidget *ok_bt, gpointer parent_w)
|
|||
print_args.dest = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(ok_bt),
|
||||
PRINT_CMD_TE_KEY))));
|
||||
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(ok_bt),
|
||||
PRINT_FORMAT_RB_KEY);
|
||||
if (GTK_TOGGLE_BUTTON (button)->active)
|
||||
print_format = PR_FMT_PS;
|
||||
else
|
||||
print_format = PR_FMT_TEXT;
|
||||
print_args.format = print_format;
|
||||
|
||||
button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(ok_bt),
|
||||
PRINT_SUMMARY_RB_KEY);
|
||||
print_args.print_summary = GTK_TOGGLE_BUTTON (button)->active;
|
||||
|
@ -475,13 +485,14 @@ file_print_packet_cmd_cb(GtkWidget *widget, gpointer data) {
|
|||
return;
|
||||
}
|
||||
|
||||
print_preamble(fh);
|
||||
print_preamble(fh, prefs.pr_format);
|
||||
print_args.format = prefs.pr_format;
|
||||
print_args.print_summary = FALSE;
|
||||
print_args.print_hex = FALSE;
|
||||
print_args.expand_all = TRUE;
|
||||
proto_tree_print(TRUE, &print_args, (GNode*) cf.protocol_tree, cf.pd,
|
||||
cf.current_frame, fh);
|
||||
print_finale(fh);
|
||||
print_finale(fh, prefs.pr_format);
|
||||
close_print_dest(print_args.to_file, fh);
|
||||
}
|
||||
|
||||
|
|
5
prefs.h
5
prefs.h
|
@ -1,7 +1,7 @@
|
|||
/* prefs.h
|
||||
* Definitions for preference handling routines
|
||||
*
|
||||
* $Id: prefs.h,v 1.14 2000/01/03 06:29:33 guy Exp $
|
||||
* $Id: prefs.h,v 1.15 2000/01/06 07:33:22 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -26,9 +26,6 @@
|
|||
#ifndef __PREFS_H__
|
||||
#define __PREFS_H__
|
||||
|
||||
#define PR_FMT_TEXT 0
|
||||
#define PR_FMT_PS 1
|
||||
|
||||
#define PR_DEST_CMD 0
|
||||
#define PR_DEST_FILE 1
|
||||
|
||||
|
|
63
print.c
63
print.c
|
@ -1,7 +1,7 @@
|
|||
/* print.c
|
||||
* Routines for printing packet analysis trees.
|
||||
*
|
||||
* $Id: print.c,v 1.25 1999/12/10 04:20:53 gram Exp $
|
||||
* $Id: print.c,v 1.26 2000/01/06 07:33:22 guy Exp $
|
||||
*
|
||||
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
|
||||
*
|
||||
|
@ -37,7 +37,6 @@
|
|||
#endif
|
||||
|
||||
#include "packet.h"
|
||||
#include "prefs.h"
|
||||
#include "print.h"
|
||||
#include "ps.h"
|
||||
#include "util.h"
|
||||
|
@ -46,6 +45,8 @@ static void proto_tree_print_node_text(GNode *node, gpointer data);
|
|||
static void proto_tree_print_node_ps(GNode *node, gpointer data);
|
||||
static void ps_clean_string(unsigned char *out, const unsigned char *in,
|
||||
int outbuf_size);
|
||||
static void print_hex_data_text(FILE *fh, register const u_char *cp,
|
||||
register u_int length, char_enc encoding);
|
||||
static void print_hex_data_ps(FILE *fh, register const u_char *cp,
|
||||
register u_int length, char_enc encoding);
|
||||
static void print_ps_file(FILE* target_fh, FILE* source_fh);
|
||||
|
@ -85,19 +86,19 @@ void close_print_dest(int to_file, FILE *fh)
|
|||
pclose(fh);
|
||||
}
|
||||
|
||||
void print_preamble(FILE *fh)
|
||||
void print_preamble(FILE *fh, gint format)
|
||||
{
|
||||
if (prefs.pr_format == PR_FMT_PS)
|
||||
if (format == PR_FMT_PS)
|
||||
print_ps_preamble(fh);
|
||||
}
|
||||
|
||||
void print_finale(FILE *fh)
|
||||
void print_finale(FILE *fh, gint format)
|
||||
{
|
||||
if (prefs.pr_format == PR_FMT_PS)
|
||||
if (format == PR_FMT_PS)
|
||||
print_ps_finale(fh);
|
||||
}
|
||||
|
||||
void print_file(FILE* fh, const char* filename)
|
||||
void print_file(FILE* fh, const char* filename, gint format)
|
||||
{
|
||||
FILE* fh2 = fopen(filename, "r");
|
||||
if (fh2 == NULL) {
|
||||
|
@ -105,7 +106,7 @@ void print_file(FILE* fh, const char* filename)
|
|||
return;
|
||||
}
|
||||
|
||||
if (prefs.pr_format == PR_FMT_PS)
|
||||
if (format == PR_FMT_PS)
|
||||
print_ps_file(fh, fh2);
|
||||
else
|
||||
print_text_file(fh, fh2);
|
||||
|
@ -126,12 +127,7 @@ void proto_tree_print(gboolean print_one_packet, print_args_t *print_args,
|
|||
/* If we're printing the entire packet in hex, don't
|
||||
print uninterpreted data fields in hex as well. */
|
||||
|
||||
/* XXX - printing multiple frames in PostScript looks as if it's
|
||||
tricky - you have to deal with page boundaries, I think -
|
||||
and I'll have to spend some time learning enough about
|
||||
PostScript to figure it out, so, for now, we only print
|
||||
multiple frames as text. */
|
||||
if (prefs.pr_format == PR_FMT_TEXT || !print_one_packet) {
|
||||
if (print_args->format == PR_FMT_TEXT) {
|
||||
g_node_children_foreach((GNode*) protocol_tree, G_TRAVERSE_ALL,
|
||||
proto_tree_print_node_text, &data);
|
||||
} else {
|
||||
|
@ -182,8 +178,8 @@ void proto_tree_print_node_text(GNode *node, gpointer data)
|
|||
/* 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)
|
||||
print_hex_data(pdata->fh, &pdata->pd[fi->start], fi->length,
|
||||
pdata->encoding);
|
||||
print_hex_data_text(pdata->fh, &pdata->pd[fi->start],
|
||||
fi->length, pdata->encoding);
|
||||
|
||||
/* If we're printing all levels, or if this level is expanded,
|
||||
recurse into the subtree, if it exists. */
|
||||
|
@ -197,10 +193,20 @@ void proto_tree_print_node_text(GNode *node, gpointer data)
|
|||
}
|
||||
}
|
||||
|
||||
void print_hex_data(FILE *fh, gint format, register const u_char *cp,
|
||||
register u_int length, char_enc encoding)
|
||||
{
|
||||
if (format == PR_FMT_PS)
|
||||
print_hex_data_ps(fh, cp, length, encoding);
|
||||
else
|
||||
print_hex_data_text(fh, cp, length, encoding);
|
||||
}
|
||||
|
||||
/* This routine was created by Dan Lasley <DLASLEY@PROMUS.com>, and
|
||||
only slightly modified for ethereal by Gilbert Ramirez. */
|
||||
void print_hex_data(FILE *fh, register const u_char *cp, register u_int length,
|
||||
char_enc encoding)
|
||||
static
|
||||
void print_hex_data_text(FILE *fh, register const u_char *cp,
|
||||
register u_int length, char_enc encoding)
|
||||
{
|
||||
register int ad, i, j, k;
|
||||
u_char c;
|
||||
|
@ -263,9 +269,9 @@ void proto_tree_print_node_ps(GNode *node, gpointer data)
|
|||
ps_clean_string(psbuffer, label_ptr, MAX_LINE_LENGTH);
|
||||
fprintf(pdata->fh, "%d (%s) putline\n", pdata->level, psbuffer);
|
||||
|
||||
/* If it's uninterpreted data, dump it. */
|
||||
if (fi->hfinfo->id == proto_data) {
|
||||
print_ps_hex(pdata->fh);
|
||||
/* 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) {
|
||||
print_hex_data_ps(pdata->fh, &pdata->pd[fi->start], fi->length,
|
||||
pdata->encoding);
|
||||
}
|
||||
|
@ -308,8 +314,8 @@ void ps_clean_string(unsigned char *out, const unsigned char *in,
|
|||
}
|
||||
|
||||
static
|
||||
void print_hex_data_ps(FILE *fh, register const u_char *cp, register u_int length,
|
||||
char_enc encoding)
|
||||
void print_hex_data_ps(FILE *fh, register const u_char *cp,
|
||||
register u_int length, char_enc encoding)
|
||||
{
|
||||
register int ad, i, j, k;
|
||||
u_char c;
|
||||
|
@ -319,6 +325,7 @@ void print_hex_data_ps(FILE *fh, register const u_char *cp, register u_int lengt
|
|||
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
||||
u_char psline[MAX_LINE_LENGTH];
|
||||
|
||||
print_ps_hex(fh);
|
||||
memset (line, ' ', sizeof line);
|
||||
line[sizeof (line)-1] = 0;
|
||||
for (ad=i=j=k=0; i<length; i++) {
|
||||
|
@ -368,3 +375,13 @@ void print_ps_file(FILE* target_fh, FILE* source_fh)
|
|||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
15
print.h
15
print.h
|
@ -1,7 +1,7 @@
|
|||
/* print.h
|
||||
* Definitions for printing packet analysis trees.
|
||||
*
|
||||
* $Id: print.h,v 1.15 1999/11/22 06:24:41 gram Exp $
|
||||
* $Id: print.h,v 1.16 2000/01/06 07:33:23 guy Exp $
|
||||
*
|
||||
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
|
||||
*
|
||||
|
@ -28,10 +28,14 @@
|
|||
#ifndef __PRINT_H__
|
||||
#define __PRINT_H__
|
||||
|
||||
#define PR_FMT_TEXT 0
|
||||
#define PR_FMT_PS 1
|
||||
|
||||
typedef struct {
|
||||
gboolean to_file; /* TRUE if we're printing to a file */
|
||||
char *dest; /* if printing to file, pathname;
|
||||
if not, command string */
|
||||
gint format; /* text or PostScript */
|
||||
gboolean print_summary; /* TRUE if we should just print summary;
|
||||
FALSE if we should print protocol tree. */
|
||||
gboolean print_hex; /* TRUE if we should also print hex data;
|
||||
|
@ -44,12 +48,13 @@ typedef struct {
|
|||
|
||||
FILE *open_print_dest(int to_file, const char *dest);
|
||||
void close_print_dest(int to_file, FILE *fh);
|
||||
void print_preamble(FILE *fh);
|
||||
void print_finale(FILE *fh);
|
||||
void print_file(FILE* fh, const char* filename);
|
||||
void print_preamble(FILE *fh, gint format);
|
||||
void print_finale(FILE *fh, gint format);
|
||||
void print_file(FILE* fh, const char* filename, gint format);
|
||||
void proto_tree_print(gboolean print_one_packet, print_args_t *print_args,
|
||||
GNode *protocol_tree, const u_char *pd, frame_data *fd, FILE *fh);
|
||||
void print_hex_data(FILE *fh, register const u_char *cp,
|
||||
void print_hex_data(FILE *fh, gint format, register const u_char *cp,
|
||||
register u_int length, char_enc encoding);
|
||||
void print_line(FILE *fh, gint format, char *line);
|
||||
|
||||
#endif /* print.h */
|
||||
|
|
Loading…
Reference in New Issue