driver: New function output_log_nocopy().
[pspp] / src / output / driver.c
index 61ce6f51aa4e30272c6f6b09917a65c340a5f88c..f627e31248d69c1398739bd369307ec94dcd86fc 100644 (file)
@@ -91,7 +91,7 @@ put_strftime (const char *key, const char *format,
 void
 output_engine_push (void)
 {
-  struct output_engine *e = xzalloc (sizeof (*e));
+  struct output_engine *e = XZALLOC (struct output_engine);
 
   llx_init (&e->drivers);
 
@@ -156,7 +156,6 @@ output_driver_should_show (const struct output_driver *d,
     case OUTPUT_ITEM_GROUP:
     case OUTPUT_ITEM_IMAGE:
     case OUTPUT_ITEM_PAGE_BREAK:
-    case OUTPUT_ITEM_PAGE_SETUP:
     case OUTPUT_ITEM_TABLE:
       break;
     }
@@ -367,9 +366,21 @@ output_log (const char *format, ...)
   char *s = xvasprintf (format, args);
   va_end (args);
 
+  output_log_nocopy (s);
+}
+
+void
+output_log_nocopy (char *s)
+{
   output_submit (text_item_create_nocopy (TEXT_ITEM_LOG, s, NULL));
 }
 
+const char *
+output_get_title (void)
+{
+  return engine_stack_top ()->title;
+}
+
 void
 output_set_title (const char *title)
 {
@@ -378,6 +389,12 @@ output_set_title (const char *title)
   output_set_title__ (e, &e->title, title);
 }
 
+const char *
+output_get_subtitle (void)
+{
+  return engine_stack_top ()->subtitle;
+}
+
 void
 output_set_subtitle (const char *subtitle)
 {
@@ -462,6 +479,20 @@ output_driver_is_registered (const struct output_driver *driver)
 {
   return output_driver_get_engine (driver) != NULL;
 }
+
+void
+output_set_page_setup (const struct page_setup *ps)
+{
+  struct output_engine *e = engine_stack_top ();
+
+  struct llx *llx;
+  llx_for_each (llx, &e->drivers)
+    {
+      struct output_driver *d = llx_data (llx);
+      if (d->class->setup)
+        d->class->setup (d, ps);
+    }
+}
 \f
 extern const struct output_driver_factory csv_driver_factory;
 extern const struct output_driver_factory html_driver_factory;