2021-01-23  Tom Tromey  <tom@tromey.com>

	* input.c [_WIN32]: Use code from upstream readline.

2019-10-23  Andrew Burgess  <andrew.burgess@embecosm.com>

	PR cli/24980
	* display.c (init_line_structures): Initialise line_state using
	original minsize value.

2019-08-13  Christian Biesinger  <cbiesinger@google.com>

	* colors.c (_rl_print_color_indicator): Remove unnecessary
	S_ISLNK check to fix compilation on MinGW.

2019-08-12  Tom Tromey  <tom@tromey.com>

	* Imported readline 8.0.

2019-08-12  Tom Tromey  <tom@tromey.com>

	* Makefile.in (xfree.o): Don't depend on readline.h.
	* xfree.c (xfree): Remove gdb workaround.
	* xmalloc.h (xfree): Remove #define.

2018-08-12  Tom Tromey  <tom@tromey.com>

	* emacs_keymap.c: Remove gdb workaround.

2018-08-12  Tom Tromey  <tom@tromey.com>

	* complete.c (get_y_or_n): Remove gdb workaround.

2018-08-12  Tom Tromey  <tom@tromey.com>

	* Imported readline 7.0 patch 5.

2019-07-12  Tom de Vries  <tdevries@suse.de>
	    Chet Ramey  <chet.ramey@case.edu>

	PR cli/24514
	* readline/display.c (init_line_structures, rl_redisplay): Ensure
	line_size is at	least _rl_screenwidth + 1.

2019-01-31  Alan Hayward  <alan.hayward@arm.com>

	* config.h.in: Add SOURCE/EXTENSION macros.
	* histfile.c (history_truncate_file): Check return of write.
	* util.c (_rl_tropen): Ensure pid is long.

2017-05-19  Eli Zaretskii  <eliz@gnu.org>

	* input.c [_WIN32]: Include <conio.h> to avoid compiler warning on
	MinGW.

2016-09-17  Eli Zaretskii  <eliz@gnu.org>

	* util.c: Include rlshell.h.
	(_rl_tropen) [_WIN32 && !__CYGWIN__]: Open the trace file in the
	user's temporary directory.

	* tcap.h [HAVE_NCURSES_TERMCAP_H]: Include ncurses/termcap.h.

	* input.c (w32_isatty) [_WIN32 && !__CYGWIN__]: New function, to
	replace isatty that is not reliable enough on MS-Windows.
	(isatty) [_WIN32 && !__CYGWIN__]: Redirect to w32_isatty.
	(rl_getc): Call _getch, not getch, which could be an ncurses
	function when linked with ncurses, in which case getch will return
	EOF for any keystroke, because there's no curses window.

	* tilde.c (tilde_expand_word) [_WIN32]:
	* histfile.c (history_filename) [_WIN32]: Windows-specific
	environment variable to replace HOME if that is undefined.

	* funmap.c (default_funmap): Compile rl_paste_from_clipboard on
	all Windows platforms, not just Cygwin.

	* readline.h (rl_paste_from_clipboard): Include declaration for
	all Windows platforms.

	* display.c (insert_some_chars, delete_chars): Don't use the
	MinGW-specific code if linked with ncurses.

	* configure.in:
	* config.h.in: Support ncurses/termcap.h.  The configure script
	was updated accordingly.

	* complete.c [_WIN32 && !__CYGWIN__]: Initialize
	_rl_completion_case_fold to 1.
	(printable_part, rl_filename_completion_function)
	[_WIN32 && !__CYGWIN__]: Handle the drive letter.

2014-12-30  Eli Zaretskii  <eliz@gnu.org>

	* complete.c (stat_char) [_WIN32]: Don't use 'access' and X_OK on
	Windows, they don't work.  Instead, look at the file-name
	extension to determine whether the file is executable.

2014-09-22  Chen Gang  <gang.chen.5i5j@gmail.com>

	Pushed by Joel Brobecker  <brobecker@adacore.com>
	* search.c (_rl_nsearch_init): Remove useless parameter '0' for
	rl_message().

2013-09-24  Pierre Muller  <muller@sourceware.org>

	* readline.c (bind_arrow_keys_internal):
	Handle VK_HOME, VK_END, VK_DELETE and VK_INSERT for mingw
	hosts.

2013-09-23  Martin Benda  <martin.benda@omsquare.com>

	Checked in by Joel Brobecker  <brobecker@adacore.com>
	* util.c (_rl_strnicmp): Add missing semicolon.

2013-05-22  Yao Qi  <yao@codesourcery.com>

	* configure.in: Invoke AC_CANONICAL_BUILD.
	Change $host_os to $build_os.
	* configure: Regenerated.

2012-10-18  Joel Brobecker  <brobecker@adacore.com>

	* terminal.c: Remove duplicate includes of windows.h and
	wincon.h.
	(_rl_get_screen_size): Remove redundant code for MinGW getting
	the console size from the Windows API.

2012-02-24  Pierre Muller  <muller@ics.u-strasbg.fr>

	* signals.c (_rl_block_sigwinch, _rl_release_sigwinch): Add
	conditional SIGWINCH around functions.

2011-05-11  Sterling Augustine  <saugustine@google.com>

	* complete.c (rl_completion_matches): Undo inadvertant checkin.

2011-06-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Avoid free from a signal handler.
	* Makefile.in (xfree.o): Add readline.h.
	* xfree.c: Include stdio.h and readline.h.
	(xfree): Return on RL_STATE_SIGHANDLER.
	* xmalloc.h (xfree): New definition.

2011-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Workaround gdb.base/completion.exp regression on readline-6.2.
	* complete.c (get_y_or_n): Disable the return on RL_STATE_CALLBACK.

2011-05-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Imported readline 6.2, and upstream patch 001.
	* configure: Regenerate.

2011-03-04  Michael Snyder  <msnyder@vmware.com>

	* bind.c (rl_function_dumper): Free allocated memory.

2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* configure: Regenerate.

	* configure.in: m4_include toplevel config/override.m4.
	* configure: Regenerate.

2009-07-30  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* Makefile.in (datarootdir): New variable.
	* doc/Makefile.in (datarootdir): New variable.
	* shlib/Makefile.in (datarootdir): New variable.

2009-04-17  Carlos O'Donell  <carlos@codesourcery.com>

	* Makefile.in: Add html target.  Add dummy install-html and
	install-pdf targets.

2008-08-10  Pedro Alves  <pedro@codesourcery.com>

	Build fixes for DJGPP.

	* signals.c (rl_set_sighandler): Guard access to SIGWINCH.
	* wcwidth.c [__GO32__]: Include wctype.h before wchar.h.

2008-03-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	PR gdb/544
	* rltty.c (block_sigint, release_sigint): Rename to...
	(_rl_block_sigint, _rl_release_sigint): ...these and make them global.
	* rltty.h (_rl_block_sigint, _rl_release_sigint): New prototypes.
	* display.c (rl_redisplay): Wrap the function by the calls to
	_RL_BLOCK_SIGINT and _RL_RELEASE_SIGINT.

2007-09-01  Daniel Jacobowitz  <dan@codesourcery.com>

	PR gdb/2138
	From readline 5.2:
	* configure.in (CROSS_COMPILE): Initialize to empty.
	* configure: Regenerated.

