X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fspv-driver.c;h=900a047af5f2a3fb921aaf75b191868df5d09460;hb=95cde62bdf5210c1c60dad5598a888b864f93161;hp=f0c00e5fa84ad615bcd3828cc20817d528b56684;hpb=29917c4f5908454803e663d2ad78bca4bc35e805;p=pspp diff --git a/src/output/spv-driver.c b/src/output/spv-driver.c index f0c00e5fa8..900a047af5 100644 --- a/src/output/spv-driver.c +++ b/src/output/spv-driver.c @@ -24,6 +24,7 @@ #include "libpspp/cast.h" #include "output/cairo-chart.h" #include "output/output-item.h" +#include "output/page-setup.h" #include "output/spv/spv-writer.h" #include "gl/xalloc.h" @@ -49,29 +50,32 @@ spv_driver_cast (struct output_driver *driver) static struct output_driver * spv_create (struct file_handle *fh, enum settings_output_devices device_type, - struct string_map *o UNUSED) + struct driver_options *o) { - struct output_driver *d; - struct spv_driver *spv; - - spv = xzalloc (sizeof *spv); - d = &spv->driver; - spv->handle = fh; - output_driver_init (&spv->driver, &spv_driver_class, fh_get_file_name (fh), - device_type); - - char *error = spv_writer_open (fh_get_file_name (fh), &spv->writer); - if (spv->writer == NULL) + struct spv_writer *writer; + char *error = spv_writer_open (fh_get_file_name (fh), &writer); + if (!writer) { msg (ME, "%s", error); - goto error; + free (error); + return NULL; } - return d; - - error: - output_driver_destroy (d); - return NULL; + struct page_setup *ps = page_setup_parse (o); + spv_writer_set_page_setup (writer, ps); + page_setup_destroy (ps); + + struct spv_driver *spv = xmalloc (sizeof *spv); + *spv = (struct spv_driver) { + .driver = { + .class = &spv_driver_class, + .name = xstrdup (fh_get_file_name (fh)), + .device_type = device_type, + }, + .handle = fh, + .writer = writer, + }; + return &spv->driver; } static void @@ -88,20 +92,31 @@ spv_destroy (struct output_driver *driver) static void spv_submit (struct output_driver *driver, - const struct output_item *output_item) + const struct output_item *output_item) { struct spv_driver *spv = spv_driver_cast (driver); spv_writer_write (spv->writer, output_item); } +static void +spv_setup (struct output_driver *driver, + const struct page_setup *ps) +{ + struct spv_driver *spv = spv_driver_cast (driver); + + spv_writer_set_page_setup (spv->writer, ps); +} + struct output_driver_factory spv_driver_factory = { "spv", "pspp.spv", spv_create }; static const struct output_driver_class spv_driver_class = { - "spv", - spv_destroy, - spv_submit, - NULL, + .name = "spv", + .destroy = spv_destroy, + .submit = spv_submit, + .setup = spv_setup, + .handles_show = true, + .handles_groups = true, };