diff -urN ../texinfo-3.12s/ChangeLog ./ChangeLog
--- ../texinfo-3.12s/ChangeLog	Tue Aug 17 23:09:13 1999
+++ ./ChangeLog	Thu Sep  2 12:52:42 1999
@@ -1,3 +1,39 @@
+1999-09-02    <janneke@gnu.org>
+
+	* makeinfo/cmds.c,
+	* makeinfo/insertion.c: @verbatiminclude file
+	* doc/texinfo.tex: @verbatiminclude file
+	* doc/texinfo.txi: @vebatiminclude file doco
+	* NEWS: added @verbatiminclude to Language section
+
+1999-09-01    <janneke@gnu.org>
+
+	* makeinfo/makeinfo.c: bf: @exdent (urg6.texi)
+	* NEWS: added verb* to Language section
+	* doc/texinfo.txi: @verb, @verbatim doco
+	* doc/texinfo.tex: tricky tex-fix for @verb{<char>..<char>}
+	* doc/texinfo.tex: real tab expansion for @verbatim mode
+	* doc/texinfo.tex: proper start of environment, no indentation
+
+1999-08-31    <janneke@gnu.org>
+
+	* makeinfo/cmds.c: 
+	* makeinfo/insertion.{c,h},
+	* makeinfo/makeinfo.{c,h}: redo of @verbatim, @verb{<char>..<char>}
+	* doc/texinfo.tex: fixed @verb{<char>..<char>}
+
+1999-08-30  Jan Nieuwenhuizen <janneke@gnu.org>
+
+	* makeinfo/cmds.c,
+	* makeinfo/insertion.{c,h},
+	* makeinfo/makeinfo.{c,h}: added @verbatim (and preliminary @verb)
+	support
+	* doc/texinfo.tex: added @verbatim (and preliminary @verb) support
+
+1999-08-24  Jan Nieuwenhuizen <janneke@gnu.org>
+
+	* bf: empty node: makeinfo/node.c:cm_node ()
+
 1999-08-17  Karl Berry  <karl@gnu.org>
 
 	* makeinfo/multi.c,
diff -urN ../texinfo-3.12s/NEWS ./NEWS
--- ../texinfo-3.12s/NEWS	Fri Aug  6 19:00:19 1999
+++ ./NEWS	Thu Sep  2 12:52:11 1999
@@ -24,6 +24,8 @@
   . New commands @smallformat and @smalldisplay, a la @smallexample.
   . New command @exampleindent to set indentation of example-like
     environments a la @paragraphindent.
+  . New commands @verbatim and @verb for printing verbatim inserts
+  . New command @verbatiminclude for verbatim include of files
   . @uref takes an optional third argument of text to show instead of
     (rather than in addition to) the url for info and dvi output.
   . @footnote works in an @item for a @table.
diff -urN ../texinfo-3.12s/doc/stamp-vti ./doc/stamp-vti
--- ../texinfo-3.12s/doc/stamp-vti	Thu Aug 19 23:30:40 1999
+++ ./doc/stamp-vti	Thu Sep  2 12:53:04 1999
@@ -1,3 +1,3 @@
-@set UPDATED 9 August 1999
+@set UPDATED 2 September 1999
 @set EDITION 3.12s
 @set VERSION 3.12s
diff -urN ../texinfo-3.12s/doc/texinfo.tex ./doc/texinfo.tex
--- ../texinfo-3.12s/doc/texinfo.tex	Thu Aug 19 23:16:42 1999
+++ ./doc/texinfo.tex	Thu Sep  2 12:06:02 1999
@@ -4281,6 +4281,164 @@
   \fi
 }
 
