X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fread-line.c;h=54f90858a5d90542aa70d0d7bade755d5ecd9621;hb=97949b7afde73c20b85ac9040fdead71e01f33b1;hp=72171ae785d964b7a2cf9146886a844e4e4a06f4;hpb=f5c108becd49d78f4898cab11352291f5689d24e;p=pspp-builds.git diff --git a/src/ui/terminal/read-line.c b/src/ui/terminal/read-line.c index 72171ae7..54f90858 100644 --- a/src/ui/terminal/read-line.c +++ b/src/ui/terminal/read-line.c @@ -1,20 +1,18 @@ -/* PSPP - computes sample statistics. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. +/* PSPP - a program for statistical analysis. + 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 the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ + along with this program. If not, see . */ #include @@ -24,16 +22,23 @@ #include #include #include +#if ! HAVE_READLINE +#include +#endif #include "msg-ui.h" #include #include #include +#include #include #include #include #include +#include +#include +#include #include "xalloc.h" @@ -91,7 +96,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 +106,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 ()); } @@ -130,6 +133,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. @@ -143,6 +147,7 @@ readln_read (struct string *line, enum prompt_style style) #if HAVE_READLINE char *string; #endif + bool eof; assert (initialised); @@ -150,34 +155,46 @@ readln_read (struct string *line, enum prompt_style style) welcome (); + output_flush (); + #if HAVE_READLINE rl_attempted_completion_function = (style == PROMPT_FIRST ? complete_command_name : 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) @@ -197,7 +214,7 @@ create_readln_source (void) rlns->parent.read = read_interactive; rlns->parent.close = readln_close; - return (struct getl_interface *) rlns; + return &rlns->parent; }