#include <limits.h>
#include <stdint.h>
#include <stdlib.h>
-
-#include <data/file-name.h>
-#include <data/settings.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
-#include <libpspp/message.h>
-#include <libpspp/start-date.h>
-#include <libpspp/string-map.h>
-#include <libpspp/version.h>
-#include <output/cairo.h>
-#include <output/chart-item-provider.h>
-#include <output/message-item.h>
-#include <output/options.h>
-#include <output/tab.h>
-#include <output/text-item.h>
-#include <output/driver-provider.h>
-#include <output/render.h>
-#include <output/table-item.h>
-
-#include "error.h"
-#include "minmax.h"
-#include "xalloc.h"
+#include <signal.h>
+#include <unistd.h>
+
+#include "data/file-name.h"
+#include "data/settings.h"
+#include "libpspp/assertion.h"
+#include "libpspp/cast.h"
+#include "libpspp/compiler.h"
+#include "libpspp/message.h"
+#include "libpspp/start-date.h"
+#include "libpspp/string-map.h"
+#include "libpspp/version.h"
+#include "output/cairo.h"
+#include "output/chart-item-provider.h"
+#include "output/driver-provider.h"
+#include "output/message-item.h"
+#include "output/options.h"
+#include "output/render.h"
+#include "output/tab.h"
+#include "output/table-item.h"
+#include "output/text-item.h"
+
+#include "gl/error.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
"bold", EMPH_BOLD,
"underline", EMPH_UNDERLINE,
"none", EMPH_NONE,
- (char *) NULL);
+ NULL_SENTINEL);
a->chart_file_name = parse_chart_file_name (opt (d, o, "charts", file_name));
ascii_close_page (a);
if (fn_close (a->file_name, a->file) != 0)
- error (0, errno, _("ascii: closing output file \"%s\""),
+ error (0, errno, _("ascii: closing output file `%s'"),
a->file_name);
a->file = NULL;
}
\f
/* ascii_close_page () and support routines. */
+
+#if HAVE_DECL_SIGWINCH
+static struct ascii_driver *the_driver;
+
+static void
+winch_handler (int signum UNUSED)
+{
+ update_page_size (the_driver, false);
+}
+#endif
+
static bool
ascii_open_page (struct ascii_driver *a)
{
a->file = fn_open (a->file_name, a->append ? "a" : "w");
if (a->file != NULL)
{
+#if HAVE_DECL_SIGWINCH
+ if ( isatty (fileno (a->file)))
+ {
+ struct sigaction action;
+ sigemptyset (&action.sa_mask);
+ action.sa_flags = 0;
+ action.sa_handler = winch_handler;
+ the_driver = a;
+ a->auto_width = true;
+ a->auto_length = true;
+ sigaction (SIGWINCH, &action, NULL);
+ }
+#endif
if (a->init != NULL)
fputs (a->init, a->file);
}
else
{
- error (0, errno, _("ascii: opening output file \"%s\""),
+ error (0, errno, _("ascii: opening output file `%s'"),
a->file_name);
a->error = true;
return false;
output_title_line (FILE *out, int width, const char *left, const char *right)
{
struct string s = DS_EMPTY_INITIALIZER;
- ds_put_char_multiple (&s, ' ', width);
+ ds_put_byte_multiple (&s, ' ', width);
if (left != NULL)
{
size_t length = MIN (strlen (left), width);
size_t length = MIN (strlen (right), width);
memcpy (ds_end (&s) - length, right, length);
}
- ds_put_char (&s, '\n');
+ ds_put_byte (&s, '\n');
fputs (ds_cstr (&s), out);
ds_destroy (&s);
}