+#include <epan/packet.h>
+
+#include "packet-range.h"
+
+/*
+ * Print stream code; this provides a "print stream" class with subclasses
+ * of various sorts. Additional subclasses might be implemented elsewhere.
+ */
+struct print_stream;
+
+typedef struct print_stream_ops {
+ gboolean (*print_preamble)(struct print_stream *self, gchar *filename);
+ gboolean (*print_line)(struct print_stream *self, int indent,
+ const char *line);
+ gboolean (*print_bookmark)(struct print_stream *self,
+ const gchar *name, const gchar *title);
+ gboolean (*new_page)(struct print_stream *self);
+ gboolean (*print_finale)(struct print_stream *self);
+ gboolean (*destroy)(struct print_stream *self);
+} print_stream_ops_t;
+
+typedef struct print_stream {
+ const print_stream_ops_t *ops;
+ void *data;
+} print_stream_t;
+
+extern print_stream_t *print_stream_text_new(int to_file, const char *dest);
+extern print_stream_t *print_stream_text_stdio_new(FILE *fh);
+extern print_stream_t *print_stream_ps_new(int to_file, const char *dest);
+extern print_stream_t *print_stream_ps_stdio_new(FILE *fh);
+
+extern gboolean print_preamble(print_stream_t *self, gchar *filename);
+extern gboolean print_line(print_stream_t *self, int indent, const char *line);
+extern gboolean print_bookmark(print_stream_t *self, const gchar *name,
+ const gchar *title);
+extern gboolean new_page(print_stream_t *self);
+extern gboolean print_finale(print_stream_t *self);
+extern gboolean destroy_print_stream(print_stream_t *self);
+
+/* print output format */
+typedef enum {
+ PR_FMT_TEXT, /* plain text */
+ PR_FMT_PS /* postscript */
+} print_format_e;
+
+/* print_range, enum which frames should be printed */
+typedef enum {
+ print_range_selected_only, /* selected frame(s) only (currently only one) */
+ print_range_marked_only, /* marked frames only */
+ print_range_all_displayed, /* all frames currently displayed */
+ print_range_all_captured /* all frames in capture */
+} print_range_e;
+
+/* print_dissections, enum how the dissections should be printed */
+typedef enum {
+ print_dissections_none, /* no dissections at all */
+ print_dissections_collapsed, /* no dissection details */
+ print_dissections_as_displayed, /* details as displayed */
+ print_dissections_expanded /* all dissection details */
+} print_dissections_e;
+