Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt  (bernds@redhat.com)

	* gcc-2.95.3 Released.

Sun Oct 24 23:54:10 PDT 1999 Jeff Law  (law@cygnus.com)

	* gcc-2.95.2 Released.

Mon Aug 16 01:29:24 PDT 1999 Jeff Law  (law@cygnus.com)

	* gcc-2.95.1 Released.

Wed Jul 28 21:39:31 PDT 1999 Jeff Law  (law@cygnus.com)

	* gcc-2.95 Released.

Sun Jul 25 23:40:51 PDT 1999 Jeff Law  (law@cygnus.com)

	* gcc-2.95 Released.

1999-07-01  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* configure.in (zlib.h, libz): Disable checks.
	* configure, config.h.in: Updated.

Thu Jul  1 01:44:00 1999  Philippe De Muyter  <phdm@macqel.be>

	* acconfig.h (_, N_): Macros removed.
	* lib/system.h (_, N_): Macro definitions moved here.
	* config.h.in: File regenerated.

Tue Jun 29 03:20:33 1999  Jeffrey A Law  (law@cygnus.com)

	* config.h.in: Rebuilt.

Thu Jun 24 22:05:20 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.am (SUBDIRS): Remove util again.
	* Makefile.in: Rebuilt.

Wed Jun  2 00:47:03 1999  Philippe De Muyter  <phdm@macqel.be>

	* acconfig.h (libintl.h): Does not include this file here because
	it will define `NULL' before the system files have got any chance
	to define it.
	* intl/explodename.c (stdlib.h): Include this file only if we have it.

Sun May 30 16:10:06 1999  Richard Henderson  <rth@cygnus.com>

	* config.guess, config.sub: Use toplevel file.

Wed May 26 19:30:00 1999  Mark Klein <mklein@dis.com>
        
	* makeinfo/makeinfo.c: Add HAVE_LC_MESSAGES around setlocale call.

1999-02-24  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* lib/Makefile.in: Regen dependencies.
	* makeinfo/Makefile.in, util/Makefile.in: Likewise.

1999-02-01  Manfred Hollstein  <manfred@s-direktnet.de>
 
 	* util/Makefile.am (noinst_PROGRAMS): Renamed from "bin_PROGRAMS"
	to avoid installing anything.
	(noinst_SCRIPTS): Likewise.
 	* util/Makefile.in: Regenerate using automake-1.3.
 
1999-01-21  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* Makefile.am (SUBDIRS): Include util again in order to generate
	install-info.
	* Makefile.in: Rebuild.

1998-11-20  Manfred Hollstein  <manfred@s-direktnet.de>
 
 	* makeinfo/Makefile.am (noinst_PROGRAMS): Renamed from bin_PROGRAMS
	to avoid installing makeinfo.
 	* makeinfo/Makefile.in: Regenerate using automake-1.3.
 
Thu Oct 15 20:40:34 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in: Rebuilt with --include-deps, --build-dir and
	--srcdir-name.
	* doc/Makefile.in: Ditto.
	* info/Makefile.in: Ditto.
	* lib/Makefile.in: Ditto.
	* makeinfo/Makefile.in: Ditto.
	* util/Makefile.in: Ditto.

Mon Jul  6 22:52:28 1998  Tobias Naehring <naehring@eeetw3.et.tu-dresden.de>

	* makeinfo/makeinfo.c (add_word_args): Fix thinko.

Sun Apr 12 20:59:53 1998  Alexandre Oliva <oliva@dcc.unicamp.br>

	* configure.in: Only set HAVE_LIBZ if zlib.h exists.

Fri Apr 10 01:36:24 1998  Jim Wilson <wilson@cygnus.com>

	* Makefile.am (SUBDIRS): Redefine to exclude info, po, util and doc.
	* Makefile.in: Rebuild.

Thu Apr  2 18:29:26 1998  Jim Wilson  <wilson@cygnus.com>

	* info/termdep.h: If POSIX, #undef TIOCGETC for benefit of systems
	that provide TIOCETC but not struct tchars.

Thu Mar 26 11:31:33 1998  Jeffrey A Law  (law@cygnus.com)

	* acinclude.m4: Bring back changes lost during merge.
	(mostly Cygwin, automake and EGCS_PROG_INSTALL stuff).
	* aclocal.m4: Likewise.
	* configure.in: Likewise.

Tue Mar  3 13:29:17 1998  Karl Berry  <karl@cs.umb.edu>

	* configure.in: Version 3.12.

	* po/de.po: New version.
	
	* po/POTFILES.in: Do not include doc.c; that gets built at
	runtime, thus causing texinfo.pot to try to get rebuilt.  Besides,
	it doesn't have any translatable strings.

Sun Mar  1 10:38:47 1998  Karl Berry  <karl@cs.umb.edu>

	* util/install-info.c: No need for i18n on version message.  From
 		ke@suse.de.

Fri Feb 27 16:06:23 1998  Karl Berry  <karl@cs.umb.edu>

	* configure.in: Run texconfig conf instead of confall.

	* doc/Makefile.am (INSTALL_INFO): New variable.
	(install-info-am): Use install-info from our distribution.

	* info/info.c (info_minor_version): Increment.
	* (info_patch_level),
	* info/info.h (info_patch_level): Remove.

	* info/info.c (program_name): Move decl.

	* util/install-info.c (ensure_dirfile_exists): Use commas and \t
	 instead of an explicit tab, which make dist expands.

	* doc/texinfo.txi: @prep.ai.mit.edu -> @gnu.org.

	* info/info.c: Make help messages consistent with others.

	* util/install-info.c (print_help): Format consistently.
	
	(readfile): Support gzipped files via libz.
	From: Elliot Lee <sopwith@redhat.com>
	Date: Mon, 1 Sep 1997 23:37:14 -0400 (EDT)

Thu Feb 26 16:13:14 1998  Karl Berry  <karl@cs.umb.edu>

	* info/echo-area.c: Whoops, _ might not start with parens.

	* configure.in: Check for libz.
	Do not output emacs/Makefile.

	* Makefile.am (AUTOMAKE_OPTIONS): Set to 1.2f.

	* util/texi2dvi: Always remove temporary directories. (From Akim.)
	Formatting changes.

Wed Feb 25 15:26:26 1998  Karl Berry  <karl@cs.umb.edu>

	* util/texi2dvi: New options --batch, --clean.
	From: Akim Demaille <demaille@inf.enst.fr>
	Date: 15 Aug 1997 18:05:33 +0200
	* doc/texinfo.txi (Format with texi2dvi): Mention --help.

	Applied this:
1997-08-09  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* makeinfo/makeinfo.c (me_executing_string): New variable.
	(me_execute_string): Use it instead of executing_string.
	(popfile): Check for me_executing_string as well as
	executing_string.
	(get_until_in_line): Likewise.
	(insert_and_underscore): Do not write any expansion output if
	executing a string.
	(cm_node, cm_include, index_add_arg, cm_footnote, execute_macro,
	cm_macro, cm_unmacro): Likewise.
	(cm_footnote): Include the footnote marker in the expansion
	output.
	(append_to_expansion_output): Do nothing if the input_text wasn't
	a remembered text.
	(defun_internal): Make the index entry even if expanding macros.
	(expansion): Don't reset macro_expansion_output_stream around call
	to execute_string.
	(apply): Fix typo.

Tue Feb 24 17:33:44 1998  Karl Berry  <karl@cs.umb.edu>

	1997-11-10 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
	* makeinfo/makeinfo.c (get_until_in_line): Don't use xstrdup on
		the unterminated input_text.

	* makeinfo/makeinfo.c: Don't assume all \'s in macro bodies are
		arguments.
	From: Mathias.Herberts@irisa.fr (Mathias Herberts)
	Date: Tue, 6 Jan 1998 18:54:26 +0100

	* configure.in: Check for sigblock in libc before libbsd.
	* From: hjl@lucon.org (H.J. Lu)
	* Date: Fri, 23 Jan 1998 21:50:25 -0800 (PST)

Mon Feb 23 16:26:31 1998  Karl Berry  <karl@cs.umb.edu>

	* info/window.c (character_width): If ISO_Latin_p is set, make
		printable_limit 255, not 160.  ISO Latin 1 uses
		essentially all of the 256 characters.
	Reported by: Marius Groeger <mag@sysgo.de>
	Date: Wed, 17 Dec 1997 16:05:27 +0100

	* info/info.c: Improve help message.

Sun Feb 22 17:38:32 1998  Karl Berry  <karl@cs.umb.edu>

	* Makefile.am (SUBDIRS): Remove emacs; we'll just distribute the
		Elisp files with Emacs.

	* doc/Makefile.am (info_TEXINFOS, texinfo): Rename manual to
		texinfo.txi to avoid DOS filename clash with texinfo.tex.

	* info/tilde.c: Copy slightly updated alloca stuff from makeinfo.

	* util/texindex.c (main): Declare as returning int to placate
 		warnings.

	* info/Makefile.am: Uncomment BUILT_SOURCES stuff and add missing _.
	From: "Joel N. Weber II" <devnull@gnu.org>
	Date: Fri, 30 Jan 1998 17:21:38 -1000

	* util/texindex.c,
	* util/install-info.c,
	* makeinfo/makeinfo.c,
	* info/info.c: Change help address to @gnu.org.

	1998-01-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
	* makeinfo/makeinfo.c (usage): Fix order of arguments to help
		format string.

	* makeinfo/makeinfo.c (cm_top): Error message wording.

	* doc/texinfo.texi (Functions in Typed Languages): Remove
		duplicate description of @deftypemethod.
	From: KHMarbaise@p69.ks.fido.de (Karl Heinz Marbaise)
	Date: Wed, 07 Jan 1998 11:11:50 +0100

	* info/session.c (info_get_input_char) [EINTR]: Keep reading if we
		get EINTR.
	From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
	Date: 22 Dec 1997 10:32:53 +0100

Sat Feb 21 17:41:26 1998  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (find_and_load): Malloc enough room for the
		null as well as the newline.
	From: "John W. Eaton" <jwe@bevo.che.wisc.edu>
	Date: Tue, 30 Sep 1997 21:12:01 -0500

	* util/texindex.c (--version),
	* makeinfo/makeinfo.c (cm_today),
	* makeinfo/makeinfo.c (print_version_info): Version strings etc. do not
		need translation. 
	From: Karl Eichwalder <ke@suse.de>
	Date: 13 Sep 1997 16:20:02 +0200

	* info/echo-area.c: Rewrite pluralization to be translatable.
	From: Karl Eichwalder <ke@suse.de>
	Date: 13 Sep 1997 16:20:02 +0200

	* util/texindex.c,
	* info/info.c,
	* makeinfo/makeinfo.c,
	* util/install-info.c: --version: Give year as argument to printf,
		to reduce the number of translations needed.
	From: Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
	Date: 02 Sep 1997 18:01:26 +0200

	* util/texindex.c: Remove the fnctl.h and sys/file.h conditional #includes, they are
	already in lib/system.h.
	From: "Philippe De Muyter" <phdm@macqel.be>
	Date: Thu, 21 Aug 1997 20:16:49 +0200 (MET DST)

	* info/terminal.c (terminal_begin_using_terminal,
 	  terminal_end_using_terminal): #ifdef SIGWINCH settings for
	 	  m68k-motorola-sysv.
	From: "Philippe De Muyter" <phdm@macqel.be>
	Date: Thu, 21 Aug 1997 20:16:49 +0200 (MET DST)

	* info/filesys.c (info_suffixes): Add /index as a possibility for
		subdirectories.
	From: Matthew Wilcox <willy@odie.barnet.ac.uk>
	Date: Wed, 6 Aug 1997 15:55:16 +0100 (BST)

	* configure.in: Redirect texconfig input from /dev/null to avoid
		stoppage.
	From: Thomas Esser <te@informatik.uni-hannover.de>
	Date: Mon, 4 Aug 1997 18:15:49 +0200

	* makeinfo/makeinfo.c (find_and_load): Null-terminate the input text.
	From: Kenneth Stailey <kstailey@disclosure.com>.

	* info/Makefile.am (INCLUDES): Add -I.. -I$(srcdir).

Fri Aug 22 16:24:59 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Adjust ISBN, edition number for print run.

Mon Aug  4 16:12:42 1997  Karl Berry  <karl@cs.umb.edu>

	* info/info.c (main) [INFODIR]: Add this to infopath, if set.
	* info/Makefile.am (DEFS): New define, include -DINFODIR.
	From: Larry Schwimmer <rosebud@cyclone.Stanford.EDU>.

	* util/install-info.c (ensure_dirfile_exists): Use tabs instead of
 		spaces on the File: dir line.
 	Bug from: Dave Love <d.love@dl.ac.uk>.

Sat Aug  2 12:43:57 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_value, cm_email, cm_uref): Have to cast
 		from unsigned char * to char * or IRIX cc complains.
	From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.

Fri Aug  1 14:05:10 1997  Karl Berry  <karl@cs.umb.edu>

	* Makefile.am (EXTRA_DIST): Remove README-alpha.
	From: "ir. Mark M._Kettenis" <kettenis@phys.uva.nl>.

1997-07-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>	

	* configure.in: Use AC_CHECK_HEADERS, not AC_CHECK_HEADER.

Thu Jul 31 11:57:46 1997  Karl Berry  <karl@cs.umb.edu>

	*  Version 3.11.

	* info/man.c (reap_children): Declare status as int, not unsigned,
		since that's what POSIX says the arg to wait should be.

	* makeinfo/makeinfo.c (cm_uref, cm_email): Rewrite to do macro
 		expansion in the arguments.

	* makeinfo/makeinfo.c (main): setlocale LC_MESSAGES and LC_TIME,
		instead of LC_ALL.
	From: Akim Demaille <demaille@inf.enst.fr>.

	* makeinfo/makeinfo.c (cm_today): Let the %d %s %d be translated,
		so other languages can change the order of day/month/year.
	From: Akim Demaille <demaille@inf.enst.fr>.

	* info/infomap.c: Doc fix.

	* lib/system.h [!O_RDONLY]: Prefer <fcntl.h> to <sys/fcntl.h>.

	* configure.in (AC_CHECK_HEADERS): Check for fcntl.h.

	* doc/Makefile.am (install-data-local): Suggest tex/generic/dvips
		for epsf.tex.
	From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.

	* configure.in (TEXMF): Move check to block with other program
 		checks.

Wed Jul 30 11:20:37 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (defun_internal): Allow extra text after
		most @def... commands, for tzname[2] in libc.texinfo.

	* info/info.c: Include indices.h.
	* configure.in (AC_CHECK_HEADERS): Test for sys/wait.h, info/man.c
 		uses it.
	From: Erick Branderhorst <Erick.Branderhorst@asml.nl>.

Tue Jul 29 15:55:19 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in: Version 3.9j.

	* info/terminal.c (output_character_function): Return int (the
 		arg), not void.

	* info/infomap.c: Don't define term_kP as 'v', since that's undefined.
	From: Tom Hageman <tom@basil.icce.rug.nl>.

	* makeinfo/makeinfo.c: Parameterize some messages to avoid
 		duplicate translations.

	* info/terminal.c: Only try to declare ospeed, PC, tputs, etc. if
		we don't have <ncurses.h/termcap.h> or <termcap.h>.

	* makeinfo/makeinfo.c (cm_email): New function, like cm_uref.

Sun Jul 27 17:09:20 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in: Only check for <ncurses/termcap.h> if we're using
		-lncurses.
	From: Bo Johansson <bo.johansson@mbox2.swipnet.se>.

	* info/dir.c (new_dir_file_p): Avoid automatic struct
		initialization, SunOS 4 etc. cc can't handle it.
	From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.

Sat Jul 26 15:08:13 1997  Karl Berry  <karl@cs.umb.edu>

	* Version 3.9i.

	* configure.in: Check for termcap.h and ncurses/termcap.h.
	From: bo.johansson@mbox2.swipnet.se.

Fri Jul 25 14:09:05 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Document new second optional arg to email.

	* info/infodoc.c: Document CTRL-x 0 as the way to get out of help.

	* info/dir.c (maybe_build_dir_node): Really check for the same dir
		file twice, not just by name.
	(new_dir_file_p): New function.

	* util/install-info.c: Tell them about --help in doc strings.

Thu Jul 24 14:25:44 1997  Karl Berry  <karl@cs.umb.edu>

	* util/texindex.c (memory_error): Move to avoid incorrect implicit
 		decl.

	* makeinfo/makeinfo.c,
	* makeinfo/multi.c,
	* util/install-info.c,
	* util/texindex.c,
	* info/tilde.c,
	* info/man.c,
	* info/gc.c,
	* info/session.c (info_replace_key_to_typeahead): Remove unused
         function,
	* info/nodemenu.c,
	* info/man.c,
	* info/m-x.c,
	* info/footnotes.c
	* info/info.c
	* info/indices.c,
	* info/filesys.c: Parenthesize to avoid -Wall warnings
	remove unused variables,
	make return types explicit,
	printf type corrections.

	* lib/system.h: <ctype.h>: Include this.
	* util/texindex.c,
	* makeinfo/makeinfo.c,
	* info/echo-area.c,
	* info/display.c: ctype.h: Included in system.h now.

	* info/echo-area.c: Parenthesize to avoid -Wall warnings.
        (ctype.h): #include for isprint.
	(echo_area_stack_depth): Remove unused function.
	* info/display.c: Parenthesize to avoid -Wall warnings.
        (ctype.h): #include for isprint.
	* info/dir.c: Parenthesize to avoid -Wall warnings.
	(build_dir_node_internal): Remove declaration of nonexistent function.
	From: Erick Branderhorst <Erick.Branderhorst@asml.nl>.

	* configure.in (TEXMF): Call texconfig to discover the default value,
	for the sake of the warning in doc/Makefile.
	From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.

	* doc/Makefile.am (TEXMF): New variable.
        (install-data-local): Use it in warning.
	From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.

	* info/session.c (initialize_info_session): Only call
	terminal_prep_terminal if clear_screen is true.  Otherwise, failed
        --index-searches prep the terminal but do not unprep it.
	From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.

	* info/nodemenu.c: Doc fix.

Mon Jul 21 17:11:09 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Comment out @smallbook and @set smallbook so
 		people at other sites can print it the way they want.
	From: Thomas Walter <walter@pctc.chemie.uni-erlangen.de>

Sun Jul 20 07:52:25 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in: 3.9h.

	* doc/Makefile.am (install-info-am, distclean-aminfo): New targets
		to avoid assuming info files are in srcdir.

	* lib/system.h (xstrdup): Returns char *, not void *.

	* doc/Makefile.am (.texi.info),
	* doc/Makefile.am (texinfo): Don't run in $(srcdir).

	* util/install-info.c (main): Remove unnecessary decl of strrchr.

	* info/tilde.c: Include info.h (for config.h) before alloca stuff.

	* makeinfo/makeinfo.c (validate_file): Rename `valid' to `valid_p'
		to avoid conflict with SunOS 4 header files.
	From: "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu>.

	* info/session.c (initialize_info_session): Call
          terminal_prep_terminal here (before calling terminal_clear_screen).
	(info_session): Instead of here.
	From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.

	* Makefile.am (EXTRA_DIST): Add README-alpha.

