Mon Jul 28 17:26:48 1997  Rob Savoye  <rob@chinadoll.cygnus.com>

	* aclocal.m4: Add CYGWIN and EXEEXT autoconf macros.
        * configure.in: Use CYGWIN and EXEEXT autoconf macro to look for
        win32 dependencies.
        * configure: Regenerated with autoconf 2.12.
        * Makefile.in: Add $(EXEEXT) to all executables.
        * makeinfo/Makefile.in: Add $(EXEEXT) to all executables.
        * util/Makefile.in: Add $(EXEEXT) to all executables.

Mon May 26 12:44:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* texinfo.tex: Update to newest FSF version (2.201).

Wed Feb 12 11:15:16 1997  Michael Meissner  <meissner@cygnus.com>

	* util/texindex.c (main): Make main an int function, not void.

Sat Jun 29 18:56:07 1996  Geoffrey Noer  <noer@cygnus.com>

	* configure.in: if ac_cv_c_cross is yes, don't run the
	AC_FUNC_SETVBUF_REVERSED call since it tries to do a run
	test.  This allows texinfo to build for cygwin32 Canadian
	crosses/natives
	* configure: regenerate

Wed Jun 26 12:48:10 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, mandir, infodir): Use autoconf-set 
	values.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	* configure: Rebuilt.
	* emacs/Makefile.in (bindir, libdir, mandir, infodir): Use
	autoconf-set values.
	* info/Makefile.in (bindir, libdir, mandir, infodir): Use
	autoconf-set values.
	* libtxi/Makefile.in (bindir, libdir, mandir, infodir): Use
	autoconf-set values.
	* makeinfo/Makefile.in (bindir, libdir, mandir, infodir):
	Use autoconf-set values.
	* util/Makefile.in (bindir, libdir, mandir, infodir): Use 
	autoconf-set values.

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.
