&get_indexsubitem:  This now has a chance of working, thanks to:

&do_cmd_setindexsubitem:  New function.  Set the indexsubitem value from
	\setindexsubitem{(...)}.

&do_env_opcodedesc:  By default, don't index byte codes.

$INDEX_OPCODES:  New flag.  If true, index the byte codes.  Default is off.

Normalize indentation to 4 spaces everywhere.

Minor nits.
diff --git a/Doc/myformat.perl b/Doc/myformat.perl
index 16de515..aba1ab1 100644
--- a/Doc/myformat.perl
+++ b/Doc/myformat.perl
@@ -22,28 +22,28 @@
 sub do_cmd_C{ join('', 'C', @_[0]); }
 sub do_cmd_Cpp{ join('', 'C++', @_[0]); }
 sub do_cmd_EOF{ join('', 'EOF', @_[0]); }
-sub do_cmd_NULL{ join('', 'NULL', @_[0]); }
+sub do_cmd_NULL{ join('', '<tt>NULL</tt>', @_[0]); }
 
 sub do_cmd_e{ local($_) = @_; '&#92;' . $_; }
 
 sub do_cmd_optional{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<\/var><big>\[<\/big><var>\2<\/var><big>\]<\/big><var>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<\/var><big>\[<\/big><var>\2<\/var><big>\]<\/big><var>/;
+    $_;
 }
 
 sub do_cmd_varvars{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<var>\2<\/var>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<var>\2<\/var>/;
+    $_;
 }
 
 # texinfo-like formatting commands: \code{...} etc.
 
 sub do_cmd_code{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<code>\2<\/code>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<tt>\2<\/tt>/;
+    $_;
 }
 
 sub do_cmd_sectcode{ &do_cmd_code(@_); }
@@ -56,11 +56,12 @@
 sub do_cmd_constant{ &do_cmd_code(@_); }
 sub do_cmd_method{ &do_cmd_code(@_); }
 sub do_cmd_email{ &do_cmd_code(@_); }
+sub do_cmd_program{ &do_cmd_code(@_); }
 
 sub do_cmd_url{
     # use the URL as both text and hyperlink
     local($_) = @_;
-    s/$any_next_pair_pr_rx/<code><a href="\2">\2<\/a><\/code>/;
+    s/$any_next_pair_pr_rx/<tt><a href="\2">\2<\/a><\/tt>/;
     $_;
 }
 
@@ -84,39 +85,39 @@
 }
 
 sub do_cmd_kbd{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<kbd>\2<\/kbd>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<kbd>\2<\/kbd>/;
+    $_;
 }
 
 sub do_cmd_key{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<tt>\2<\/tt>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<tt>\2<\/tt>/;
+    $_;
 }
 
 sub do_cmd_var{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<em>\2<\/em>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<em>\2<\/em>/;
+    $_;
 }
 
 sub do_cmd_dfn{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<i><dfn>\2<\/dfn><\/i>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<i><dfn>\2<\/dfn><\/i>/;
+    $_;
 }
 
 sub do_cmd_emph{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<em>\2<\/em>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<em>\2<\/em>/;
+    $_;
 }
 
 sub do_cmd_strong{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/<b>\2<\/b>/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/<b>\2<\/b>/;
+    $_;
 }
 
 # file and samp are at the end of this file since they screw up fontlock.