2007-03-27  Brooks Moses  <brooks.moses@codesourcery.com>

	* Makefile.in: Add dummy "pdf" target.

2006-11-13  Denis Pilat  <denis.pilat@st.com>

	* terminal.c (_rl_get_screen_size): use wr and wc variable to store
	window size.

2006-10-21  Ulrich Weigand  <uweigand@de.ibm.com>

	* callback.c: Include "xmalloc.h".
	* Makefile.in: Add dependency.

2006-04-24  Daniel Jacobowitz  <dan@codesourcery.com>

	Imported readline 5.1, and upstream patches 001-004.

2006-03-21  Denis Pilat  <denis.pilat@st.com>

	* histfile.c (read_history_range): Remove '\r' character from
	history lines.

2005-02-10  Denis Pilat  <denis.pilat@st.com>

	* readline/terminal.c (_rl_get_screen_size): Get console size from
	the Windows API when compiling with MinGW.

2005-07-25  Mark Mitchell <mark@codesourcery.com>

	* input.c (rl_getc): Use getch to read console input on
	Windows.
	* readline.c (bind_arrow_keys_internal): Translate
	Windows keysequences into ANSI key sequences.
	* rldefs.h (NO_TTY_DRIVER): Define on MinGW.
	* rltty.c: Conditionalize on NO_TTY_DRIVER throughout.
	
2005-07-03  Mark Kettenis <kettenis@gnu.org>

	From Martin Simmons:
	* configure.in: Check for getpwnam instead of getpwname.
	* configure: Regenerate.

2005-05-09  Mark Mitchell <mark@codesourcery.com>

	* aclocal.m4: Use AC_TRY_LINK to check for mbstate_t.
	* complete.c (pwd.h): Guard with HAVE_PWD_H.
	(getpwent): Guard with HAVE_GETPWENT.
	(rl_username_completion_function): Guard use of getpwent.
	(endpwent): Likewise.
	* config.h.in (HAVE_FCNTL): New macro.
	(HAVE_GETPWENT): Likewise.
	(HAVE_GETPWNAM): Likewise.
	(HAVE_GETPWUID): Likewise.
	(HAVE_KILL): Likewise.
	(HAVE_PWD_H): Likewise.
	* configure: Regenerated.
	* configure.in: Handle MinGW when cross compiling.  Check for
	getpwnam, getpwent, getpwuid, kill, and pwd.h.
	* display.c (rl_clear_screen): Treat Windows like DOS.
	(insert_some_chars): Likewise.
	(delete_chars): Likewise.
	* shell.c (pwd.h): Guard with HAVE_PWD_H.
	(getpwuid): Guard with HAVE_GETPWUID.
	(sh_unset_nodelay_mode): Guard use of fnctl with HAVE_FNCTL_H.
	* signals.c (rl_signal_handler): Don't use SIGALRM or
	SIGQUIT if not defined.  Use "raise" if "kill" is not available.
	(rl_set_signals): Don't set handlers for SIGQUIT or SIGALRM if
	they are not defined.
	(rl_clear_signals): Likewise.
	* tilde.c (pwd.h): Guard with HAVE_PWD_H.
	(getpwuid): Guard declaration with HAVE_GETPWUID.
	(getpwnam): Guard declaration with HAVE_GETPWNAM.
	(tilde_expand_word): Guard use of getpwnam with HAVE_GETPWNAM.

2004-02-19  Andrew Cagney  <cagney@redhat.com>

	* config.guess: Update from version 2003-06-12 to 2004-02-16.
	* config.sub: Update from version 2003-06-13 to 2004-02-16.

2004-01-27  Elena Zannoni  <ezannoni@redhat.com>

        Merge in official patches to readline-4.3 from
	ftp://ftp.cwru.edu/pub/bash/readline-4.3-patches:
	NOTE: Patch-ID readline-43-004 was already applied (see below).

	* bind.c (rl_generic_bind): Pressing certain key sequences
	causes an infinite loop in _rl_dispatch_subseq with the `key' argument
	set to 256.  This eventually causes bash to exceed the stack size
	limit and crash with a segmentation violation.
	Patch-ID: readline43-001.

	* readline.c (_rl_dispatch_subseq): Repeating an edit in
	vi-mode with `.' does not work.
	Patch-ID: readline43-002.

	* mbutil.c (_rl_get_char_len, _rl_compare_chars,
	_rl_adjust_point): When in a locale with multibyte characters, the
	readline display updater will occasionally cause a
	segmentation fault when attempting to compute the length of the first
	multibyte character on the line.  
	Patch-ID: readline43-003.

	* vi_mode.c (_rl_vi_change_mbchar_case): Using the vi editing
	mode's case-changing commands in a locale with multibyte characters
	will cause garbage characters to be inserted into the editing buffer.
	Patch-ID: readline43-005.

2003-12-28  Eli Zaretskii  <eliz@elta.co.il>

	* readline.c (rl_save_state, rl_restore_state): Support systems
	that don't define SIGWINCH.

2003-12-25  Eli Zaretskii  <eliz@elta.co.il>

	* terminal.c (_rl_get_screen_size) [__DJGPP__]: Compute the
	screen width and height using console I/O.
	(_rl_init_terminal_io) [__MSDOS__]: Zero out all the _rl_term_*
	variables.  Convert to _rl_* naming scheme.
	(_rl_set_cursor) [__MSDOS__]: Ifdef away this function.

2003-12-23  Eli Zaretskii  <eliz@elta.co.il>

	* display.c (_rl_move_vert) [__MSDOS__]: Don't use undeclared
	variable `l'.  Use `delta' instead recomputing its value anew.
	Assign -delta to i instead of the other way around.

2003-12-11  Michael Chastain  <mec.gnu@mindspring.com>

	* rlmbutil.h: Require HAVE_MBSTATE_T for HANDLE_MULTIBYTE.
	Revert requirement of HAVE_MBRTOWC.  Delete macro definitions
	that attempted to fake mbstate_t if HAVE_MBSRTOCWS is defined
	and HAVE_MBSTATE_T is not defined.

2003-06-14  H.J. Lu <hongjiu.lu@intel.com>
 
	* support/config.guess: Update to 2003-06-12 version.
	* support/config.sub: Update to 2003-06-13 version.

2003-05-25  Mark Kettenis  <kettenis@gnu.org>

	* aclocal.m4: Don't add wcwidth.o if we don't have wchar.h.
	* configure: Regenerate.

2003-05-13  Andreas Jaeger  <aj@suse.de>

        * support/config.guess: Update to 2003-05-09 version.
        * support/config.sub: Update to 2003-05-09 version.

2003-03-03  Joel Brobecker  <brobecker@gnat.com>

	* aclocal.m4: Add check for mbrtowc.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* rlmbutil.h: Disable multi-byte if mbrtowc is not defined.

2003-03-03  Kris Warkentin  <kewarken@qnx.com>

	* aclocal.m4: Cause wcwidth check to substitute
	HAVE_WCWIDTH for building.
	* Makefile.in: Add wcwidth object to lib if required.
	* shlib/Makefile.in: Likewise.
	* configure: Regenerate.
	
