str: Inline some trivial functions.
[pspp-builds.git] / src / output / ascii.c
index c9f96b21b58cbd287d2d41152e572ee6a658bd7d..00e3f33cbdfba56df6f6f290c0b4dc7d8a5e0da8 100644 (file)
@@ -21,6 +21,8 @@
 #include <limits.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
 
 #include "data/file-name.h"
 #include "data/settings.h"
@@ -786,6 +788,17 @@ ascii_layout_cell (struct ascii_driver *a, const struct table_cell *cell,
 \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)
 {
@@ -799,6 +812,19 @@ 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);
         }