Sat Jul 19 13:50:27 1997  Karl Berry  <karl@cs.umb.edu>

	* info/terminal.c: Use `keypad transmit' sequence if it's defined:
	(term_keypad_on, term_keypad_off): New statics.
	(terminal_begin_using_terminal): If term_keypad_on, send it.
	(terminal_end_using_terminal): If term_keypad_off, send it.
	(terminal_initialize_terminal): Look up ks and ke termcap strings.
	From: William Edward Webber <wew@yallara.cs.rmit.EDU.AU>.

	* info/infomap.c (initialize_info_keymaps): Initialize hardwired
 		cases for arrow keys a la readline.  Found by John Eaton,
 		jwe@bevo.che.wisc.edu.

	* makeinfo/makeinfo.c (output_pending_notes): Remove footnote
        macro expansion code I #if 0'd out some time ago.  And doc fixes.

	* Applied this patch:

Sat Jul 19 16:29:01 1997  Karl Eichwalder  <ke@suse.de>

	* info/info.c (main): setlocale, bindtextdomain, and textdomain.

Fri Jul 18 10:02:18 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/Makefile.am (install-data-local),
	* emacs/Makefile.am (install-data-local): Give subdir in warning.

	* configure.in: Version 3.9f.

	* doc/texinfo.texi: Correct \^ to @^.
	From Andreas S.

	* Merged these changes:

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* info/display.c (display_cursor_at_point): Flush ouput.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* info/session.c (remember_window_and_node): Don't crash when the
	current window has no current node.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* util/texindex.c (usage): Translate the doc strings.
	* makeinfo/makeinfo.c (cm_today): Translate the month names.
	* info/variables.c (describe_variable): Translate the doc strings.
	* info/nodes.h: Don't translate the strings defining the info format.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* makeinfo/makeinfo.c (get_item_function): Remove superfluous call
	to canon_white after get_rest_of_line.
	(cm_end): Likewise.
	(handle_variable): Likewise.
	(cm_item): Likewise.
	(cm_unmacro): Likewise.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* info/nodemenu.c (list_visited_nodes): Don't clear the internal
	flag, this and other functions depend on it.  Don't insist on
	displaying the menu below the current window.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* makeinfo/makeinfo.c (cm_uref): Fix memory leaks.
	(cm_inforef): Likewise.  Handle empty cross reference name.

1997-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* info/echo-area.c (ea_possible_completions): Check that the
	current window can actually be split.

Thu Jul 17 17:19:34 1997  Karl Berry  <karl@cs.umb.edu>

	
	* emacs/Makefile.am (*clean-lisp): Define, as Automake didn't.
	From: Kenneth Stailey <kstailey@disclosure.com>.

	* doc/Makefile.am: Do not distribute info.1.
	* makeinfo/macros: Do not distribute this directory, it's merged
		into the main documentation.
	* doc/makeinfo.texi: Don't distribute this either, it's in the 
		main manual.

	* util/install-info.c: Use \n\ for multiline string constant.
  		From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>.

Wed Jul 16 15:29:50 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: @set must be after @setfilename, I guess.
	Noted by Erick Branderhorst.

	* Applied this change:

Tue Nov 12 22:20:22 1996  John Eaton  <jwe@bevo.che.wisc.edu>

	* makeinfo.c (INDEX_ALIST): Use two indices, read_index and
	write_index, instead of just one.
	(find_index_offset): If a match is found, return index to the
	current INDEX_ALIST struct, not the index pointing to the list of
	index entries.
	(translate_index): Return read_index from the matching
	INDEX_ALIST.
	(undefindex): Delete the list of index elements pointed to by
	read_index from the INDEX_ALIST that matches name.
	(defindex): Initialize read_index and write_index.
	(index_add_arg): Add entries to the list pointed to by write_index
	from the INDEX_ALIST matching name.
	(index_append): Delete unused function.
	(cm_synindex): Don't merge indcies, just make the write_index for
	redirectee the same as the write_index for redirector.

Tue Jul 15 09:32:04 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Bump edition number for 2.24.

	* util/Makefile.am (localedir): Define.

	* info/window.h: Rename __window__ to window_struct.

	* info/window.h,
	* info/variables.h,
	* info/search.h,
	* info/man.h,
	* info/info-utils.h,
	* info/gc.h,
	* info/footnotes.h,
	* info/filesys.h,
	* info/echo-area.h,
	* info/display.h: Avoid leading _ in #define for #include protection.

	* makeinfo/makeinfo.c: Version 1.68.
	* info/info.c: Version 2.17.

	* Most all files: Untabify.

	* doc/Makefile.am (texinfo): Add explicit target.

	* emacs/Makefile.am (noinst_LISP): Remove the obsolete
		detexinfo.el (makeinfo --no-headers is better) and
	        texnfo-tex.el (now handled by TeX modes in general).

Mon Jul 14 15:21:03 1997  Karl Berry  <karl@cs.umb.edu>

	* util/texi2dvi: Update RCS file from 3.9 distribution.

	* util/Makefile.am (EXTRA_DIST): Add update-info, from
 		rhawes@dmapub.dma.org

Sun Jul 13 17:05:03 1997  Karl Berry  <karl@cs.umb.edu>

	* info/signals.c: Use RETSIGTYPE instead of hardwiring void.
	From: "Jeffery L. JT Vogt" <lfm@atw.earthreach.com>.

	* info/session.c (info_history_node): Rewrite as
  	      info_kill_node (current_node).
        (kill_node, read_nodename_to_kill): New functions from info_kill_node.
	(info_kill_node): Now this just calls them.

Fri Jul 11 11:56:58 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Fix `Conditionals' xref.

Thu Jul 10 17:58:12 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/info.texi: Don't say SPC clears ? screen.

Sun Jul  6 16:26:41 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/info-stnd.texi: Document --index-search.

	* info/tilde.c,
	* info/session.c: Remove redundant getenv decl.

	* Installed following change:
Tue Nov 12 14:44:00 1996  John W. Eaton  <jwe@bevo.che.wisc.edu>

	* info/info.c (main): Handle new option, --index-search STRING.
	(index_search_p, index_search_string): New static variables, used
	to handle --index-search option.

	* info/session.c (initialize_info_session): New arg,
	clear_screen.  Change all callers.

	* info/indices.h (do_info_index_search, index_intry_exists):
	Provide declarations here.

	* info/indices.c (do_info_index_search): New function, extracted
	from info_index_search.
	(info_index_search): Simply call do_info_index_search() with
	search_string set to NULL.
	(index_entry_exists): New function.

Sat Jul  5 17:17:14 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Document @kbdinputstyle.

	* makeinfo/makeinfo.c (kbdinputstyle): New command.
	(cm_no_op_line_arg): New function.

	* info/termdep.h (HAVE_TERMIOS_H) [NeXT]: #undef.  
	From: Gregor Hoffleit <flight@mathi.uni-heidelberg.de> et al.

Fri Jul  4 14:18:08 1997  Karl Berry  <karl@cs.umb.edu>

	* info/Makefile.am (EXTRA_DIST),
	* util/Makefile.am (EXTRA_DIST),
	* makeinfo/Makefile.am (EXTRA_DIST),
	* lib/Makefile.am (EXTRA_DIST): Include README.

	* doc/texinfo.texi (makeinfo options): Document --paragraph-indent
 		values more completely.
	* makeinfo/makeinfo.c (set_paragraph_indent): Allow translated
 		asis or none, improve doc.
 	From ke.

	* doc/Makefile.am (dist-info): New empty target so that we do not
 		distribute info files.
 	From Erick Branderhorst.

	* doc/texinfo.texi (Invoking install-info): Document that the dir
		file is created now if need be.
	* Makefile.am (EXTRA_DIST): No longer need dir.
	* util/install-info.c (ensure_dirfile_exists): New routine.
	(main): Call it before trying to open dirfile for reading.

	* doc/texinfo.texi: Document install-info --delete a little better.
	* util/install-info.c: Set something_deleted when we delete a
 		normal line.
	Bug from: Denis Kosygin <dkosygin@math.Princeton.EDU>.

	* util/install-info.c: If no info dir entry, give warning and exit 0.

Wed Jul  2 06:35:17 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in (ALL_LINGUAS): Add fr.

	* makeinfo/makeinfo.h (insertion_type, insertion_type_names): Add
		ifnot... entries. Alphabetize.

Tue Jul  1 17:21:54 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (sort_index): Set defining_line and
		input_filename so errors in index entries are reported at
		the correct location.  From rms.

	* makeinfo/makeinfo.c (cm_ifnothtml, etc.): Routines for new
 		commands.

Sun Jun 29 09:44:01 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Document new @ifnot... commands, etc.
	* doc/texinfo.texi: Document @image, etc.

Thu Jun 26 17:57:37 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_image): New routine for new command @image.
	(cm_end): Move to better place, doesn't need its own page.
	Doc fixes.

Mon Jun 23 16:54:03 1997  Karl Berry  <karl@cs.umb.edu>

	* Makefile.am (SUBDIRS): Do intl first.

	* doc/Makefile.am (EXTRA_DIST): Include epsf.tex.
	(install-data-local): Suggest possible installation directory.
	* epsf.tex: New file.

Wed Jun 18 17:51:52 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Document texinfo.cnf.

Sun Jun 15 14:37:58 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi (Command List): Various commands missing or
		erroneous.
	From: Karl_Heinz_Marbaise@p69.ks.fido.de.

	* makeinfo/makeinfo.c: Oops, failed to break out of loop.

	* util/texindex.c: Use <getopt.h> not "getopt.h".

	* All source files: Merge gettext changes from Karl E.;
	his ChangeLog entries below.

Sat Jun 14 17:04:28 1997  Karl Berry  <karl@cs.umb.edu>

	* Makefile.am,
	* makeinfo/Makefile.am: Doc fix.
	* util/Makefile.am (EXTRA_DIST): Add texi2dvi.  From Karl E.

Fri Jun 13 17:39:34 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c [WIN32]: Handle read bogosity and c:\
		absolute paths.
	From: Eric Hanchrow <erich@MICROSOFT.com>.

	* configure.in (AC_CHECK_HEADERS): Check for pwd.h.
	* info/tilde.c (pwd.h): Move #include to system.h.

	* makeinfo/makeinfo.c (main): New option -P to prepend to search path.
	From: Kenneth Stailey <kstailey@cvs.openbsd.org>.

	* doc/texinfo.texi (Invoking makeinfo),
	* doc/makeinfo.texi: Mention -P.

Thu Jun 12 16:25:40 1997  Karl Berry  <karl@cs.umb.edu>

	* info/signals.h (SIGCHLD): #define as SIGCLD if undefined, for sysV68.
	From: "Philippe De Muyter" <phdm%labauto1@ulb.ac.be>.

	* util/install-info.c (O_RDONLY): Remove this stuff, it's in system.h.
 	(main): Handle existing entry in dir file having .info extension.
	From: "Bradley C. Kuszmaul" <bradley@GRANITE.SYSTEMSX.CS.YALE.EDU>.

	* makeinfo/makeinfo.c (get_char_len): Don't count 8-bit characters
		as two chars in the output.
	From: Sung-Hyun Nam <namsh@amuna.rms.lgic.co.kr>.

Wed Jun 11 16:36:51 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi (Other Info Directories): Document new trailing
 		: in INFOPATH feature.

	* info/info.c (main): Have trailing : in INFOPATH expand to the
 		default path.

Fri Jun  6 13:22:02 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi (uref): New node for new command.

Thu Jun  5 18:13:48 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_uref): New function to accept optional
		second argument.  Call it in command table.

Sat Jun 14 10:54:16 1997  Karl Eichwalder  <ke@suse.de>

	* mkinstalldirs: Update from automake-1.1p.

	* configure.in: Touch po/ChangeLog (gettext needs it).

Thu Jun 12 08:37:52 1997  Karl Eichwalder  <ke@ke.Central.DE>

	* util/texindex.c: Include system.h, remove config.h.

	* po/POTFILES.in: Fill it.

	* makeinfo/multi.c: Include system.h.

	* info/Makefile.am:
	* makeinfo/Makefile.am:
	* util/Makefile.am:
 	(localedir): Set. 
	(INCLUDES): Add intl/ and LOCALEDIR.
	(LDADD): Add @INTLLIBS@.

	* makeinfo/makeinfo.c (main):
	* util/texindex.c (main): 
	* util/install-info.c (main):
 	setlocale, bindtextdomain, and textdomain.

	* lib/system.h: Include locale.h and libintl.h.

	* acconfig.h: Include libintl.h.
	(_, N_): Define.
	Add ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_LC_MESSAGES,
	HAVE_STPCPY for libintl.
	Add @TOP@ and @BOTTOM@.

	* configure.in (AM_GNU_GETTEXT): Add.
	(AC_OUTPUT): Process Makefiles in intl/ and po/.
	(ALL_LINGUAS): Available languages.

	* Makefile.am (AUTOMAKE_OPTIONS): Now use 1.1p.

Wed Jun 11 17:05:37 1997  Karl Eichwalder  <ke@ke.Central.DE>

	* Makefile.am (SUBDIRS): Add intl/ and po/ for NLS.

	* run `gettextize -c' to get the i18n skeleton.

Wed Jun  4 17:51:08 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (uref): New command, another alias for @code
 		for now.

Wed Jun  4 02:02:33 1997  Miles Bader  <miles@gnu.ai.mit.edu>

        * doc/texinfo.texi (email): { and } need @ escapes.

Sun Jun  1 16:34:12 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi (itemx): @itemx should always follow @item.

	* makeinfo/makeinfo.c (cm_item): Insert blank line if two
		consecutive @item's.
	From: Karl Eichwalder <ke@ke.central.de>.
	Also various doc fixes.

Tue May 27 17:20:44 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi (various): Document @deftypemethod.	
	(email): @ should have been @@ in the example.
	From: Mate Wierdl <mw@wierdlmpc.msci.memphis.edu>

Mon May 26 16:56:26 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/multi.c (setup_multitable_parameters): Avoid use of %n
		for sake of m68k-hp-bsd.
	From: Derek L Davies <ddavies@world.std.com>.

	* info/terminal.c (terminal_begin_using_terminal,
        terminal_end_using_terminal): Call fflush and sleep to handle
	cmdtool/shelltool with scrollbars.  Also ignore
 	SIGWINCH so we do not prematurely exit.  Move call.
	(terminal_prep_terminal): Disable LNEXT (CTRL-V).
	From: strube@physik3.gwdg.de (Hans Werner Strube).

	* configure.in (AC_TYPE_SIGNAL): Check this.

Sun May 25 16:49:58 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (discard_insertions): Take arg saying
 		whether ifinfo/ifset/etc. are ok.
        (convert_from_loaded_file): At `finished', call discard_insertions.
	(handle_variable_internal): Complain if we reach eof before the
		@end for a false condition.
	From: HERBERT@boevm4.vnet.ibm.com.

	* info/Makefile.am (ginfo_SOURCES): Add doc.h.
	* lib/Makefile.am (libtxi_a_SOURCES): Add system.h.

