diff -urN ../texinfo-3.12s.jcn1/ChangeLog ./ChangeLog
--- ../texinfo-3.12s.jcn1/ChangeLog	Mon Aug 30 03:50:15 1999
+++ ./ChangeLog	Mon Aug 30 03:25:28 1999
@@ -1,3 +1,11 @@
+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 ()
diff -urN ../texinfo-3.12s.jcn1/doc/texinfo.tex ./doc/texinfo.tex
--- ../texinfo-3.12s.jcn1/doc/texinfo.tex	Thu Aug 19 23:16:42 1999
+++ ./doc/texinfo.tex	Mon Aug 30 03:35:29 1999
@@ -4281,6 +4281,64 @@
   \fi
 }
 
+% latex-like '@verbatim..@end verbatim'
+% (and: under development @verb<char>...<char>)
+% --jcn
+% [Knuth] pp. 344 and 380
+\def\dospecials{\do\ \do\\\do\@\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=12}\dospecials}%
+%
+% 8 spaces for a tab
+{\catcode`\^^I=\active \gdef^^I{\ \ \ \ \ \ \ \ }}
+%
+% disable ligatures ?` and !` of \tt font
+{\catcode`\`=\active\gdef`{\relax\lq}}
+%
+% [Knuth] p. 381
+\def\ATverbatim{\tt%
+  \spaceskip=0pt \xspaceskip=0pt
+  \catcode`\^^I=\active
+  \catcode`\`=\active
+  % don't skip empty lines
+  \def\par{\leavevmode\endgraf}
+  \obeylines \uncatcodespecials \obeyspaces}
+%
+% [Knuth] pp. 351-352
+% respect spaces and define \endgraf \lq \space \obeylines \obeyspaces
+{\obeyspaces \global\let =\ }
+%
+%
+% Do the magic: define the macro \ATxverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\ATxverbatim#1@end verbatim{...}
+%
+% 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 '}'
+%
+%% include LaTeX hack for completeness -- never know
+%%\begingroup
+%%\catcode`|=0 \catcode`[=1
+%%\catcode`]=2\catcode`\{=12 \catcode`\}=12\catcode`\ =\active
+%%\catcode`\\=12|gdef|ATxverbatim#1@end verbatim[
+%%#1|endgroup|def|Everbatim[]|end[verbatim]]
+%%|endgroup
+\begingroup
+\catcode`\ =\active
+\gdef\ATxverbatim#1@end verbatim{
+#1\endgroup\def\Everbatim{}\end{verbatim}}
+\endgroup
+\def\verbatim{\begingroup\ATverbatim\ATxverbatim}
+%
+% [Knuth] p. 382
+% doesn't work yet
+\def\ATverb#1{\def\next##1#1{##1\endgroup}\next}
+\def\verb{\begingroup\ATverbatim\ATverb}
+%
+
 
 \message{defuns,}
 % @defun etc.
diff -urN ../texinfo-3.12s.jcn1/makeinfo/cmds.c ./makeinfo/cmds.c
--- ../texinfo-3.12s.jcn1/makeinfo/cmds.c	Mon Aug  9 22:47:47 1999
+++ ./makeinfo/cmds.c	Mon Aug 30 02:47:45 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 ();
 
 /* Conditionals. */
 void cm_set (), cm_clear (), cm_ifset (), cm_ifclear ();
@@ -320,7 +322,8 @@
   { "v", cm_accent, MAYBE_BRACE_ARGS },
   { "value", cm_value, BRACE_ARGS },
   { "var", cm_var, BRACE_ARGS },
-  { "vindex", cm_vindex, NO_BRACE_ARGS },
+  { "verb", cm_verb, NO_BRACE_ARGS },
+  { "verbatim", cm_verbatim, NO_BRACE_ARGS },
   { "vtable", cm_vtable, NO_BRACE_ARGS },
   { "w", cm_w, BRACE_ARGS },
   { "xref", cm_xref, BRACE_ARGS },
@@ -640,13 +643,33 @@
 }
 
 void
+cm_verb (arg)
+     int arg;
+{
+  extern int printing_index;
+
+  if (arg == START)
+    {
+      in_fixed_width_font++;
+      verbatim_mode++;
+      
+      if (html)
+        insert_html_tag (arg, "code");
+    }
+  else
+    {
+      verbatim_mode--;
+      if (html)
+	insert_html_tag (arg, "code");
+    }
+}
+
+void
 cm_strong (arg, position)
      int arg, position;
 {
   if (html)
     insert_html_tag (arg, "strong");
-  else
-    add_char ('*');
 }
 
 void
diff -urN ../texinfo-3.12s.jcn1/makeinfo/insertion.c ./makeinfo/insertion.c
--- ../texinfo-3.12s.jcn1/makeinfo/insertion.c	Mon Jul 19 23:37:36 1999
+++ ./makeinfo/insertion.c	Mon Aug 30 03:55:49 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.  */
@@ -424,6 +424,8 @@
       current_indent += default_indentation_increment;
       break;
 
+    case verbatim:
+      verbatim_mode++;
     case display:
     case smalldisplay:
     case example:
@@ -528,6 +530,7 @@
               && insertion_stack->next->insertion != smalllisp
               && insertion_stack->next->insertion != format
               && insertion_stack->next->insertion != smallformat
+              && insertion_stack->next->insertion != verbatim
               && insertion_stack->next->insertion != flushleft
               && insertion_stack->next->insertion != flushright))
         close_single_paragraph ();
@@ -685,6 +688,8 @@
       close_insertion_paragraph ();
       break;
 
+    case verbatim:
+      verbatim_mode--;
     case format:
     case smallformat:
     case display:
@@ -919,6 +924,12 @@
 }
 
 void
+cm_verbatim ()
+{
+  begin_insertion (verbatim);
+}
+
+void
 cm_table ()
 {
   begin_insertion (table);
@@ -1171,6 +1182,7 @@
         case smallformat:
         case display:
         case smalldisplay:
+	case verbatim:
         case group:
           line_error (_("@%s not meaningful inside `@%s' block"),
                       command,
