Patch #6210: implement ability to resize output device parameters to
[pspp-builds.git] / src / ui / terminal / read-line.c
index c6279ce9c4bd6514ee797ed034d498bcdfdd671b..493a3d63cf5bd6399e7ea90de6081ae59d967e5c 100644 (file)
@@ -32,7 +32,9 @@
 #include <libpspp/str.h>
 #include <libpspp/version.h>
 #include <language/prompt.h>
+#include <output/journal.h>
 #include <output/manager.h>
+#include <ui/terminal/terminal.h>
 
 #include "xalloc.h"
 
@@ -100,12 +102,11 @@ readln_uninitialize (void)
 
 static bool
 read_interactive (struct getl_interface *s,
-                  struct string *line, enum getl_syntax *syntax)
+                  struct string *line)
 {
   struct readln_source *is  =
     (struct readln_source *) s ;
 
-  *syntax = GETL_INTERACTIVE;
   return is->interactive_func (line, prompt_get_style ());
 }
 
@@ -129,6 +130,7 @@ welcome (void)
         "warranty.\" for details.\n", stdout);
   puts (stat_version);
   readln_initialize ();
+  journal_enable ();
 }
 
 /* Gets a line from the user and stores it into LINE.
@@ -142,6 +144,7 @@ readln_read (struct string *line, enum prompt_style style)
 #if HAVE_READLINE
   char *string;
 #endif
+  bool eof;
 
   assert (initialised);
 
@@ -158,14 +161,14 @@ readln_read (struct string *line, enum prompt_style style)
                                       : dont_complete);
   string = readline (prompt);
   if (string == NULL)
-    return false;
+    eof = true;
   else
     {
       if (string[0])
         add_history (string);
       ds_assign_cstr (line, string);
       free (string);
-      return true;
+      eof = false;
     }
 #else
   fputs (prompt, stdout);
@@ -173,13 +176,23 @@ readln_read (struct string *line, enum prompt_style style)
   if (ds_read_line (line, stdin))
     {
       ds_chomp (line, '\n');
-      return true;
+      eof = false;
     }
   else
-    return false;
+    eof = true;
 #endif
-}
 
+  /* Check whether the size of the window has changed, so that
+     the output drivers can adjust their settings as needed.  We
+     only do this for the first line of a command, as it's
+     possible that the output drivers are actually in use
+     afterward, and we don't want to confuse them in the middle
+     of output. */
+  if (style == PROMPT_FIRST)
+    terminal_check_size ();
+
+  return !eof;
+}
 
 static void
 readln_close (struct getl_interface *i)