Sat May 24 18:08:27 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c: Check that we have macro_expansion_filename
 		before using strcmp.

Thu May 22 17:59:46 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/makeinfo.texi: Minimally document --force.

	* makeinfo/makeinfo.c (--force): New option.
	(-E): Allow stdout via `-'.
	(convert_from_loaded_file): Unlink output files if errors and !force.

Tue May 20 17:48:42 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c: Change all strdup calls to xstrdup.
	(xmalloc, xrealloc, memory_error): Remove these functions, they're
		in lib.
	(set_paragraph_indent, cm_paragraph_indent): Move to misc page.
	(cm_footnote): Expand macros in the arg for the macro expansion output.

Fri May 16 17:26:59 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_macro): Allocate an empty body if the
 		macro was empty.
 	(cm_unmacro): Allocate one more byte for the null.
	From: Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>.

Sun May 11 17:51:21 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* makeinfo/makeinfo.c (cm_printindex): Fix calculation of the
	length of an index line.

Sun May 11 14:47:42 1997  Tom Tromey  <tromey@cygnus.com>

	* makeinfo/makeinfo.c (main): Don't unconditionally run usage when
	-e specified.

Sun May 11 17:47:42 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (init_indices): Free the source for an @synindex.
	(undefindex): Do not go further if the target was already freed.
	(free_index): Do not free the node names, as init_tags already did.
	(cm_synindex, index_add_arg): Improve error message.
	(program_index, function_index, etc.): Remove these unused #defines.

Tue May  6 17:53:37 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (init_internals): Do not free current_node,
        it already is, at least when multiple input files are specified.
	From: Karl Eichwalder <ke@ke.central.de>.

Mon May  5 16:14:39 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Mention both alignment and non-alignment of
 		continuation description lines in menus (Arnold).

Sun Apr 27 16:12:44 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (apply): Handle body being `\string'.
	Also, avoid dereferencing a null pointer when a macro has no named
	parameters.
	From: Eli Zaretskii <eliz@is.elta.co.il>.

	* makeinfo/makeinfo.c: Wording changes/fixes in warnings.

	* info/session.c (info_get_input_char): Do not mix stdio with raw I/O.
	From: Egil Kvaleberg <egilk@sn.no>.

	From Tom Hageman <tom@basil.icce.rug.nl>.  These changes make
        arrow keys work:
	* info/infomap.c: Add arrow key bindings.
        (keymap_bind_keyseq): New support function.
	(initialize_info_keymaps): Use it.
	(term_ku,term_kd,term_kl,term_kr): Remove explicit declarations;
	use #include "terminal.h" instead.
	* info/session.c (initialize_info_session): Unbuffer stdin.
	(info_get_another_input_char): Fix bug in `ready' logic.
	* info/terminal.h,
	* info/terminal.c (term_kP, term_kN): New variables to hold
 		PageUp, PageDown key sequences.
	  (terminal_initialize_terminal): Set them.
       
	* util/texindex.c (main),
	* util/install-info.c (main),
	* makeinfo/makeinfo.c (print_version_info),
	* info/info.c (main): Use PACKAGE and VERSION from Automake for
 		printing version number.

Sat Apr 26 19:19:46 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (get_until_in_line): Do not expand if
		executing_string.
	Also, free temporary strings.
	Also, untabify entire file.

	* doc/texinfo.texi: Many corrections from Arnold.

Thu Apr 24 16:31:09 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/multi.c (draw_horizontal_separator): Account for indent
 		here also.  From Ulrich.

Wed Apr 23 15:15:34 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_today): Use time_t instead of long;
 		everyone else does.
 	(LOCALTIME_CAST): Remove kludge, we'll always use time_t now.

	* info/Makefile.am (ginfo_SOURCES): Remove general.h, that got
 		merged into system.h.

Mon Apr 21 17:13:25 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/multi.c (output_multitable_row): Account for
 	column_indent, both the global one and for each column.
	(setup_multitable_parameters): Account for column_indent in the table
	width in the columnfrac case, but don't bother with the template
 		case for now.

Sun Apr 20 16:32:00 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (output_stream): Remove redundant
        definition; it's in makeinfo.h,
	and a vaxstation-ultrix4.3 fails to link because of the two defns.
	From: Anders Olofsson <anders@kid025.ericsson.se>.

	* makeinfo/makeinfo.c (expansion): Inhibit appending to the macro
 		expansion stream.
 	(get_until_in_line): Possibly expand the text.
	Change caller in get_node_token to do the expansion,
	all other calls to remain the same.

	* makeinfo/makeinfo.c (cm_node): No need to call strlen to check
 		for the empty string.

	* doc/texinfo.texi: Restore missing @c for initial comment.

Fri Apr 18 17:41:36 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Mention that .info is unnecessary in the info
		file name argument of an xref.

	* doc/texinfo.texi: Mention texi2dvi -t instead of embedding
 		@smallbook or @afourpaper in the document source.

Sun Apr 13 15:19:08 1997  Karl Berry  <karl@cs.umb.edu>

	* lib/system.h (_GNU_SOURCE): #define.

Mon Apr  7 16:30:11 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/info.texi,
	* doc/info-stnd.texi,
	* doc/texinfo.texi: Do not make (dir) the previous ptr from the top node,
	and tell people not to do that in the manual.
	From: rmedina@kanojo.ivic.ve (Rodrigo Medina),
	confirmed by rms.

Fri Apr  4 16:30:33 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c: Move error page to top to avoid
	prototypes, and do add prototypes for add_word_args and execute_string,
	so we can use <stdarg.h>.

	* info/makedoc.c,
	* info/nodemenu.c: Use %ld instead of %d for file offsets.
	* makeinfo/makeinfo.c (delete_macro): Decrement macro_list_len.
	(get_macro_args): Decrement line number if see \n.
	* utils/texindex.c (indexify): Use fputs instead of fprintf
	for constant string.
	From: Eli Zaretskii <eliz@is.elta.co.il>.

Thu Apr  3 17:40:52 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in (AC_CHECK_HEADERS): No need to check for vararg.h
	here, AC_FUNC_VPRINTF does it.
	(AC_CHECK_FUNCS): Likewise for vsprintf and vfprintf.
	* makeinfo/makeinfo.c (add_word_args, execute_string): Rewrite
	like the error functions.

Wed Apr  2 17:46:28 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in: Add AC_FUNC_VPRINTF.
	* makeinfo/makeinfo.c (error, line_error, warning): Rewrite a la
        error.c from the *utils to use <stdarg.h> if available.

Tue Apr  1 11:48:40 1997  Karl Berry  <karl@cs.umb.edu>

	* doc/texinfo.texi: Tabs are a bad idea.

	* doc/userdoc.texi,
	* doc/info.texi: Untabify.

Sun Mar 30 17:36:47 1997  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (end_of_sentence_p): New function.
	(add_char): Call it, instead of simply sentence_ender.
	(post_sentence): New macro.
	Also, remove some #include's now in system.h.
	* lib/system.h [VMS]: #include <perror.h>, from makeinfo.

Thu Mar 27 17:41:03 1997  Karl Berry  <karl@cs.umb.edu>

	* info/search.c (skip_node_characters): Do not arbitrarily
	strip trailing period from end of node name; this is valid.

Mon Mar 24 16:44:42 1997  Karl Berry  <karl@cs.umb.edu>

	* configure.in (AC_OUTPUT): Don't need to create stamp-h here,
	tromey says AM_CONFIG_HEADER will do it.

	* info/Makefile.am, util/Makefile.am, makeinfo/Makefile.am (INCLUDES):
        Don't need -I.. (for config.h) or -I$(srcdir), says tromey.
        Automake includes those already.

Fri Mar 14 15:05:17 1997  Karl Berry  <karl@cs.umb.edu>

	* info/Makefile.am: Build as ginfo, install as info,
	to avoid conflict with the standard info target.

	* lib/system.h: New file.
	* makeinfo/makeinfo.c (strerror): Remove declaration,
	include system.h, remove other redundant #if stuff.
	* info/general.h: Include system.h instead of doing common stuff.
	* util/install-info.c (my_strerror): Remove this, use strerror,
	include system.h.

	* info/terminal.c (terminal_prep_terminal): Only use OCRNL and
		ONLCR if they are defined.  Reported by many people.

	* Installed:

	Sun Dec  1 19:23:54 1996  Karl Eichwalder  <ke@ke.Central.DE>

		* configure.in (TERMLIBS): Add ncurses.

Thu Mar 13 13:59:45 1997  Karl Berry  <karl@cs.umb.edu>

	* lib/Makefile.am (libtxi_a_SOURCES): Add xstrdup.c.
	* info/*.c: Use xstrdup instead of strdup everywhere.

	* info/tilde.c: Do not include clib.h, move stdlib.h include to
	* info/general.h: here.

	* configure.in (AC_CONFIG_HEADER): Use this,
	to avoid hugely long compile line with all the -D's.
	* info/general.h: Include <config.h>.
	
	* emacs/Makefile.am (install, install-data): Do @echo
	to tell the user to compile/install the elisp manually.
	
	* configure.in (AC_REPLACE_FUNCS): Move strerror check to here.
	(AC_CHECK_FUNCS): From here.

	* lib/strerror.c: New file, from enscript (et al.) distribution.

Tue Mar 11 16:36:25 1997  Karl Berry  <karl@cs.umb.edu>

	* info/Makefile.am (info_SOURCES): Add doc.c, dribble.c, infodoc.c.
	(LDADD): Add @TERMLIBS@.

	* info/info.h: HANDLE_MAN_PAGES, NAMED_FUNCTIONS: Define these.

	* info/filesys.h: Spurious ! when DEFAULT_INFOPATH is not defined.

	* configure.in (AC_OUTPUT): Do lib first and doc last.

	* info/echo-area.c,
	* info/echo-area.h,
	* info/info.h: Rename echo_area to echo-area.

Mon Mar 10 17:59:05 1997  Karl Berry  <karl@cs.umb.edu>

	* */Makefile.am: Write Makefile.am files for Automake.
	* doc: New subdirectory, move all manuals and texinfo.tex there.
	* AUTHORS, THANKS, config.guess, config.sub, mkinstalldirs: New files,
	required by Automake.
	* lib/xmalloc.c: Move from info/.

Fri Oct  4 07:49:49 1996  Karl Berry  <karl@cs.umb.edu>

	* Version 3.9.

	* Makefile.in (install): Say to install texinfo.tex manually.

	* util/texi2dvi,
	* util/texindex.c,
	* makeinfo/makeinfo.c,
	* info/info.c: Include only the current year in the copyright message.

	* util/texi2dvi: Exit successfully.
	From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.

Thu Oct  3 12:58:32 1996  Karl Berry  <karl@cs.umb.edu>

	* Rename install.sh to the preferred install-sh.

	* Makefile.in (VERSION),
	* util/texi2dvi,
	* util/texindex.c,
	* util/install-info.c,
	* makeinfo/makeinfo.c (minor_version, print_version_info),
     	* info/info.c: Update version number.

	* util/texi2dvi: Only show diff if verbose.

	* util/install-info.c (main): Check for a missing dir file as well
 	as a missing info files.
	(main): At start of a node, completely initialize the newly-malloced
	node structure.

	* texinfo.texi: Fix incorrect uses of @key,
	insert missing newline in Installing Dir Entries' @menu item,
	document install-info invocation.

	* Makefile.in (DISTFILES): Do not put .gdbinit's in distribution.
	(dist): Use || instead of && (and invert sense) so make doesn't think
	the command failed.
	(dist): Exclude more junk.

	* makeinfo/makeinfo.c (cm_xref): Back out patch from Tom T., since
        we generate a good-enough error message that is suppressible
        without it.

	* util/gen-dir-node: The recommended name for the top-level info
 	file is dir, not dir.info.

	* util/install-info.c (main): At `Mark the end of the Top node',
        make sure the node name is non-NULL before comparing it. From
        lvirden@cas.org.

	* configure.in (AC_REPLACE_FUNCS): Use this for memcpy, memmove,
	and strdup.
        (AC_CHECK_FUNCS): Instead of this.
	Because both bcopy and memmove are missing on the 3b2, as reported by
	Gaylen Miller <gaylen@proaxis.com>, hence we must provide our own.
	* libtxi/Makefile.in (LIBOBJS): New variable.
	(OBJS): Include it.
	* libtxi/memcpy.c, libtxi/memmove.c, libtxi/strdup.c: New files,
	taken from fileutils 3.13.
	* makeinfo/makeinfo.c,
	* info/clib.c (strdup): Move to libtxi.

Wed Oct  2 18:23:30 1996  Karl Berry  <karl@cs.umb.edu>

	* info/info-utils.h (memcpy) [!HAVE_MEMCPY],
	* info/termdep.h (memcpy) [!HAVE_MEMCPY],
	* makeinfo/makeinfo.c (memmove) [!HAVE_MEMMOVE]: Remove this
        #ifdef, as we now include it in libtxi if missing.

Tue Oct  1 17:41:52 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/Makefile.in (install),
	* info/Makefile.in (install),
	* Makefile.in (install): Use new option name --info-dir instead of
 	--infodir.

	* makeinfo/multi.c (out_char): New fn.  Replace all calls to
	putc/fprintf with calls to this.

	* util/install-info.c: Rename --infodir to info-dir.