diff -urN ../texinfo-3.12s.jcn1/makeinfo/insertion.h ./makeinfo/insertion.h
--- ../texinfo-3.12s.jcn1/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.jcn1/makeinfo/makeinfo.c ./makeinfo/makeinfo.c
--- ../texinfo-3.12s.jcn1/makeinfo/makeinfo.c	Mon Aug  9 22:52:40 1999
+++ ./makeinfo/makeinfo.c	Mon Aug 30 03:40:59 1999
@@ -1788,7 +1788,13 @@
           break;
 
         case COMMAND_PREFIX: /* @ */
-          if (read_command () || !only_macro_expansion)
+          if (verbatim_mode)
+	    {
+	      add_char (character);
+	      read_command ();
+	      break;
+	    }
+          else if (read_command () || !only_macro_expansion)
             break;
 
         /* FALLTHROUGH (usually) */
@@ -1797,7 +1803,7 @@
              If we do, it means there is a syntax error in the input text.
              Report the error here, but remember this brace on the stack so
              we can ignore its partner. */
-          if (!only_macro_expansion)
+          if (!only_macro_expansion && !verbatim)
             {
               line_error (_("Misplaced %c"), '{');
               remember_brace (misplaced_brace);
@@ -1807,7 +1813,7 @@
 
         /* FALLTHROUGH (usually) */
         case '}':
-          if (!only_macro_expansion)
+          if (!only_macro_expansion && !verbatim)
             {
               pop_and_call_brace ();
               input_text_offset++;
diff -urN ../texinfo-3.12s.jcn1/makeinfo/makeinfo.h ./makeinfo/makeinfo.h
--- ../texinfo-3.12s.jcn1/makeinfo/makeinfo.h	Mon Jul 19 23:16:46 1999
+++ ./makeinfo/makeinfo.h	Mon Aug 30 03:22:33 1999
@@ -78,6 +78,9 @@
    any attention to `close_paragraph' calls. */
 DECLARE (int, must_start_paragraph, 0);
 
+/* Are we in verbatim mode? */
+DECLARE (int, verbatim_mode, 0);
+
 /* Nonzero means that we have seen "@top" once already. */
 DECLARE (int, top_node_seen, 0);
 

