/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2007, 2009 Free Software Foundation, Inc.
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
#ifndef OUTPUT_OUTPUT_H
#define OUTPUT_OUTPUT_H 1
-#include <config.h>
-
+#include <libpspp/ll.h>
#include <libpspp/str.h>
-
/* Line styles. */
enum outp_line_style
{
const char *name; /* Name of this driver class. */
int special; /* Boolean value. */
- bool (*open_driver) (struct outp_driver *, struct substring options);
+ bool (*open_driver) (const char *name, int types,
+ struct substring options);
bool (*close_driver) (struct outp_driver *);
void (*open_page) (struct outp_driver *);
void (*flush) (struct outp_driver *);
+ void (*output_chart) (struct outp_driver *, const struct chart *);
+
/* special != 0 only. */
void (*submit) (struct outp_driver *, struct som_entity *);
void (*text_metrics) (struct outp_driver *, const struct outp_text *,
int *width, int *height);
void (*text_draw) (struct outp_driver *, const struct outp_text *);
- void (*initialise_chart)(struct outp_driver *, struct chart *);
- void (*finalise_chart)(struct outp_driver *, struct chart *);
};
/* Device types. */
/* Defines the configuration of an output driver. */
struct outp_driver
{
- struct outp_driver *next, *prev; /* List of drivers. */
+ struct ll node; /* Node in list of drivers. */
const struct outp_class *class; /* Driver class. */
char *name; /* Name of this driver. */
bool page_open; /* 1=page is open, 0=page is closed. */
int vert_line_width[OUTP_L_COUNT]; /* Width of vertical lines. */
void *ext; /* Private extension record. */
- void *prc; /* Per-procedure extension record. */
};
/* Option structure for the keyword recognizer. */
extern char *outp_subtitle;
void outp_init (void);
+void outp_done (void);
void outp_read_devices (void);
void outp_configure_driver_line (struct substring);
-void outp_done (void);
+
+struct outp_driver *outp_allocate_driver (const struct outp_class *class,
+ const char *name, int types);
+void outp_free_driver (struct outp_driver *);
+void outp_register_driver (struct outp_driver *);
+void outp_unregister_driver (struct outp_driver *);
void outp_configure_clear (void);
void outp_configure_add (char *);
void outp_enable_device (bool enable, int device);
struct outp_driver *outp_drivers (struct outp_driver *);
-bool outp_parse_options (struct substring options,
- bool (*) (struct outp_driver *, const char *key,
- const struct string *value),
- struct outp_driver *);
+bool outp_parse_options (const char *driver_name, struct substring options,
+ bool (*callback) (void *aux, const char *key,
+ const struct string *value),
+ void *aux);
int outp_match_keyword (const char *, const struct outp_option *, int *);
-int outp_evaluate_dimension (char *, char **);
-bool outp_get_paper_size (char *, int *h, int *v);
+int outp_evaluate_dimension (const char *);
+bool outp_get_paper_size (const char *, int *h, int *v);
void outp_open_page (struct outp_driver *);
void outp_close_page (struct outp_driver *);
/* Imported from som-frnt.c. */
void som_destroy_driver (struct outp_driver *);
+/* Common drivers. */
+extern const struct outp_class ascii_class;
+extern const struct outp_class postscript_class;
+#ifdef HAVE_CAIRO
+extern const struct outp_class cairo_class;
+#endif
+
#endif /* output/output.h */