Mon Sep 30 10:07:21 1996  Karl Berry  <karl@cs.umb.edu>

	* Version 3.8.

	* texinfo.tex: Untabify.

	* texinfo.tex (\ptexl, \ptexL): Do not save, we have our own
	commands now.
	(\onepageout): Reformat for readability, and call \indexdummies
	to avoid expansion of Texinfo commands (e.g., accents) in \write's.
	(\,, \dotaccent, \ringaccent, \tieaccent, \ubaraccent, udotaccent,
	\questiondown, \exclamdown, \dotless): New macros.
	(\l): Let plain TeX definition remain, instead of switching
	to ``lisp'' font.
	(\multitable): Ensure space between the columns,
	insert struts to make interline spacing constant,
	use real strut instead of a box containing `Xy'.
	(\indexdummies): Do not define \rm, \char, but
	do define \@, \{, \}, \dotless, and \,.  And \t should generate
	\t, not \r.
	(\indexnofonts): Define \, and \dotless as \indexdummyfont,
	and let \@ be @.
	(\doind): Reformat for readability, and use temp control sequence
	names that actually make sense.
	(\doublecolumnout, \pagesofar, \enddoublecolumns): Restore
	Knuth's original code to avoid spurious overfull vbox messages.
	(No boxes are actually overfull).
	(\shortcontents): Do not allow hyphenations.
	(\dochapentry, \tocentry): Make glue above and below flexible, to allow
	better page breaks.
	(\tex): Reset \, to its plain TeX meaning,
	and do not reset \l.
	
	* COPYING: Update for new FSF address (from gcc dist).

	* libtxi/Makefile.in: Various simplifications.

Sun Sep 29 12:58:44 1996  Karl Berry  <karl@cs.umb.edu>

	* util/texi2dvi: Use $progname instead of $0 for --version.

	* util/install-info.c (xmalloc, xrealloc): Declare malloc and
	realloc as returning void *,
	to avoid ptr/int problems on Digital Unix.

	* info/tilde.c (tilde_expand_word): Declare getenv as returning char *,
	to avoid warning on Digital Unix.

	* makeinfo/multi.c (multitable_active): Declare extern here to
 	avoid ld warning on rs6000.

	* util/texindex.c (usage): Avoid ??' trigraph.

	* util/install-info.c: Include <sys/fcntl.h> or <fnctl.h>,
	according to HAVE_SYS_FCNTL_H,
	and only include <sys/file.h> if HAVE_SYS_FILE_H.
	(readlines): Oops, had NULL's and 0's reversed for ptr/int members.

	* info/terminal.c (terminal_goto_xy): Remove spurious extra ;.

	* util/install-info.c: Untabify.	(input_sections): Initialize.
	(find_lines): Initialize the terminating element of the array.
	(print_help): Document --infodir.
	(main): Compare the basename of infile sans .info to the dir entry,
	not infile itself.
	* util/Makefile.in (clean): Remove the install-info binary.

	* info/Makefile.in (distclean): Remove *.info* files.

	* Makefile.in (install),
	* info/Makefile.in (install),
	* makeinfo/Makefile.in (install): Use --infodir instead of --info-file.

	* info/info.c,
	* makeinfo/makeinfo.c: Avoid newlines in string constants for the
 		sake of SunOS cc.

	* makeinfo/multi.c: Do not assume ANSI C.

	* info/info.texi: Oops, need @end vtable for a @vtable.

Sat Sep 28 16:31:28 1996  Karl Berry  <karl@cs.umb.edu>

	* Makefile.in (texinfo): Do not depend on sub-all, as then
        makeinfo is always run.  Instead, depend on texinfo.texi.

	* makeinfo/Makefile.in (info, dvi): New targets.
	makeinfo.info, makeinfo.dvi: Do not depend on macro.texi for now.

	* info/Makefile.in (install): Must call install-info twice.

	* info/info-stnd.texi,
	* info/info.texi,
	* makeinfo/makeinfo.texi: Include direntry.

	* emacs/Makefile.in: Use && after cd, etc.

	* texinfo.texi: Kludges so makeinfo -E will not create spurious
        differences.  Add new direntries.

	* util/install-info.c,
	* util/texindex.c,
	* makeinfo/makeinfo.c,
	* info/info.c: Standardize --version output.

	* makeinfo/makeinfo.c (defun_internal): Don't insert index command
 	if expanding macros.
	(cm_footnotestyle): Don't change the footnote style if it was set
	on the command line.

	* util/texi2dvi: Recompute original index files each time through loop.
	Make indentation uniform.
	Use same basename for the temp input files.
	Standardize --version output.

	* info/Makefile.in (install),
	* makeinfo/Makefile.in (install): Insert $(POST_INSTALL).

Fri Sep 27 13:27:30 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi (Format with texi2dvi): Rewrite now that the script
 	runs in a loop.

	* info/Makefile.in (MAKEINFO): Simplify to ../makeinfo/makeinfo.

Fri Sep 27 00:26:03 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* info/terminal.c [HAVE_TERMIOS_H] (terminal_prep_terminal,
	terminal_unprep_terminal): Add code for termios.
	[HAVE_TERMIOS_H] (original_termios, ttybuff): New variables.
	* info/termdep.h: [HAVE_TERMIOS_H]: Add include of <termios.h>.
	* configure.in: Add check for <termios.h>.

Thu Sep 26 10:46:34 1996  Karl Berry  <karl@cs.umb.edu>

	* emacs/texnfo-upd.el,
	* emacs/texinfo.el,
	* emacs/texinfmt.el: Update from bob for new Texinfo commands, etc.
	
	* emacs/info.el, emacs/informat.el, emacs/makeinfo.el,
	emacs/texnfo-tex.el: Update from Emacs 19.34 dist.
	
	* emacs/elisp-comp: Use TMPDIR if set.

	* util/Makefile.in (libdir): Remove.

	* makeinfo/Makefile.in (install),
	* Makefile.in (install),
	* info/Makefile.in (install): Run install-info.
	(libdir): Remove.

	* texinfo.texi: Various fixes as I make this go through TeX.

	* util/install-info.c: Quote newlines in help message.

	* util/texi2dvi (texi2dvi): Run TeX until the aux/index files
        stabilize, instead of just twice.  From: David Shaw
        <daves@gsms01.alcatel.com.au>.

Tue Sep 24 14:43:03 1996  Karl Berry  <karl@cs.umb.edu>

	* dir: Blank dir file for installation on new systems.

Mon Sep 23 12:18:43 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (args_from_string): Do not back up at a };
 		that leads to an infinite loop.

Sat Sep 21 17:48:04 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_xref): Do not seg fault if outside of
 	any node.  From: Tom Tromey <tromey@creche.cygnus.com>.
	(cm_ctrl): Make obsolete.

Tue Sep 17 13:30:08 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\inforef): Move to more appropriate place.
	(\pounds): Remove spurious extra $.
	(\email): Typeset argument in angle brackets.
	(\macro): Use \doignore for robustness, instead of just letting TeX
	parse the argument.
	(\unmacro): Define.

Sat Sep 14 16:17:35 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi: Document multitables, new ISBN number.

Wed Sep 11 18:01:24 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/multi.c (struct env): Remove unused output_position
        field; this needs to be global.
        (setup_multitable_parameters): Implement template-defined multitables.
	(output_multitable_row): Remove trailing whitespace.

	* makeinfo/makeinfo.c (_READ_BUFFER_GROWTH, struct _defines):
	Remove leading underscore for POSIX/ANSI pedants.
	(init_conversion): Initialize output_position here.
	(init_paragraph): Instead of here, where it loses with the
	multitable calls, eventually resulting in negative counts to the
	write call when the output file is split.

	* texinfo.texi: First cut at macro documentation.
	Change accent doc to use tables.
	Remove whitespace experiments, they are now the default.

Mon Sep  9 14:16:24 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c: Use putc instead of fprintf where possible.
        (cm_accent): Put _ from @ubaraccent after argument.

	* util/texindex.c (strerror) [!strerror]: Conditionalize
 		declaration.

Sat Sep  7 14:13:24 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (commandTable): Obsolete @setchapterstyle.

Thu Sep  5 15:45:11 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (convert_from_loaded_file): Oops, fix
 		wording of initial output comment.

	* makeinfo/makeinfo.c (cm_angle_brackets): Rename from cm_key.
        (commandTable): @email should produce angle brackets.
	@key: Change name.

Tue Sep  3 14:52:17 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\hsize): Decrease.
        (\hoffset): Increase.
	(\setleading): Decrease dramatically.
	This change affects 8.5x11 format only.

	* texinfo.texi: Document accent commands.

Mon Sep  2 11:10:49 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (commandTable): Deprecate @ichapter and
	@titlespec.
	Move all the deprecated @i<section> commands to the end of the list.

	* texinfo.texi: Document @pounds{} and @centerchap{}.

	* texinfo.tex (\centerchfplain): Rewrite to use \chfplain, and to
 	actually center.
	(\unnchfplain): Just call \chfplain.
	(\chfplain): Rewrite to be generally callable.
	(\centerparametersmaybe): Hook, a no-op except with @centerchap.

Sun Sep  1 15:01:49 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi: Document @<whitespace>, rearrange spacing section.

	* makeinfo.c (commandTable): Make @. @? @! insert themselves,
 	not be sentence-non-enders.  They are sentence *enders*.  Also,
 	make @\t and @\n insert a normal space character, not themselves.
  	Also, define @hyphenation.
	(insert_space): New function.
	(cm_ignore_sentence_ender): Remove this.
	(flush_output): Check only for META-SPC, not META-<sentence-ender>.

Fri Aug 30 18:55:30 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi: Document @- and @hyphenation{}.
	Miscellanous fixes.

	* makeinfo/makeinfo.c (commandTable): Define @- as cm_no_op, since
 	makeinfo doesn't do hyphenation.

Thu Aug 29 13:05:38 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\key): Do not uppercase the argument; key names
	can be mixed case, e.g., `Control'.

	* makeinfo/makeinfo.c: @infotop, @infounnumbered,
	@infounnumberedsec, @infounnumberedsubsec,
	@infounnumberedsubsubsec, @infoappendix, @infoappendixsec,
	@infoappendixsubsec, @infoappendixsubsubsec, @infochapter,
	@infosection, @infosubsection, @infosubsubsection:
	  Remove these long-since obsolete commands.
	@iappendix, @iappendixsection, @iappendixsec, @iappendixsubsec,
	@iappendixsubsubsec, @ichapter, @isection, @isubsection,
	@isubsubsection, @iunnumbered, @iunnumberedsec, @iunnumberedsubsec,
	@iunnumberedsubsubsec:
 	  Deprecate these.
	@infoinclude:
	  Obsolete this.
	@,: Have to take an argument, since have to do @,{c} not c@,; can't
	feasibly implement the latter in TeX.

	* makeinfo/makeinfo.c: Rename @d to @udotaccent, since this is
 		relatively infrequently used.

Tue Aug 27 14:58:56 1996  Karl Berry  <karl@cs.umb.edu>

	* info/info.c (print_short_help),
	* util/install-info.c (print_help),
	* util/texi2dvi,
	* makeinfo/makeinfo.c (usage) Include bug reporting address.

Mon Aug 26 15:27:17 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (commandTable): Remove @input, @medbreak,
 		@smallbreak, @overfullrule, @br.

Sun Aug 25 17:25:48 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (commandTable): Unify commands that perform
        the same operation, such as cm_file, cm_samp, cm_email,
        etc., which all do cm_code.

	* texinfo.texi: Document @ifhtml ... @end ifhtml.  Change
	`PlainTeX' to `plain TeX'.

Fri Aug 23 16:03:16 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\pounds): New Texinfo command @pounds{}.
	(\parskip): New smaller value.
	(\chapheadingskip, \secheadingskip, \subsecheadingskip): New smaller
	values, both for 8.5x11 and @smallbook formats. From Bob.

	* makeinfo/makeinfo.c (cm_special_char): @pounds{} prints a #.
	(commandTable): Add new command @pounds.

Tue Aug 20 13:47:20 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (CommandTable): Restore "!", accidentally
        removed previously.

	* texinfo.tex (\key): Typeset a lozenge around the argument (from
	gildea@intouchsys.com).
	* makeinfo/makeinfo.c (cm_key): Surround arg with <...> to match
        new lozenge style in TeX.

Wed Aug 14 16:59:23 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi: Propagate change from rms.

Tue Aug 13 11:33:27 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi: Propagate change from rms.

	* texinfo.texi: Document other @headings options.

Sun Aug 11 13:19:42 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (cm_accent, cm_special_char, cm_dotless):
	New functions.
	(CommandTable): Add new commands for all of plain.tex's
	accents and non-English characters.

Fri Aug  9 14:12:07 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (convert_from_loaded_file): Say we're making
 	``text'' file if no_headers.  Also, use `input_filename' instead
 	of just `name' for clarity.
	(suffixes): Check for no suffix last, i.e., prefer `foo.texi' as an
	input file to `foo'.  (The latter is probably a binary.)

Mon Aug  5 13:52:39 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\heading, \subheading, \subsubheading): Can no
 	longer call the nonexistent \*secheadingi series. Instead, call
 	\plain*secheading.
	(\plainsubsecheading, \plainsubsubsecheading): New macros, by analogy
	with \plainsecheading.
	(\unnumberedsubseczzz, \unnumberedsubsubseczzz): Call them.

Sun Aug  4 16:46:10 1996  Karl Berry  <karl@cs.umb.edu>

	* makeinfo/makeinfo.c (flush_output): Mask out eighth bit, that we
 	turned on in non-sentence enders.

Sat Aug  3 14:03:10 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\HEADINGSdouble, \HEADINGSsingle,
 	HEADINGSdoubleafter, \HEADINGSsingleafter, \CHAPPAGoff,
 	\CHAPPAGon, \CHAPPAGodd): Set \contentsalignmacro, analogous to
 	\pagealignmacro.
	(\startcontents): Call \contentsalignmacro instead of \pagealignmacro.

Mon Jul 29 14:44:33 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (\indexfonts): Make leading be 12pt. Otherwise, it's
 	too crammed.
	(\smalllispx): Remove \setleading{10pt}. That was too small.
	(\doprintindex): Do not call \tex ... \Etex.  Index files are Texinfo
	source, not TeX source, except for using \ instead of @ as the
 	escape character (for now).

Sun Jul 28 13:37:05 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.tex (paragraphindent): Move to more reasonable place in
        the source file.	
        (chapfonts, secfonts, subsecfonts, indexfonts): Call \setleading. 
	(\chfplain, \secheading, \plainsecheading, \subsecheading,
	 \subsubheading): Rewrite to properly \hangindent the title.
     	(\sectionheading): New generic macro to print section titles.

	* texinfo.texi: Update the `Obtaining TeX' node.

Fri Jul 26 14:11:48 1996  Karl Berry  <karl@cs.umb.edu>

	* util/texi2dvi: Do macro expansion with makeinfo before running TeX.
	Various expansion safety measures added for test; avoid use of -o.

	* makeinfo/makeinfo.c (usage): More usage message tweaks.

Fri Jul 26 11:55:37 1996  Karl Berry  <karl@laurie>

	* util/texi2dvi: Format usage message to conform to the other *utils.

Thu Jul 25 17:05:47 1996  Karl Berry  <karl@cs.umb.edu>

	* emacs/Makefile.in: Do not compile the Elisp by default.  We
	don't install it, so it confuses people to compile it.

Sun Jul 21 07:20:09 1996  Karl Berry  <karl@cs.umb.edu>

	* util/Makefile.in (install-info): Dependency should be
 	  install-info.o, not install-info. Also, update copyright years.

	* makeinfo/makeinfo.c (cm_printindex): Don't call execute_string
        to print index entries, we've already done the expansion now.

	* makeinfo/makeinfo.h: Add copyright.  Finish merge of rms changes.
	* makeinfo/makeinfo.c: Finish merge, add my expansion changes again.
	* makeinfo/multi.c: Add copyright message.

Fri Jul 19 10:35:22 1996  Karl Berry  <karl@cs.umb.edu>

	* info/info.c: Update copyright date.

	* info/info.texi,
	* util/install-info.c,
	* emacs/Makefile.in,
	* emacs/texnfo-tex.el,
	* emacs/Makefile.in: Change FSF address.

	* Merged changes from bfox -- below, plus multitable changes, plus
	lots more.

	    Sun Apr 14 08:49:50 1996  Brian J. Fox  <bfox@nirvana.samsara.com>

		    * makeinfo/makeinfo.c (remember_node_reference): Numerous commands
		    call remember_node_reference.  If a node has not yet been defined,
		    use the empty string as the current node for those cases.

	    Mon Feb 12 17:35:38 1996  Brian J. Fox  <bfox@nirvana.samsara.com>

		    * makeinfo/makeinfo.c (push_node_filename): Clean up calls to
		    xmalloc and xrealloc.  Only have to call xrealloc.

	    Fri Jan 26 08:00:38 1996  Brian J. Fox  <bfox@nirvana.samsara.com>

		    * info/session.c (info_input_buffer_space_available): Fix typo
		    which forced the limitation of the sizeof (int) instead of sizeof
		    (buffer).

		    * Makefile.in (PACKVER): now at 3.8.  Add TERMIOS support to
		    Info.  Minor bugs fixed in Makeinfo.

Sat Jul 13 11:58:57 1996  Karl Berry  <karl@cs.umb.edu>

	* texinfo.texi (ftable vtable): Mention example.

Sun Jun 30 14:59:51 1996  Karl Berry  <karl@goldman.gnu.ai.mit.edu>

        * makeinfo/makeinfo.c (cm_email): New function for new @email command.
	* texinfo.texi (email): New node documenting it.

Wed Apr 17 18:07:34 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (cm_kbd): Do nothing if in @example or @code.
	(struct brace_element): New field in_fixed_with_font.
	(remember_brace_1): Save in_fixed_with_font.
	(pop_and_call_brace): Restore in_fixed_with_font.
	(cm_code): Don't decrement in_fixed_with_font at end of construct.
	(struct istack_elt): New field in_fixed_with_font.
	(push_insertion, pop_insertion): Save and restore in_fixed_with_font.
	(end_insertion): Don't decrement in_fixed_with_font here.
	(not_fixed_width): New function.
	(cm_sc, cm_var, cm_italic, cm_roman, cm_titlefont):
	Use not_fixed_width.

Sat Apr 13 23:22:05 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* util/install-info.c (main): Fatal error if no input file spec'd.
	Look for START-INFO-DIR-ENTRY, not BEGIN-INFO-DIR-ENTRY.

Thu Apr 11 18:21:50 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (cm_enddots): New function.
	(self_delimiting): Accept -, ^ and ".
	(CommandTable): Add commands -, ^, ", enddots, centerchap.

Sun Mar 24 12:18:32 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (enum insertion_type): Add `direntry'.
	(insertion_type_names): Add "direntry".
	(cm_dircategory): New function.
	(cm_direntry): New function.
	(CommandTable): Add "dircategory" and "direntry".
	(insert_string): New function.
	(end_insertion): Handle direntry.
	(begin_insertion): Handle direntry.