+% LaTeX-like '@verbatim..@end verbatim' and '@verb{<char>...<char>}'
+% If we want to allow any <char> as delimiter, 
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% '@verbx...x' would look like the '@verbx' command.
+%
+% --jcn
+%
+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+%
+% [Knuth] p. 344; only we need to do '@' too
+\def\dospecials{%
+  \do\ \do\\\do\@\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+%
+% [Knuth] pp. 351,352
+% Respect spaces and define \endgraf \lq \space \obeylines \obeyspaces
+\begingroup
+  \obeyspaces \global\let =\ %
+\endgroup
+%
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=12}\dospecials}
+%
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+  \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+%
+% Setup for the @verb command
+%
+% Eight spaces for a tab
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+  % Easiest (and conventionally used) font for verbatim
+  \tt%
+  \def\par{\leavevmode\endgraf}%
+  \catcode`\`=\active%
+  \tabeightspaces%
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \obeyspaces}
+%
+%
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabexpand{%
+    \catcode`\^^I=\active
+    \def^^I{\leavevmode\egroup
+      \dimen0=\wd0 % the width so far, or since the previous tab
+      \divide\dimen0 by\tabw
+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+      \advance\dimen0 by\tabw % advance to next multiple of \tabw
+      \wd0=\dimen0 \box0 \starttabbox}}
+\endgroup
+\def\setupverbatim{%
+  % Easiest (and conventionally used) font for verbatim
+  \tt%
+  \def\par{\leavevmode\egroup\box0\endgraf}%
+  \catcode`\`=\active%
+  \tabexpand%
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \obeyspaces%
+  \everypar{\starttabbox}}
+%
+%
+% Do the @verb magic: verbatim text is quoted by unique 
+% delimiter characters.  Before first delimiter expect a 
+% right brace, after last delimiter expect closing brace:
+%
+%    \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+  \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX, 
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%% Include LaTeX hack for completeness -- never know
+%% \begingroup
+%% \catcode`|=0 \catcode`[=1
+%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
+%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
+%% #1|endgroup|def|Everbatim[]|end[verbatim]]
+%% |endgroup
+\begingroup
+\catcode`\ =\active
+\gdef\doverbatim#1@end verbatim{#1\end{verbatim}}
+\endgroup
+\def\verbatim{%
+  \def\Everbatim{\nonfillfinish\endgroup}
+  \begingroup
+    \nonfillstart
+    \advance\leftskip by -\defbodyindent
+    \begingroup\setupverbatim\doverbatim}
+%
+%
+% @verbatiminclude file
+% Insert text of file in verbatim environment
+%
+% Allow normal characters that we make active in the argument (a file name).
+\def\verbatiminclude{%
+  \begingroup
+  \catcode`\\=12
+  \catcode`~=12
+  \catcode`^=12
+  \catcode`_=12
+  \catcode`|=12
+  \catcode`<=12
+  \catcode`>=12
+  \catcode`+=12
+  \parsearg\doverbatiminclude}
+%
+\def\setupverbatiminclude{%
+  \begingroup
+    \nonfillstart
+    \advance\leftskip by -\defbodyindent
+    \begingroup\setupverbatim}
+%
+\def\doverbatiminclude#1{%
+  % Restore active chars for included file.
+  \endgroup%
+  \begingroup%
+  \def\thisfile{#1}%
+  \expandafter\expandafter\setupverbatiminclude\input\thisfile%
+  \endgroup\nonfillfinish\endgroup}
+%
+
 
 \message{defuns,}
 % @defun etc.
diff -urN ../texinfo-3.12s/doc/texinfo.txi ./doc/texinfo.txi
--- ../texinfo-3.12s/doc/texinfo.txi	Mon Aug  9 22:43:55 1999
+++ ./doc/texinfo.txi	Thu Sep  2 12:45:39 1999
@@ -346,6 +346,7 @@
 * kbd::                         Showing keyboard input.
 * key::                         Specifying keys.
 * samp::                        Showing a literal sequence of characters.
+* verb::                        Printing a verbatim sequence of characters.
 * var::                         Indicating metasyntactic variables.
 * env::                         Indicating environment variables.
 * file::                        Indicating file names.
@@ -369,6 +370,7 @@
                                   different purposes.
 * quotation::                   How to write a quotation.
 * example::                     How to write an example in a fixed-width font.
+* verbatim::                    How to make a verbatim insert.
 * noindent::                    How to prevent paragraph indentation.
 * lisp::                        How to illustrate Lisp code.
 * small::                       Forms for @code{@@smallbook}.
@@ -430,6 +432,7 @@
                                   expansion of macros, errors, etc.
 * Footnotes::                   How to include footnotes.
 * Images::                      How to include graphics.
+* Verbatim Includes::           How to verbatim include a file.
 
 Inserting @@ and Braces
 
@@ -1148,10 +1151,14 @@
 @quotation
 @strong{Caution:} Do not use tabs in a Texinfo file!  @TeX{} uses
 variable-width fonts, which means that it cannot predefine a tab to work
+@c I doubt if this is true; almost anything is possible in TeX.  You could
+@c measure width of boxes, and do smart expands.  But it would be quite 
+@c hairy to implement, and you don't gain very much.  --jcn
 in all circumstances.  Consequently, @TeX{} treats tabs like single
 spaces, and that is not what they look like.  Furthermore,
 @code{makeinfo} does nothing special with tabs, and thus a tab character
-in your input file may appear differently in the output.
+in your input file may appear differently in the output (e.g. when it
+appears inside an indented region).
 
 @noindent
 To avoid this problem, Texinfo mode causes GNU Emacs to insert multiple
@@ -6380,6 +6387,7 @@
 * kbd::                         Showing keyboard input.
 * key::                         Specifying keys.
 * samp::                        Showing a literal sequence of characters.
+* verb::                        Printing a verbatim sequence of characters.
 * var::                         Indicating metasyntactic variables.
 * env::                         Indicating environment variables.
 * file::                        Indicating file names.
@@ -6699,7 +6707,8 @@
 @c the beginning of the sentence.  The @code{@@key@{META@}} key is often in
 @c the lower left of the keyboard.''@refill
 
-@node samp, var, key, Indicating
+@c node samp, var, key, Indicating
+@node samp
 @comment  node-name,  next,  previous,  up
 @subsection @code{@@samp}@{@var{text}@}
 @findex samp
@@ -6755,6 +6764,27 @@
 @samp{y}.
 @end quotation
 
+@node verb
+@subsection @code{@@verb}@{<char>@var{text}<char>@}
+@findex verb
+
+Use the @code{@@verb} command to print a verbatim sequence of characters.
+Like @TeX{}'s @code{\verb} command, the verbatim text can be quoted using
+any unique delimiter character.  Enclose the verbatim text, including the
+delimiters, in braces.  Text is printed in a fixed-width font:@refill
+
+@example
+How many @@verb@{|@@|@}-escapes does one need to print these
+@@verb@{.@@a @@b @@c.@} commands or these @@verb@{+@@'e@?`@!`\+@} characters?
+@end example
+
+@noindent
+produces
+
+@example
+How many @verb{|@|}-escapes does one need to print these 
+@verb{.@a @b @c.} commands or these @verb{+@'e?`!`\+} characters?
+@end example
 
 @node var
 @subsection @code{@@var}@{@var{metasyntactic-variable}@}
@@ -7277,6 +7307,7 @@
                                   different purposes.
 * quotation::                   How to write a quotation.
 * example::                     How to write an example in a fixed-width font.
+* verbatim::                    How to make a verbatim insert.
 * noindent::                    How to prevent paragraph indentation.
 * lisp::                        How to illustrate Lisp code.
 * small::                       Forms for @code{@@smallbook}.
@@ -7303,6 +7334,13 @@
 Illustrate code, commands, and the like. The text is printed
 in a fixed-width font, and indented but not filled.@refill
 
+@item @@verbatim
+Mark a piece of text that is to be printed verbatim; no character 
+substitutions are made and all commands are ignored, until the next
+@code{@@end verbatim}.  The text is printed in a fixed-width font, 
+and not indented or filled.  Extra spaces and blank lines are 
+significant, and tabs are expanded.@refill
+
 @item @@smallexample
 Same as @code{@@example}, except that in @TeX{} this command typesets
 text in a smaller font for the @code{@@smallbook} format than for the
@@ -7449,11 +7487,13 @@
 the output.)@refill
 
 @quotation
-@strong{Caution:} Do not use tabs in the lines of an example (or anywhere
-else in Texinfo, for that matter)!  @TeX{} treats tabs as single
-spaces, and that is not what they look like.  This is a problem with
-@TeX{}.  (If necessary, in Emacs, you can use @kbd{M-x untabify} to
-convert tabs in a region to multiple spaces.)@refill
+@strong{Caution:} Do not use tabs in the lines of an example or anywhere
+else in Texinfo (although tabs should be expanded correctly in verbatim
+environments, you'd better avoid them).  The @TeX{} backend treats tabs 
+as single spaces, and that is probably not what you want.  This is a 
+problem with Texinfo's @TeX{} backend.  (If necessary, in Emacs, you can 
+use @kbd{M-x untabify} to convert tabs in a region to multiple 
+spaces.)@refill
 @end quotation
 
 Examples are often, logically speaking, ``in the middle'' of a
@@ -7469,6 +7509,69 @@
 text.  @xref{code, , @code{@@code}}.)
 
 
+@node verbatim
+@section @code{@@verbatim}
+@cindex Verbatim text
+@findex verbatim
+
+The @code{@@verbatim} environment is used for verbatim printing of text
+that may contain special characters or commands that should not be
+interpreted, such as computer input or output.  This is especially
+useful for including automatically generated output in a texinfo
+@c Just haven't got the guts to include such a shameless plug -- jcn
+@c manual. (For example, see the GNU LilyPond reference manual.)@refill
+manual.@refill
+
+@verbatim
+This is an example of text written in a @verbatim
+block.  No character substitutions are made and all 
+commands are ignored, until the next 'end verbatim' 
+command.
+
+In the printed manual, the text is typeset in a
+fixed-width font, and not indented or filled.  Extra 
+spaces and blank lines are significant, and tabs are
+expanded.
+@end verbatim
+
+Write a @code{@@verbatim} command at the beginning of a line by itself.
+This line will disappear from the output.  Mark the end of the verbatim
+block with a @code{@@end verbatim} command, also written at the beginning
+of a line by itself.  The @code{@@end verbatim} will disappear from the
+output.@refill
+
+
+@need 900
+For example:
+@c urg: got to trick this a bit: can't use @end verbatim inside @verbatim
+
+@example
+@exdent @@verbatim
+@exdent @{
+@exdent <tab>@@command with strange characters: @@'e 
+@exdent expand<tab>me
+@exdent @}
+@exdent @@end verbatim
+@end example
+
+@noindent
+produces
+
+@c hope this example doesn't get mangled by Emac's texinfo mode...
+@verbatim
+{
+	@command with strange characters: @'e 
+expand	me
+}
+@end verbatim
+
+Since the lines containing @code{@@verbatim} and @code{@@end verbatim}
+will disappear, you should put a blank line before the
+@code{@@verbatim} and another blank line after the @code{@@end
+verbatim}.  (Remember that blank lines between the beginning
+@code{@@verbatim} and the ending @code{@@end verbatim} will appear in
+the output.)@refill
+
 @node noindent
 @section @code{@@noindent}
 @findex noindent
@@ -8860,6 +8963,7 @@
                                   expansion of macros, errors, etc.
 * Footnotes::                   How to include footnotes.
 * Images::                      How to include graphics.
+* Verbatim Includes::           How to verbatim include a file.
 @end menu
 
 
@@ -10031,6 +10135,23 @@
 a blank line before the command, or the output will run into the
 preceding text.
 
+
+@c Perhaps in the quotation/example chapter, when Images goes there too?
+@node Verbatim Includes
+@section Verbatim includes
+
+@cindex Verbatim, include
+@findex verbatiminclude
+
+You can verbatim include the contents of a file with the
+@code{@@verbatiminclude} command:
+
+@example
+@@verbatiminclude @var{filename}
+@end example
+
+The content of the file is printed in a verbatim environment,
+see @ref{verbatim}.
 
 @node Breaks
 @chapter Making and Preventing Breaks
diff -urN ../texinfo-3.12s/doc/version.texi ./doc/version.texi
--- ../texinfo-3.12s/doc/version.texi	Thu Aug 19 23:28:33 1999
+++ ./doc/version.texi	Thu Sep  2 12:53:04 1999
@@ -1,3 +1,3 @@
-@set UPDATED 9 August 1999
+@set UPDATED 2 September 1999
 @set EDITION 3.12s
 @set VERSION 3.12s
Binary files ../texinfo-3.12s/makeinfo/.cmds.c.swp and ./makeinfo/.cmds.c.swp differ
Binary files ../texinfo-3.12s/makeinfo/.insertion.c.swp and ./makeinfo/.insertion.c.swp differ
diff -urN ../texinfo-3.12s/makeinfo/cmds.c ./makeinfo/cmds.c
--- ../texinfo-3.12s/makeinfo/cmds.c	Mon Aug  9 22:47:47 1999
+++ ./makeinfo/cmds.c	Thu Sep  2 12:57:12 1999
@@ -45,7 +45,8 @@
   cm_direntry (), cm_dmn (), cm_dots (), cm_emph (), cm_enddots (), cm_i (),
   cm_image (), cm_kbd (), cm_key (), cm_no_op (), 
   cm_novalidate (), cm_not_fixed_width (), cm_r (), cm_shyph (),
-  cm_strong (), cm_var (), cm_sc (), cm_w (), cm_email (), cm_url ();
+  cm_strong (), cm_var (), cm_sc (), cm_w (), cm_email (), cm_url (),
+  cm_verb ();
 
 void
   cm_anchor (), cm_node (), cm_menu (), cm_xref (), cm_ftable (),
@@ -61,7 +62,8 @@
   cm_defcodeindex (), cm_result (), cm_expansion (), cm_equiv (),
   cm_print (), cm_error (), cm_point (), cm_today (), cm_flushleft (),
   cm_flushright (), cm_finalout (), cm_cartouche (), cm_detailmenu (),
-  cm_multitable (), cm_settitle (), cm_titlefont (), cm_tt ();
+  cm_multitable (), cm_settitle (), cm_titlefont (), cm_tt (),
+  cm_verbatim (), cm_verbatiminclude ();
 
 /* Conditionals. */
 void cm_set (), cm_clear (), cm_ifset (), cm_ifclear ();
@@ -320,6 +322,9 @@
   { "v", cm_accent, MAYBE_BRACE_ARGS },
   { "value", cm_value, BRACE_ARGS },
   { "var", cm_var, BRACE_ARGS },
+  { "verb", cm_verb, NO_BRACE_ARGS },
+  { "verbatim", cm_verbatim, NO_BRACE_ARGS },
+  { "verbatiminclude", cm_verbatiminclude, NO_BRACE_ARGS },
   { "vindex", cm_vindex, NO_BRACE_ARGS },
   { "vtable", cm_vtable, NO_BRACE_ARGS },
   { "w", cm_w, BRACE_ARGS },
@@ -640,6 +645,72 @@
 }
 
 void
