X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fhtml.c;h=043965eeece20d42d1c6489c0b54cf0790b29248;hb=a7fb79e81f6e2a0dfddc61e91f207609e31a4632;hp=951208717f8ec7a47bc964f15262511f7c45294b;hpb=b74d09af5e07f954c18e7cdb8aca3af47fa10208;p=pspp diff --git a/src/output/html.c b/src/output/html.c index 951208717f..043965eeec 100644 --- a/src/output/html.c +++ b/src/output/html.c @@ -1,6 +1,5 @@ /* PSPP - computes sample statistics. Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. - Written by Ben Pfaff . 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 #include +#include #include #include #include "error.h" @@ -36,7 +36,8 @@ #include "manager.h" #include "table.h" #include -#include + +#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,