Sun Mar 24 11:10:05 1996  Karl Berry  <karl@spiff.gnu.ai.mit.edu>

        * makeinfo/makeinfo.c (cm_url): New function for new @url command.

Fri Feb 23 21:14:40 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* info/Makefile.in (install, uninstall): Use manprefix.

Fri Feb 23 19:50:18 1996  Richard Stallman  <rms@whiz-bang.gnu.ai.mit.edu>

	* util/Makefile.in (install-info, install-info.o): New targets.
	(all): Depend on install-info.
	(install, uninstall): Operate on install-info.

	* install-info.c: New file.

Wed Jan  3 10:01:45 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

        * makeinfo/makeinfo.c (make_index_entries_unique): Be a little bit
	stricter about what makes two index entries identical. 

Fri Dec 29 13:00:24 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* makeinfo/makeinfo.c (Whole File): Add @detailmenu for allowing
	detailed menu listings to appear while still defaulting nodes.

Wed Dec 27 13:54:30 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (cm_code): Always notice that we are in
	fixed_width_font, even if other formatting changes are not to take
	place.

Sat Dec 23 11:48:43 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/man.c: (clean_manpage) Remove ^L's from page.

	* makeinfo/makeinfo.c (get_brace_args): Change some memcpy's to
	memmoves.

	* info/info.c (main): Prefer caseless matches over partial
	matches.

	* Makefile.in (All Subdir Targets): Change suggested by Debian
	people which allows errors in recursive makes to kill the
	top-level make.

	* makeinfo/Makefile.in (makeinfo.dvi): New target.

	* info/info.c (main): Print version of containing texinfo package.

	* makeinfo/makeinfo.c (flush_output): Don't strip high-bit from
	sentence_enders.
	Print the version number of the containing texinfo package.

	* info/man.c (locate_manpage_xref): Count the 0th entry.

	* makeinfo/makeinfo.c (cm_menu): If a menu is seen before a node
	has been defined, warn, and create the node `Top'.

Wed Jun 21 03:19:39 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (cm_infoinclude): Clean up after printing
	error if the file couldn't be included.
	(discard_braces): Print errors only for those unmatched open
	braces that belong to a texinfo command.

	* */Makefile.in: Use @CFLAGS@ and @LDFLAGS@.

	* makeinfo/makeinfo.c: End `node_search_string' and friends with a
	terminating null character.

Wed Jun 21 01:23:49 1995  Jim Meyering (meyering@comco.com)

	* makeinfo/makeinfo.c: Close comment after #endif.

Tue Jun 20 04:58:26 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* emacs/Makefile.in (install): Fix typo: "fle" -> "file".

	* Makefile.in (VERSION): Bump to 3.6

	* info/clib.c: Include general.h for `info_toupper' and friends.

	* info/clib.h: strncmp and strncascmp return an int.  What kind of
	drugs was I on?

Mon Jun 19 23:34:47 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (make_index_entries_unique): Copy the last
	index entry.

Mon Jun 19 21:55:49 1995  Noah Friedman  <friedman@prep.ai.mit.edu>

        * util/texi2dvi (--version): New option.
        Cosmetic changes.

Mon Jun 19 16:06:40 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c (cm_macro): Fix typo.  `x != y' is not the
	same as `x |= y'.

	* info/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
	* makeinfo/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
	* util/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).
	* libtxi/Makefile.in (exec_prefix): Use @exec_prefix@ not $(prefix).

	* emacs/Makefile.in (uninstall): New target.
	(install): Use the definition of $(lispdir), don't dynamically
	find it.  Use INSTALL_DATA not cp.
	(exec_prefix): use @exec_prefix@ not $(prefix).

	* makeinfo/makeinfo.c (apply): If there isn't an actual argument
	for a named argument, default it to "".

	* Makefile.in (VERSION): Now at 3.5.
	(texinfo): Make ./makeinfo/makeinfo depend on sub-all for parallel
	makes.

	* emacs/Makefile.in (ELISP_OBJS): Explictly declare .el and .elc
	in the SUFFIXES list.

	* makeinfo/makeinfo.c (cm_today): Special case for losing alpha.
	* (minor_version): Increase to 63.

	* info/info.c (version_string): Now at 2.14.
	* info/tilde.c: Declare getenv to return (char *).
	* info/window.c (build_message_buffer): Jump through hoops to keep
	DEC Alpha's happy.

	* info/xmalloc.c: Declare malloc and realloc as (void *) returning
	functions.

Sun Jun 18 12:47:21 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* emacs/detexinfo.el (detexinfo-line-cmds-without-arg):
	Handle ifhtml.

Fri Jun 16 13:48:14 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* util/texindex.c: Update TEXINDEX_VERSION_STRING for texinfo 3.4

	* (All *.c *.h *.in): Change FSF old address to new.
	* texinfo.texi (Obtaining TeX): Change FSF old address to new
	address.  Change Old phone numbers to new phone numbers.

	* Makefile.in (VERSION): Change to 3.4.

Thu Jun 15 22:49:07 1995  Robert J. Chassell  <bob@hill.gnu.ai.mit.edu>

        * texinfo.texi, emacs/=development/cover.texi: update
          Texinfo distribution package version number

Thu Jun 15 09:23:02 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/info.c: (minor_version): Set to 13.

	* info/clib.c,h: New files gather together replacement functions
	for those POSIX-style C library functions that are not present on
	the target system.

	* info/Makefile.in (SRCS): Add clib.c and clib.h.  makedoc now
	needs clib.o to build on systems missing various string.h stuff.

	* info/variables.c (whole file): Call strdup, not savestring.
	* info/tilde.c (whole file): Call strdup, not savestring.
	* info/search.c (whole file): Call strdup, not savestring.
	* info/nodes.c (whole file): Call strdup, not savestring.
	* info/nodemenu.c (whole file): Call strdup, not savestring.
	* info/man.c (whole file): Call strdup, not savestring.
	* info/makedoc.c (whole file): Call strdup, not savestring.
	* info/m-x.c (whole file): Call strdup, not savestring.
	* info/info.c (whole file): Call strdup, not savestring.
	* info/indices.c (whole file): Call strdup, not savestring.
	* info/echo_area.c (whole file): Call strdup, not savestring.
	* info/session.c (whole file): Call strdup, not savestring.
	* info/filesys.c (whole file): Call strdup, not savestring.

	* makeinfo/makeinfo.c (minor_version): Change to 1.62.
	* makeinfo/makeinfo.c (get_execution_string): Initialize `i' to 0
	in case there are no execution_strings.

Wed Jun 14 17:48:06 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* texinfo.texi: include "texinfo.tex", not "texinfo".
	* info/session.c (forget_window_and_nodes): Place a sequence point
	in between "info_windows[i] = info_windows[++i];" as per various
	compiler experts.

	* makeinfo/makeinfo.c (strdup): Create this function if the system
	doesn't have it.
	(discard_insertions): Use the insertion's filename, not the
	current input file.
	(push_insertion): Remember the current input file with each
	insertion.
	(pop_insertion): Free storage used by remembered input file.

	* makeinfo/makeinfo.c (whole file): Use `strdup' instead of
	`savestring'.
	* configure.in: Check for `strdup'.

Wed Jun 14 15:58:51 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

        * libtxi/Makefile.in (prefix): Use @prefix@, not /usr/local/

Wed Jun 14 10:50:57 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* Makefile.in (DISTFILES): Don't include *.elc files in the list
	  of files to distribute.
	  (installdirs): Include `emacs' in the list of sub-dirs with
	  Makefile.in's.

	* emacs/elisp-comp: Shell script which batch compiles the *.el files.
	* emacs/Makefile.in: New file contains targets to build the elc files.
	* configure.in: Add `emacs/Makefile' to the list of created makefiles.
	* makeinfo/makeinfo.c (whole file): Give every function a return
	  type.  All cm_xxx functions are now void.  Add declarations for
	  functions to top of file.

Mon Jun 12 12:00:57 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/man.c (reference_section_starters): Add versions of "SEE
	ALSO" and "RELATED INFORMATION" with tabs instead of spaces as
	well.

	* util/texindex.c: Back out changes for OFF_T.  Explicity coerce
	the result of lseek to a long, and use longs everywhere.

	* texinfo.texi: Change "@end shorttitlepage" to "@end titlepage".
	* makeinfo/makeinfo.c: Make @shorttitlepage ignore the rest of the
	line.

	* util/texindex.c (strrchr): Create if not present.
	Test for HAVE_STRCHR and HAVE_STRING_H.
	(main): Make PROGRAM_NAME be just the last path componenet of argv[0].
	(decode_command): Rewrite.
	(usage): Rewrite.  Now texindex handles --version.

	* makeinfo/makeinfo.c (make_index_entries_unique): Rewrite from
	scratch.

	* Don't distribute created info files with texinfo.  After all,
	the user will have the tools necessary to create them, yes?

	* Makefile.in (distclean): Remove *.log

	* info/man.c (read_from_fd): Change timeout value for select to 15
	seconds.  Some systems (e.g., albert.ai.mit.edu) actually need
	more than 10 seconds to format a man page.

	* info/tilde.c: Fix typo in declaration for
	`tilde_expansion_failure_hook'.

Wed Jun  7 13:36:53 1995  Brian Fox  <bfox@albert.gnu.ai.mit.edu>

	* info/tilde.h: Change type of tilde_expansion_failure_hook to
	a pointer to a function returning a (char *).
	* info/tilde.c: Change type of tilde_expansion_failure_hook to a
	pointer to function returning a (char *).

	* makeinfo/makeinfo.c (get_execution_string): Don't use `i' in the
	latter assignment, use `execution_strings_index' instead.

	* info/man.c (read_from_fd): Change logic to avoid using FIONREAD.

	* info/xmalloc.c (xrealloc): Use (void *), not (caddr_t *).
	* info/xmalloc.c (xmalloc): Use (void *), not (caddr_t *).

	* Makefile.in (DISTFILES): Don't find RCS no "=" directories.

	* util/Makefile.in (prefix): Use @prefix@ as the value.
	* info/Makefile.in (prefix): Use @prefix@ as the value.
	* makeinfo/Makefile.in (prefix): Use @prefix@ as the value.

Wed Jun  7 12:29:28 1995  Robert J. Chassell  <bob@hill.gnu.ai.mit.edu>

        * texinfo.texi: Correct minor typos.

        * emacs/texinfmt.el:  Don't require @shorttitlepage to be inside
          of @iftex ... @end iftex

Mon May  8 18:33:52 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/nodes.c: #include "man.h" if HANDLE_MAN_PAGES.
	(info_get_node_of_file_buffer): If the file buffer is one
	associated with manpages, call the manpage node finding
	function instead.
	(info_find_file_internal): If the file buffer is one associated
	with manpages, avoid doing any file I/O.
	(info_reload_file_buffer_contents): Ditto.
	(info_find_file_internal): Call create_manpage_file_buffer instead
	of info_load_file_internal.

	* info/info.c: #include "man.h" if HANDLE_MAN_PAGES.
	(main): If the initial node cannot be found, perhaps find it as a
	manpage.
	* info/info-utils.c: #include "man.h" if HANDLE_MAN_PAGES.
	(info_xrefs_of_node): If handling man pages, and this is a manpage
	node, use xrefs_of_manpage.

	* info/session.c (info_set_input_from_file): Only fclose (stream)
	if it is non-null and not stdin.
	#include "man.h" if HANDLE_MAN_PAGES.
	(info_menu_or_ref_item): If handling man pages, and this is a
	manpage node, get the xrefs from manpage_xrefs_in_binding.
	(info_man): Compile in for M-x man if handling man pages.
	(info_move_to_xref): If handling man pages, and the current node
	is a manpage node, use locate_manpage_xref to get xrefs.

Thu May  4 08:55:23 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/info.c (main): If the output device is not a terminal, and
	no output filename has been specified, make user_output_filename
	be "-", so that the info is written to stdout, and turn on the
	dumping of subnodes.

Thu Apr 13 18:05:06 1995  Daniel Hagerty  <hag@churchy.gnu.ai.mit.edu>

	* texinfo.texi: Fixed @end titlepage/@end shorttitlepage

Sat Apr  8 12:51:49 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* makeinfo/makeinfo.c [! HAVE_STRERROR] (strerror): New function,
 	snarfed from ../info/filesys.c.
	(cm_infoinclude): Use strerror instead of sys_errlist.

Tue Apr  4 18:44:00 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* util/texindex.c (sort_offline): Change TOTAL to be an off_t.
	* util/texindex.c (sort_in_core): Change TOTAL to be an off_t.
	* util/texindex.c (MAX_IN_CORE_SORT): Cast to off_t.

Sun Apr  2 16:20:13 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* info/Makefile.in: Define DEFAULT_INFOPATH in case we are
	compiling in the current directory.
	* info/Makefile.in (info.o): Add filesys.h because of DEFAULT_INFOPATH.
	* info/(search.c,h, nodes.c info-utils.c) Use strcasecmp and
	strncasecmp instead of stricmp and strnicmp.  Define strcasecmp
	and strncasecmp in search.c if !HAVE_STRCASECMP.
	* info/search.c: If HAVE_STRING_H include it.
	* info/nodes.c: If HAVE_STRING_H include it.
	* info/info-utils.c: If HAVE_STRING_H include it.
	* info/info.h: If HAVE_STRING_H include it.
	* configure.in (AC_HAVE_FUNCS): Check for strcasecmp.
	* makeinfo/makeinfo.c (strcasecmp): Define if !HAVE_STRCASECMP.
	* makeinfo/makeinfo.c (entire file): Use `strcasecmp' instead of
	`stricmp'.
	* makeinfo/makeinfo.c (cm_ifeq): New command takes three args.
	Compares first two, executes remainder if the first two are
	string-wise eq.
	* makeinfo/makeinfo.c (ifhtml): Add to command list.  Shouldn't be
	used, but it is by people who don't want to hack macros.

Sat Apr  1 09:20:14 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* makeinfo/makeinfo.c (begin_insertion): Fix reversed arguments to
	line_error.

	* info/info-stnd.texi: Use "end" footnote style instead of "separate".

	* info/Makefile.in: Change "rm -f" to $(RM).

	* info/general.h: Define zero_mem in terms of memset if we have
	it, else in terms of bzero if we have that, else as inline code.

	* info/NEWS: Updated to reflect changes in 2.11.

Fri Mar 31 22:38:31 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* Makefile (DISTFILES): Don't include *.a, *orig, nor *.e
	files.
	(DISTFILES):

Sat Mar  4 12:16:29 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* Makefile.in: Use @prefix@ instead of hardwired `/usr/local'.
	  Clean up makefile rules which make in subdirs.
	  (ALL_SUBDIRS): Add makeinfo/macros to list of subdirectories.

	* configure.in (AC_CHECK_FUNCS): Add `bcopy' to list of things to
	check for.

Fri Mar  3 13:54:10 1995  Robert J. Chassell  <bob@hill.gnu.ai.mit.edu>

        * texinfo.texi: Minor changes for incremental new edition 2.20.

Fri Mar  3 19:01:36 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* filesys.c (filesys_read_info_file): Local variable ST_SIZE is a
	long which has the value of finfo->st_size casted to it.
	* nodes.c (whole file): Similar changes.

	These changes and the following for makedoc.c were required for
	proper operation on HPm68k NetBSD.

Mon Feb 27 15:16:27 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* makedoc.c (process_one_file): Local variable FILE_SIZE is a long
	which has the value of finfo.st_size casted to it.


Fri Mar  3 18:58:38 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* makeinfo.c (find_and_load): Cast fileinfo.st_size to a long for
	internal use.  This makes things work on NetBSD.


Fri Mar  3 13:54:10 1995  Robert J. Chassell  <bob@hill.gnu.ai.mit.edu>

        * texinfo.texi: Minor changes for incremental new edition 2.20.

Fri Mar  3 09:41:39 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* configure.in (TERMLIBS): Use AC_CHECK_LIB instead of
	AC_HAVE_LIBRARY.

Mon Jan  9 16:55:31 1995  Brian Fox  <bfox@churchy.gnu.ai.mit.edu>

	* Makefile.in (DISTFILES): Add the directory EMACS-BACKUPS to the
	list of things to avoid distributing.

Tue Nov 29 17:48:37 1994  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>

	* configure.in: Check for off_t.
	* util/texindex.c (main): Use it.

Fri Nov 11 14:46:28 1994  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>

	* configure.in: Update for Autoconf v2.

Thu Oct 13 02:17:38 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* emacs/detexinfo.el (detexinfo): Handle @!, @?, @^, @".

Mon Aug  1 03:26:13 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* texindex.c: Move the memset define down past string.h include.

Tue Jun 28 14:21:43 1994  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)

	* makeinfo/makeinfo.c: Add --help option.
	(usage): Take args for stream and error code.
	Change callers.
	(print_version_info): Write to stdout, not stderr.

Wed May 18 18:55:24 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* info/session.c (forget_window_and_nodes): Negate test for
	internal_info_node_p.  We only want to free the text if it is
	not an internal node.

Thu Mar 10 03:07:18 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* texindex.c (memset): Fix invalid parm name (was 0).

Thu Feb 10 12:56:52 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

        * makeinfo/makeinfo.c (current_item_function): Don't loop if elt
        is NULL.

Wed Feb  9 12:21:09 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c (minor_version): Release now at 1.60.

	* makeinfo/makeinfo.c (expand_filename): Additional fixes.  Now
	when called with NULL filename, makes an output filename from the
	input filename.
	(convert_from_loaded_file): If REQUIRE_SETFILENAME is #defined (no
	longer the default case) then error if no @setfilename was found
	in the file.  If REQUIRE_SETFILENAME is not #defined, the input
	file starts either at the first line, or at the second line if the
	first line contains the text "\input", and the output filename is
	the input file name without directory and with ".info" replacing
	any extension found.
	(convert_from_loaded_file): Fixed bug in search for first
	occurence of "@setfilename".

Tue Feb  8 14:16:58 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

        * configure.in: Check for sys/file.h.
        info/dir.c, info/filesys.c, info/makedoc.c, info/nodes.c,
        info/session.c, info/termdep.h, makeinfo/makeinfo.c
        [HAVE_SYS_FILE_H]: Include <sys/file.h>.

        * makeinfo/makeinfo.c (convert_from_loaded_file): Print
        real_output_filename instead of output_filename, so user knows
        exactly where output file is going.

        Fri Jun 11 14:34:30 1993  Ian Lance Taylor  (ian@cygnus.com)
       	* configure.in: Check for sigprocmask and sigsetmask.
	* info/signals.h (HAVE_SIGSETMASK): Don't define.
	(HAVE_SIGPROCMASK): Use instead of _POSIX_VERSION.
	(BLOCK_SIGNAL, UNBLOCK_SIGNAL): If neither HAVE_SIGPROCMASK nor
	HAVE_SIGSETMASK is defined, define these to do nothing.
	* info/signals.c (sigprocmask): Don't compile if HAVE_SIGSETMASK
	is not defined.

	* info/terminal.c (terminal_prep_terminal): Don't clobber VINTR
	and VQUIT in conditionals.

Mon Feb  7 18:10:22 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c (full_pathname): Correct to really return
	the full pathname of the input argument.  Now makeinfo
	/foo/bar.texi, where /foo/bar.texi contains "@setfilename
	bar.info", correctly leaves the output file in "./bar.info".
	Note that "@setfilename ../bar.info" still works; this is already
	an absolute pathname.

Sat Feb  5 13:04:05 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c: Version 1.59 released.

	* makeinfo/makeinfo.c (whole file):  Large number of changes allow
	the "-E filename" option to be used to write a macro expanded
	output file.  On a file which contains no @include's and no
	@macro's, the output file is identical to the input file.

	* makeinfo/makeinfo.c (declarations): Remove cm_tex ().  It is
	never used since it is implemented with `command_name_condition'.

	* makeinfo/makeinfo.c (add_char): Shift braces following the
	current break point if we have deleted any characters.
	(adjust_braces_following): New function adjusts all of the markers
	in the brace stack which follow HERE by AMOUNT.  This fixes a bug
	where (for example) @var{} immediately following a line break
	which is the end of a sentence modified the output incorrectly.

