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.