+cm_verb (arg)
+     int arg;
+{
+  int character;
+  int delimiter;
+  int seen_end = 0;
+
+  in_fixed_width_font++;
+  /* are these necessary ? */
+  last_char_was_newline = 0;
+
+  if (html)
+    add_word ("<pre>");
+
+  if (input_text_offset < input_text_length)
+    {
+      character = curchar ();
+      if (character == '{')
+	input_text_offset++;
+      else
+	line_error (_ ("`{' expected, but saw `%c'"), character);
+    }
+    
+  if (input_text_offset < input_text_length)
+    {
+      delimiter = curchar ();
+      input_text_offset++;
+    }
+
+  while (input_text_offset < input_text_length)
+    {
+      character = curchar ();
+
+      if (character == '\n')
+        line_number++;
+      /*
+	Assume no newlines in END_VERBATIM
+      */
+      else if (character == delimiter)
+	{
+	  seen_end = 1;
+	  input_text_offset++;
+	  break;
+	}
+
+      add_char (character);
+      input_text_offset++;
+    }
+
+  if (!seen_end)
+    warning (_ ("end of file encountered inside verbatim block"));
+  
+  if (input_text_offset < input_text_length)
+    {
+      character = curchar ();
+      if (character == '}')
+	input_text_offset++;
+      else
+	line_error (_ ("`}' expected, but saw `%c'"), character);
+    }
+
+  if (html)
+    add_word ("/<pre>");
+}
+
+void
 cm_strong (arg, position)
      int arg, position;
 {
@@ -1020,10 +1091,14 @@
   in_fixed_width_font = save_in_fixed_width_font;
 }
 
