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.

