X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fread-line.c;h=7b23f38d2f359b58ecec1635970904d732edad5c;hb=ebbfbe937906e4b4ca577478965cf06d1a812715;hp=2529dee40b29ac1732a9292c9c54e8c95bc196ec;hpb=fdcc4b6875ccdbf7bd01bc401e87afbeb71c2bfd;p=pspp-builds.git diff --git a/src/ui/terminal/read-line.c b/src/ui/terminal/read-line.c index 2529dee4..7b23f38d 100644 --- a/src/ui/terminal/read-line.c +++ b/src/ui/terminal/read-line.c @@ -22,6 +22,9 @@ #include #include #include +#if ! HAVE_READLINE +#include +#endif #include "msg-ui.h" @@ -34,6 +37,7 @@ #include #include #include +#include #include "xalloc.h" @@ -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,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 ()); } @@ -144,6 +147,7 @@ readln_read (struct string *line, enum prompt_style style) #if HAVE_READLINE char *string; #endif + bool eof; assert (initialised); @@ -160,28 +164,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)