@@ -133,56 +134,54 @@
 }
 
 sub do_cmd_indexii{
-	local($_) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id1, $str1) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id2, $str2) = ($1, $2);
-	join('', &make_index_entry($br_id1, "$str1 $str2"),
-		 &make_index_entry($br_id2, "$str2, $str1"), $_);
+    local($_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id1, $str1) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id2, $str2) = ($1, $2);
+    join('', &make_index_entry($br_id1, "$str1 $str2"),
+	 &make_index_entry($br_id2, "$str2, $str1"), $_);
 }
 
 sub do_cmd_indexiii{
-	local($_) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id1, $str1) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id2, $str2) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id3, $str3) = ($1, $2);
-	join('', &make_index_entry($br_id1, "$str1 $str2 $str3"),
-		 &make_index_entry($br_id2, "$str2 $str3, $str1"),
-		 &make_index_entry($br_id3, "$str3, $str1 $str2"),
-		 $_);
+    local($_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id1, $str1) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id2, $str2) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id3, $str3) = ($1, $2);
+    join('', &make_index_entry($br_id1, "$str1 $str2 $str3"),
+	 &make_index_entry($br_id2, "$str2 $str3, $str1"),
+	 &make_index_entry($br_id3, "$str3, $str1 $str2"),
+	 $_);
 }
 
 sub do_cmd_indexiv{
-	local($_) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id1, $str1) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id2, $str2) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id3, $str3) = ($1, $2);
-	s/$next_pair_pr_rx//o;
-	local($br_id4, $str4) = ($1, $2);
-	join('', &make_index_entry($br_id1, "$str1 $str2 $str3 $str4"),
-		 &make_index_entry($br_id2, "$str2 $str3 $str4, $str1"),
-		 &make_index_entry($br_id3, "$str3 $str4, $str1 $str2"),
-		 &make_index_entry($br_id4, "$str4, $str1 $str2 $str3"),
-		 $_);
+    local($_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id1, $str1) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id2, $str2) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id3, $str3) = ($1, $2);
+    s/$next_pair_pr_rx//o;
+    local($br_id4, $str4) = ($1, $2);
+    join('', &make_index_entry($br_id1, "$str1 $str2 $str3 $str4"),
+	 &make_index_entry($br_id2, "$str2 $str3 $str4, $str1"),
+	 &make_index_entry($br_id3, "$str3 $str4, $str1 $str2"),
+	 &make_index_entry($br_id4, "$str4, $str1 $str2 $str3"),
+	 $_);
 }
 
-sub do_cmd_ttindex{
-	&do_cmd_index(@_);
-}
+sub do_cmd_ttindex{ &do_cmd_index(@_); }
 
 sub my_typed_index_helper{
-	local($word, $_) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id, $str) = ($1, $2);
-	join('', &make_index_entry($br_id, "$str $word"),
-		 &make_index_entry($br_id, "$word, $str"), $_);
+    local($word, $_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id, $str) = ($1, $2);
+    join('', &make_index_entry($br_id, "$str $word"),
+	 &make_index_entry($br_id, "$word, $str"), $_);
 }
 
 sub do_cmd_stindex{ &my_typed_index_helper('statement', @_); }
@@ -191,10 +190,10 @@
 sub do_cmd_obindex{ &my_typed_index_helper('object', @_); }
 
 sub my_parword_index_helper{
-	local($word, $_) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id, $str) = ($1, $2);
-	&make_index_entry($br_id, "$str ($word)") . $_;
+    local($word, $_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id, $str) = ($1, $2);
+    &make_index_entry($br_id, "$str ($word)") . $_;
 }
 
 
@@ -226,11 +225,11 @@
 }
 
 sub my_module_index_helper{
-	local($word, $_, $define) = @_;
-	s/$next_pair_pr_rx//o;
-	local($br_id, $str) = ($1, $2);
-	&make_mod_index_entry($br_id, "<tt>$str</tt> ($word module)",
-			      $define) . $_;
+    local($word, $_, $define) = @_;
+    s/$next_pair_pr_rx//o;
+    local($br_id, $str) = ($1, $2);
+    &make_mod_index_entry($br_id, "<tt>$str</tt> ($word module)",
+			  $define) . $_;
 }
 
 sub do_cmd_bifuncindex{ &my_parword_index_helper('built-in function', @_); }
@@ -254,13 +253,12 @@
     $any_next_pair_pr_rx_5 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\5$CP";
     $any_next_pair_pr_rx_7 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\7$CP";
     $any_next_pair_pr_rx_9 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\9$CP";
-    $new_command{"indexsubitem"} = "";
 }
 
 &init_myformat;
 
 sub get_indexsubitem{
-  local($result) = $new_command{"indexsubitem"};
+  local($result) = $INDEX_SUBITEM;
   #print "\nget_indexsubitem ==> $result\n";
   $result ? " $result" : '';
 }