Wed Feb  2 14:14:03 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo: Version 1.58.

	* makeinfo/makeinfo.c (cm_node): Add extra hair to allow
	backtracking through execution strings.  Add extra hair to allow
	the first node seen after a @top node is seen to adjust the
	sectioning level of the @top node and associated menus.
	Fix a few typos.
	Add facility for macros to invoke the original definition.  This
	works by not allowing a single macro to recurse.  Mutual recursion
	is also disallowed with this plan.

	* makeinfo/macros: New directory contains shippable macros.
	* makeinfo/macros/simpledoc.texi: Macros which simplify the most
	common uses of TeXinfo.  See the example file.
	Macros are now a reasonable way to get people started using
	TeXinfo.

Mon Jan 31 12:54:36 1994  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c (minor_version): Increase to 57.

	* makeinfo/makeinfo.c (cm_node): Call execute_string on the node,
	next, prev, and up pointers.
	(reader_loop): Change logic for `@bye'.  No longer required at the
	ends of executed strings.
	(execute_string): Do not append `@bye' to the string to execute.

	* makeinfo/makeinfo.c (whole file): Use COMMAND_PREFIX instead of
	hardcoding `@' character in strings and searches.

	* makeinfo/makeinfo.c (read_command): If HAVE_MACROS is defined,
	then recognize and execute macros here.
	(CommandTable): Add "macro" and "unmacro" to table if HAVE_MACROS
	is defined.

	* makeinfo/makeinfo.c (cm_macro, cm_unmacro, execute_macro)
	  makeinfo/makeinfo.c (get_macro_args, find_macro, add_macro)
	  makeinfo/makeinfo.c (delete_macro, array_len, apply):
	  New functions implement macro facility if HAVE_MACROS is
	  defined.

	* makeinfo/macro.texi (new file): Examples of using the new macro
	facility.

Mon Jan 31 10:24:52 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

        * makeinfo/makeinfo.c (executing_string): Restore global
        declaration.

Mon Jan 24 23:48:26 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

        * texinfo.texi: Various typo fixes from Bob Chassell
        <bob@gnu.ai.mit.edu>.

Thu Jan  6 13:34:21 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

        * texinfo.texi: Turned on smallbook format and @set smallbook.

Wed Dec 15 20:08:43 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * info/filesys.h (DEFAULT_INFOPATH): Added /usr/local/info,
        /opt/gnu/info, /usr/share/info, and /usr/local/share/info.

Tue Dec 14 19:10:20 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * libtxi/Makefile.in (ALLOCA): Define from configure.

Fri Dec 10 04:33:12 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/texi2dvi: Put under RCS control.

Sun Dec 26 11:55:46 1993  Brian J. Fox  (bfox@ai.mit.edu)

	* info/session.c (info_numeric_digit_arg_loop): Fix doc string.

	* info/infodoc.c (create_internal_info_help_node): Print out list
	of functions which have to keystroke equivalent if we support
	NAMED_FUNCTIONS.

	* info/filesys.c (compress_suffixes): Add ".gz" for "gunzip" to
	alist.

	* info/footnotes.c (make_footnotes_node): If refs[i] doesn't have
	a nodename, then it couldn't be a reference to a footnote.

	* info/nodemenu.c (get_visited_nodes): Handle the case where
	filter_func has left no possible buffers to select.

Sat Dec 25 10:35:56 1993  Brian J. Fox  (bfox@ai.mit.edu)

	* info/infodoc.c (create_internal_info_help_node): Conditionalize
	generation of the help node based on the #define
	HELP_NODE_GETS_REGENERATED.  When this is not set (the default)
	the help node is generated exactly once, and is not gc'able.
	Otherwise, a new node is always created for the help window, and
	the old node gets garbage collected by the gc system.
	(info_find_or_create_help_window): Conditionalize window node
	selected based on the #define HELP_NODE_GETS_REGENERATED.

	* info/dir.c (add_menu_to_file_buffer): Place exactly one blank
	line between directory entries.

	* info/info.c (version_string): Update minor version to "11".

	* info/info.h: Update comment to "2.11".

	* info/dir.c (maybe_build_dir_node): Only add the contents of a
	new file if it is not identical to the file of the DIR buffer.

	* info/nodes.c (info_get_node): Call `maybe_build_dir_node' on
	"dir" as well as "localdir" to mimic emacs-19.22 "dir" merging
	behaviour.

Fri Dec  3 13:41:44 1993  Brian J. Fox  (bfox@ai.mit.edu)

	* info/info-utils.c (canonicalize_whitespace): Suppress whitespace
	found at the start of STRING.

Sat Nov 20 14:00:50 1993  Brian J. Fox  (bfox@hippie)

	* info/indices.c (DECLARE_INFO_COMMAND): Fix typo in assignment to
	`old_offset' (= instead of ==).

Tue Nov  2 12:22:40 1993  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c (make_index_entries_unique): New function
	makes a sorted array have all unique entries by appending numbers
	to the ends of strings.
	(sort_index): Call `make_index_entries_unique'.

