diff options
author | Daniel Jacobowitz <dan@debian.org> | 2006-04-24 22:00:27 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2006-04-24 22:00:27 +0000 |
commit | edc469a5506b2f0858aa4366d84f5c04e4eeeebe (patch) | |
tree | cf5d1c0b957710b8b9976bff1e8484b7c4a839b4 /readline/input.c | |
parent | 7be84cf3293f63b314237035e7df76caa8022769 (diff) | |
download | gdb-edc469a5506b2f0858aa4366d84f5c04e4eeeebe.tar.gz |
Import readline 5.1 on the branch.readline_5_1-import-branchcvs/readline_5_1-import-branch
Diffstat (limited to 'readline/input.c')
-rw-r--r-- | readline/input.c | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/readline/input.c b/readline/input.c index 9120dfa8a8d..9f8905384d2 100644 --- a/readline/input.c +++ b/readline/input.c @@ -1,6 +1,6 @@ /* input.c -- character input functions for readline. */ -/* Copyright (C) 1994 Free Software Foundation, Inc. +/* Copyright (C) 1994-2005 Free Software Foundation, Inc. This file is part of the GNU Readline Library, a library for reading lines of text with interactive input and history editing. @@ -21,6 +21,10 @@ 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY +#if defined (__TANDEM) +# include <floss.h> +#endif + #if defined (HAVE_CONFIG_H) # include <config.h> #endif @@ -154,6 +158,12 @@ _rl_unget_char (key) return (0); } +int +_rl_pushed_input_available () +{ + return (push_index != pop_index); +} + /* If a character is available to be read, then read it and stuff it into IBUFFER. Otherwise, just return. Returns number of characters read (0 if none available) and -1 on error (EIO). */ @@ -162,7 +172,7 @@ rl_gather_tyi () { int tty; register int tem, result; - int chars_avail; + int chars_avail, k; char input; #if defined(HAVE_SELECT) fd_set readfds, exceptfds; @@ -202,9 +212,24 @@ rl_gather_tyi () fcntl (tty, F_SETFL, tem); if (chars_avail == -1 && errno == EAGAIN) return 0; + if (chars_avail == 0) /* EOF */ + { + rl_stuff_char (EOF); + return (0); + } } #endif /* O_NDELAY */ +#if defined (__MINGW32__) + /* We use getch to read console input, so use the same + mechanism to check for more. Otherwise, we don't know. */ + if (isatty (fileno (rl_instream))) + chars_avail = _kbhit (); + else + chars_avail = 0; + result = 0; +#endif + /* If there's nothing available, don't waste time trying to read something. */ if (chars_avail <= 0) @@ -225,7 +250,12 @@ rl_gather_tyi () if (result != -1) { while (chars_avail--) - rl_stuff_char ((*rl_getc_function) (rl_instream)); + { + k = (*rl_getc_function) (rl_instream); + rl_stuff_char (k); + if (k == NEWLINE || k == RETURN) + break; + } } else { @@ -285,6 +315,13 @@ _rl_input_available () #endif +#if defined (__MINGW32__) + /* We use getch to read console input, so use the same + mechanism to check for more. Otherwise, we don't know. */ + if (isatty (fileno (rl_instream))) + return _kbhit (); +#endif + return 0; } @@ -424,12 +461,9 @@ rl_getc (stream) while (1) { -#ifdef __MINGW32__ - /* On Windows, use a special routine to read a single character - from the console. (Otherwise, no characters are available - until the user hits the return key.) */ +#if defined (__MINGW32__) if (isatty (fileno (stream))) - return getch (); + return (getch ()); #endif result = read (fileno (stream), &c, sizeof (unsigned char)); @@ -506,6 +540,12 @@ _rl_read_mbchar (mbchar, size) ps = ps_back; continue; } + else if (mbchar_bytes_length == 0) + { + mbchar[0] = '\0'; /* null wide character */ + mb_len = 1; + break; + } else if (mbchar_bytes_length > (size_t)(0)) break; } |