-
-/* Remember this file, and move onto the next. */
-void
-cm_include ()
+/* 
+  Read include-filename, process the include-file:
+    verbatim_include == 0: process through reader_loop
+    verbatim_include != 0: process through handle_verbatim_environment
+ */
+static void
+handle_include (verbatim_include)
+  int verbatim_include;
 {
   char *filename;
 
@@ -1049,7 +1124,7 @@
       i *= 2;
 
       printf ("%*s", i, "");
-      printf ("%c%s %s\n", COMMAND_PREFIX, command, filename);
+      printf ("%c%s `%s'\n", COMMAND_PREFIX, command, filename);
       fflush (stdout);
     }
 
@@ -1060,8 +1135,8 @@
       popfile ();
       line_number--;
 
-      /* Cannot "@include foo", in line 5 of "/wh/bar". */
-      line_error ("%c%s %s: %s", COMMAND_PREFIX, command, filename,
+      /* /wh/bar:5: @include/@verbatiminclude `foo': No such file or dir */
+      line_error ("%c%s `%s': %s", COMMAND_PREFIX, command, filename,
                   strerror (errno));
 
       free (filename);
@@ -1070,11 +1145,31 @@
   else
     {
       if (macro_expansion_output_stream && !executing_string)
-        remember_itext (input_text, input_text_offset);
-      reader_loop ();
+	remember_itext (input_text, input_text_offset);
+
+      if (!verbatim_include)
+	reader_loop ();
+      else
+	handle_verbatim_environment (0);
     }
   free (filename);
   popfile ();
+}
+
+
+/* Include file as if put in @verbatim environment */
+void
+cm_verbatiminclude ()
+{
+  handle_include (1); 
+}
+
+
+/* Remember this file, and move onto the next. */
+void
+cm_include ()
+{
+  handle_include (0); 
 }
 
 