Mon Sep 20 12:04:05 1993  Brian J. Fox  (bfox@ai.mit.edu)

	* makeinfo/makeinfo.c (get_execution_string): New Function returns
	a pointer to an  EXECUTION_STRING structure.
	(execute_string): No longer uses a static string; call
	`get_execution_string' instead in order to get a free buffer for
	consing.

Sun May 23 07:00:20 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * Texinfo 3.1 released.

Sat May 22 18:21:27 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * info/info.c (info_patch_level): Increment constant to 1.

        * info/Makefile.in (DEFAULT_INFOPATH): Default definition deleted.
        Makefile.in: Put it here instead.
        * Makefile.in (MDEFINES): Add DEFAULT_INFOPATH.

        * configure.in: check for vfprintf and vsprintf.

        * makeinfo/makeinfo.c: Version 1.55.

        * makeinfo/makeinfo.c (add_word_args, execute_string) [HAVE_VARARGS_H]:
        Don't use this definition unless HAVE_VSPRINTF is also defined.
        (error, line_error, warning) [HAVE_VARARGS_H]: Don't use this
        definition unless HAVE_VFPRINTF is also defined.
        Remove indentation of all cpp directives, except for #pragma.

Fri May 21 14:34:24 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * texinfo.texi: Rename to texi.texi.
        Change @setfilenname and START-INFO-DIR-ENTRY to `texi.info'.

        * Makefile.in (MDEFINES): Pass LDFLAGS to sub-makes.
        (realclean): Delete `configure'.
        Changed all references to texinfo.info to texi.info

        * configure.in: Add AC_PROG_RANLIB, and AC_CONST.
        Check for `rindex' function.
        Check for varargs.h.
        Clean up symbol names for header files so a single AC_HAVE_HEADERS
        can be used.
        (AC_INIT): Use texi.texi instead of makeinfo/makeinfo.c

        * info/info-utils.h: Copy definitions of bcopy, index, and rindex
        (with appropriate #ifdef wrappers) from termdep.h.  These are
        included by a mutually exclusive set of files.

        * info/termdep.h [HAVE_SYS_PTEM]: Use HAVE_SYS_PTEM_H instead.

        * info/terminal.c, info/termdep.h [HAVE_TERMIO]: Use HAVE_TERMIO_H
        instead.

        * info/makedoc.c, info/filesys.c [!O_RDONLY]: Include fcntl.h or
        sys/fnctl.h, depending on whether HAVE_SYS_FCNTL_H is set.

        * info/termdep.h: Remove all indentation in #-exprs.
        Remove old assumptions about bcopy, index, and rindex.
        [HAVE_BCOPY]: Define bcopy.
        [HAVE_RINDEX]: Define index and rindex.

        * info/nodes.c (info_get_node): Don't call stricmp if nodename is
        NULL. Remove indentation in #-exprs.

        * info/echo_area.c (echo_area_stack_depth): Declare static.

        * info/Makefile.in (DEFAULT_INFOPATH): Make separate Makefile
        variable so it can be overridden more easily by the user.  Add `.'
        to beginning of path.
        (clean): Delete core.* (386bsd core files).
        (MAKEDOC): Variable removed.  Refer to `makedoc' explicitly.
        (funs.h): Add `:' commands after if, to avoid spurious nonzero
        exit statuses.

        * info/userdoc.texi: Improved comments explaining its purpose.

        * makeinfo/makeinfo.c [HAVE_VARARGS_H]: Include varargs.h.
        (error, line_error, warning, add_word_args,
          execute_string)[HAVE_VARARGS_H]: New versions that
        use varargs.  From bfox.

        * makeinfo/Makefile.in (clean): Delete core.* (386bsd core files).

        * util/Makefile.in (clean): Remove core.* (386bsd core files).

        * libtxi/Makefile.in: Remove all references to $(common).
        (RANLIB): New variable, set from autoconf.
        (libtxi.a): Use $(RANLIB) instead of `ranlib' in target rules.
        (clean): Delete core.* (386bsd core files).

Tue May 18 12:08:24 1993  Robert J. Chassell (bob at grackle.stockbridge.ma.us)

        * emacs/texinfmt.el (texinfo-format-refill): Do not fill a section
        title line with the asterisks, hyphens, etc. that underline
        it in any circumstance.

Sun May 16 13:53:43 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/mkinstalldirs: handle relative pathnames.

Fri May 14 20:18:49 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/mkinstalldirs: initialize IFS if unset.

Tue May 11 06:33:14 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * makeinfo/makeinfo.c (cm_item): don't dereference item_func if NULL.

Mon May 10 14:50:31 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * Texinfo 3.0 released.

        * Makefile.in (ALLOCA): Provide for substitution.

Mon May 10 10:12:53 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * emacs/texinfmt.el (texinfmt-version): Updated year.

Fri Apr 16 04:48:03 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * makeinfo/makeinfo.c: Version 1.54 from bfox.

        * util/fixfonts: Replace instances of `[..]' with `test'.
        Use more portable `test' arguments: `z$foo = z' instead of `! $foo'.
        Robustify quoting in eval assignments.
        (textfmdir, texpkdir, texgfdir): Don't override definition from
        environment, if any.
        Trap EXIT, SIGHUP, SIGINT, SIGQUIT, SIGTERM to delete temp files
        instead of trying to remove them explicitly before calling exit.
        When changing cwd, do so in subshell, in case various tex*dir
        variables are relative.
        Don't use `head', `dirname', or `basename'.  These don't behave
        consistently and/or don't even exist on some systems.  They can
        all be emulated with `sed' anyway.
        (tempfile2_line1): New variable.  Use it instead of running
        process to extract first line out of tempfile2 multiple times.
        Eliminate some gratuitous uses of $tempfile2, such as in for loops.

Fri Mar 26 23:25:13 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * texinfo.texi: @setfilename texinfo.info.

        * makeinfo/makeinfo.c (reader_loop, end_insertion): Fix typos in
        comments.
        (handle_variable_internal): Handle the case that there further
        menu text after a false ifset/ifclear.

        * util/texi2dvi: Version 0.4
        Replace all instances of `[ ... ]' with `test'.
        Updated bug-reporting address.

Thu Mar 25 12:31:30 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * info/Makefile.in (install): Install info.1 man page.
        (uninstall): Remove installed info.1 man page.

        * info/infoman.texi: Standalone manual renamed to info-stnd.texi.
        Makefile.in: Targets updated appropriately.

        * info/Makefile.in (LDEFS): New variable.  Use it for info-local
        macros, since DEFS will be inherited from parent make and any
        local definitions will get clobbered.

        * info/RELEASE: Renamed to info/NEWS.

        * README: New file.

        * Makefile.in (topclean): New target.

        * Getting-started: Renamed to INTRODUCTION.  Former name is too
          long (over 14 chars).

        * New-features: Renamed to NEWS.

        * Makefile.in (MDEFINES): Set it.

        * Makefile.in (dist): Use --gzip option to tar to make sure
          resulting file is compressed with gzip.  Change tar file
          extension from `.Z' to `.z'.

        * Makefile.in (DISTFILES): Filter out any file or directory names
          starting with `='.

        * fixfonts: Moved to util/fixfonts.

        * RELEASE: Deleted.

        * makeinfo/Makefile.in (VPATH): Use $(srcdir), not @srcdir@.
        (common): Use ../libtxi, not ../common.
        (makeinfo.in): Run makeinfo with --no-split.

        * makeinfo/makeinfo.texi: Changes from bob.

        * util/Makefile.in (VPATH): Use $(srcdir), not @srcdir@.
        (common): Use ../libtxi, not ../common.

        * util/fixfonts: Moved from top-level directory.

Wed Mar 24 10:21:31 1993  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-format-region): Do not require
        `@setfilename' line; delete `\input texinfo' line if part of
        region.

        * emacs/texinfmt.el (texinfo-raise-lower-sections): Raise or lower the
        hierarchical level of chapters, sections, etc. according to
        `@raisesections' and `@lowersections' commands.

Thu Mar 18 16:02:27 1993  Robert J. Chassell  (bob at grackle)

        * emacs/texinfo.el (texinfo-show-structure): Indent *Occur* buffer
        according to the structure of the file.

Sat Mar  6 05:16:44 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/texi2dvi: use ${1+"$@"}, not just "$@".

Tue Feb  2 08:38:06 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * info/Makefile.in: Replace all "--nosplit" arguments to makeinfo
        with "--no-split"

Sun Jan 31 18:16:58 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/texi2dvi: Don't put .dvi and related auxillary files in same
        directory as source files.  Put them in current directory instead.
        (TEXINPUTS_orig): New variable.
        (file_texi): Variable removed.
        (filename_texi): New variable.
        (command_line_filename): Use this wherever references to file_texi
        occured except in setting filename_noext.
        (TEXINPUTS): Current directory and source directory where input
        file resides prepended to standard path before invoking TeX.

Wed Jan 27 16:24:37 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/Makefile.in: overhauled.

Tue Jan 26 21:04:23 1993  Noah Friedman  (friedman@prep.ai.mit.edu)

        * Makefile.in, info/Makefile.in, makeinfo/Makefile.in: Overhauled.

        * configure.in: Renamed from texinfo.in.
          Incorporated makeinfo/makeinfo.in, info/info.in, and
          util/util.in.  Create all child Makefiles.

        * makeinfo/makeinfo.in, info/info.in: Deleted (incorporated into
        top configure.in).

        * util/util.in: Deleted (incorporated into ../configure.in).

Mon Jan 25 10:59:49 1993  Brian Fox  (bfox@cubit)

        * info/info.c: New version 2.9; new variable INFO_PATCH_LEVEL
        appears in the version string if it is non-zero.  New function
        version_string () produces the current version string, as in 2.8-p1.

        * info/dir.c: New file implements Gillespies `localdir' hacks.

        * info/nodes.c (info_get_node): Now calls maybe_build_dir_node ()
        if the file name to look for is "dir".

        * info/nodes.h: New flag N_CannotGC unconditionally prevents garbage
        collection of a file buffer's contents.  Used when "dir" is made
        from at least one "localdir".

Fri Jan 22 11:36:42 1993  Brian Fox  (bfox@cubit)

        * info/footnotes.c: Do not declare auto_footnotes_p as "extern" in
        this file.

Thu Jan 21 08:57:08 1993  Brian Fox  (bfox@cubit)

        * info/info.c: New version 2.8.

        * info/userdoc.texi, info/infoman.texi, info/info.texi: Fully
        document Info; create both online and printed manual versions.
        "userdoc.texi" contains exactly the documentation for GNU Info 2.x.
        "infoman.texi" is a wrapper for that file; it is meant to produce
        printed documentation. "info.texi" has the user documentation as a
        complete chapter within itself, but continues to contain the Info
        tutorial.

        * info/makedoc.c: Convert "ea_" into "echo_area_" when creating the
        command name.

Fri Jan 15 16:50:35 1993  Brian Fox  (bfox@cubit)

        * info/search.c (skip_node_characters): New argument NEWLINES_OKAY if
        non-zero says that newlines should be skipped over during parsing.

        * info/info-utils.c (info_parse_node): New argument NEWLINES_OKAY if
        non-zero says that newlines should be skipped while parsing out
        the nodename specification.

Wed Jan 13 14:42:33 1993  Brian Fox  (bfox@cubit)

        * info/makedoc.c: Remove "info_" from the front of the command name
        before installing it.

        * info/session.c (info_menu_or_ref_item): A label of "Menu" is okay if
        the builder is not info_menu_of_node ();

        * info/m-x.c: New function replace_in_documentation () replaces \\[foo]
        with the keystrokes you type to get that command.  Now used in
        indices.c, info.c, infodoc.c.

Mon Jan 11 10:27:41 1993  Brian Fox  (bfox@cubit)

        * info/variables.c, h: New files contain describe-variable and stuff
        moved out of m-x.c.

        * info/m-x.c: Move VARIABLE_ALIST and variable functions into
        variables.c.  Add documentation string to variable definition.

        * info/echo_area.c (push_echo_area): Zero the contents of
        echo_area_completion_items after pushing the vars.

Sat Jan  9 11:59:47 1993  Brian Fox  (bfox@cubit)

        * info/Makefile.in: Add footnotes.c,h,o to the appropriate Makefile
        variables.

        * info/window.c (window_tile_windows): New function divides the
        available space among the visible windows.

        * info/session.c (info_tile_windows): New function calls
        window_tile_windows.

        * info/footnotes.c, footnotes.h: New file implements functions for
        aiding automatic footnote display when entering a node which has
        footnotes.

        * info/m-x.c: New user-variable "automatic-footnotes".

        * info/window.c (window_physical_lines) New function counts the
        carriage returns found in NODE.

Wed Jan  6 11:24:19 1993  Brian Fox  (bfox@cubit)

        * info/general.h: #include <unistd.h> if we have it.

Tue Jan  5 11:12:33 1993  Brian Fox  (bfox@cubit)

        * info/info-utils.c (info_concatenate_references): If either arg is
        NULL, return the other arg.

        * info/indices.c (info_indices_of_file_buffer): Simplified and
        corrected loop through tags/nodes of file buffer looking for
        indices.

        * info/search.c (skip_node_characters): Rewrite "if" statement for
        clarification and conciseness.

Fri Jan  1 03:18:26 1993  Brian Fox  (bfox@cubit)

        * info/info.in: Check for setvbuf (), and check to see whether the args
        are reversed.

        * info/dribble.c (open_dribble_file) Check HAVE_SETVBUF and
        SETVBUF_REVERSED when setting the buffering on info_dribble_file.

Thu Dec 31 20:14:13 1992  Brian Fox  (bfox@cubit)

        * info/session.c (info_select_reference) If the node couldn't be found,
        look for the label as a filename (i.e., "(LABEL)Top").

Wed Dec 30 01:57:50 1992  Brian Fox  (bfox@cubit)

        * New Version 2.7 Beta.

        * info/echo_area.c: Numerous functions now do something with the
        numeric argument.  Kill ring implemented, as well as yank and
        yank_pop.  Also transpose-chars.

        * info/window.c (window_make_modeline): Check node->flags for
        N_IsCompressed and display "zz" in the modeline if the node comes
        from a file which is compressed on disk.

Mon Dec 28 17:33:12 1992  Brian Fox  (bfox@cubit)

        * info/filesys.c, info/nodes.c: New member of FILE_BUFFER "FILESIZE"
        contains the size of file_buffer->contents.  finfo.st_size is no
        longer relied upon to read the contents of files, since the new
        function (filesys_read_info_file) can read compressed files.

        * info/filesys.c (info_find_fullpath) If a file starts with a slash (or
        tilde expansion causes it to start with a slash) still call
        info_find_file_in_path () on it so that we can find files with
        compression suffixes.

        * info/m-x.c: New variable "gc-compressed-files".

Tue Dec 22 03:45:28 1992  Brian Fox  (bfox@cubit)

        * info/info.c: Version 2.6 Beta.

        * info/indices.c (info_index_next): Improve the final search for the
        matched index entry.

        * info/session.c (move_to_screen_line): New function implements `M-r'.
        Given a numeric argument, move point to the start of that line in
        the current window; without an arg, move to the center line.
        * infomap.c: Put move_to_screen_line () on `M-r'.

        * info/nodes.c (adjust_nodestart): Don't set N_UpdateTags unless the
        node came from a tags table.

        * info/nodes.c (info_find_file_internal): If the filename being looked
        for doesn't start with a `/', then additionally compare the
        filename against the fullpath of the file buffer sans the
        directory name.  This can happen when selecting nodemenu items.

Mon Dec 21 10:07:18 1992  Brian Fox  (bfox@cubit)

        * info/session.c, info/display.c: Remove all references to
        active_window_ch, active_window_cv, cursor_h, and cursor_v.  The
        single function display_cursor_at_point () is used for all cursor
        movement, and to place the terminal's cursor at the right location
        on the screen.

Sat Dec 19 12:01:33 1992  Brian Fox  (bfox@cubit)

        * info/nodemenu.c: New file implements a few functions for manipulating
        previously visited nodes.  `list-visited-nodes' produces a menu of
        the nodes that could be reached by info_history_node () in some
        window.  `select-visited-node' is similar to `list-visited-node'
        followed by `info-menu-item', but doesn't display a window with
        the visited nodes menu.

        * info/session.c (info_numeric_arg_digit_loop): If redisplay had been
        interrupted, then redisplay all of the windows while waiting for
        input.

        * info/display.c (display_was_interrupted_p): New variable keeps track
        of interrupted display.  Used in
        info/session.c:info_numeric_arg_digit_loop ().

        * info/session.c (info_global_next, info_global_prev): Use the numeric
        argument passed to determine how many nodes to move.

        * info/session.c (info_scroll_forward, info_scroll_backward): If the
        invoking key is not SPC or DEL only do Page Only scrolling.

Thu Dec 17 01:34:22 1992  Brian Fox  (bfox@cubit)

        * info/display.c (display_update_one_window): Allow W_NoWrap to affect
        window display.

        * info/window.c (calculate_line_starts): Now takes a WINDOW * as an
        argument, and simply does the calculation, placing the results
        into window->line_starts and window->line_count.  It also handles
        W_NoWrap in window->flags.

Mon Dec 14 02:18:55 1992  Brian Fox  (bfox@cubit)

        * info/session.c (info_backward_scroll): Don't try to get previous node
        if the top of the node isn't currently being displayed.

        * info/window.c (window_adjust_pagetop) Use new variable
        "window_scroll_step" to attempt to control the amount which the
        window scrolls.

        * info/m-x.c (info_variables) Add "scroll-step" to the list.

Thu Dec 10 08:52:10 1992  Brian Fox  (bfox@cubit)

        * info/m-x.c: New variable entry show-index-matches.  When set to
        non-zero the matched portion of the search string is indicated
        with ` and '.  Perhaps I should use `|' inst|ea|d?

        * info/echo_area.c (ea_possible_completions): Always build completions
        before checking to see how many there were.

        * info/info-utils.c: (info_concatenate_references): New utility
        function concatenates references.

        * info/Makefile.in: Add indices.c and indices.h to SRCS and HDRS.
          Add indices.c to CMDFILES.

        * info/indices.c, info/indices.h: New file implements `i' and `,'
        commands of info, and provides index searching capabilities.

        * info/echo_area.c (info_read_completing_in_echo_area):  Split off into
        separate callable function info_read_completing_internal ().

        * info/echo_area.c (info_read_maybe_completing): New function calls
        info_read_completing_internal () with non-forcing argument.

        * info/session.c: Rename down_next_upnext_or_error () and
        prev_up_or_error () to forward_move_node_structure (), and
        backward_move_node_structure ().  Implement new commands
        info_global_next () and info_global_prev ().

        * info/infomap.c (initialize_info_keymaps): Bind `[' and `]' to
        backward_, forward_move_node_structure () respectively.

        * info/session.c (info_menu_digit): Called with "0" as arg, select the
        last menu item.

        * info/infomap.c (initialize_info_keymaps): "0" calls
        info_menu_digit ().

        * info/session.c (info_move_to_xref): Take dir into account when there
        are xrefs and menu items in the node and we are wrapping
        backwards.

Tue Dec  8 09:57:58 1992  Brian Fox  (bfox@cubit)

        * info/info.c: Version 2.5 Beta.

        * info/terminal.c (terminal_insert_lines, terminal_delete_lines) Do not
        expect tgoto to return a new string; it returns the address of a
        static buffer.

        * info/infodoc.c (info_find_or_create_help_window) Correct check for
        prior existing help node.

        * info/m-x.c (set_variable): Allow variables to have a list of choices.
        Add new variable scroll-behaviour.

        * info/session.c (down_next_upnext_or_error, prev_up_or_error) New
        functions implement user-controlled behaviour when attempting to
        scroll past the bottom or top of a node.  New variable
        info_scroll_behaviour is user visible as "scroll-behaviour".

        * info/session.c (info_scroll_forward, info_scroll_backward) Call new
        functions for user-controlled scroll behaviour.

        * info/terminal.c (terminal_initialize_terminal) Set PC from BC not
        from BUFFER.

Mon Dec  7 11:26:12 1992  Brian Fox  (bfox@cubit)

        * util/texindex.c: Change EXIT_SUCCESS and EXIT_FATAL to TI_NO_ERROR
        and TI_FATAL_ERROR respectively.  This avoids namespace conflicts
        on NeXT 2.0.

Sat Dec  5 00:07:59 1992  Brian Fox  (bfox@cubit)

        * info/info.c: New option "--subnodes" says to recursively dump the
        menus of the nodes that you wish to dump.  Menu items which point
        to external nodes are not dumped, and no node is dumped twice.

Thu Dec  3 16:11:02 1992  Brian Fox  (bfox@cubit)

        * info/session.c (info_error) Don't ring the bell if
        info_error_rings_bell_p is zero.  (info_abort_key) Ring the bell
        if printing "Quit" in the echo area wouldn't do it.

        * info/m-x.c (set_variable) New functions allows setting of
        variables in the echo area.  Currently, only visilble-bell and
        errors-ring-bell are implemented.

Wed Dec  2 13:11:37 1992  Brian Fox  (bfox@cubit)

        * info/nodes.c, info/makedoc.c: If O_RDONLY is not defined by
        sys/file.h, include sys/fcntl.h.

        * info/filesys.c (info_file_in_path): Expand leading tildes found
        within directory names.

        * info/terminal.c (terminal_initialize_terminal) Set ospeed to 13 if
        not settable any other way.  It is an index into an array of
        output speeds.

        * info/display.c (free_display) Do not free a NULL display.

        * info/display.c (string_width): New functions returns the width of
        STRING when printed at HPOS.

Sun Nov 29 01:24:42 1992  Brian Fox  (bfox@cubit)

        * info/info.c: New version 2.4 beta.

        * info/general.h: #define info_toupper and info_tolower which check
        their arguments before performing any conversion.

        * info/search.c, info/echo_area.c: Use info_toupper.

Sat Nov 28 14:23:24 1992  Brian Fox  (bfox@cubit)

        * info/session.c (info_scroll_forward, info_scroll_backward) If at
        last/first page of the node, and the last command was
        forward/backward, do info_next/prev/_node.

        * info/session.c: New function info_select_reference_this_line gets
        menu or cross reference immediately.

        * info/infomap.c (initialize_info_keymaps): Add info_keymap[LFD] to
        invoke info_select_reference_this_line ().

        * info/session.c (info_last_reference) Rename to
        info_history_reference.  Wrote info_last_reference, and
        info_first_reference which go to the last or first node of an info
        file.

Fri Nov 27 00:59:02 1992  Brian Fox  (bfox@cubit)

        * info/info.c: New version 2.3.  Completed implementing contents of
        TODO file.

        * info/session.c (info_redraw_display): Fix C-l with numeric arg.

Thu Nov 26 20:14:18 1992  Brian Fox  (bfox@cubit)

        * info/m-x.c: New file implements reading named commands in the echo
        area, along with a new function "info-set-screen-height".
        Compilation of this file and some code in others controlled by the
        Makefile variable NAMED_COMMANDS (set to -DNAMED_COMMANDS).

        * info/window.c (window_new_screen_size) Rewrite from scratch, allowing
        clean growth and shrinkage of the screen.  New variable
        window_deletion_notifier is a pointer to a function to call when
        the screen changes size, and some windows have to get deleted.
        The function is called with the window to be deleted as an
        argument, and it should clean up dangling references to that
        window.

        * info/session.c (initialize_info_session): Set
        window_deletion_function to forget_window_and_nodes.

        * info/display.c (display_update_one_window): If the first row of the
        window to display wouldn't appear in the_screen, don't try to
        display it.  This happens when the screen has been made
        unreasonably small, and we attempt to display the echo area.

Tue Nov 24 00:47:20 1992  Brian Fox  (bfox@cubit)

        * Release Info 2.2.

        * info/session.c: New functions implement reading typeahead and
        implement C-g flushing typed ahead characters.
        (info_search_internal): allows C-g to exit multi-file searches.

Mon Nov 23 01:53:35 1992  Brian Fox  (bfox@cubit)

        * info/nodes.c: Remove calls to sscanf (), replacing them with calls to
        atol (), since that is much faster.
        (get_nodes_of_tags_table) Only check for "(Indirect)" if we
        haven't parsed any nodes out of the tags table.  Increase the
        amount that file_buffer->nodes grows to 100 from 50.  These two
        together sufficiently speed up the parsing process.

        * info/nodes.c: info_get_node_of_file_buffer_tags (),
        info_get_node_of_file_buffer_nodes (): Search the appropriate list
        and return a node.  This was simply a cut and paste edit to
        functionalize the code.

        * info/TODO: Remove suggestion for partial tag parsing, since tag
        parsing is much faster now.

