-/* PSPP - computes sample statistics.
- Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
+/* PSPP - a program for statistical analysis.
+ Copyright (C) 1997-9, 2000, 2007 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
bottom-margin=2
box[x]="strng" Sets box character X (X in base 4: 0-3333).
+ init="string" Set initialization string.
*/
/* Disable messages by failed range checks. */
int bottom_margin; /* Bottom margin in lines. */
char *box[LNS_COUNT]; /* Line & box drawing characters. */
+ char *init; /* Device initialization string. */
/* Internal state. */
char *file_name; /* Output file name. */
int line_cap; /* Number of lines allocated. */
};
+static void ascii_flush (struct outp_driver *);
static int get_default_box_char (size_t idx);
static bool handle_option (struct outp_driver *this, const char *key,
const struct string *val);
x->bottom_margin = 2;
for (i = 0; i < LNS_COUNT; i++)
x->box[i] = NULL;
+ x->init = NULL;
x->file_name = pool_strdup (x->pool, "pspp.list");
x->file = NULL;
x->page_number = 0;
if (!outp_parse_options (options, handle_option, this))
goto error;
- x->file = pool_fopen (x->pool, x->file_name, "w");
- if (x->file == NULL)
- {
- error (0, errno, _("ascii: opening output file \"%s\""), x->file_name);
- goto error;
- }
-
this->length = x->page_length - x->top_margin - x->bottom_margin - 1;
if (x->headers)
this->length -= 3;
{
struct ascii_driver_ext *x = this->ext;
- if (fn_close (x->file_name, x->file) != 0)
- error (0, errno, _("ascii: closing output file \"%s\""), x->file_name);
+ ascii_flush (this);
pool_detach_file (x->pool, x->file);
pool_destroy (x->pool);
enum
{
boolean_arg,
- string_arg,
+ emphasis_arg,
nonneg_int_arg,
pos_int_arg,
- output_file_arg
+ output_file_arg,
+ string_arg
};
static const struct outp_option option_tab[] =
{"paginate", boolean_arg, 1},
{"squeeze", boolean_arg, 2},
- {"emphasis", string_arg, 3},
+ {"emphasis", emphasis_arg, 0},
{"output-file", output_file_arg, 0},
{"bottom-margin", nonneg_int_arg, 1},
{"tab-width", nonneg_int_arg, 2},
+ {"init", string_arg, 0},
+
{NULL, 0, 0},
};
}
}
break;
- case string_arg:
+ case emphasis_arg:
if (!strcmp (value, "bold"))
x->emphasis = EMPH_BOLD;
else if (!strcmp (value, "underline"))
}
}
break;
+ case string_arg:
+ free (x->init);
+ x->init = pool_strdup (x->pool, value);
+ break;
default:
NOT_REACHED ();
}
struct ascii_driver_ext *x = this->ext;
int i;
+ if (x->file == NULL)
+ {
+ x->file = fn_open (x->file_name, "w");
+ if (x->file == NULL)
+ {
+ error (0, errno, _("ascii: opening output file \"%s\""),
+ x->file_name);
+ return;
+ }
+ pool_attach_file (x->pool, x->file);
+
+ if (x->init != NULL)
+ fputs (x->init, x->file);
+ }
+
x->page_number++;
if (this->length > x->line_cap)
struct string out;
int line_num;
+ if (x->file == NULL)
+ return;
+
ds_init_empty (&out);
ds_put_char_multiple (&out, '\n', x->top_margin);
ds_destroy (&out);
}
+/* Flushes all output to the user and lets the user deal with it.
+ This is applied only to output drivers that are designated as
+ "screen" drivers that the user is interacting with in real
+ time. */
+static void
+ascii_flush (struct outp_driver *this)
+{
+ struct ascii_driver_ext *x = this->ext;
+
+ if (x->file != NULL)
+ {
+ if (fn_close (x->file_name, x->file) != 0)
+ error (0, errno, _("ascii: closing output file \"%s\""),
+ x->file_name);
+ pool_detach_file (x->pool, x->file);
+ x->file = NULL;
+ }
+}
+
static void
ascii_chart_initialise (struct outp_driver *d UNUSED, struct chart *ch)
{
ascii_open_page,
ascii_close_page,
+ ascii_flush,
NULL,