2003-01-09  Michael Chastain  <mec@shout.net>

	From Chet Ramey, <chet@po.cwru.edu>, the readline maintainer:
	ftp://ftp.cwru.edu/pub/bash/readline-4.3-patches/readline43-004

	* display.c: Fix perverse screen refresh with UTF-8.
	When running in a locale with multibyte characters, the
	readline display updater will use carriage returns when
	drawing the line, overwriting any partial output already on
	the screen and not terminated by a newline.
	Patch-ID: readline43-004

2003-01-08  Chris Demetriou  <cgd@broadcom.com>

	* config.guess: Update to 2003-01-03 version.
	* config.sub: Update to 2003-01-03 version.

2002-12-16  Christopher Faylor  <cgf@redhat.com>

	* configure.in: Remove --enable-shared option.  It shouldn't be used
	for gdb.
	* configure: Regenerate.

2002-12-16  Christopher Faylor  <cgf@redhat.com>

	* config/cygwin.cache: Prime mbstate_t.

2002-12-06  Elena Zannoni  <ezannoni@redhat.com>

        Import of readline 4.3. NB: This import includes those gdb
        local changes that aren't in the official readline sources.

        * compat.c, mbutil.c, misc.c, rlmbutil.h, rltypedefs.h,
        text.c, doc/history.0, doc/history.3, support/wcwidth.c,
        examples/readlinebuf.h, examples/rlcat.c: New files.

        * CHANGELOG, CHANGES, INSTALL,  MANIFEST, Makefile.in, README,
        aclocal.m4, ansi_stdlib.h, bind.c, callback.c, chardefs.h,
        complete.c, config.h.in, configure, configure.in, display.c,
        emacs_keymap.c, funmap.c, histexpand.c, histfile.c, histlib.h,
        history.c, history.h, histsearch.c, input.c, isearch.c,
        keymaps.c, keymaps.h, kill.c, macro.c, nls.c, parens.c,
        posixdir.h, readline.c, readline.h, rlconf.h, rldefs.h,
        rlprivate.h, rlshell.h, rlstdc.h, rltty.c, savestring.c,
        search.c, shell.c, signals.c, terminal.c, tilde.c, tilde.h,
        undo.c, util.c, vi_keymap.c, vi_mode.c, xmalloc.c, xmalloc.h,
        doc/Makefile.in, doc/hist.texinfo, doc/hstech.texinfo,
        doc/hsuser.texinfo, doc/manvers.texinfo, doc/readline.3,
        doc/rlman.texinfo, doc/rltech.texinfo, doc/rluser.texinfo
        doc/rluserman.texinfo, doc/texi2dvi, doc/texi2html,
        shlib/Makefile.in, support/install.sh, support/mkdirs,
        support/mkdist, support/shlib-install, support/shobj-conf,
        examples/Inputrc, examples/Makefile.in, examples/fileman.c,
        examples/histexamp.c, examples/manexamp.c, examples/rl.c,
        examples/rlfe.c, examples/rltest.c, examples/rlversion.c:
        Modified files.

2002-08-23  Andrew Cagney  <ac131313@redhat.com>

	* support/config.guess: Import version 2002-08-23.
	* support/config.sub: Import version 2002-08-22.

2002-07-19  Chris Demetriou  <cgd@broadcom.com>

	* support/config.guess: Update from ../config.guess.
	* support/config.sub: Update from ../config.sub.

2002-02-24  Elena Zannoni  <ezannoni@redhat.com>

        * ChangeLog.gdb: Renamed from ChangeLog.Cygnus.

2002-02-24  Daniel Jacobowitz  <drow@mvista.com>

        * support/config.guess: Import from master sources, rev 1.232.
        * support/config.sub: Import from master sources, rev 1.246.

2002-02-01  Ben Elliston  <bje@redhat.com>

	* config.guess: Import from master sources, rev 1.229.
	* config.sub: Import from master sources, rev 1.240.

2002-01-17  H.J. Lu  (hjl@gnu.org)

	* support/config.guess: Import from master sources, rev 1.225.
	* support/config.sub: Import from master sources, rev 1.238.

2001-07-20  Andrew Cagney  <ac131313@redhat.com>

	* support/config.guess: Update using ../config.sub.

2001-07-16  Andrew Cagney  <ac131313@redhat.com>

	* support/config.sub: Update using ../config.sub.

2001-06-15  Elena Zannoni  <ezannoni@redhat.com>

        * configure.in: Add -fsigned-char to LOCAL_CFLAGS for Linux
        running on the IBM S/390.
	* configure: Ditto.

2001-01-07  Michael Sokolov  <msokolov@ivan.Harhan.ORG>

	* rltty.c (save_tty_chars): Fix compilation-stopping typo.

2000-07-10  Eli Zaretskii  <eliz@is.elta.co.il>

	* terminal.c (_rl_get_screen_size) [__DJGPP__]: Determine screen
	size via DJGPP-specific calls.
	(_rl_init_terminal_io) [__MSDOS__]: DJGPP-specific terminal
	initialization.
	(_rl_backspace) [__MSDOS__]: Don't call tputs.
	(ding) [__MSDOS__]: Use DJGPP-specific calls to support visible
	bell.

	* display.c (_rl_move_vert) [__MSDOS__]: Support cursor movement
	upwards with DJGPP-specific calls.
	(_rl_clear_to_eol) [__MSDOS__]: Don't call tputs.
	(_rl_clear_screen) [__MSDOS__]: Support clear-screen with
	DJGPP-specific calls.
	(insert_some_chars) [__MSDOS__]: Don't call tputs.
	(delete_chars) [__MSDOS__]: Don't call tputs.

2000-07-08  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

        * readline/readline.h: Ifdef out the export of savestring().
        It should not have been in the distribution.

