X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Foutput%2Fspv-driver.c;h=900a047af5f2a3fb921aaf75b191868df5d09460;hb=95cde62bdf5210c1c60dad5598a888b864f93161;hp=75c8e82f04e842cddc8e6934ac5dbaae16e6801a;hpb=4bb1368b5040adb4083cf8d186024a7294456f24;p=pspp diff --git a/src/output/spv-driver.c b/src/output/spv-driver.c index 75c8e82f04..900a047af5 100644 --- a/src/output/spv-driver.c +++ b/src/output/spv-driver.c @@ -23,13 +23,8 @@ #include "data/file-handle-def.h" #include "libpspp/cast.h" #include "output/cairo-chart.h" -#include "output/chart-item.h" -#include "output/group-item.h" -#include "output/image-item.h" -#include "output/page-eject-item.h" -#include "output/page-setup-item.h" -#include "output/table-item.h" -#include "output/text-item.h" +#include "output/output-item.h" +#include "output/page-setup.h" #include "output/spv/spv-writer.h" #include "gl/xalloc.h" @@ -55,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 @@ -94,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, };