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