diff -urN ../texinfo-3.12s/makeinfo/insertion.c ./makeinfo/insertion.c
--- ../texinfo-3.12s/makeinfo/insertion.c	Mon Jul 19 23:37:36 1999
+++ ./makeinfo/insertion.c	Thu Sep  2 11:27:59 1999
@@ -35,8 +35,8 @@
   "format", "ftable", "group", "ifclear", "ifhtml", "ifinfo",
   "ifnothtml", "ifnotinfo", "ifnottex", "ifset", "iftex", "itemize",
   "lisp", "menu", "multitable", "quotation", "rawhtml", "rawtex",
-  "smalldisplay", "smallexample", "smallformat", "smalllisp", "table",
-  "tex", "vtable", "bad_type"
+  "smalldisplay", "smallexample", "smallformat", "smalllisp",
+  "verbatim", "table", "tex", "vtable", "bad_type"
 };
 
 /* All nested environments.  */
@@ -916,6 +916,74 @@
 cm_enumerate ()
 {
   do_enumeration (enumerate, "1");
+}
+
+/*
+  Handle verbatim environment:
+    find_end_verbatim == 0:  process until end of file
+    find_end_verbatim != 0:  process until 'COMMAND_PREFIXend verbatim'
+                             or end of file
+
+  We cannot simply copy input stream onto output stream; as the
+  verbatim environment may be encapsulated in an @example environment,
+  for example.
+ */
+void
+handle_verbatim_environment (find_end_verbatim)
+  int find_end_verbatim;
+{
+  int character;
+  int seen_end = 0;
+
+  close_single_paragraph ();
+  inhibit_paragraph_indentation = 1;
+  in_fixed_width_font++;
+  /* are these necessary ? */
+  filling_enabled = 0;
+  last_char_was_newline = 0;
+
+  /* No indentation: this is verbatim after all
+     If you want indent, enclose @verbatim in @example
+       current_indent += default_indentation_increment;
+   */
+
+  if (html)
+    add_word ("<pre>");
+
+  while (input_text_offset < input_text_length)
+    {
+      character = curchar ();
+
+      if (character == '\n')
+        line_number++;
+      /*
+	Assume no newlines in END_VERBATIM
+      */
+      else if (find_end_verbatim && (character == COMMAND_PREFIX) /* @ */
+	  && (input_text_length - input_text_offset > sizeof (END_VERBATIM))
+	  && !strncmp (&input_text[input_text_offset+1], END_VERBATIM,
+		       sizeof (END_VERBATIM)-1))
+	{
+	  input_text_offset += sizeof (END_VERBATIM);
+	  seen_end = 1;
+	  break;
+	}
+
+      add_char (character);
+      input_text_offset++;
+    }
+
+  if (find_end_verbatim && !seen_end)
+    warning (_ ("end of file encountered inside verbatim block"));
+
+  if (html)
+    add_word ("/<pre>");
+}
+
+void
+cm_verbatim ()
+{
+  handle_verbatim_environment (1);
 }
 
 void
