X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fterminal-reader.c;h=0a1337d4ea0f3f8448a3f44df1524c7604825af6;hb=8fa37ab22125896c4549d8681804aa65095d4c1c;hp=c80a6131dea915afc84b2fc1b2943b55cef0440b;hpb=876da2249715aa8495343d8a9b1dd9b4a08fc91d;p=pspp diff --git a/src/ui/terminal/terminal-reader.c b/src/ui/terminal/terminal-reader.c index c80a6131de..0a1337d4ea 100644 --- a/src/ui/terminal/terminal-reader.c +++ b/src/ui/terminal/terminal-reader.c @@ -38,7 +38,6 @@ static const bool have_readline = true; #else static const bool have_readline = false; -static int rl_end; #endif @@ -52,7 +51,6 @@ static int rl_end; #include #include -#include "data/file-name.h" #include "data/settings.h" #include "language/command.h" #include "language/lexer/lexer.h" @@ -98,7 +96,7 @@ welcome (void) "it\nunder certain conditions; type \"show copying.\" to see the " "conditions.\nThere is ABSOLUTELY NO WARRANTY for PSPP; type \"show " "warranty.\" for details.\n", stdout); - puts (stat_version); + puts (announced_version); journal_init (); } @@ -108,12 +106,15 @@ terminal_reader_cast (struct lex_reader *r) return UP_CAST (r, struct terminal_reader, reader); } + /* Older libreadline versions do not provide rl_outstream. However, it is almost always going to be the same as stdout. */ #if ! HAVE_RL_OUTSTREAM # define rl_outstream stdout #endif + +#if HAVE_READLINE /* Similarly, rl_echo_signal_char is fairly recent. We provide our own crude version if it is not present. */ #if ! HAVE_RL_ECHO_SIGNAL_CHAR @@ -125,7 +126,7 @@ rl_echo_signal_char (int sig) if (0 == tcgetattr (0, &t)) { cc_t c = t.c_cc[VINTR]; - + if (c >= 0 && c <= 'Z' - 'A') fprintf (rl_outstream, "^%c", 'A' + c - 1); else @@ -136,7 +137,8 @@ rl_echo_signal_char (int sig) fprintf (rl_outstream, "^C"); fflush (rl_outstream); -} +} +#endif #endif @@ -248,21 +250,12 @@ readline_prompt (enum prompt_style style) } +#if HAVE_READLINE static int pfd[2]; static bool sigint_received ; -static void -handler (int sig) -{ - rl_end = 0; - - write (pfd[1], "x", 1); - rl_echo_signal_char (sig); -} - - -/* +/* A function similar to getc from stdio. However this one may be interrupted by SIGINT. If that happens it will return EOF and the global variable @@ -312,9 +305,15 @@ interruptible_getc (FILE *fp) return c; } +static void +handler (int sig) +{ + rl_end = 0; + write (pfd[1], "x", 1); + rl_echo_signal_char (sig); +} -#if HAVE_READLINE static void readline_init (void) @@ -350,7 +349,7 @@ readline_done (void) free (history_file); } -/* Prompt the user for a line of input and return it in LINE. +/* Prompt the user for a line of input and return it in LINE. Returns true if the LINE should be considered valid, false otherwise. */ static bool @@ -450,9 +449,9 @@ readline_read (struct substring *line, enum prompt_style style) fflush (stdout); ds_init_empty (&string); ds_read_line (&string, stdin, SIZE_MAX); - + *line = string.ss; - + return false; } #endif /* !HAVE_READLINE */