Sat Nov 21 02:48:23 1992  Brian Fox  (bfox@cubit)

        * info/makedoc.c: New File replaces makedoc.sh shell script.

        * info/infomap.c: Install info_isearch (on C-s) and
        info_reverse_isearch (on C-r) for Info windows.

        * info/session.c (incremental_search, info_isearch,
        info_reverse_isearch) New functions implement incremental
        searching.

Fri Nov 20 00:01:35 1992  Brian Fox  (bfox@cubit)

        * info/terminal.c (terminal_initialize_terminal): Declare and set up
        `ospeed'.  Turn off C-s and C-q processing.

        * info/session.c (info_show_point) When this function is called, the
        desired result is to show the point immediately.  So now it calls
        set_window_pagetop () if the new pagetop is not the same as the
        old one.  This means that info_prev_line (), info_next_line (),
        info_forward_word (), and info_backward_word () can all scroll the
        window if they have to.

Thu Nov 19 12:27:07 1992  Brian Fox  (bfox@cubit)

        * info/session.c (set_window_pagetop): Add scrolling to make this
        faster.

        * info/echo_area.c (push/pop_echo_area): Remember the list of items to
        complete over.

        * info/session.c (info_forward_char): Don't let point get equal to
        nodelen, only to nodelen - 1.

        * info/display.c: New function display_scroll_display () scrolls the
        rmembered display as well as the text on the actual display.

        * info/terminal.c: New functions terminal_scroll_terminal (),
        terminal_scroll_down (), and terminal_scroll_up ().  All
        implemented using "al" and "dl" termcap capabilities. (i.e.,
        insert and delete line).

Wed Nov 18 15:05:14 1992  Brian Fox  (bfox@cubit)

        * info/termdep.h: Only define HAVE_FCNTL_H if !aix and !ultrix.

Tue Nov 17 20:35:08 1992  Brian Fox  (bfox@cubit)

        * First Beta Release of Info 2.0.

Sun Nov  1 02:21:05 1992  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/texi2dvi (--force): Option removed.  Always run tex at least
        once, don't bother checking if .dvi file is newer than source.

Fri Oct 30 02:16:28 1992  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/texi2dvi (-D): debugging option renamed from '-d'.
        Made check to enable debugging more terse.
        When checking if index files have changed, use
        variable $this_file instead of $file in for loop.
        (file_texi): wherever the variable $file was used to reference
        the texinfo file, substituted $file_texi.

Sat Oct 17 07:30:34 1992  Brian J. Fox  (bfox@helios)

        * util/texindex.c: Remove references to USG replacing them with a
        define declaring the actual feature required or missing.

Thu Oct 15 16:17:47 1992  Robert J. Chassell  (bob@nutrimat.gnu.ai.mit.edu)

        * emacs/texinfmt.el (texinfo-format-setfilename): Remove date from
        Info file header so regression testing is easier.

Tue Sep 15 16:28:35 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfmt-version): New variable.
        (texinfo-format-setfilename): Include date and
        version in Info file header.
        Better documentation for @definfoenclose
        Handle whitespace after @end iftex, etc.

Thu Sep  3 09:25:37 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el: Fix typo re `texinfo-sequential-node-update.'

Tue Aug 18 08:56:24 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-value): Revise syntax.

        * emacs/texnfo-upd.el (texinfo-start-menu-description):
        New function to insert title as description in a menu.
        (texinfo-make-menu-list): Remove automatic title insertion.

        * emacs/texinfo.el (texinfo-mode-map): Add keybinding for
        texinfo-start-menu-description.

Wed Jul 29 11:58:53 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-set): Revise to set a string to the flag.
        (texinfo-value): @value{flag}: New command which inserts the
        string to which the flag is set.

Tue Jul  7 15:10:52 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el (texinfo-master-menu): Error message if file
        contains too few nodes for a master menu.
        (texinfo-insert-master-menu-list): Only attempt to insert detailed
        master menu if there is one.

Wed Jun 10 15:26:18 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-append-refill): Refill properly when lines
        begin with within-paragraph @-commands.

Tue Jun  9 12:28:11 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el: Add `texinfo-deffn-formatting-property' and
        `texinfo-defun-indexing-property' to @deffn commands.

Mon Jun  8 11:52:01 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el: Replace `(mark-whole-buffer)' with
        `(push-mark (point-max) t) (goto-char (point-min))'
        to avoid `Mark set' messages.

Fri Jun  5 15:15:16 1992  Robert J. Chassell  (bob@kropotkin.gnu.ai.mit.edu)

        * emacs/texnfo-upd.el (texinfo-check-for-node-name): Offer section
        title as prompt.
        (texinfo-copy-next-section-title): Copy title correctly.

Thu May 28 20:34:17 1992  Robert J. Chassell  (bob@hill.gnu.ai.mit.edu)

        * emacs/texinfmt.el: @vtable defined, parallel to @ftable, for
        variables.
        (texinfo-append-refill): set case-fold-search nil so @TeX is not
        confused with @tex.

Thu Mar 26 21:36:41 1992  Robert J. Chassell  (bob@kropotkin.gnu.ai.mit.edu)

        * emacs/makeinfo.el: Rename temp buffer from `*Makeinfo*' back to
        `*compilation*' so `next-error' works; unfortunately,
        `*compilation*' is written into the code as the name
        `next-error' needs.
        Rename `makeinfo-recenter-makeinfo-buffer' back to
        `makeinfo-recenter-makeinfo-buffer'

Thu May 14 21:14:25 1992  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/fixfonts: Enclosed most variable references with "" to prevent
        potential globbing and other weirdness.  Eliminated uses of
        ${var-value}, which unfortunately isn't portable.

        * util/texi2dvi: rewritten from scratch.

Sat Apr 18 23:46:25 1992  Charles Hannum  (mycroft@hal.gnu.ai.mit.edu)

        * util/fixfonts: Re-evaluate prefix and libdir if inherited (to resolve
        variable references from make).
        (texlibdir): Don't add '/tex', since it's already there.

Fri Apr 10 14:51:23 1992  Noah Friedman  (friedman@prep.ai.mit.edu)

        * util/fixfonts: set prefix and libdir only if they are not already
        defined (i.e. not inherited from the environment).
        Changed default path for libdir to be consistent with Makefile.

Tue Mar  3 13:17:42 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el (texinfo-insert-master-menu-list): Insert a
        master menu only after `Top' node and before next node.
        (texinfo-copy-menu): Error message if menu empty.

Mon Feb 24 15:47:49 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-format-region): Make sure region ends in a
        newline.
        (texinfo-itemize-item): Recognize all non-whitespace on same line
        as @item command.

Sat Feb 22 02:15:00 1992  Brian Fox  (bfox at gnuwest.fsf.org)

        * util/texindex.c: New version 1.45 has cleanups, should compile under
        VMS quietly.

Wed Feb 12 10:50:51 1992  Robert J. Chassell  (bob at grackle)

        * emacs/makeinfo.el: Rename temp buffer as *Makeinfo*.
        Rename `makeinfo-recenter-compilation-buffer'.
        (makeinfo-buffer): Offer to save buffer if it is modified.
        (makeinfo-compile): Do not offer to save other buffers.
        (makeinfo-compilation-sentinel): Switch to Info file.

Tue Feb  4 13:07:39 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-print-index): Format so that node names in
        the index are lined up.

Mon Feb  3 09:08:14 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-itemize-item): Format entry when text
        is on the same line as @item command.  Also, handle @-commands.
        (texinfo-format-region, texinfo-format-buffer-1): Set fill column
        to local value of Texinfo buffer.

        * emacs/texnfo-upd.el (texinfo-pointer-name):  Find only those
        section commands that are accompanied by `@node' lines.

Tue Jan 14 16:10:16 1992  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el: Ensure that no commands depend on the value of
        case-fold-search.

Fri Jan 10 15:13:55 1992  Robert J. Chassell  (bob at kropotkin)

        * emacs/texinfmt.el (texinfo-append-refill): Replace use of
        unsupported function `looking-at-backward' with
        `re-search-backward'.

Mon Dec 23 23:46:42 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

        * util/texindex.c: Change POSIX ifdefs to HAVE_UNISTD_H and
        _POSIX_VERSION.

Mon Dec 16 15:01:36 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-append-refill): New function appends
        @refill to all appropriate paragraphs so you no longer need to
        append @refill command yourself.
        (texinfo-format-region, texinfo-format-buffer-1,
        texinfo-format-include): Call `texinfo-append-refill'.

Fri Dec  6 01:25:09 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

        * util/texindex.c: Conditionalize on _AIX (which is predefined) instead
        of AIX, just like makeinfo does.

Tue Nov 26 10:21:04 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el (texinfo-section-types-regexp): `@subtitle' no
        longer treated as subsection.

Sat Nov 16 08:27:42 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

        * util/fixfonts: New file, from Karl Berry.

Tue Nov 12 16:13:24 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el: Create @end smalllisp.

Mon Nov 11 16:50:13 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfo.el (texinfo-environment-regexp): Add all other block
        enclosing Texinfo commands.

Thu Nov  7 10:23:51 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfo.el (texinfo-insert-@end): Attempt to insert correct end
        command statement, eg, @end table.  Fails with nested lists.
         (texinfo-insert-*): Accept prefix arg to surround following N
         words with braces for command.

Thu Oct 31 21:31:41 1991  Robert J. Chassell  (bob at kropotki)

        * emacs/texinfmt.el (texinfo-clear): Clear flag even if flag not
        previously set.

Wed Oct 23 11:15:58 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfo.el (texinfo-mode): page-delimiter now finds top node as
        well as chapters.

Tue Oct 22 11:46:12 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-do-flushright): Test whether a line is too
        long for the flush right command (line length must be less than
        the value of fill column).

        * emacs/texnfo-tex.el (texinfo-tex-buffer): Prompt for original file
        even if point moved to *texinfo-tex-shell*.
        texinfo-tex-original-file: variable to hold file name.

Wed Oct 16 08:32:05 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el (texinfo-format-center): Expand string before
        centering so @-commands not included.

Thu Oct 10 22:01:47 1991  Robert J. Chassell  (bob at kropotki)

        * emacs/texnfo-tex.el (texinfo-show-tex-print-queue): Do not kill a
        running process; do start a process none exists.

Thu Sep 26 21:58:47 1991  Robert J. Chassell  (bob at kropotki)

        * util/texi2dvi: Misc. bugs fixed.

        * emacs/texinfo.el: Remove extraneous references to TeX.

Thu Sep 19 20:45:29 1991  Robert J. Chassell  (bob at kropotki)

        * emacs/texinfmt.el: add @cartouche as a noop (makes box with rounded
        corners in TeX)

Tue Sep 10 20:44:57 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el (texinfo-make-one-menu): Copy node-name correctly
        for message.

Thu Aug 29 17:54:07 1991  Robert J. Chassell  (bob at kropotki)

        * emacs/texnfo-tex.el (texinfo-quit-tex-job): Do not set mark.

Wed Aug 21 10:36:21 1991  Robert J. Chassell  (bob at grackle)

         * emacs/texnfo-upd.el: (texinfo-copy-menu-title): Copy title as it
         should rather than node line.

Mon Aug  5 15:27:12 1991  Robert J. Chassell  (bob at grackle)

         * emacs/texinfmt.el (texinfo-format-convert): Changed regexp that
         looks for three hyphens in a row to find those between word
         constituent characters, as now, for Oxford Univ. style dashes and
         also between spaces, for Cambridge Univ. Press style dashes.

        * emacs/texnfo-tex.el (texinfo-tex-start-shell): Runs "/bin/sh" so
        `explicit-shell-file-name' is not set globally.

        * emacs/texnfo-upd.el: Rewrite messages.
        (texinfo-find-higher-level-node): Stop search at limit.
        (texinfo-copy-menu-title): Rewrite to handle outer include files.
        (texinfo-multi-file-update): Update all nodes properly;
        rewrite doc string and interactive.

Sat Aug  3 10:46:13 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-upd.el (texinfo-all-menus-update): Fixed typo that
        caused the function to create a master menu when it shouldn't.

        * emacs/texinfo.el (texinfo-mode): Make `indent-tabs-mode' a local
        variable and set to nil to prevent TABs troubles with TeX.

Wed Jul 31 11:07:08 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texnfo-tex.el (texinfo-quit-tex-job): New function: quit
        currently running TeX job, by sending an `x' to it.
        (texinfo-tex-shell-sentinel): New function to
        restart texinfo-tex-shell after it is killed.
        (texinfo-kill-tex-job): Rewrite to use kill-process rather than
        quit-process; uses `texinfo-tex-shell-sentinel' to restart
        texinfo-tex-shell after it is killed.
        (texinfo-tex-region, texinfo-tex-buffer): Replace
        texinfo-kill-tex-job with quit-process.

        * emacs/texinfo.el (texinfo-define-common-keys): Add keybinding for
        texinfo-quit-tex-job

Wed Jul 10 15:15:03 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el: New commands @set, @clear, @ifset...@end
        ifset, and @ifclear...@end ifclear.
        Definition functions rewritten to make them easier to
        maintain.

Wed Jul  3 19:37:04 1991  Robert J. Chassell  (bob at kropotki)

        * emacs/texinfmt.el (texinfo-format-deftypefn-index): Remove reference
        to data-type to make consistent with texinfo.tex and makeinfo.
        texinfo.el: Fix page-delimiter and texinfo-chapter-level-regexp
        variables.

Thu Jun 27 18:35:36 1991  Robert J. Chassell  (bob at nutrimat)

        * emacs/texinfmt.el: Add @dmn as `texinfo-format-noop'.
        texinfo2.texi: Document @dmn.
        texinfmt.el (texinfo{,-end}-{eleterate,ecapitate} renamed
        {alphaenumerate, capsenumerate}.

Fri Jun 14 12:46:32 1991  Robert J. Chassell  (bob at churchy.gnu.ai.mit.edu)

        * emacs/texinfmt.el (texinfo-format-defun-1): @defivar prints name
        correctly.

Thu Jun  6 21:38:33 1991  Robert J. Chassell  (bob at churchy.gnu.ai.mit.edu)

        * emacs/texinfo.el (texinfo-mode): Set page delimiter to
        'texinfo-chapter-level-regexp' so that page commands work by
        chapter or equivalent.

        * emacs/texinfmt.el (texinfo-format-defun-1): @defop prints name
        correctly.
        (batch-texinfo-format): replace unsupported
        'buffer-disable-undo' with 'buffer-flush-undo'

Fri Apr  5 15:17:17 1991  Robert J. Chassell  (bob at wookumz.gnu.ai.mit.edu)

        * emacs/makeinfo.el (makeinfo-compilation-sentinel): Check for
        existance of makeinfo-temp-file to avoid harmless error message.
        texinfo2.texi: Minor typos fixed.

Thu Mar 28 19:13:24 1991  Robert J. Chassell  (bob at pogo.gnu.ai.mit.edu)

        * util/texi2dvi: Revised.

Mon Mar 11 12:35:51 1991  Robert J. Chassell  (bob at grackle)

        * emacs/texinfmt.el: (@footnotestyle): New command to set
        footnotestyle.
        (@paragraphindent): New command to set indentation.
        (texinfo-format-refill): Add indentation feature so as to
        indent paragraph or leave indentation asis before refilling
        according to value set by @paragraphindent command.
        (texinfo-format-region): Insert header, if any, into Info buffer.
        (texinfo-format-separate-node, texinfo-format-end-node): Run
        texinfo-format-scan on footnote text only once.
        (texinfo-format-scan): Shorten `---' to `--'.

        * emacs/texinfo.el: Define key for `texinfo-master-menu'; define
        start and end of header expressions.

        * emacs/texnfo-upd.el (texinfo-all-menus-update): Update
        pre-existing master menu, if there is one.

Fri May 11 14:36:07 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

        * util/texindex.c: Rename `lines' to `nlines'.
        (bzero): Pass arg to lib$movc5 through non-register var.
        (perror_with_file, pfatal_with_file): Move extern decls and includes
        to top of file.
        [VMS]: If not using VMS C, define away `noshare' keyword.
        Include perror.h.

Mon Jul 11 18:02:29 1988  Chris Hanson  (cph at kleph)

        * util/texindex.c (indexify): when comparing to initial strings to
        decide whether to change the header, must use `strncmp' to avoid
        comparing entire strings of which initials are a substring.

Sun Jun 26 18:46:16 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

        * util/texindex.c (sort_in_core, sort_offline, parsefile):
        Give up on input file if any line doesn't start with backslash.
