/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2007, 2009 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 <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/cast.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 <output/driver.h>
+#include <ui/terminal/terminal.h>
#include "xalloc.h"
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);
read_interactive (struct getl_interface *s,
struct string *line)
{
- struct readln_source *is =
- (struct readln_source *) s ;
+ struct readln_source *is = UP_CAST (s, struct readln_source, parent);
return is->interactive_func (line, prompt_get_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
: 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)
rlns->parent.read = read_interactive;
rlns->parent.close = readln_close;
- return (struct getl_interface *) rlns;
+ return &rlns->parent;
}