diff -urN ../texinfo-3.12s/makeinfo/insertion.h ./makeinfo/insertion.h
--- ../texinfo-3.12s/makeinfo/insertion.h	Wed Jul  7 01:12:58 1999
+++ ./makeinfo/insertion.h	Mon Aug 30 02:03:33 1999
@@ -30,7 +30,7 @@
   ftable, group, ifclear, ifhtml, ifinfo, ifnothtml, ifnotinfo,
   ifnottex, ifset, iftex, itemize, lisp, menu, multitable, quotation,
   rawhtml, rawtex, smalldisplay, smallexample, smallformat, smalllisp,
-  table, tex, vtable, bad_type
+  verbatim, table, tex, vtable, bad_type
 };
 
 typedef struct istack_elt
diff -urN ../texinfo-3.12s/makeinfo/makeinfo.c ./makeinfo/makeinfo.c
--- ../texinfo-3.12s/makeinfo/makeinfo.c	Mon Aug  9 22:52:40 1999
+++ ./makeinfo/makeinfo.c	Wed Sep  1 20:42:26 1999
@@ -2195,7 +2195,7 @@
                         }
 
                         /* Filled, but now indent if that is right. */
-                        if (indented_fill && current_indent)
+                        if (indented_fill && (current_indent > 0))
                           {
                             int buffer_len = ((output_paragraph_offset - temp)
                                               + current_indent);
diff -urN ../texinfo-3.12s/makeinfo/makeinfo.h ./makeinfo/makeinfo.h
--- ../texinfo-3.12s/makeinfo/makeinfo.h	Mon Jul 19 23:16:46 1999
+++ ./makeinfo/makeinfo.h	Thu Sep  2 10:58:13 1999
@@ -225,6 +225,8 @@
 
 #define COMMAND_PREFIX '@'
 
+#define END_VERBATIM "end verbatim"
+
 /* Stuff for splitting large files. */
 #define SPLIT_SIZE_THRESHOLD 70000  /* What's good enough for Stallman... */
 #define DEFAULT_SPLIT_SIZE 50000    /* Is probably good enough for me. */
diff -urN ../texinfo-3.12s/makeinfo/node.c ./makeinfo/node.c
--- ../texinfo-3.12s/makeinfo/node.c	Tue Aug 17 23:06:40 1999
+++ ./makeinfo/node.c	Mon Aug 30 01:41:54 1999
@@ -836,7 +836,7 @@
   if (this_section >= 0)
     current_section = this_section;
 
-  if (strcmp (current_node, "Top") == 0)
+  if (current_node && strcmp (current_node, "Top") == 0)
     top_node_seen = 1;
 
   filling_enabled = 1;