@@ -283,219 +281,244 @@
 }
 
 sub do_env_cfuncdesc{
-  local($_) = @_;
-  local($return_type,$function_name,$arg_list,$idx) = ('', '', '', '');
-  local($cfuncdesc_rx) =
-    "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5";
-  if (/$cfuncdesc_rx/o) {
-    $return_type = "$2";
-    $function_name = "$4";
-    $arg_list = "$6";
-    $idx = &make_str_index_entry($3,
-			"<tt>$function_name()</tt>" . &get_indexsubitem);
-  }
-  "<dl><dt>$return_type <b>$idx</b>" .
-    "(<var>$arg_list</var>)\n<dd>$'\n</dl>"
+    local($_) = @_;
+    local($return_type,$function_name,$arg_list,$idx) = ('', '', '', '');
+    local($cfuncdesc_rx) =
+      "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5";
+    if (/$cfuncdesc_rx/o) {
+	$return_type = "$2";
+	$function_name = "$4";
+	$arg_list = "$6";
+	$idx = &make_str_index_entry($3,
+			"<tt>$function_name</tt>" . &get_indexsubitem);
+	$idx =~ s/ \(.*\)//;
+    }
+    "<dl><dt>$return_type <b>$idx</b>"
+      . "(<var>$arg_list</var>)\n<dd>$'\n</dl>"
 }
 
 sub do_env_ctypedesc{
-  local($_) = @_;
-  local($type_name) = ('');
-  local($cfuncdesc_rx) =
-    "$next_pair_rx";
-  if (/$cfuncdesc_rx/o) {
-    $type_name = "$2";
-    $idx = &make_str_index_entry($1,
-				 "<tt>$type_name</tt>" . &get_indexsubitem);
-  }
-  "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
+    local($_) = @_;
+    local($type_name) = ('');
+    local($cfuncdesc_rx) = "$next_pair_rx";
+    if (/$cfuncdesc_rx/o) {
+	$type_name = "$2";
+	$idx = &make_str_index_entry($1,
+			"<tt>$type_name</tt>" . &get_indexsubitem);
+	$idx =~ s/ \(.*\)//;
+    }
+    "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
 }
 
 sub do_env_cvardesc{
-  local($_) = @_;
-  local($var_type,$var_name,$idx) = ('', '', '');
-  local($cfuncdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
-  if (/$cfuncdesc_rx/o) {
-    $var_type = "$2";
-    $var_name = "$4";
-    $idx = &make_str_index_entry($3,"<tt>$var_name</tt>" . &get_indexsubitem);
-  }
-  "<dl><dt>$var_type <b>$idx</b>\n" .
-    "<dd>$'\n</dl>";
+    local($_) = @_;
+    local($var_type,$var_name,$idx) = ('', '', '');
+    local($cfuncdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+    if (/$cfuncdesc_rx/o) {
+	$var_type = "$2";
+	$var_name = "$4";
+	$idx = &make_str_index_entry($3,
+			"<tt>$var_name</tt>" . &get_indexsubitem);
+	$idx =~ s/ \(.*\)//;
+    }
+    "<dl><dt>$var_type <b>$idx</b>\n"
+      . "<dd>$'\n</dl>";
 }
 
 sub do_env_funcdesc{
-  local($_) = @_;
-  local($function_name,$arg_list,$idx) = ('', '', '');
-  local($funcdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
-  if (/$funcdesc_rx/o) {
-    $function_name = "$2";
-    $arg_list = "$4";
-    $idx = &make_str_index_entry($3,
-			"<tt>$function_name()</tt>" . &get_indexsubitem);
-  }
-  "<dl><dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>$'\n</dl>";
+    local($_) = @_;
+    local($function_name,$arg_list,$idx) = ('', '', '');
+    local($funcdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+    if (/$funcdesc_rx/o) {
+	$function_name = "$2";
+	$arg_list = "$4";
+	$idx = &make_str_index_entry($3,
+			"<tt>$function_name</tt>" . &get_indexsubitem);
+	$idx =~ s/ \(.*\)//;
+    }
+    "<dl><dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>$'\n</dl>";
 }
 
 sub do_cmd_funcline{
-  local($_) = @_;
-  local($funcdesc_rx) = "$next_pair_pr_rx$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+    local($_) = @_;
+    local($funcdesc_rx) = "$next_pair_pr_rx$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
 
-  s/$funcdesc_rx//o;
-  local($br_id, $function_name, $arg_list) = ($3, $2, $4);
-  local($idx) = &make_str_index_entry($br_id, "<tt>$function_name()</tt>");
+    s/$funcdesc_rx//o;
+    local($br_id, $function_name, $arg_list) = ($3, $2, $4);
+    local($idx) = &make_str_index_entry($br_id, "<tt>$function_name</tt>");
 
-  "<dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>" . $_;
+    "<dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>" . $_;
 }
 
+# Change this flag to index the opcode entries.  I don't think it's very
+# useful to index them, since they're only presented to describe the dis
+# module.
+#
+$INDEX_OPCODES = 0;
+
 sub do_env_opcodedesc{
-  local($_) = @_;
-  local($opcode_name,$arg_list,$stuff,$idx) = ('', '', '', '');
-  local($opcodedesc_rx) = "$next_pair_rx$any_next_pair_rx3";
-  if (/$opcodedesc_rx/o) {
-    $opcode_name = "$2";
-    $arg_list = "$4";
-#    $idx = &make_str_index_entry($3,
-#			"<tt>$opcode_name</tt> (byte code instruction)");
-#    $idx =~ s/ \(byte code instruction\)//;
-  }
-  $stuff = "<dl><dt><b>$idx</b>";
-  if ($arg_list) {
-    $stuff .= "&nbsp;&nbsp;&nbsp;&nbsp;<var>$arg_list</var>";
-  }
-  $stuff . "\n<dd>$'\n</dl>";
+    local($_) = @_;
+    local($opcode_name,$arg_list,$stuff,$idx) = ('', '', '', '');
+    local($opcodedesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+    if (/$opcodedesc_rx/o) {
+	$opcode_name = "$2";
+	$arg_list = "$4";
+	if ($INDEX_OPCODES) {
+	    $idx = &make_str_index_entry($3,
+			"<tt>$opcode_name</tt> (byte code instruction)");
+	    $idx =~ s/ \(byte code instruction\)//;
+	}
+	else {
+	    $idx = "<tt>$opcode_name</tt>";
+	}
+      }
+    $stuff = "<dl><dt><b>$idx</b>";
+    if ($arg_list) {
+	$stuff .= "&nbsp;&nbsp;&nbsp;&nbsp;<var>$arg_list</var>";
+    }
+    $stuff . "\n<dd>$'\n</dl>";
 }
 
 sub do_env_datadesc{
-  local($_) = @_;
-  local($idx) = '';
-  if (/$next_pair_rx/o) {
-    $idx = &make_str_index_entry($1, "<tt>$2</tt>" . &get_indexsubitem);
-  }
-  "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
+    local($_) = @_;
+    local($idx) = '';
+    if (/$next_pair_rx/o) {
+	$idx = &make_str_index_entry($1, "<tt>$2</tt>" . &get_indexsubitem);
+	$idx =~ s/ \(.*\)//;
+    }
+    "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
 }
 
 sub do_cmd_dataline{
-  local($_) = @_;
+    local($_) = @_;
 
-  s/$next_pair_pr_rx//o;
-  local($br_id, $data_name) = ($1, $2);
-  local($idx) = &make_str_index_entry($br_id, "<tt>$data_name</tt>");
+    s/$next_pair_pr_rx//o;
+    local($br_id, $data_name) = ($1, $2);
+    local($idx) = &make_str_index_entry($br_id, "<tt>$data_name</tt>"
+				       . &get_indexsubitem);
+    $idx =~ s/ \(.*\)//;
 
-  "<dt><b>$idx</b>\n<dd>" . $_;
+    "<dt><b>$idx</b>\n<dd>" . $_;
 }
 
 sub do_env_excdesc{ &do_env_datadesc(@_); }
+sub do_env_codesample{ &do_env_verbatim(@_); }
+
 
 @col_aligns = ("<td>", "<td>", "<td>");
 
 sub setup_column_alignments{
-  local($_) = @_;
-  local($j1,$a1,$a2,$a3,$j4) = split(/[|]/,$_);
-  local($th1,$th2,$th3) = ('<th>', '<th>', '<th>');
-  $col_aligns[0] = (($a1 eq "c") ? "<td align=center>" : "<td>");
-  $col_aligns[1] = (($a2 eq "c") ? "<td align=center>" : "<td>");
-  $col_aligns[2] = (($a3 eq "c") ? "<td align=center>" : "<td>");
-  # return the aligned header start tags; only used for \begin{tableiii?}
-  $th1 = (($a1 eq "l") ? "<th align=left>"
-	  : ($a1 eq "r" ? "<th align=right>" : "<th>"));
-  $th2 = (($a2 eq "l") ? "<th align=left>"
-	  : ($a2 eq "r" ? "<th align=right>" : "<th>"));
-  $th3 = (($a3 eq "l") ? "<th align=left>"
-	  : ($a3 eq "r" ? "<th align=right>" : "<th>"));
-  ($th1, $th2, $th3);
+    local($_) = @_;
+    local($j1,$a1,$a2,$a3,$j4) = split(/[|]/,$_);
+    local($th1,$th2,$th3) = ('<th>', '<th>', '<th>');
+    $col_aligns[0] = (($a1 eq "c") ? "<td align=center>" : "<td>");
+    $col_aligns[1] = (($a2 eq "c") ? "<td align=center>" : "<td>");
+    $col_aligns[2] = (($a3 eq "c") ? "<td align=center>" : "<td>");
+    # return the aligned header start tags; only used for \begin{tableiii?}
+    $th1 = (($a1 eq "l") ? "<th align=left>"
+	    : ($a1 eq "r" ? "<th align=right>" : "<th>"));
+    $th2 = (($a2 eq "l") ? "<th align=left>"
+	    : ($a2 eq "r" ? "<th align=right>" : "<th>"));
+    $th3 = (($a3 eq "l") ? "<th align=left>"
+	    : ($a3 eq "r" ? "<th align=right>" : "<th>"));
+    ($th1, $th2, $th3);
 }
 
 sub do_env_tableii{
-  local($_) = @_;
-  local($font,$h1,$h2) = ('', '', '');
-  local($tableiii_rx) =
-    "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7";
-  if (/$tableiii_rx/o) {
-    $font = $4;
-    $h1 = $6;
-    $h2 = $8;
-  }
-  local($th1,$th2,$th3) = &setup_column_alignments($2);
-  $globals{"lineifont"} = $font;
-  "<table border align=center>\n  <tr>$th1$h1</th>\n      $th2$h2</th>$'\n"
-    . "</table>";
+    local($_) = @_;
+    local($font,$h1,$h2) = ('', '', '');
+    local($tableiii_rx) =
+      "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7";
+    if (/$tableiii_rx/o) {
+	$font = $4;
+	$h1 = $6;
+	$h2 = $8;
+    }
+    local($th1,$th2,$th3) = &setup_column_alignments($2);
+    $globals{"lineifont"} = $font;
+    "<table border align=center>\n  <tr>$th1$h1</th>\n      $th2$h2</th>$'\n"
+      . "</table>";
 }
 
 sub do_cmd_lineii{
-  local($_) = @_;
-  s/$next_pair_pr_rx//o;
-  local($c1) = $2;
-  s/$next_pair_pr_rx//o;
-  local($c2) = $2;
-  local($font) = $globals{"lineifont"};
-  local($c1align, $c2align) = @col_aligns[0,1];
-  "<tr>$c1align<$font>$c1</$font></td>\n"
-    . "      $c2align$c2</td>$'";
+    local($_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($c1) = $2;
+    s/$next_pair_pr_rx//o;
+    local($c2) = $2;
+    local($font) = $globals{"lineifont"};
+    local($c1align, $c2align) = @col_aligns[0,1];
+    "<tr>$c1align<$font>$c1</$font></td>\n"
+      . "      $c2align$c2</td>$'";
 }
 
 sub do_env_tableiii{
-  local($_) = @_;
-  local($font,$h1,$h2,$h3) = ('', '', '', '');
+    local($_) = @_;
+    local($font,$h1,$h2,$h3) = ('', '', '', '');
   
-  local($tableiii_rx) =
-    "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7"
-      . "$any_next_pair_rx9";
-  if (/$tableiii_rx/o) {
-    $font = $4;
-    $h1 = $6;
-    $h2 = $8;
-    $h3 = $10;
-  }
-  local($th1,$th2,$th3) = &setup_column_alignments($2);
-  $globals{"lineifont"} = $font;
-  "<table border align=center>\n  <tr>$th1$h1</th>\n      $th2$h2</th>"
-    . "\n      $th3$h3</th>$'\n"
-    . "</table>";
+    local($tableiii_rx) =
+      "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7"
+	. "$any_next_pair_rx9";
+    if (/$tableiii_rx/o) {
+	$font = $4;
+	$h1 = $6;
+	$h2 = $8;
+	$h3 = $10;
+    }
+    local($th1,$th2,$th3) = &setup_column_alignments($2);
+    $globals{"lineifont"} = $font;
+    "<table border align=center>\n  <tr>$th1$h1</th>\n      $th2$h2</th>"
+      . "\n      $th3$h3</th>$'\n"
+      . "</table>";
 }
 
 sub do_cmd_lineiii{
-  local($_) = @_;
-  s/$next_pair_pr_rx//o;
-  local($c1) = $2;
-  s/$next_pair_pr_rx//o;
-  local($c2) = $2;
-  s/$next_pair_pr_rx//o;
-  local($c3) = $2;
-  local($font) = $globals{"lineifont"};
-  local($c1align, $c2align, $c3align) = @col_aligns;
-  "<tr>$c1align<$font>$c1</$font></td>\n"
-    . "      $c2align$c2</td>\n"
-    . "      $c3align$c3</td>$'";
+    local($_) = @_;
+    s/$next_pair_pr_rx//o;
+    local($c1) = $2;
+    s/$next_pair_pr_rx//o;
+    local($c2) = $2;
+    s/$next_pair_pr_rx//o;
+    local($c3) = $2;
+    local($font) = $globals{"lineifont"};
+    local($c1align, $c2align, $c3align) = @col_aligns;
+    "<tr>$c1align<$font>$c1</$font></td>\n"
+      . "      $c2align$c2</td>\n"
+      . "      $c3align$c3</td>$'";
 }
 
 sub do_env_seealso{
-  "<p><b>See Also:</b></p>\n" . @_[0];
+    "<p><b>See Also:</b></p>\n" . @_[0];
 }
 
 sub do_cmd_seemodule{
-  local($_) = @_;
-  local($any_next_pair_pr_rx3) = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
-  s/$next_pair_pr_rx$any_next_pair_pr_rx3/<p><code><b>\2<\/b><\/code> (\4)<\/p>/;
-  $_;
+    local($_) = @_;
+    local($any_next_pair_pr_rx3) = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+    s/$next_pair_pr_rx$any_next_pair_pr_rx3/<p><tt><b>\2<\/b><\/tt> (\4)<\/p>/;
+    $_;
 }
 
 sub do_cmd_seetext{
-  "<p>" . @_[0];
+    "<p>" . @_[0];
 }
 
 # These are located down here since they screw up fontlock.
 
 sub do_cmd_file{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/`<code>\2<\/code>'/;
-	$_;
+    # This uses a weird HTML construct to adjust the font to be
+    # reasonable match that used in the printed form as much as
+    # possible.  The expected behavior is that a browser that doesn't
+    # understand "<font face=...>" markup will use courier (or whatever
+    # the font is for <tt>).
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/`<tt><font face=sans-serif>\2<\/font><\/tt>'/;
+    $_;
 }
 
 sub do_cmd_samp{
-	local($_) = @_;
-	s/$any_next_pair_pr_rx/`<samp>\2<\/samp>'/;
-	$_;
+    local($_) = @_;
+    s/$any_next_pair_pr_rx/`<samp>\2<\/samp>'/;
+    $_;
 }
 
 1;				# This must be the last line