2000-07-07  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

        * Import of readline 4.1.

        Locally modified files: Makefile.in, configure.in, configure
        (regenerated), config.h.in (regenerated), rltty.c,
 	shell.c signals.c.

        Locally added files: acconfig.h, config/*, config.h.bot,
        cross-build/*, doc/inc-hit.texinfo.

        New files: USAGE, rlprivate.h, rlshell.h, xmalloc.h.

2000-03-16  Eli Zaretskii  <eliz@is.elta.co.il>

	* support/shobj-conf: Shared libs are unsupported on MSDOS.

	* bind.c (_rl_read_file): Open files in binary mode.  Strip CR
	characters after reading the file.
	(rl_re_read_init_file, rl_read_init_file): Allow for _inputrc on
	DOS.

	* complete.c (username_completion_function): Don't bypass getpw*
	function calls for DJGPP.
	(Filename_completion_function): Handle d:foo/bar file names.

	* display.c (_rl_move_vert) [__GO32__]: fflush the stream, to make
	sure cursor position is up to date.
	(_rl_clear_screen) [__GO32__]: Clear screen and home the cursor.
	(insert_some_characters, delete_characters) [__DJGPP__]: Don't use
	memcpy.

	* histfile.c (read_history_range, history_truncate_file)
	(history_do_write) [__MSDOS__]: Allow for underscore instead of
	the leading dot in file names.

	* input.c: Don't use GO32-specific workarounds if HAVE_SELECT or
	HAVE_TERMIOS_H are defined.

	* readline.c: Don't disable signals if __DJGPP__ is defined.

	* rltty.c: Don't disable signals and don't bypass termios code for
	DJGPP (if HAVE_TERMIOS_H is defined).

	* signals.c: Don't disable signals for DJGPP.

	* terminal.c (_rl_get_screen_size) [__DJGPP__]: Initialize screen
	dimensions.
	(ding) [__DJGPP__]: Support visual bell.

1999-08-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	From Philippe De Muyter  <phdm@macqel.be>
	* shell.c (stdio.h): File included, for definition of NULL.
	* readline/rltty.c (get_tty_settings): Conditionalize
	call to set_winsize on TIOGWINSZ.

1999-07-30  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Imported Readline 4.0. Integrated all the Cygnus
	local changes since last import.

	New files: rlstdc.h, savestring.c, shlib directory,
	doc/manvers.texinfo, examples/rlversion.c, 
	support/install-shlib, support/shobj-conf.

	Removed files: MANIFEST.doc, doc/inc-hist.texi.

1999-07-13  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* acconfig.h: Fix typo: it's GWINSZ_IN_SYS_IOCTL, not
	TIOCGWINSZ_IN_SYS_IOCTL.

	* config.h.in: Regenerate with autoheader.

1999-04-27  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* ChangeLog.Cygnus: new file. It is the old Changelog.
	* ChangeLog: removed. It was conflicting with CHANGELOG
	  on Windows.

1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)

	* Makefile.in (install): Make comment about this change more explicit.

1999-04-22  Jason Molenda  (jsm@bugshack.cygnus.com)

        * Makefile.in (install): Don't install the final libreadline.a
        or .h files.

Tue Mar 23 10:56:08 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	Patches from Robert Hoehne <robert.hoehne@gmx.net>:
 	
	* display.c: Change some terminal calls to work on DJGPP.
	* terminal.c: Likewise.
	* Makefile.in: Remove . from the VPATH directive.
	
Tue Mar  9 14:58:13 1999  Geoffrey Noer  <noer@cygnus.com>

	* support/config.sub: Recognize cygwin*, not just cygwin32.

Tue Feb  9 10:38:57 1999  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* configure.in: Do not use the ./support directory.
	* configure: Regenerate.

Wed Jan  6 12:24:19 1999  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Use LOCAL_CFLAGS rather than CFLAGS for
	searching libtermcap directory.
	* configure: Regenerate.

Thu Dec 31 12:07:01 1998  Christopher Faylor <cgf@cygnus.com>

	* configure.in: Search devo libtermcap directory for termcap.h
	when compiling for cygwin.
	* configure: Regenerated.

1998-12-30  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (install): Only try to copy libreadline.a and
	libhistory.a if they exist.

Tue Dec 29 23:49:20 1998  Christopher Faylor <cgf@cygnus.com>

	* cross-build/cygwin.cache: Add a couple more known settings.
	* configure.in: Fix typo.
	* configure: Regenerated.

Tue Dec 29 18:11:28 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* cross-build: new directory.
	
	* cross-build/cygwin.cache: new file. Used for Cygwin cross builds.

	* configure.in: added tests for cross-build for Cygwin.

1998-12-24  Jason Molenda  (jsm@bugshack.cygnus.com)

	* Makefile.in: Add CYGNUS LOCAL comment.
	* acconfig.h: Add missing defines.
	* config.h.bot: Add missing content.
	* configure, config.h.in: Regenerated.

Wed Dec 23 16:21:41 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* Makefile.in: comment out the rule to rebuild configure by 
	running autoconf. 

Tue Dec 22 10:00:30 1998  Elena Zannoni  <ezannoni@kwikemart.cygnus.com>

	* shell.c (savestring): ifdef'd it out. 

	* Imported new version of Readline 2.2.1. Removed all the Cygnus
	local changes.

	New files: acconfig.h, aclocal.m4, ansi_stdlib.h, callback.c,
 	config.h.in, configure, histexpand.c, histfile.c, histlib.h,
 	histsearch.c, input.c, kill.c, macro.c, nls.c, posixdir.h,
 	posixjmp.h, posixstat.h, rlconf.h, rltty.h, rlwinsize.h, shell.c,
 	tcap.h, terminal.c, undo.c, util.c, support directory.

	Removed files: sysdep*, config directory.
	

Fri Dec  4 15:25:41 1998  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by Jim Blandy
 	<jimb@zwingli.cygnus.com> and David Taylor
 	<taylor@texas.cygnus.com> as part of a project to merge in changes
 	made by HP; HP did not create ChangeLog entries.

	* config/mp-enable-tui: New file.
	(TUI_CFLAGS): Search devo's include directory, as long as we're
 	totally ruining modularity.
	(INCLUDE_SRCDIR): New var.
	(GDB_TUI_SRCDIR): Fix syntax error.

	* configure.in: Check the --enable-tui flag; if it's set, include
 	a makefile fragment that #defines TUI and adds the needed #include
 	directories.
	(*-*-hpux*): New host; use sysdep-hpux.h.

	* Makefile.in (.c.o): Check the variable set in the makefile
	fragment above.

	* display.c (term_goto): declare it.
	(insert_some_chars): set it.
	(delete_chars): set it.

	* readline.c: add tui include files surrounded by TUI.
	(rl_reset): new function, move some of rl_abort functionality to
 	here.
	(rl_abort): call rl_reset.
	(rl_getc): tui changes.
	(init_terminal_io): tui changes.

	* readline.h (tui_version, fputc_unfiltered, fputs_unfiltered,
	tui_tputs): declare if TUI is defined.

	* rltty.c (prepare_terminal_settings): additional comment.

	* signals.c: add tui include files surrounded by TUI.  move #if
 	and #endif to column 1 so HP's compiler will accept them.  Remove
 	declaration of tuiDoAndReturnToTop since it's declared in tui.h.
	(rl_handle_sigwinch): call tuiDoAndReturnToTop if TUI defined.
  	(rl_handle_sigwinch_on_clear): define if TUI defined.
	(rl_set_signals): if TUI, avoid infinite recursion.
	(rl_clear_signals): install rl_handle_sigwinch_on_clear.

	* sysdep-hpux.h: New file.

Mon Nov  2 15:26:33 1998  Geoffrey Noer  <noer@cygnus.com>

        * configure.in: Check cygwin* instead of cygwin32*.

Tue Jul 28 09:43:27 1998  Jeffrey A Law  (law@cygnus.com)

	* sysdep-hpux11.h: New file.
	* configure.in (*-*-*-hpux11*): Use sysdep-hpux11.h.

Thu Jul 23 17:48:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.bat: Remove obsolete file.
	* examples/configure.bat: Remove obsolete file.

Wed May 13 13:41:53 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sysdep-6irix.h: New file.
	* configure.in (*-*-irix6*): New host; use sysdep-6irix.h.

	* Makefile.in (isearch.o, search.o): Depend upon sysdep.h.
	(Makefile): Depend upon $(srcdir)/configure.in.

Thu Apr  9 11:59:38 1998  Ian Dall (<Ian.Dall@dsto.defence.gov.au>

	* configure.in (host==netbsd): Include config/mh-bsd44.
	* config/mh-bsd44: New file.

Wed Dec  3 16:48:20 1997  Michael Snyder  (msnyder@cleaver.cygnus.com)

	* rltty.c: fix typos.

Tue Oct  8 08:59:24 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* tilde.c (tilde_word_expand):  __MSDOS___ -> __MSDOS__

Sat Oct 05 11:24:34 1996  Mark Alexander  <marka@cygnus.com>

	* rldefs.h: On Linux, include <termios.h> to fix compile error
	in <termcap.h>.

Wed Sep  4 18:06:51 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* rldefs.h:  Enable HANDLE_SIGNALS for cygwin32.

Thu Aug 29 16:59:45 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (i[345]86-*-*): Recognize i686 for pentium pro.

Fri Aug 16 17:49:57 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* complete.c:  Include <pwd.h> if not DOS, and if cygwin32 or not
	win32.
	* configure.in:  Add test for *-*-cygwin32* to use config/mh-posix.
	* readline.c:  Move decl of tgetstr to rldefs.h.
	* (_rl_set_screen_size):  Remove redundant ifdef MINIMALs.
	* rldefs.h:  Don't do MINIMAL for cygwin32.  Cygwin32 now uses
	full-blown readline, except for termcap.

Sun Aug 11 21:06:26 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* rldefs.c:  Get rid of define of SIGALRM if _WIN32 or __MSDOS__.
	* Don't define ScreenCols/ScreenRows/... if cygwin32.
	* sysdep-norm.h:  Don't include <malloc.h> if cygwin32.

Sun Aug 11 14:59:09 1996  Fred Fish  <fnf@cygnus.com>

	* rldefs.h:  If __osf__is defined, include <termio.h> instead of
	<sgtty.h>.

Fri Aug  9 08:54:26 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* bind.c complete.c history.c readline.c:  Don't include sys/file.h.
	* complete.c display.c parens.c readline.c rldefs.h rltty.c
	signals.c tilde.c:  Change refs to _MSC_VER and __WIN32__ to _WIN32.
	* signals.c (rl_signal_handler):  Ifdef out kill if _WIN32.
	* sysdep-norm.h:  Ifdef out include of dirent.h if _WIN32.
	Include malloc.h if _WIN32.

Thu Jul 18 15:59:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rldefs.h (sys/uio.h) Before sys/stream.h is included under AIX,
	include sys/uio.h, which prevents an undefined structure used in a
	prototype message from being generated.

Tue Jun 25 23:05:55 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

        * Makefile.in (datadir): Set to $(prefix)/share.
	(docdir): Removed.

Sun May 26 15:14:42 1996  Fred Fish  <fnf@cygnus.com>

	From: David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdep-linux.h: New file.
	* display.c: Add include of "sysdep.h" to get HAVE_VARARGS_H.
	* configure.in: Change pattern i[345]86-*-linux* into *-*-linux* to
	support non-x86 based Linux platforms.

Sun Apr  7 22:06:11 1996  Fred Fish  <fnf@cygnus.com>

	From: Miles Bader  <miles@gnu.ai.mit.edu>
	* config/mh-gnu: New file.
	* configure.in (*-*-gnu*): New host.

Sun Apr  7 13:21:51 1996  Fred Fish  <fnf@cygnus.com>

	From: Robert Lipe <robertl@dgii.com>
	* configure.in: SCO OpenServer 5 (a.k.a 3.2v5*) is more like
	SCO 3.2v4 than 3.2v2.

Wed Jan  3 18:22:10 1996  steve chamberlain  <sac@slash.cygnus.com>

	* readline.c, display.c, complete.c: Add _MSC_VER to list of
	things which can't do most things.

Thu Nov 16 15:39:05 1995  Geoffrey Noer <noer@cygnus.com>

	* complete.c: Change WIN32 to __WIN32__, added #else return NULL
	to end of that define.

Tue Oct 31 10:38:58 1995  steve chamberlain  <sac@slash.cygnus.com>

	* display.c, parens.c, readline.c, rldefs.h: Change use of
	WIN32 to __WIN32__.

Tue Oct 10 11:07:23 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (BISON): Remove macro.

Tue Oct 10 08:49:00 1995  steve chamberlain  <sac@slash.cygnus.com>

	* complete.c (filename_completion_function): Enable for
	win32 when not MSC.

Sun Oct  8 04:17:19 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.in:  Handle powerpc-ibm-aix* like rs6000-ibm-aix*.

Sat Oct  7 20:36:16 1995  Michael Meissner  <meissner@cygnus.com>

	* rltty.c (outchar): Return an int, like tputs expects.
	* signals.c (_rl_output_character_function): Ditto.

Fri Sep 29 15:19:23 1995  steve chamberlain  <sac@slash.cygnus.com>

	Fixes for when the host WIN32, but not MSC.
	* complete.c: Sometimes have pwd.h
	* parens.c: WIN32 has similar restrictions to __GO32__.
	* readline.c (__GO32__): Some of this moved into rldefs.h
	* signals.c (__GO32__): Likewise.
	* rldefs.h (MSDOS||WIN32) becomes MSDOS||MSC.
	(WIN32&&!WIN32): New definitions.

Wed Sep 20 12:57:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New synonym for realclean.

Wed Mar  1 13:33:43 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rltty.c (outchar): Provide prototype for outchar, to silence
	type warnings in passing outchar to tputs on systems like Linux
	that have full prototypes.

	* signals.c (_rl_output_character_function): Provide prototype to
	silence type warnings.

Sun Jan 15 14:10:37 1995  Steve Chamberlain  <sac@splat>

	* rldefs.h: Define MINIMAL for __GO32__ and WIN32.
	* complete.c, display.c, readline.c, rltty.c: Test MINIMAL
	instead of __GO32__.

Wed Aug 24 13:04:47 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Change i[34]86 to i[345]86.

Sat Jul 16 13:26:31 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* configure.in (m88*-harris-cxux7*): Recognize.
	* sysdep-cxux7.h: New file.

Fri Jul  8 13:18:33 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* rttty.c (control_meta_key_on): Remove superfluous testing of
	__GO32__.

Thu Jun 30 15:21:54 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* rltty.c (control_meta_key_on): Don't compile if __GO32__ is
	defined.
	(rltty_set_default_bindings): Likewise.
	* display.c (insert_some_chars, delete_chars): row_start should be
	a short.
	* parens.c (rl_insert_close): No FD_SET if using __GO32__.
	* readline.c (rl_gather_tyi): Strip off spurious high bits.

Sun Jun 12 03:51:52 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* history.c:  Swap inclusion of rldefs.h and chardefs.h to avoid
	CTRL macro redefinition.

Mon May  9 18:29:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* readline.c (readline_default_bindings): Don't compile if
	__GO32__ is defined.
	(_rl_set_screen_size): Likewise.
	* rltty.c (rltty_set_default_bindings): Likewise.
	(control_meta_key): Likewise.
	* display.c: If __GO32__ is defined, include <sys/pc.h>.
	* parens.c: If __GO32__ is defined, undefine FD_SET.
	* signals.c: Include SIGWINCH handling in the set of things which
	is not done if HANDLE_SIGNALS is not set.

Fri May  6 13:38:39 1994  Steve Chamberlain  (sac@cygnus.com)

        * config/mh-go32: New fragment.
	* configure.in (host==go32): Use go32 fragment.

Wed May  4 14:36:53 1994  Stu Grossman  (grossman@cygnus.com)

	* chardefs.h, rldefs.h:  Move decls of string funcs from chardefs.h
	to rldefs.h so that they don't pollute apps that include
	readline.h.
	* history.c:  include rldefs.h to get decls of string funcs.

Wed May  4 12:15:11 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* configure.in (rs6000-bull-bosx*): New configuration, RS/6000
	variant.

Wed Apr 20 10:43:52 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Use mh-posix for sunos4.1*.

Wed Apr 13 21:28:44 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* rltty.c (set_tty_settings): Don't set readline_echoing_p.
	(rl_deprep_terminal) [NEW_TTY_DRIVER]: Set readline_echoing_p.

Sun Mar 13 09:13:12 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Add TAGS target.

Wed Mar  9 18:01:31 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* isearch.c, search.c: Include sysdep.h.

Thu Mar  3 17:40:03 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* configure.in: For ISC, use mh-sysv, not mh-isc.

Thu Feb 24 04:13:53 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* Merge in changes from bash-1.13.5. Merge changes from glob/tilde.c
	into tilde.c and use it. Add system function declarations where
	necessary. Check for __GO32__, not _GO32_ consistently.
	* Makefile.in:  Update dependencies.
	* rltty.c:  Include <sys/file.h> to match include file setup
	in readline.c for rldefs.h. Otherwise we get inconsistent
	TTY_DRIVER definitions in readline.c and rltty.c.
	* bind.c, complete.c:  Do not include <sys/types.h>, it is already
	included via sysdep.h, which causes problems if <sys/types.h> has
	no multiple inclusion protection.
	* readline.c (_rl_set_screen_size):  Reestablish test for
	TIOCGWINSZ_BROKEN.
	* rldefs.h:  Define S_ISREG if necessary.

Fri Feb 18 08:56:35 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Add search.o rule for Sun make.

Wed Feb 16 16:35:49 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* rltty.c:  #if out some code if __GO32__.

Tue Feb 15 14:07:08 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* readline.c (_rl_output_character_function), display.c:
	Return int, not void, to conform with the expected arg of tputs.
	* readline.c (init_terminal_io):  tgetflag only takes 1 arg.
	* readline.c (_rl_savestring):  New function.
	* chardefs.h:  To avoid conflicts and/or warnings, define
	savestring as a macro wrapper for _rl_savestring.
	* display.c (extern term_xn):  It's an int flag, not a string.
	* charsdefs.h, rldefs.h:  Remove HAVE_STRING_H-related junk.

Sat Feb  5 08:32:30 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Remove obsolete rules for history.info and
	readline.info.

Thu Jan 27 17:04:01 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* chardefs.h: Only declare strrchr if it is not #define'd.

Tue Jan 25 11:30:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rldefs.h: Accept __hpux as well as hpux for HP compiler in ANSI mode.

Fri Jan 21 17:31:26 1994  Jim Kingdon  (kingdon@lisa.cygnus.com)

	* chardefs.h, tilde.c: Just declare strrchr rather than trying to
	include a system header.

Fri Jan 21 14:40:43 1994  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (distclean, realclean):  Expand local-distclean
	inline after doing recursion.  You can't recurse after removing
	Makefile.  Make them depend on local-clean.
	* Makefile.in (local-distclean):  Remove now superfluous target.

Mon Jan 17 12:42:07 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* readline.c (doing_an_undo): Delete second declaration, since it
	confuses the alpha-osf1 native compiler.

Sun Jan 16 12:33:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* complete.c, bind.c: Include <sys/stat.h>.
	* complete.c: Define X_OK if not defined by a system header.

	* chardefs.h: Don't declare xmalloc.

	* keymaps.h: Include "chardefs.h" not <readline/chardefs.h>.

	* Makefile.in (clean mostlyclean distclean realclean): Recurse
	into subdirectories as well as doing this directory.  Add clean-dvi
	target.

Sat Jan 15 19:36:12 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* readline.c, display.c:  Patches to allow use of all 80
	columns on most terminals (those with am and xn).

	Merge in changes from bash-1.13.  The most obvious one is
	that the file readline.c has been split into multiple files.
	* bind.c, complete.c, dispay.c, isearch.c, parens.c, rldefs.h,
	rltty.c, search.c signals.c, tilde.c, tilde.h, xmalloc.c:  New files.

Sat Dec 11 16:29:17 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* readline.c (rl_getc): If GO32, trim high bit from getkey,
	otherwise fancy PC keys cause grief.

Fri Nov  5 11:49:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Add doc to configdirs.
	* Makefile.in (info dvi install-info clean-info): Recurse into doc.

Fri Oct 22 07:55:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Add * to end of all OS names.

Tue Oct  5 12:33:51 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* readline.c: Add stuff for HIUX to place where we detect termio
	vs. sgtty (ugh, but I don't see a simple better way).

Wed Sep 29 11:02:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* readline.c (parser_if): Free tname when done with it (change
	imported from from bash	1.12 readline).

Tue Sep  7 17:15:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in (m88k-*-sysvr4*): Comment out previous change.

Fri Jul  2 11:05:34 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (*-*-riscos*): New entry; use mh-sysv.

Wed Jun 23 13:00:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Add comment.

Mon Jun 14 14:28:55 1993  Jim Kingdon  (kingdon@eric)

	* configure.in (m88k-*-sysvr4*): Use sysdep-norm.h.

Sun Jun 13 13:04:09 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in ({real,dist}clean): Remove sysdep.h.

Thu Jun 10 11:22:41 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in: Add mostlyclean, distclean, and realclean targets.

Fri May 21 17:09:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mh-isc: New file.
	* configure.in: Use it.

Sat Apr 17 00:40:12 1993  Jim Kingdon  (kingdon at calvin)

	* readline.c, history.c: Don't include sys/types.h; sysdep.h does.

	* config/mh-sysv: Define TIOCGWINSZ_BROKEN.
	readline.c: Check it.

Wed Mar 24 02:06:15 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)

	* Makefile.in: add installcheck & dvi targets

Fri Mar 12 18:36:53 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognize *-*-solaris2* instead of *-*-solaris* (a
	number of people want to call SunOS 4.1.2 "solaris1.0"
	and get it right)

Tue Mar  2 21:25:36 1993  Fred Fish  (fnf@cygnus.com)

	* sysdep-sysv4.h:  New file for SVR4.
	* configure.in (*-*-sysv4*):  Use sysdep-sysv4.h.

	* configure.in (*-*-ultrix2):  Add triplet from Michael Rendell
	(michael@mercury.cs.mun.ca)

Tue Dec 15 12:38:16 1992  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (i[34]86-*-sco3.2v4*): use mh-sco4.
	* config/mh-sco4: New file, like mh-sco but without defining
	_POSIX_SOURCE.

Wed Nov 11 21:20:14 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in:  Reformat to one-case-per-line.
	Handle SunOS 3.5, as per Karl Berry, <karl@claude.cs.umb.edu>.

Wed Nov  4 15:32:31 1992  Stu Grossman  (grossman at cygnus.com)

	* sysdep-norm.h:  Remove some crud, install dire warning.

Thu Oct 22 01:08:13 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  Make SCO work again...

Mon Oct 12 15:04:07 1992  Ian Lance Taylor  (ian@cygnus.com)

	* readline.c (init_terminal_io): if tgetent returns 0, the
	terminal type is unknown.

Thu Oct  1 23:44:14 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: use cpu-vendor-os triple instead of nested cases

Wed Sep 30 12:58:57 1992  Stu Grossman  (grossman at cygnus.com)

	* readline.c (rl_complete_internal):  Cast alloca to (char *) to
	avoid warning.

Fri Sep 25 12:45:05 1992  Stu Grossman  (grossman at cygnus.com)

	* readline.c (clear_to_eol, rl_generic_bind):  Make static.
	(rl_digit_loop):  Add arg to call to rl_message().
	* vi_mode.c (rl_vi_first_print):  Add arg to call to
	rl_back_to_indent().

Wed Aug 19 14:59:07 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: always create installation directories, use full
	file name for install target.

Wed Aug 12 15:50:57 1992  John Gilmore  (gnu@cygnus.com)

	* readline.c (last_readline_init_file):  Fix typo made by Steve
	Chamberlain/DJ Delorie.  Proper control file name is ~/.inputrc,
	not ~/inputrc.

Thu Jun 25 16:15:27 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  Make bsd based systems use sysdep-obsd.h.

Tue Jun 23 23:22:53 1992  Per Bothner  (bothner@cygnus.com)

	* config/mh-posix:  New file, for Posix-compliant systems.
	* configure.in:  Use mh-posix for Linux (free Unix clone).

Tue Jun 23 21:59:20 1992  Fred Fish  (fnf@cygnus.com)

	* sysdep-norm.h (alloca):  Protect against previous definition as
	a macro with arguments.

Fri Jun 19 15:48:54 1992  Stu Grossman  (grossman at cygnus.com)

	* sysdep-obsd.h:  #include <sys/types.h> to make this more Kosher.

Fri Jun 19 12:53:28 1992  John Gilmore  (gnu at cygnus.com)

	* config/mh-apollo68v, mh-sco, mh-sysv, mh-sysv4}: RANLIB=true.

Mon Jun 15 13:50:34 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: use mh-sysv4 on solaris2

Mon Jun 15 12:28:24 1992  Fred Fish  (fnf@cygnus.com)

	* config/mh-ncr3000 (INSTALL):  Don't use /usr/ucb/install,
	it is broken on ncr 3000's.
	* config/mh-ncr3000 (RANLIB):  Use RANLIB=true.

Mon Jun 15 01:35:55 1992  John Gilmore  (gnu at cygnus.com)

	* readline.c: Make new SIGNALS_* macros to parameterize the 
	ugly changes in signal blocking.  Use them throughout,
	reducing #ifdef HAVE_POSIX_SIGNALS and HAVE_BSD_SIGNALS clutter
	significantly.  Make all such places use POSIX if available,
	to avoid losing with poor `sigsetmask' emulation from libiberty.

Sun Jun 14 15:19:51 1992  Stu Grossman  (grossman at cygnus.com)

	* readline.c (insert_some_chars):  Return void.

Thu Jun 11 01:27:45 1992  John Gilmore  (gnu at cygnus.com)

	* readline.c:  #undef PC, which Solaris2 defines in sys/types.h,
	clobbering the termcap global variable PC.

Tue Jun  9 17:30:23 1992  Fred Fish  (fnf@cygnus.com)

	* config/{mh-ncr3000, mh-sysv4}:  Change INSTALL to use
	/usr/ucb/install.

Mon Jun  8 23:10:07 1992  Fred Fish  (fnf@cygnus.com)

	* readline.h (rl_completer_quote_characters):  Add declaration.
	* readline.c (rl_completer_quote_characters):  Add global var.
	* readline.c (strpbrk):  Add prototype and function.
	* readline.c (rl_complete_internal):  Add code to handle
	expansion of quoted strings.

Mon May 11 12:39:30 1992  John Gilmore  (gnu at cygnus.com)

	* readline.c:  Can't initialize FILE *'s with stdin and stdout,
	because they might not be constant.  Patch from Tom Quinn,
	trq@dinoysos.thphys.ox.ac.uk.

Tue Apr 28 21:52:34 1992  John Gilmore  (gnu at cygnus.com)

	* readline.h:  Declare rl_event_hook (which already existed).
	Suggested by Christoph Tietz <tietz@zi.gmd.dbp.de>.

Wed Apr 22 18:08:01 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* configure.in: remove subdirs declaration.  The obsolete semantic
	  for subdirs has been usurped by per's new meaning.

Tue Apr 21 11:54:23 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: rework CFLAGS so that they can be set on the
	  command line to make.  Remove MINUS_G.  Default CFLAGS to -g.

Fri Apr 10 23:02:27 1992  Fred Fish  (fnf@cygnus.com)

	* configure.in:  Recognize new ncr3000 config.
	* config/mh-ncr3000:  New NCR 3000 config file.

Wed Mar 25 10:46:30 1992  John Gilmore  (gnu at cygnus.com)

	* history.c (stifle_history):  Negative arg treated as zero.

Tue Mar 24 23:46:20 1992  K. Richard Pixley  (rich@cygnus.com)

	* config/mh-sysv: INSTALL_PROG -> INSTALL.

Mon Feb 10 01:41:35 1992  Brian Fox  (bfox at gnuwest.fsf.org)

	* history.c (history_do_write) Build a buffer of all of the lines
	to write and write them in one fell swoop (lower overhead than
	calling write () for each line).  Suggested by Peter Ho.

	* vi_mode.c (rl_vi_subst) Don't forget to end the undo group.

Sat Mar  7 00:15:36 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: remove FIXME's on info and install-info targets.

Fri Mar  6 22:02:04 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added check target.

Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

Fri Feb 21 14:37:32 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* readline.c, examples/fileman.c: patches from DJ to support DOS

Thu Feb 20 23:23:16 1992  Stu Grossman  (grossman at cygnus.com)

	* readline.c (rl_read_init_file):  Make sure that null filename is
	not passed to open() or else we end up opening the directory, and
	read a bunch of garbage into keymap[].

Mon Feb 17 17:15:09 1992  Fred Fish  (fnf at cygnus.com)

	* readline.c (readline_default_bindings):  Only make use of VLNEXT
	when both VLNEXT and TERMIOS_TTY_DRIVER is defined.  On SVR4
	<termio.h> includes <termios.h>, so VLNEXT is always defined.

	* sysdep-norm.h (_POSIX_VERSION):  Define this for all SVR4
	systems so that <termios.h> gets used, instead of <termio.h>.

Fri Dec 20 12:04:31 1991  Fred Fish  (fnf at cygnus.com)

	* configure.in:  Change svr4 references to sysv4.

Tue Dec 10 04:07:20 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: infodir belongs in datadir.

Fri Dec  6 23:23:14 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: remove spaces following hyphens, bsd make can't
	  cope. added clean-info.  added standards.text support.  Don't
	  know how to make info anymore.

	* configure.in: commontargets is no longer a recognized hook, so
	  remove it.  new subdir called doc.

Thu Dec  5 22:46:10 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
	  and mandir now keyed off datadir by default.

Fri Nov 22 09:02:32 1991  John Gilmore  (gnu at cygnus.com)

	* sysdep-obsd.h:  Rename from sysdep-newsos.h.
	* configure.in:  Use sysdep-obsd for Mach as well as NEWs.

	* sysdep-norm.h, sysdep-aix.h:  Add <sys/types.h>, which POSIX
	requires to make <dirent.h> work.  Improve Sun alloca decl.

Thu Nov 21 18:48:08 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Clean up ../glob/tilde.c -> tilde.o path.
	Clean up makefile a bit in general.

Thu Nov 21 14:40:29 1991  Stu Grossman  (grossman at cygnus.com)

	* configure.in, config/mh-svr4:  Make SVR4 work.

	* readline.c:  Move config stuff to sysdep.h, use typedef dirent
	consistently, remove refs to d_namlen (& D_NAMLEN) to improve
	portability.  Also, update copyright notice.
	readline.h:  remove config stuff that I added erroneously in the
	first place.

	* emacs_keymap.c, funmap.c, history.c, keymaps.c, vi_keymap.c,
	vi_mode.c:  move config stuff to sysdep.h, update copyright notices.

Tue Nov 19 15:02:13 1991  Stu Grossman  (grossman at cygnus.com)

	* history.c:  #include "sysdep.h".

Tue Nov 19 10:49:17 1991  Fred Fish  (fnf at cygnus.com)

	* Makefile.in, config/hm-sysv, config/hm-sco:  Change SYSV to
	USG to match current usage.

	* readline.c:  Add USGr4 to list of defined things to check for
	to use <dirent.h> style directory access.

	* config/hm-svr4:  New file for System V Release 4 (USGr4).

Mon Nov 18 23:59:52 1991  Stu Grossman  (grossman at cygnus.com)

	* readline.c (filename_completion_function):  use struct dirent
	instead	of struct direct.

Fri Nov  1 07:02:13 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c (rl_translate_keyseq) Make C-? translate to RUBOUT
	unconditionally.

Mon Oct 28 11:34:52 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c; Use Posix directory routines and macros.

	* funmap.c; Add entry for call-last-kbd-macro.

	* readline.c (rl_prep_term); Use system EOF character on POSIX
	systems also.

Thu Oct  3 16:19:53 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c; Make a distinction between having a TERMIOS tty
	driver, and having POSIX signal handling.  You might one without
	the other.  New defines used HAVE_POSIX_SIGNALS, and
	TERMIOS_TTY_DRIVER.

Tue Jul 30 22:37:26 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: rl_getc () If a call to read () returns without an
	error, but with zero characters, the file is empty, so return EOF.

Thu Jul 11 20:58:38 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: (rl_get_next_history, rl_get_previous_history)
	Reallocate the buffer space if the line being moved to is longer
	the the current space allocated.  Amazing that no one has found
	this bug until now.

Sun Jul  7 02:37:05 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c:(rl_parse_and_bind) Allow leading whitespace.
	  Make sure TERMIO and TERMIOS systems treat CR and NL
	  disctinctly.
	
Tue Jun 25 04:09:27 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: Rework parsing conditionals to pay attention to the
	prior states of the conditional stack.  This makes $if statements
	work correctly.

Mon Jun 24 20:45:59 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: support for displaying key binding information
	includes the functions rl_list_funmap_names (),
	invoking_keyseqs_in_map (), rl_invoking_keyseqs (),
	rl_dump_functions (), and rl_function_dumper ().

	funmap.c: support for same includes rl_funmap_names ().

	readline.c, funmap.c: no longer define STATIC_MALLOC.  However,
	update both version of xrealloc () to handle a null pointer.

Thu Apr 25 12:03:49 1991  Brian Fox  (bfox at gnuwest.fsf.org)

	* vi_mode.c (rl_vi_fword, fWord, etc.  All functions use
	the macro `isident()'.  Fixed movement bug which prevents
	continious movement through the text.

Fri Jul 27 16:47:01 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c (parser_if) Allow "$if term=foo" construct.

Wed May 23 16:10:33 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c (rl_dispatch) Correctly remember the last command
	executed.  Fixed typo in username_completion_function ().

Mon Apr  9 19:55:48 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: username_completion_function (); For text passed in
	with a leading `~', remember that this could be a filename (after
	it is completed).

Thu Apr  5 13:44:24 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: rl_search_history (): Correctly handle case of an
	unfound search string, but a graceful exit (as with ESC).

	* readline.c: rl_restart_output ();  The Apollo passes the address
	of the file descriptor to TIOCSTART, not the descriptor itself.

Tue Mar 20 05:38:55 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* readline.c: rl_complete (); second call in a row causes possible
	completions to be listed.

	* readline.c: rl_redisplay (), added prompt_this_line variable
	which is the first character character following \n in prompt.

Sun Mar 11 04:32:03 1990  Brian Fox  (bfox at gnuwest.fsf.org)

	* Signals are now supposedly handled inside of SYSV compilation.

Wed Jan 17 19:24:09 1990  Brian Fox  (bfox at sbphy.ucsb.edu)

	* history.c: history_expand (); fixed overwriting memory error,
	added needed argument to call to get_history_event ().

Thu Jan 11 10:54:04 1990  Brian Fox  (bfox at sbphy.ucsb.edu)

	* readline.c: added mark_modified_lines to control the
	display of an asterisk on modified history lines.  Also
	added a user variable called mark-modified-lines to the
	`set' command.

Thu Jan  4 10:38:05 1990  Brian Fox  (bfox at sbphy.ucsb.edu)

	* readline.c: start_insert ().  Only use IC if we don't have an im
	capability.

Fri Sep  8 09:00:45 1989  Brian Fox  (bfox at aurel)

	* readline.c: rl_prep_terminal ().  Only turn on 8th bit
	  as meta-bit iff the terminal is not using parity.

Sun Sep  3 08:57:40 1989  Brian Fox  (bfox at aurel)

	* readline.c: start_insert ().  Uses multiple
	  insertion call in cases where that makes sense.

	  rl_insert ().  Read type-ahead buffer for additional
	  keys that are bound to rl_insert, and insert them
	  all at once.  Make insertion of single keys given
	  with an argument much more efficient.

Tue Aug  8 18:13:57 1989  Brian Fox  (bfox at aurel)

	* readline.c: Changed handling of EOF.  readline () returns
	 (char *)EOF or consed string.  The EOF character is read from the
	 tty, or if the tty doesn't have one, defaults to C-d.

	* readline.c: Added support for event driven programs.
	  rl_event_hook is the address of a function you want called
	  while Readline is waiting for input.

	* readline.c: Cleanup time.  Functions without type declarations
	  do not use return with a value.

	* history.c: history_expand () has new variable which is the
	  characters to ignore immediately following history_expansion_char.

Sun Jul 16 08:14:00 1989  Brian Fox  (bfox at aurel)

	* rl_prep_terminal ()
	  BSD version turns off C-s, C-q, C-y, C-v.

	* readline.c -- rl_prep_terminal ()
	  SYSV version hacks readline_echoing_p.
	  BSD version turns on passing of the 8th bit for the duration
	  of reading the line.

Tue Jul 11 06:25:01 1989  Brian Fox  (bfox at aurel)

	* readline.c: new variable rl_tilde_expander.
	  If non-null, this contains the address of a function to call if
	  the standard meaning for expanding a tilde fails.  The function is
	  called with the text sans tilde (as in "foo"), and returns a
	  malloc()'ed string which is the expansion, or a NULL pointer if
	  there is no expansion. 

	* readline.h - new file chardefs.h
	  Separates things that only readline.c needs from the standard
	  header file publishing interesting things about readline.

	* readline.c:
	  readline_default_bindings () now looks at terminal chararacters
	  and binds those as well.

Wed Jun 28 20:20:51 1989  Brian Fox  (bfox at aurel)

	* Made readline and history into independent libraries.

