X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fascii.c;h=b224b3ebea9e54bdfac5d6859a18793583b046f6;hb=59981a5060a0e672b98655be240886d89a513d31;hp=5a33a6611bfdd8d6f4c7fc4a602ff1a7c92e8717;hpb=18121006e5416f858633900820c4518dd30479c4;p=pspp diff --git a/src/output/ascii.c b/src/output/ascii.c index 5a33a6611b..b224b3ebea 100644 --- a/src/output/ascii.c +++ b/src/output/ascii.c @@ -29,11 +29,12 @@ #include #include #include +#include +#include +#include -#include "chart.h" #include "error.h" #include "minmax.h" -#include "output.h" #include "xalloc.h" #include "gettext.h" @@ -44,7 +45,7 @@ output-file="pspp.list" append=no|yes If output-file exists, append to it? chart-files="pspp-#.png" Name used for charts. - chart-type=png Format of charts (use "none" to disable). + chart-type=png|none paginate=on|off Formfeeds are desired? tab-width=8 Width of a tab; 0 to not use tabs. @@ -108,7 +109,7 @@ struct ascii_driver_ext bool squeeze_blank_lines; /* Squeeze multiple blank lines into one? */ enum emphasis_style emphasis; /* How to emphasize text. */ int tab_width; /* Width of a tab; 0 not to use tabs. */ - const char *chart_type; /* Type of charts to output; NULL for none. */ + bool enable_charts; /* Enable charts? */ const char *chart_file_name; /* Name of files used for charts. */ bool auto_width; /* Use viewwidth as page width? */ @@ -159,7 +160,7 @@ ascii_open_driver (const char *name, int types, struct substring options) x->emphasis = EMPH_BOLD; x->tab_width = 8; x->chart_file_name = pool_strdup (x->pool, "pspp-#.png"); - x->chart_type = pool_strdup (x->pool, "png"); + x->enable_charts = true; x->auto_width = false; x->auto_length = false; x->page_length = 66; @@ -174,7 +175,7 @@ ascii_open_driver (const char *name, int types, struct substring options) x->page_number = 0; x->lines = NULL; x->line_cap = 0; - x->chart_cnt = 0; + x->chart_cnt = 1; if (!outp_parse_options (this->name, options, handle_option, this)) goto error; @@ -484,10 +485,16 @@ handle_option (void *this_, const char *key, error (0, 0, _("`chart-files' value must contain `#'")); break; case 2: - if (value[0] != '\0') - x->chart_type = pool_strdup (x->pool, value); + if (!strcmp (value, "png")) + x->enable_charts = true; + else if (!strcmp (value, "none")) + x->enable_charts = false; else - x->chart_type = NULL; + { + error (0, 0, + _("ascii: `png' or `none' expected for `chart-type'")); + return false; + } break; case 3: x->init = pool_strdup (x->pool, value); @@ -609,15 +616,6 @@ ascii_line (struct outp_driver *this, } } -static void -ascii_submit (struct outp_driver *this UNUSED, struct som_entity *s) -{ - extern struct som_table_class tab_table_class; - - assert (s->class == &tab_table_class); - assert (s->type == SOM_CHART); -} - static void text_draw (struct outp_driver *this, enum outp_font font, @@ -872,19 +870,15 @@ ascii_flush (struct outp_driver *this) } static void -ascii_chart_initialise (struct outp_driver *this, struct chart *ch) +ascii_output_chart (struct outp_driver *this, const struct chart *chart) { struct ascii_driver_ext *x = this->ext; struct outp_text t; + char *file_name; char *text; - if (x->chart_type == NULL) - return; - - /* Initialize chart. */ - chart_init_separate (ch, x->chart_type, x->chart_file_name, ++x->chart_cnt); - if (ch->file_name == NULL) - return; + /* Draw chart into separate file */ + file_name = chart_draw_png (chart, x->chart_file_name, x->chart_cnt++); /* Mention chart in output. First advance current position. */ @@ -901,7 +895,7 @@ ascii_chart_initialise (struct outp_driver *this, struct chart *ch) } /* Then write the text. */ - text = xasprintf ("See %s for a chart.", ch->file_name); + text = xasprintf ("See %s for a chart.", file_name); t.font = OUTP_FIXED; t.justification = OUTP_LEFT; t.string = ss_cstr (text); @@ -912,17 +906,10 @@ ascii_chart_initialise (struct outp_driver *this, struct chart *ch) ascii_text_draw (this, &t); this->cp_y++; + free (file_name); free (text); } -static void -ascii_chart_finalise (struct outp_driver *this, struct chart *ch) -{ - struct ascii_driver_ext *x = this->ext; - if (x->chart_type != NULL) - chart_finalise_separate (ch); -} - const struct outp_class ascii_class = { "ascii", @@ -935,12 +922,11 @@ const struct outp_class ascii_class = ascii_close_page, ascii_flush, - ascii_submit, + ascii_output_chart, + + NULL, /* submit */ ascii_line, ascii_text_metrics, ascii_text_draw, - - ascii_chart_initialise, - ascii_chart_finalise };