Remove "Written by Ben Pfaff <blp@gnu.org>" lines everywhere.
[pspp-builds.git] / src / output / html.c
index 951208717f8ec7a47bc964f15262511f7c45294b..043965eeece20d42d1c6489c0b54cf0790b29248 100644 (file)
@@ -1,6 +1,5 @@
 /* PSPP - computes sample statistics.
    Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
-   Written by Ben Pfaff <blp@gnu.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -27,6 +26,7 @@
 #include <unistd.h>
 
 #include <libpspp/alloc.h>
+#include <libpspp/assertion.h>
 #include <libpspp/compiler.h>
 #include <data/file-name.h>
 #include "error.h"
@@ -36,7 +36,8 @@
 #include "manager.h"
 #include "table.h"
 #include <libpspp/version.h>
-#include <data/make-file.h>
+
+#include "size_max.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -56,7 +57,9 @@ html_open_driver (struct outp_driver *this, struct substring options)
 
   this->ext = x = xmalloc (sizeof *x);
   x->file_name = xstrdup ("pspp.html");
+  x->chart_file_name = xstrdup ("pspp-#.png");
   x->file = NULL;
+  x->chart_cnt = 0;
 
   outp_parse_options (options, handle_option, this);
 
@@ -83,10 +86,12 @@ html_open_driver (struct outp_driver *this, struct substring options)
   fputs (" LINK=\"#1f00ff\" ALINK=\"#ff0000\" VLINK=\"#9900dd\">\n", x->file);
   print_title_tag (x->file, "H1", outp_title);
   print_title_tag (x->file, "H2", outp_subtitle);
+  free (x->chart_file_name); 
 
   return true;
 
  error:
+  free (x->chart_file_name); 
   this->class->close_driver (this);
   return false;
 }
@@ -143,9 +148,10 @@ enum
   };
 
 /* All the options that the HTML driver supports. */
-static struct outp_option option_tab[] =
+static const struct outp_option option_tab[] =
   {
     {"output-file",            string_arg,     0},
+    {"chart-files",            string_arg,     1},
     {NULL, 0, 0},
   };
 
@@ -164,11 +170,26 @@ handle_option (struct outp_driver *this,
              key);
       break;
     case string_arg:
-      free (x->file_name);
-      x->file_name = ds_xstrdup (val);
+      switch (subcat) 
+        {
+        case 0:
+          free (x->file_name);
+          x->file_name = ds_xstrdup (val);
+          break;
+        case 1:
+          if (ds_find_char (val, '#') != SIZE_MAX) 
+            {
+              free (x->chart_file_name);
+              x->chart_file_name = ds_xstrdup (val);
+            }
+          error (0, 0, _("`chart-files' value must contain `#'"));
+          break;
+        default:
+          NOT_REACHED ();
+        }
       break;
     default:
-      abort ();
+      NOT_REACHED ();
     }
   
   return true;
@@ -193,7 +214,7 @@ html_submit (struct outp_driver *this, struct som_entity *s)
       link_image (x->file, ((struct chart *)s->ext)->file_name);
       break;
     default:
-      abort ();
+      NOT_REACHED ();
     }
 }
 
@@ -339,20 +360,35 @@ output_tab_table (struct outp_driver *this, struct tab_table *t)
 }
 
 static void
-html_initialise_chart(struct outp_driver *d UNUSED, struct chart *ch)
+html_initialise_chart (struct outp_driver *this, struct chart *ch)
 {
-
-  FILE  *fp;
-
-  make_unique_file_stream(&fp, &ch->file_name);
-
 #ifdef NO_CHARTS
-  ch->lp = 0;
+  ch->lp = NULL;
 #else
-  ch->pl_params = pl_newplparams();
+  struct html_driver_ext *x = this->ext;
+  
+  FILE *fp;
+  int number_pos;
+
+  x->chart_cnt++;
+  
+  number_pos = strchr (x->chart_file_name, '#') - x->chart_file_name;
+  ch->file_name = xasprintf ("%.*s%d%s",
+                             number_pos, x->chart_file_name,
+                             x->chart_cnt,
+                             x->chart_file_name + number_pos + 1);
+  fp = fopen (ch->file_name, "wb");
+  if (fp == NULL) 
+    {
+      error (0, errno, _("creating \"%s\""), ch->file_name);
+      free (ch->file_name);
+      ch->file_name = NULL;
+      return;
+    }
+
+  ch->pl_params = pl_newplparams ();
   ch->lp = pl_newpl_r ("png", 0, fp, stderr, ch->pl_params);
 #endif
-
 }
 
 static void 
@@ -364,7 +400,7 @@ html_finalise_chart(struct outp_driver *d UNUSED, struct chart *ch)
 
 
 /* HTML driver class. */
-struct outp_class html_class =
+const struct outp_class html_class =
   {
     "html",
     1,