Update all #include directives to the currently preferred style.
[pspp-builds.git] / src / ui / terminal / read-line.c
index 2529dee40b29ac1732a9292c9c54e8c95bc196ec..544e18d55dd965608919ba6b5e435c002edeb165 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2007, 2009, 2011 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
 
 #include <config.h>
 
-#include "read-line.h"
+#include "ui/terminal/read-line.h"
 
 #include <stdlib.h>
 #include <stdbool.h>
 #include <assert.h>
 #include <errno.h>
+#if ! HAVE_READLINE
+#include <stdint.h>
+#endif
 
-#include "msg-ui.h"
-
-#include <data/file-name.h>
-#include <data/settings.h>
-#include <language/command.h>
-#include <libpspp/message.h>
-#include <libpspp/str.h>
-#include <libpspp/version.h>
-#include <language/prompt.h>
-#include <output/journal.h>
-#include <output/manager.h>
-
-#include "xalloc.h"
+#include "data/file-name.h"
+#include "data/settings.h"
+#include "language/command.h"
+#include "language/prompt.h"
+#include "libpspp/cast.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
+#include "libpspp/version.h"
+#include "output/driver.h"
+#include "output/journal.h"
+#include "ui/terminal/msg-ui.h"
+#include "ui/terminal/terminal.h"
+
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -91,7 +95,7 @@ readln_uninitialize (void)
   initialised = false;
 
 #if HAVE_READLINE
-  if (history_file != NULL && false == get_testing_mode() )
+  if (history_file != NULL && false == settings_get_testing_mode () )
     write_history (history_file);
   clear_history ();
   free (history_file);
@@ -101,12 +105,10 @@ 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 ;
+  struct readln_source *is  = UP_CAST (s, struct readln_source, parent);
 
-  *syntax = GETL_INTERACTIVE;
   return is->interactive_func (line, prompt_get_style ());
 }
 
@@ -144,15 +146,15 @@ readln_read (struct string *line, enum prompt_style style)
 #if HAVE_READLINE
   char *string;
 #endif
+  bool eof;
 
   assert (initialised);
 
-  reset_msg_count ();
+  msg_ui_reset_counts ();
 
   welcome ();
 
-  if (style == PROMPT_FIRST)
-    som_flush ();
+  output_flush ();
 
 #if HAVE_READLINE
   rl_attempted_completion_function = (style == PROMPT_FIRST
@@ -160,28 +162,38 @@ 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);
   fflush (stdout);
-  if (ds_read_line (line, stdin))
+  if (ds_read_line (line, stdin, SIZE_MAX))
     {
       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)
@@ -201,7 +213,7 @@ create_readln_source (void)
   rlns->parent.read = read_interactive;
   rlns->parent.close = readln_close;
 
-  return (struct getl_interface *) rlns;
+  return &rlns->parent;
 }