changeset 4:22ed6d93442c

Start modifying transformers to Confluence wiki syntax
author smith@nwoca.org
date Tue, 25 Jan 2011 21:59:31 -0500
parents 4417b025157e
children d34f4d408ef9
files src/org/nwoca/ssdt/tools/html2wiki/ChapterTransformer.java src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java src/org/nwoca/ssdt/tools/html2wiki/ReplaceTransformer.java src/org/nwoca/ssdt/tools/html2wiki/TagTransformer.java test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java test/resources/sysman_handbook.html
diffstat 6 files changed, 205 insertions(+), 184 deletions(-) [+]
line wrap: on
line diff
--- a/src/org/nwoca/ssdt/tools/html2wiki/ChapterTransformer.java	Tue Jan 25 17:08:12 2011 -0500
+++ b/src/org/nwoca/ssdt/tools/html2wiki/ChapterTransformer.java	Tue Jan 25 21:59:31 2011 -0500
@@ -18,8 +18,7 @@
         boolean first = true;
         while (matcher.find( 0 )) {
             buffer.replace(matcher.start(),matcher.end(),
-                        "<chapter>" + matcher.group(1) +"</chapter>\n__TOC__" +
-                        (category == null ? "" : "\n[[Category:" + category + "]]"));
+                        "<chapter>" + matcher.group(1) + "</chapter>\n{panel}{toc}{panel}");
             first = false;
         }
      
--- a/src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java	Tue Jan 25 17:08:12 2011 -0500
+++ b/src/org/nwoca/ssdt/tools/html2wiki/Html2Wiki.java	Tue Jan 25 21:59:31 2011 -0500
@@ -36,32 +36,47 @@
     public Html2Wiki(String html) {
         buffer = new StringBuffer(html);
         transformers =  new ArrayList<Transformer>();
-        transformers.add(new PreTagTransformer());
-        transformers.add(new DeleteTransformer("^\\s",true));
+//        transformers.add(new PreTagTransformer());
+//        transformers.add(new DeleteTransformer("^\\s",true));
         transformers.add(new DeleteTransformer("<html>|</html>|<body>|</body>"));
         transformers.add(new DeleteTransformer("<!--.*-->(\\n|\\r)*",true));
         transformers.add(new DeleteTransformer("<a .*?>|</a>"));
         transformers.add(new DeleteTransformer("(?m)^\\*"));
-        transformers.add(new DeleteTransformer("<blockquote>|</blockquote>"));
+//        transformers.add(new DeleteTransformer("<blockquote>|</blockquote>"));
         transformers.add(new DeleteTransformer("<p>"));
         transformers.add(new DeleteTransformer("(?m)<br>$"));
         transformers.add(new DeleteTransformer("<font .*?>|</font>"));
-        transformers.add(new CloseTagTransformer("<li>","(\n|\r)*(<li>|</ul>|</ol>|<ul>|<ol>)","\n</li>"));
+        transformers.add(new CloseTagTransformer("<li>","(\n|\r)*(<li>|</ul>|</ol>|<ul>|<ol>)","</li>"));
         transformers.add(new BadTableDataTransformer());
         transformers.add(new BadTableRowTransformer());
-        transformers.add(new ReplaceTransformer("</td>","\n</td>"));
+//        transformers.add(new ReplaceTransformer("</td>","\n</td>"));
+          transformers.add(new ReplaceTransformer("\\{","\\{"));
+          transformers.add(new ReplaceTransformer("\\}","\\}"));
+//          transformers.add(new ReplaceTransformer("\\[","\\["));
+//          transformers.add(new ReplaceTransformer("\\]","\\]"));
+        transformers.add(new ReplaceTransformer("<br>","\\\\"));
+        transformers.add(new ReplaceTransformer("<table.*?>|</table>","{table}"));
+        transformers.add(new ReplaceTransformer("<tr>|</tr>","{tr}"));
+        transformers.add(new ReplaceTransformer("<td>|</td>","{td}"));
+        transformers.add(new ReplaceTransformer("<th>|</th>","{th}"));
+        transformers.add(new ReplaceTransformer("<ol.*?>|</ol>","{ol}"));
+        transformers.add(new ReplaceTransformer("<ul.*?>|</ul>","{ul}"));
+        transformers.add(new ReplaceTransformer("<li>","{li}"));
+        transformers.add(new ReplaceTransformer("</li>","{li}\n"));
         transformers.add(new ChapterTransformer(category));
-        transformers.add(new TagTransformer("<em>(.*?)</em>",    "''"));
-        transformers.add(new TagTransformer("<strong>(.*?)</strong>",    "'''"));
-        transformers.add(new TagTransformer("(?s)<kbd>(.*?)</kbd>",  "<tt>", "</tt>"));
-        transformers.add(new TagTransformer("<h1>(.*)</h1>",    "== ",      " =="));
-        transformers.add(new TagTransformer("<h2>(.*)</h2>",    "=== ",     " ==="));
-        transformers.add(new TagTransformer("<h3>(accessing the program|sample run|sample screens?|sample reports?)</[h|H]3>","=== ",    " ==="));
-        transformers.add(new TagTransformer("<h3>(.*)</H3>",    "",         ""));
-        transformers.add(new TagTransformer("<h3>(.*)</h3>",    "==== ",        " ===="));
-        transformers.add(new TagTransformer("<h4>(.*)</h4>",    "===== ",   " ====="));
-        transformers.add(new TagTransformer("<h5>(.*)</h5>",    "====== ",  " ======"));
-        transformers.add(new TagTransformer("<h6>(.*)</h6>",    "======= ", " ======="));
+        transformers.add(new TagTransformer("<pre>(.*?)</pre>", true, "{code}","{code}"));
+        transformers.add(new TagTransformer("<center>(.*?)</center>", true, "{center}","{center}"));
+        transformers.add(new TagTransformer("<em>(.*?)</em>",    "*","*"));
+        transformers.add(new TagTransformer("<strong>(.*?)</strong>",    "*","*"));
+        transformers.add(new TagTransformer("(?s)<kbd>(.*?)</kbd>",  "{{", "}}"));
+        transformers.add(new TagTransformer("<h1>(.*)</h1>",    "h1. ",      ""));
+        transformers.add(new TagTransformer("<h2>(.*)</h2>",    "h2. ",     ""));
+        transformers.add(new TagTransformer("<h3>(accessing the program|sample run|sample screens?|sample reports?)</[h|H]3>","h3.",    ""));
+        transformers.add(new TagTransformer("<h3>(.*)</H3>",    "h3. ",         ""));
+        transformers.add(new TagTransformer("<h3>(.*)</h3>",    "h3. ",        ""));
+        transformers.add(new TagTransformer("<h4>(.*)</h4>",    "h4. ",   ""));
+        transformers.add(new TagTransformer("<h5>(.*)</h5>",    "h5. ",  ""));
+        transformers.add(new TagTransformer("<h6>(.*)</h6>",    "h6. ", ""));
         transformers.add(new DeleteTransformer("(?s)<hr.*?>"));
      
     }
@@ -123,7 +138,7 @@
     }
     
     public static String generateFilename(String input) {
-        return input.replaceAll("\\\\|/|:|\\(|\\)","-");
+        return input.replaceAll("\\\\|/|:|\\(|\\)","-").replace("<br>", "");
         
     }
     public String getWikiText() {
--- a/src/org/nwoca/ssdt/tools/html2wiki/ReplaceTransformer.java	Tue Jan 25 17:08:12 2011 -0500
+++ b/src/org/nwoca/ssdt/tools/html2wiki/ReplaceTransformer.java	Tue Jan 25 21:59:31 2011 -0500
@@ -16,11 +16,10 @@
         Matcher matcher = replace.matcher(buffer);
         
         boolean first = true;
-        while (matcher.find(first ? 0 : matcher.end())) {
+        while (matcher.find(first ? 0 : matcher.start() + replacement.length())) {
             buffer.replace(matcher.start(),matcher.end(),replacement);
             first = false; 
-        }
-        
+        }        
     }
     
     public String toString() {
--- a/src/org/nwoca/ssdt/tools/html2wiki/TagTransformer.java	Tue Jan 25 17:08:12 2011 -0500
+++ b/src/org/nwoca/ssdt/tools/html2wiki/TagTransformer.java	Tue Jan 25 21:59:31 2011 -0500
@@ -3,33 +3,41 @@
 import java.util.regex.*;
 
 class TagTransformer implements Transformer {
+
     private Pattern tagPattern;
     private String replacementBegin;
     private String replacementEnd;
-    
+
     public TagTransformer(String regexp, String replacementBegin, String replacementEnd) {
-        tagPattern = Pattern.compile(regexp);
+        this(regexp, false, replacementBegin, replacementEnd);
+    }
+
+    public TagTransformer(String regexp, boolean multiline, String replacementBegin, String replacementEnd) {
+        tagPattern = multiline
+                ? Pattern.compile(regexp, Pattern.MULTILINE + Pattern.DOTALL)
+                : Pattern.compile(regexp);
+
         this.replacementBegin = replacementBegin;
         this.replacementEnd = replacementEnd;
-         
+
     }
+
     public TagTransformer(String regexp, String replacement) {
-        this(regexp,replacement,replacement);
+        this(regexp, replacement, replacement);
     }
-    
+
     public void apply(StringBuffer buffer) {
         Matcher matcher = tagPattern.matcher(buffer);
-        
+
         boolean first = true;
         while (matcher.find(first ? 0 : matcher.start())) {
-            buffer.replace(matcher.start(),matcher.end(),replacementBegin + matcher.group(1) + replacementEnd);
+            buffer.replace(matcher.start(), matcher.end(), replacementBegin + matcher.group(1) + replacementEnd);
             first = false;
         }
-     
-    }
-        
-    public String toString() {
-        return "Replace: " + tagPattern.pattern() + " with " +replacementBegin + "..." + replacementEnd;
+
     }
 
-}
\ No newline at end of file
+    public String toString() {
+        return "Replace: " + tagPattern.pattern() + " with " + replacementBegin + "..." + replacementEnd;
+    }
+}
--- a/test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java	Tue Jan 25 17:08:12 2011 -0500
+++ b/test/org/nwoca/ssdt/tools/html2wiki/Html2WikiTest.java	Tue Jan 25 21:59:31 2011 -0500
@@ -36,29 +36,29 @@
         return suite;
     }
 
-    public void testChapterParsing() throws Exception {
-
-        File f = new File(path, "sysman_handbook.html");
-
-        Html2Wiki converter = new Html2Wiki(FileUtils.readFileToString(f, null));
-
-        Html2Wiki.WikiChapter[] chapters = converter.getWikiChapters();
-
-        assertTrue( chapters.length > 0);
-        for (Html2Wiki.WikiChapter c : chapters) {
-            System.out.println(c);
-        }
-    }
+//    public void testChapterParsing() throws Exception {
+//
+//        File f = new File(path, "sysman_handbook.html");
+//
+//        Html2Wiki converter = new Html2Wiki(FileUtils.readFileToString(f, null));
+//
+//        Html2Wiki.WikiChapter[] chapters = converter.getWikiChapters();
+//
+//        assertTrue( chapters.length > 0);
+//        for (Html2Wiki.WikiChapter c : chapters) {
+//            System.out.println(c);
+//        }
+//    }
 
     /**
      * Test of main method, of class org.nwoca.ssdt.tools.html2wiki.Html2Wiki.
 //     */
-//    public void testMain() throws Exception {
+    public void testMain() throws Exception {
 //        System.out.println("main");
 //
 //        File path = new File(Html2WikiTest.class.getResource("/resources").toURI());
 //        System.out.println(path);
-//        Html2Wiki.main(new String[]{path.toString(), "OECN System Managers Handbook"});
+         Html2Wiki.main( new String[] {path.toString(), "OECN System Managers Handbook"});
 //
-//    }
+    }
 }
--- a/test/resources/sysman_handbook.html	Tue Jan 25 17:08:12 2011 -0500
+++ b/test/resources/sysman_handbook.html	Tue Jan 25 21:59:31 2011 -0500
@@ -1,7 +1,7 @@
 <html>
 <a name="first_page"></a>
 
-<!-- This file created using DECdocument  Version V3.3h on 25-JAN-2011 16:09:07.97 -->
+<!-- This file created using DECdocument  Version V3.3h on 25-JAN-2011 20:18:10.51 -->
 <!-- TAG definitions version: V3.3h -->
 <!-- The SDML doctype is: SOFTWARE.REFERENCE -->
 <!-- The output destination was: HTML -->
@@ -68,7 +68,7 @@
 
 <p>
 <hr size=5>
-<a name="menu_intro"><h1>Chapter 1<br>Introduction</h1></a>
+<a name="menu_intro"><h1>Introduction</h1></a>
 
 <p>
  The OECN Menu processor provides a flexible user menu interface to 
@@ -77,7 +77,7 @@
  for all state software programs. Individual A-sites will be able to add 
  customized menus to the default menu system provided.
 
-<a name="menu_features_head"><h1>1.1 Features</h1></a>
+<a name="menu_features_head"><h1>Features</h1></a>
 
 <p>
     The Menu processor provides the following features:
@@ -118,7 +118,7 @@
 
 <p>
 <hr size=5>
-<a name="menu_theory"><h1>Chapter 2<br>Theory</h1></a>
+<a name="menu_theory"><h1>Theory</h1></a>
 
 <p>
  The basic theory behind the Menu processor is fairly simple. The menu 
@@ -126,14 +126,14 @@
  flexible enough to allow creation of menus containing any combination 
  of DCL commands, programs and information.
 
-<a name="menu_terms_head"><h1>2.1 Definition of Terms</h1></a>
+<a name="menu_terms_head"><h1>Definition of Terms</h1></a>
 
 <p>
  First, it will be helpful to define some terms that will be used 
  throughout the rest of this document. <p>
 
 <table border=3>
-  <caption><a name="menu_terms_tab"><strong>Table 2-1 Menu System Terms</strong></a></caption>
+  <caption><a name="menu_terms_tab"><strong> Menu System Terms</strong></a></caption>
   <tr>
     <th align=center>Term </th>
     <th align=center>Meaning </th>
@@ -222,14 +222,14 @@
   </tr>
 </table>
 
-<a name="menu_files_theory"><h1>2.2 How Menu Files Create a Menu System</h1></a>
+<a name="menu_files_theory"><h1>How Menu Files Create a Menu System</h1></a>
 
 <p>
 <a href="oecn10_sysman_handbook_full.html#menu_system_fig">Figure 2-1</a> displays a graphical representation of a possible menu 
 system.
 <a name="menu_system_fig"></a>
 <p>
-<strong>Figure 2-1 Conceptual View of a Menu system</strong>
+<strong>Conceptual View of a Menu system</strong>
 <hr>
 
 <p>
@@ -291,7 +291,7 @@
 for VAX/VMS System Manager manual for more information about security 
 and the OSA utility.
 
-<a name="menu_specs_head"><h1>2.3 Menu Specifications</h1></a>
+<a name="menu_specs_head"><h1>Menu Specifications</h1></a>
 
 <p>
  Throughout this document there are references to <strong>menu 
@@ -383,7 +383,7 @@
   </tr>
 </table>
 
-<a name="alias_file_head"><h1>2.4 The Alias File</h1></a>
+<a name="alias_file_head"><h1>The Alias File</h1></a>
 
 <p>
  Each menu system may have exactly one <strong>alias file</strong>. An 
@@ -402,7 +402,7 @@
 The alias file is built automatically by the MENUUTL program. See 
 <a href="oecn10_sysman_handbook_full.html#build_alias_head">Section 5.2.1, Building the Alias File</a> for more information about creating the alias file.
 
-<a name="option_exec_sect"><h1>2.5 Option execution</h1></a>
+<a name="option_exec_sect"><h1>Option execution</h1></a>
 
 <p>
 By default, the menu processor does <em>not</em> spawn subprocesses to 
@@ -413,7 +413,7 @@
 optimal response time for smaller VAX processors, particularly machines 
 with small memory configurations.
 
-<a name="heading_2.5.1"><h2>2.5.1 Spawning Options</h2></a>
+<a name="heading_2.5.1"><h2>Spawning Options</h2></a>
 
 <p>
 Another mode that may be chosen by the system manager is "spawn and 
@@ -467,7 +467,7 @@
 SSDT that need the "DP" item type was the DETPRT option of the LOCAL 
 menu. All other SSDT menu items may be executed in a subprocess.
 
-<a name="heading_2.5.2"><h2>2.5.2 Selecting Execution Mode</h2></a>
+<a name="heading_2.5.2"><h2>Selecting Execution Mode</h2></a>
 
 <p>
 To select either "terminate and execute" or "spawn and execute" mode, 
@@ -490,7 +490,7 @@
 This logical also can be defined at the group or process level. If the 
 logical is not defined, the default is "TERMINATE".
 
-<a name="timeout_head"><h1>2.6 Inactivity Timeout</h1></a>
+<a name="timeout_head"><h1>Inactivity Timeout</h1></a>
 
 <p>
 The menu processor has an optional feature that will cause it to 
@@ -533,7 +533,7 @@
 
 <p>
 <hr size=5>
-<a name="menu_implentation_chap"><h1>Chapter 3<br>Implementation</h1></a>
+<a name="menu_implentation_chap"><h1>Implementation</h1></a>
 
 <p>
  Several steps are required in order to implement the Menu Processor on 
@@ -551,7 +551,7 @@
   shared image.
 </ol>
 
-<a name="installation_head"><h1>3.1 Installation</h1></a>
+<a name="installation_head"><h1>Installation</h1></a>
 
 <p>
  The Menu Processor uses files from the OECN, MENU and HELP packages. 
@@ -559,14 +559,14 @@
  information about OECN_INSTALL see OECN_INSTALL.DOC in the VAX manager 
  documentation directory.
 
-<a name="logicals_head"><h1>3.2 Establish OECN Logicals</h1></a>
+<a name="logicals_head"><h1>Establish OECN Logicals</h1></a>
 
 <p>
  Several logicals are used by the Menu Processor to locate the menu 
  files and VMS Help libraries. <p>
 
 <table border=3>
-  <caption><a name="logicals_tab"><strong>Table 3-1 Menu Logicals</strong></a></caption>
+  <caption><a name="logicals_tab"><strong> Menu Logicals</strong></a></caption>
   <tr>
     <th align=center>Logical </th>
     <th align=center>Purpose </th>
@@ -670,7 +670,7 @@
  system, group or process level. For example, the OECN$MENU logical may 
  be defined for each user to provide a different default menu.
 
-<a name="behavior_logical"><h2>3.2.1 Specifying options with OECN$MENU_BEHAVIOR logical</h2></a>
+<a name="behavior_logical"><h2>Specifying options with OECN$MENU_BEHAVIOR logical</h2></a>
 
 <p>
  This section describes the commands that may be placed in the 
@@ -694,7 +694,7 @@
  <p>
 
 <table border=3>
-  <caption><a name="Table_3-2"><strong>Table 3-2 Behavior Options</strong></a></caption>
+  <caption><a name="Table_3-2"><strong> Behavior Options</strong></a></caption>
   <tr>
     <th align=center>Command </th>
     <th align=center>Description </th>
@@ -749,7 +749,7 @@
 </pre>
 </table>
 
-<a name="move_files_head"><h1>3.3 Move Files to Appropriate Directories</h1></a>
+<a name="move_files_head"><h1>Move Files to Appropriate Directories</h1></a>
 
 <p>
  Move the menu files (OECN$ROOT:[MENU.DIST]*.DAT) to the directory 
@@ -774,7 +774,7 @@
 <p>
  The users must have execute access to these files.
 
-<a name="add_symbol_head"><h1>3.4 Add Global Symbol</h1></a>
+<a name="add_symbol_head"><h1>Add Global Symbol</h1></a>
 
 <p>
  Add the following symbol to either your SYLOGIN.COM or each user's 
@@ -796,7 +796,7 @@
  easier for your users to invoke a menu. These symbols will be discussed 
  in the <a href="oecn10_sysman_handbook_full.html#invoking_chap">Chapter 4, Invoking the Menu Processor</a>. The OECN_MENU symbol is the only required symbol.
 
-<a name="install_head"><h1>3.5 Install the Menu Processor</h1></a>
+<a name="install_head"><h1>Install the Menu Processor</h1></a>
 
 <p>
  Although it is not necessary for proper execution of the Menu 
@@ -826,7 +826,7 @@
 
 <p>
 <hr size=5>
-<a name="invoking_chap"><h1>Chapter 4<br>Invoking the Menu Processor</h1></a>
+<a name="invoking_chap"><h1>Invoking the Menu Processor</h1></a>
 
 <p>
  The Menu Processor must be invoked via a command procedure that is 
@@ -904,7 +904,7 @@
  login procedure or from inside another procedure. No restrictions are 
  placed on the method of invoking the Menu Processor.
 
-<a name="invoke_example_head"><h1>4.1 Examples</h1></a>
+<a name="invoke_example_head"><h1>Examples</h1></a>
 
 <p>
  For most users the following symbol definition is sufficient:
@@ -965,7 +965,7 @@
 
 <p>
 <hr size=5>
-<a name="modifying_menus_chap"><h1>Chapter 5<br>Modifying and Creating Menu Systems</h1></a>
+<a name="modifying_menus_chap"><h1>Modifying and Creating Menu Systems</h1></a>
 
 <p>
  The MENUEDT program is a fully functional maintenance program for 
@@ -974,7 +974,7 @@
  such as building the alias file and reporting functions. <p>
 
 <table border=3>
-  <caption><a name="menu_type_tab"><strong>Table 5-1 Menu Record Types</strong></a></caption>
+  <caption><a name="menu_type_tab"><strong> Menu Record Types</strong></a></caption>
   <tr>
     <th align=center>Record Type </th>
     <th align=center>Function </th>
@@ -1020,7 +1020,7 @@
  menus that you modify or create should be tested thoroughly before 
  being made available to your users.
 
-<a name="using_edt_head"><h1>5.1 Using MENUEDT</h1></a>
+<a name="using_edt_head"><h1>Using MENUEDT</h1></a>
 
 <p>
  When you first run the MENUEDT program it will prompt you for the name 
@@ -1028,7 +1028,7 @@
  created. <p>
 
 <table border=3>
-  <caption><a name="edt_options_tab"><strong>Table 5-2 MENUEDT Main Menu Options</strong></a></caption>
+  <caption><a name="edt_options_tab"><strong> MENUEDT Main Menu Options</strong></a></caption>
   <tr>
     <th align=center>Option </th>
     <th align=center>Function </th>
@@ -1109,14 +1109,14 @@
   </tr>
 </table>
 
-<a name="menu_type_head"><h2>5.1.1 Menu File Record Types</h2></a>
+<a name="menu_type_head"><h2>Menu File Record Types</h2></a>
 
 <p>
  This section and the following sections show sample screens that are 
  used by MENUEDT to modify the various record types. After each screen 
  is a detailed explanation of each field and its purpose.
 
-<a name="file_header_head"><h2>5.1.2 File Header Record</h2></a>
+<a name="file_header_head"><h2>File Header Record</h2></a>
 
 <p>
  The first record in each menu file must be a File Header record and 
@@ -1141,7 +1141,7 @@
 <p>
 
 <table border=3>
-  <caption><a name="file_header_fld_tab"><strong>Table 5-3 File Header Record Fields</strong></a></caption>
+  <caption><a name="file_header_fld_tab"><strong> File Header Record Fields</strong></a></caption>
   <tr>
     <th align=center>Field </th>
     <th align=center>Description </th>
@@ -1177,7 +1177,7 @@
   </tr>
 </table>
 
-<a name="menu_header_head"><h2>5.1.3 Menu Header Record</h2></a>
+<a name="menu_header_head"><h2>Menu Header Record</h2></a>
 
 <p>
  The Menu Header record contains information about each menu in the 
@@ -1207,7 +1207,7 @@
 <p>
 
 <table border=3>
-  <caption><a name="menu_header_fld_tab"><strong>Table 5-4 Menu Header Fields</strong></a></caption>
+  <caption><a name="menu_header_fld_tab"><strong> Menu Header Fields</strong></a></caption>
   <tr>
     <th align=center>field </th>
     <th align=center>Description </th>
@@ -1296,7 +1296,7 @@
   </tr>
 </table>
 
-<a name="menu_item_head"><h2>5.1.4 Menu Item Record</h2></a>
+<a name="menu_item_head"><h2>Menu Item Record</h2></a>
 
 <p>
  One menu item record must be specified for each desired item on a menu. 
@@ -1312,7 +1312,7 @@
  <p>
 
 <table border=3>
-  <caption><a name="item_types_tab"><strong>Table 5-5 Menu Item Types</strong></a></caption>
+  <caption><a name="item_types_tab"><strong> Menu Item Types</strong></a></caption>
   <tr>
     <th align=center>Item Type </th>
     <th align=center>Interpretation of Action Field </th>
@@ -1383,7 +1383,7 @@
 <p>
 
 <table border=3>
-  <caption><a name="menu_item_tab"><strong>Table 5-6 Menu Item Fields</strong></a></caption>
+  <caption><a name="menu_item_tab"><strong> Menu Item Fields</strong></a></caption>
   <tr>
     <th align=center>Field </th>
     <th align=center>Description </th>
@@ -1503,7 +1503,7 @@
 <br>
 <hr>
 
-<a name="action_values_head"><h3>5.1.4.1 Values for Action Field</h3></a>
+<a name="action_values_head"><h3>Values for Action Field</h3></a>
 
 <p>
  Much of the Menu Processor's flexibility is provided by the values that 
@@ -1633,7 +1633,7 @@
  Description field is simply displayed on the menu without a label or an 
  option number.
 
-<a name="secur_id_screen_head"><h2>5.1.5 Menu Security Screen</h2></a>
+<a name="secur_id_screen_head"><h2>Menu Security Screen</h2></a>
 
 <p>
  The <strong>Modify Security Identifier</strong> screen allows you to 
@@ -1710,7 +1710,7 @@
  Up to 16 identifier positions have been reserved for use at the A-site 
  level. See OECN_IDS.LIB in OECN$LIB: for instructions.
 
-<a name="security_ids"><h3>5.1.5.1 Security Identifiers</h3></a>
+<a name="security_ids"><h3>Security Identifiers</h3></a>
 
 <p>
  The security identifiers that appear on the Security Identifier screen 
@@ -1724,7 +1724,7 @@
  level access to the highest. <p>
 
 <table border=3>
-  <caption><a name="security_level_tbl"><strong>Table 5-7 Security Access Levels</strong></a></caption>
+  <caption><a name="security_level_tbl"><strong> Security Access Levels</strong></a></caption>
   <tr>
     <th align=center>Access Level </th>
     <th align=center>Suffix </th>
@@ -1792,7 +1792,7 @@
 A-site specific identifiers. That is, there will also be OECN_USER1_RO 
 and OECN_USER1_GM identifiers available for use at the A-site level.
 
-<a name="menuutl_head"><h1>5.2 Using MENUUTL</h1></a>
+<a name="menuutl_head"><h1>Using MENUUTL</h1></a>
 
 <p>
  The MENUUTL program provides some necessary functions for building, 
@@ -1805,7 +1805,7 @@
   <li>Hierarchical Menu Listing
 </ol>
 
-<a name="build_alias_head"><h2>5.2.1 Building the Alias File</h2></a>
+<a name="build_alias_head"><h2>Building the Alias File</h2></a>
 
 <p>
  The first and the most important option of MENUUTL is the alias file 
@@ -1916,7 +1916,7 @@
 </table>
 </center>
 
-<a name="simulate_list_head"><h2>5.2.2 Simulated Menu Listing</h2></a>
+<a name="simulate_list_head"><h2>Simulated Menu Listing</h2></a>
 
 <p>
  This option will read through the specified menu file and create a 
@@ -1925,14 +1925,14 @@
  only report on one menu file at a time and will be sorted in 
  alphabetical order by menu name.
 
-<a name="detailed_list_head"><h2>5.2.3 Detailed Menu Listing</h2></a>
+<a name="detailed_list_head"><h2>Detailed Menu Listing</h2></a>
 
 <p>
  The detailed menu report lists all available information about the 
  specified menu file. This report is particularly useful for double 
  checking the action fields and security.
 
-<a name="hier_list_head"><h2>5.2.4 Hierarchical Listing</h2></a>
+<a name="hier_list_head"><h2>Hierarchical Listing</h2></a>
 
 <p>
  This report will display the structure of the menu system. The menus 
@@ -1941,7 +1941,7 @@
  to start. You need not necessarily start at the top of the entire menu 
  system.
 
-<a name="osa_head"><h1>5.3 OSA</h1></a>
+<a name="osa_head"><h1>OSA</h1></a>
 
 <p>
 The OSA, OECN Security Authorization, Utility may be used in 
@@ -1953,7 +1953,7 @@
 
 <p>
 <hr size=5>
-<a name="custom_chap"><h1>Chapter 6<br>Customizing Menus from the Distribution</h1></a>
+<a name="custom_chap"><h1>Customizing Menus from the Distribution</h1></a>
 
 <p>
  This chapter describes the recommended procedure for customizing the 
@@ -1991,7 +1991,7 @@
 </table>
 </center>
 
-<a name="local_head"><h1>6.1 Modifying a Local Menu File</h1></a>
+<a name="local_head"><h1>Modifying a Local Menu File</h1></a>
 
 <p>
     Following is the recommend procedure for modifying one or more menu 
@@ -2004,7 +2004,7 @@
   <li>Redefine OECN$MENU$FILES permanently
 </ol>
 
-<a name="redefine_logical_head"><h2>6.1.1 Redefine the OECN$MENU$FILES logical</h2></a>
+<a name="redefine_logical_head"><h2>Redefine the OECN$MENU$FILES logical</h2></a>
 
 <p>
  The first step is to redefine OECN$MENU$FILES as a search list. For 
@@ -2041,7 +2041,7 @@
 </table>
 </center>
 
-<a name="heading_6.1.2"><h2>6.1.2 Modify the Menu Files</h2></a>
+<a name="heading_6.1.2"><h2>Modify the Menu Files</h2></a>
 
 <p>
  Copy the *_LCL.DAT menu files that you want to modify from the 
@@ -2055,7 +2055,7 @@
  you're creating new menus, be sure that the users have read access to 
  the new files.
 
-<a name="heading_6.1.3"><h2>6.1.3 Build a New Alias File</h2></a>
+<a name="heading_6.1.3"><h2>Build a New Alias File</h2></a>
 
 <p>
  After all desired changes have been made, use MENUUTL to rebuild the 
@@ -2067,7 +2067,7 @@
  You may build the alias file manually by running MENUUTL, or you may 
  use the BUILD_ALIAS.COM procedure in the OECN$ directory.
 
-<a name="heading_6.1.4"><h2>6.1.4 Redefine OECN$MENU$FILES Permanently</h2></a>
+<a name="heading_6.1.4"><h2>Redefine OECN$MENU$FILES Permanently</h2></a>
 
 <p>
  If you have not already done so, define the logical OECN$MENU$FILES to 
@@ -2076,7 +2076,7 @@
 <p>
  At this point your users should have access to the customized menus.
 
-<a name="heading_6.2"><h1>6.2 After a Distribution</h1></a>
+<a name="heading_6.2"><h1>After a Distribution</h1></a>
 
 <p>
  If you modify the local menu files in this way, your changes will not 
@@ -2115,7 +2115,7 @@
 files. See the comments in BUILD_ALIAS.COM for more information about 
 using this procedure.
 
-<a name="intercept_head"><h1>6.3 Intercepting Menu Actions</h1></a>
+<a name="intercept_head"><h1>Intercepting Menu Actions</h1></a>
 
 <p>
  Sometimes it is desirable, or necessary, to redefine the action 
@@ -2244,9 +2244,9 @@
 
 <p>
 <hr size=5>
-<a name="batch_mail_chap"><h1>Chapter 7<br>Batch Mail Message System Manager  Guide</h1></a>
-
-<a name="heading_7.1"><h1>7.1 Overview</h1></a>
+<a name="batch_mail_chap"><h1>Batch Mail Message System Manager  Guide</h1></a>
+
+<a name="heading_7.1"><h1>Overview</h1></a>
 
 <p>
 The command procedure BATCH_MAIL_MESSAGE.COM can be used to send a VMS 
@@ -2254,7 +2254,7 @@
 audiences where the user does not wish to tie up their terminal for an 
 extended period of time.
 
-<a name="heading_7.2"><h1>7.2 Sending a Mail Message via Batch</h1></a>
+<a name="heading_7.2"><h1>Sending a Mail Message via Batch</h1></a>
 
 <p>
 To use the command procedure for generic mail messages:
@@ -2291,9 +2291,9 @@
 <p>
 
 <hr size=5>
-<a name="oecn_view_chap"><h1>Chapter 8<br>OECN VIEW Utility</h1></a>
-
-<a name="heading_8.1"><h1>8.1 Overview</h1></a>
+<a name="oecn_view_chap"><h1>OECN VIEW Utility</h1></a>
+
+<a name="heading_8.1"><h1>Overview</h1></a>
 
 <p>
 The OECN_VIEW utility allows users to view text files on the screen. It 
@@ -2320,7 +2320,7 @@
 <p>
 Examples of the logicals are given below:
 
-<a name="heading_8.2"><h1>8.2 OECN_VIEW.COM</h1></a>
+<a name="heading_8.2"><h1>OECN_VIEW.COM</h1></a>
 
 <p>
 The OECN_VIEW.COM command procedure is found in OECN$. It is used to 
@@ -2362,7 +2362,7 @@
 </pre>
 </table>
 
-<a name="heading_8.2.1"><h2>8.2.1 Customizing OECN VIEW</h2></a>
+<a name="heading_8.2.1"><h2>Customizing OECN VIEW</h2></a>
 
 <p>
 The following sample command file shows how to customize the 
@@ -2405,7 +2405,7 @@
 </pre>
 </table>
 
-<a name="heading_8.2.2"><h2>8.2.2 Creating a DCL Command</h2></a>
+<a name="heading_8.2.2"><h2>Creating a DCL Command</h2></a>
 
 <p>
 The VIEW utility works automatically from the MENU. However, you could 
@@ -2429,7 +2429,7 @@
 <p>
 Then use the LOOK command from the $ prompt.
 
-<a name="heading_8.2.3"><h2>8.2.3 OECN_EDIT</h2></a>
+<a name="heading_8.2.3"><h2>OECN_EDIT</h2></a>
 
 <p>
 The OECN_VIEW utility uses a special editor called OECN_EDIT. Its 
@@ -2439,9 +2439,9 @@
 <p>
 
 <hr size=5>
-<a name="oecn_edit_chap"><h1>Chapter 9<br>OECN EDIT Utility</h1></a>
-
-<a name="heading_9.1"><h1>9.1 Overview</h1></a>
+<a name="oecn_edit_chap"><h1>OECN EDIT Utility</h1></a>
+
+<a name="heading_9.1"><h1>Overview</h1></a>
 
 <p>
 OECN_EDIT is a foreign command replacement for the EDIT/TPU DCL 
@@ -2456,7 +2456,7 @@
 VFC files to be viewed correctly. However, it may also be used with any 
 TPU section file as an editor.
 
-<a name="heading_9.2"><h1>9.2 Using OECN_EDIT</h1></a>
+<a name="heading_9.2"><h1>Using OECN_EDIT</h1></a>
 
 <p>
 In order to use OECN_EDIT as your interface to TPU, define the 
@@ -2484,9 +2484,9 @@
 <p>
 
 <hr size=5>
-<a name="oecn_keymap_chap"><h1>Chapter 10<br>OECN KEYMAP Utility</h1></a>
-
-<a name="heading_10.1"><h1>10.1 Overview</h1></a>
+<a name="oecn_keymap_chap"><h1>OECN KEYMAP Utility</h1></a>
+
+<a name="heading_10.1"><h1>Overview</h1></a>
 
 <p>
 The OECN_KEYMAP utility allows users to select a terminal emulator, 
@@ -2499,7 +2499,7 @@
 to any PC key you wish in the emulator and then relabel F11 on the 
 screen to match the PC keyboard.
 
-<a name="heading_10.2"><h1>10.2 Using KEYMAP</h1></a>
+<a name="heading_10.2"><h1>Using KEYMAP</h1></a>
 
 <p>
 Upon selecting the KEYMAP option from the OECN menu the user is given a 
@@ -2551,9 +2551,9 @@
 <p>
 
 <hr size=5>
-<a name="oecn_setupenv_chap"><h1>Chapter 11<br>OECN SETUPENV Utility</h1></a>
-
-<a name="heading_11.1"><h1>11.1 Overview</h1></a>
+<a name="oecn_setupenv_chap"><h1>OECN SETUPENV Utility</h1></a>
+
+<a name="heading_11.1"><h1>Overview</h1></a>
 
 <p>
 SETUPENV is a general purpose utility for establishing or switching to 
@@ -2589,7 +2589,7 @@
   by DA Sites, including group tables and shared logical tables.
 </ol>
 
-<a name="heading_11.2"><h1>11.2 Getting Started</h1></a>
+<a name="heading_11.2"><h1>Getting Started</h1></a>
 
 <p>
 The SETUPENV utility is very flexible allowing the capability to deal 
@@ -2606,7 +2606,7 @@
 Starting small will give the opportunity to experiment with the utility 
 to see how, or if, it can fit into your environment.
 
-<a name="heading_11.2.1"><h2>11.2.1 Entity Types</h2></a>
+<a name="heading_11.2.1"><h2>Entity Types</h2></a>
 
 <p>
 SETUPENV manages a user's context by assuming that any given process 
@@ -2639,7 +2639,7 @@
 attribute for more information.
 <p>
 
-<a name="heading_11.2.2"><h2>11.2.2 DCL Command Syntax</h2></a>
+<a name="heading_11.2.2"><h2>DCL Command Syntax</h2></a>
 <br>
 
 <p>
@@ -2853,7 +2853,7 @@
 Likewise, when /EMIS is specified, EMIS_SELECT_EPILOGUE and 
 EMIS_SWITCH_FY will be invoked after successfully selecting a database.
 
-<a name="heading_11.3"><h1>11.3 Logicals Created By SETUPENV</h1></a>
+<a name="heading_11.3"><h1>Logicals Created By SETUPENV</h1></a>
 
 <p>
 After successfully selecting an entry, SETUPENV establishes a series of 
@@ -2933,7 +2933,7 @@
 Any of the logicals that do not apply to an entry will not be defined 
 (e.g. for a parent entry, the siblings logical will not be defined).
 
-<a name="heading_11.4"><h1>11.4 OECN$SETUP.INI</h1></a>
+<a name="heading_11.4"><h1>OECN$SETUP.INI</h1></a>
 
 <p>
 The OECN$SETUP initialization file defines the environment for various 
@@ -3121,7 +3121,7 @@
 </center>
 </ul>
 
-<a name="heading_11.4.1"><h2>11.4.1 Special "Reset" Entries</h2></a>
+<a name="heading_11.4.1"><h2>Special "Reset" Entries</h2></a>
 
 <p>
 Prior to setting any given entry, SETUPENV will attempt to process 
@@ -3171,7 +3171,7 @@
 general, you should explicitly deassign any logicals in the reset 
 section that are defined in any entry of the same type.
 
-<a name="heading_11.4.2"><h2>11.4.2 Sample OECN$SETUP File</h2></a>
+<a name="heading_11.4.2"><h2>Sample OECN$SETUP File</h2></a>
 
 <p>
 Below is a very simple OECN$SETUP.INI file which defines entries for 
@@ -3229,7 +3229,7 @@
 The special $RESET_DISTRICT section is provided to ensure that the 
 district logical get reset appropriately prior to setting an entry.
 
-<a name="heading_11.4.3"><h2>11.4.3 Special "APPLICATION" Entries</h2></a>
+<a name="heading_11.4.3"><h2>Special "APPLICATION" Entries</h2></a>
 
 <p>
 If an entry is defined with one or more APPLICATION attributes, then 
@@ -3287,7 +3287,7 @@
 Logicals defined in this manner may need to be included in the 
 appropriate "$RESET_type" section to ensure they are reset.
 
-<a name="heading_11.4.4"><h2>11.4.4 Special "INCLUDE" Section</h2></a>
+<a name="heading_11.4.4"><h2>Special "INCLUDE" Section</h2></a>
 
 <p>
 A special section may be specified in any INI file called $INCLUDE. 
@@ -3351,14 +3351,14 @@
 immediately after). In general, you should not depend on files being 
 processed in any particular order.
 
-<a name="heading_11.4.5"><h2>11.4.5 Limits</h2></a>
+<a name="heading_11.4.5"><h2>Limits</h2></a>
 
 <p>
 Certain limits which apply to the OECN$SETUP.INI file are shown in the 
 table below. Limits are 'per entry' unless otherwise noted. <p>
 
 <table border=3>
-  <caption><a name="Table_11-1"><strong>Table 11-1 wide</strong></a></caption>
+  <caption><a name="Table_11-1"><strong> wide</strong></a></caption>
   <tr>
     <th align=center>Attribute </th>
     <th align=center>Maximum Length </th>
@@ -3577,7 +3577,7 @@
 </table>
 </center>
 
-<a name="heading_11.5"><h1>11.5 EMIS_SELECT Compatibility</h1></a>
+<a name="heading_11.5"><h1>EMIS_SELECT Compatibility</h1></a>
 
 <p>
 The /EMIS qualifier provides functional compatibility with the 
@@ -3657,7 +3657,7 @@
 </table>
 </center>
 
-<a name="heading_11.5.1"><h2>11.5.1 Converting OECN$EMIS_DBS to OECN$SETUP</h2></a>
+<a name="heading_11.5.1"><h2>Converting OECN$EMIS_DBS to OECN$SETUP</h2></a>
 
 <p>
 It is possible to completely convert from using the OECN$EMIS_DBS file 
@@ -3696,7 +3696,7 @@
 </table>
 </center>
 
-<a name="heading_11.6"><h1>11.6 NOACSC Compatiblity</h1></a>
+<a name="heading_11.6"><h1>NOACSC Compatiblity</h1></a>
 
 <p>
 SETUPENV is similar to the USE, BUNNY, and FROG utilities provided by 
@@ -3731,7 +3731,7 @@
 This should allow SETUPENV to be used without modifying any existing 
 command procedures.
 
-<a name="heading_11.6.1"><h2>11.6.1 USE Compatibliity</h2></a>
+<a name="heading_11.6.1"><h2>USE Compatibliity</h2></a>
 
 <p>
 If /USE is specified as the first qualifier to SETUPENV, then the 
@@ -3813,7 +3813,7 @@
 
 </ul>
 
-<a name="heading_11.6.2"><h2>11.6.2 BUNNY Compatibility</h2></a>
+<a name="heading_11.6.2"><h2>BUNNY Compatibility</h2></a>
 
 <p>
 If /BUNNY is specified as the first qualifier to SETUPENV, then the 
@@ -3926,7 +3926,7 @@
   ARCHIVE attribute for the selected entry.
 </ul>
 
-<a name="heading_11.6.3"><h2>11.6.3 FROG Compatibility</h2></a>
+<a name="heading_11.6.3"><h2>FROG Compatibility</h2></a>
 
 <p>
 If /FROG is specified as the first qualifier to SETUPENV, then the 
@@ -4028,11 +4028,11 @@
 
 <p>
 
-<a name="heading_11.7"><h1>11.7 OECN$SETUPENV API</h1></a>
+<a name="heading_11.7"><h1>OECN$SETUPENV API</h1></a>
 SETUPENV provides a callable API which can be used by programs to 
 select entries. The API parallels the qualifier functions and syntax.
 
-<a name="heading_11.7.1"><h2>11.7.1 Working Storage Field(s)</h2></a>
+<a name="heading_11.7.1"><h2>Working Storage Field(s)</h2></a>
 
 <p>
 <center>
@@ -4100,7 +4100,7 @@
 
 <p>
 
-<a name="heading_11.7.2"><h2>11.7.2 COBOL Call Arguments</h2></a>
+<a name="heading_11.7.2"><h2>COBOL Call Arguments</h2></a>
 
 <table border=0>
   <tr>
@@ -4141,7 +4141,7 @@
 </table>
 </center>
 
-<a name="heading_11.7.3"><h2>11.7.3 Argument Descriptions:</h2></a>
+<a name="heading_11.7.3"><h2>Argument Descriptions:</h2></a>
 
 <blockquote>
 <strong>WS-FUNCTION (read)</strong>
@@ -4267,7 +4267,7 @@
   </blockquote>
 </blockquote>
 
-<a name="heading_11.7.4"><h2>11.7.4 Return Status</h2></a>
+<a name="heading_11.7.4"><h2>Return Status</h2></a>
 
 <p>
 OECN$SETUP returns one of the following conditions:
@@ -4320,7 +4320,7 @@
   </tr>
 </table>
 
-<a name="heading_11.7.5"><h2>11.7.5 Description</h2></a>
+<a name="heading_11.7.5"><h2>Description</h2></a>
 
 <p>
 The OECN$SETUPENV routine does basically everything that the SETUPENV 
@@ -4344,9 +4344,9 @@
 <p>
 
 <hr size=5>
-<a name="sysman_ump_chap"><h1>Chapter 12<br>Installing and Using UMP - User Mail Profile  System</h1></a>
-
-<a name="heading_12.1"><h1>12.1 Overview</h1></a>
+<a name="sysman_ump_chap"><h1>Installing and Using UMP - User Mail Profile  System</h1></a>
+
+<a name="heading_12.1"><h1>Overview</h1></a>
 
 <p>
    The UMP package provides a means for DA-sites to maintain user e-mail 
@@ -4356,7 +4356,7 @@
    which permits an easy way to lookup an e-mail address for any user on 
    the OECN network.
 
-<a name="heading_12.1.1"><h2>12.1.1 Feature List</h2></a>
+<a name="heading_12.1.1"><h2>Feature List</h2></a>
 
 <p>
 UMP provides the following features:
@@ -4392,7 +4392,7 @@
   if they wish to update their user mail profile during login.
 </ul>
 
-<a name="heading_12.1.2"><h2>12.1.2 Web Attachments for OECN state-wide mail</h2></a>
+<a name="heading_12.1.2"><h2>Web Attachments for OECN state-wide mail</h2></a>
 
 <p>
 A special feature of the OECN state-wide lists is the ability to 
@@ -4426,7 +4426,7 @@
  encouraged not to switch existing users to web attachments without 
  training or notification.
 
-<a name="heading_12.1.2.1"><h3>12.1.2.1 Enabling Web Attachments</h3></a>
+<a name="heading_12.1.2.1"><h3>Enabling Web Attachments</h3></a>
 
 <p>
 Web attachments are only enabled for each DA Site upon request. If you 
@@ -4446,7 +4446,7 @@
  yourself. Only the OECN listmaster can make the change that affects the 
  OECN mail server.
 
-<a name="heading_12.1.3"><h2>12.1.3 Files</h2></a>
+<a name="heading_12.1.3"><h2>Files</h2></a>
 
 <p>
 The following sections describe the files used and produced by the UMP 
@@ -4583,7 +4583,7 @@
   </tr>
 </table>
 
-<a name="heading_12.2"><h1>12.2 UMP Menu and Profile Screen</h1></a>
+<a name="heading_12.2"><h1>UMP Menu and Profile Screen</h1></a>
 
 <p>
 The program may be executed by typing:
@@ -4806,7 +4806,7 @@
 </pre>
 </table>
 
-<a name="heading_12.3"><h1>12.3 Startup Procedure</h1></a>
+<a name="heading_12.3"><h1>Startup Procedure</h1></a>
 
 <p>
   Follow the steps below to install UMP on your system:
@@ -4831,7 +4831,7 @@
 
 <p>
 
-<a name="heading_12.4"><h1>12.4 Loading Initial Data</h1></a>
+<a name="heading_12.4"><h1>Loading Initial Data</h1></a>
  Load existing distribution lists. If using NM style distribution lists, 
  then use:
 <br>
@@ -4861,7 +4861,7 @@
  essentially "merges" the NM and PMDF lists. This might be useful if you 
  are uncertain which of your lists is more correct.
 
-<a name="heading_12.5"><h1>12.5 Importing Other Lists</h1></a>
+<a name="heading_12.5"><h1>Importing Other Lists</h1></a>
 
 <p>
  The IMPORT_NM_LISTS.COM and IMPORT_PMDF_LISTS.COM only import the 
@@ -4898,13 +4898,13 @@
  using UMPIMPORT.EXE.
 <p>
 
-<a name="heading_12.6"><h1>12.6 INI File Commands</h1></a>
+<a name="heading_12.6"><h1>INI File Commands</h1></a>
 The following INI commands are used in either the OECN$UMP_LOCAL.INI or 
 the OECN$UMP_STANDARD.INI files. The following is a summary of these 
 commands. See either of these files for more examples of their use. <p>
 
 <table border=3>
-  <caption><a name="Table_12-1"><strong>Table 12-1 Table of INI File Commands</strong></a></caption>
+  <caption><a name="Table_12-1"><strong> Table of INI File Commands</strong></a></caption>
   <tr>
     <th align=center>&nbsp;</th>
     <th align=center>Command </th>
@@ -5390,7 +5390,7 @@
 <hr>
 <p>
 
-<a name="heading_12.7"><h1>12.7 Export NM and PMDF Style Lists</h1></a>
+<a name="heading_12.7"><h1>Export NM and PMDF Style Lists</h1></a>
  A procedure called OECN$:EXPORT_LISTS.COM to is used to create the NM 
  and PMDF style distribution lists and associated aliases. It is 
  recommended that each DAS write a custom DCL procedure which invokes 
@@ -5510,7 +5510,7 @@
   databases into PMDF_TABLE:.
 </ul>
 
-<a name="heading_12.7.1"><h2>12.7.1 Centralized Naming</h2></a>
+<a name="heading_12.7.1"><h2>Centralized Naming</h2></a>
 
 <p>
  This section describes several ways in which UMP can be used to provide 
@@ -5520,7 +5520,7 @@
  you are already familar with the basic concepts of centralized naming 
  in PMDF.
 
-<a name="heading_12.7.1.1"><h3>12.7.1.1 Remote Mail Boxes</h3></a>
+<a name="heading_12.7.1.1"><h3>Remote Mail Boxes</h3></a>
 
 <p>
  UMP can provide centralized naming for users who have "remote" 
@@ -5590,7 +5590,7 @@
  the username or alias on the UMP profile (not the username in the 
  mailbox field).
 
-<a name="heading_12.7.1.2"><h3>12.7.1.2 User Aliases</h3></a>
+<a name="heading_12.7.1.2"><h3>User Aliases</h3></a>
 
 <p>
  UMP provides the ability to create a user-specific alias independent of 
@@ -5635,7 +5635,7 @@
  are disabled by default. The DAS must take explicit action (see below) 
  to implement this feature.
 
-<a name="heading_12.7.1.2.1"><h4>12.7.1.2.1 Implementing User Aliases</h4></a>
+<a name="heading_12.7.1.2.1"><h4>Implementing User Aliases</h4></a>
 
 <p>
  The following steps must be performed in order to activate the user 
@@ -5653,7 +5653,7 @@
   invokes EXPORT_LISTS.COM.
 </ol>
 
-<a name="heading_12.8"><h1>12.8 Distribution List Codes</h1></a>
+<a name="heading_12.8"><h1>Distribution List Codes</h1></a>
 
 <p>
  Each distribution list code has a "type" prefix. The type value allows 
@@ -5836,7 +5836,7 @@
  This will restrict all type 11 lists to users who are also subscribed 
  to the standard DAS staff list.
 
-<a name="heading_12.9"><h1>12.9 Auto Conversion of Distribution List Codes (Optional)</h1></a>
+<a name="heading_12.9"><h1>Auto Conversion of Distribution List Codes (Optional)</h1></a>
 
 <p>
  Because of the features provided by the distribution list types, it may 
@@ -5887,7 +5887,7 @@
  old and new codes on file. In this case, you may run the UMPUPDATE 
  program to force the conversion on all records.
 
-<a name="heading_12.10"><h1>12.10 Defining Local Distribution Lists</h1></a>
+<a name="heading_12.10"><h1>Defining Local Distribution Lists</h1></a>
 
 <p>
 To define a local distribution list, you need to add several additional 
@@ -5981,7 +5981,7 @@
 sublists. Also, mail addressed to the master list will be delivered to 
 everyone on any of the sublists.
 
-<a name="heading_12.11"><h1>12.11 Profile Group Management</h1></a>
+<a name="heading_12.11"><h1>Profile Group Management</h1></a>
 
 <p>
  UMP provides the ability to segregate profiles into <strong>management 
@@ -6080,7 +6080,7 @@
  control which profiles are sent to the OECN White Pages, then the 
  correct values must be provided to the group manager.
 
-<a name="heading_12.12"><h1>12.12 Export DIRECTORY DAEMON File (optional)</h1></a>
+<a name="heading_12.12"><h1>Export DIRECTORY DAEMON File (optional)</h1></a>
 
 <p>
  You have the option of exporting to a DIRECTORY DAEMON database. 
@@ -6163,7 +6163,7 @@
  See the PMDF System Adminstrators Guide for more information about the 
  directory daemon, channels and pseudo-domains.
 
-<a name="heading_12.13"><h1>12.13 Submit UMP Data to OECN CSO Database</h1></a>
+<a name="heading_12.13"><h1>Submit UMP Data to OECN CSO Database</h1></a>
 
 <p>
  The CSO nameserver is a public domain software system which allows a 
@@ -6231,7 +6231,7 @@
     username@po.nwoca.org regardless of their real host. In this way, 
     remote users will not learn the real host name (which may change).
 
-<a name="heading_12.14"><h1>12.14 Master List/Sub-list Handling</h1></a>
+<a name="heading_12.14"><h1>Master List/Sub-list Handling</h1></a>
 
 <p>
  Starting with the 29-Aug-95 version of UMPEXPORT, the master lists are 
@@ -6289,7 +6289,7 @@
 </table>
 </center>
 
-<a name="heading_12.15"><h1>12.15 UMPCHECK - Verifying UMP Profiles against SYSUAF (Optional)</h1></a>
+<a name="heading_12.15"><h1>UMPCHECK - Verifying UMP Profiles against SYSUAF (Optional)</h1></a>
 
 <p>
  UMPCHECK is a utility which reads the UMP profiles and compares the 
@@ -6365,7 +6365,7 @@
  are the current values of the SYS$NODE and SYS$CLUSTER_NODE logicals.
 <p>
 
-<a name="heading_12.16"><h1>12.16 UMP_LOGIN - To Prompt Users to Enter Profiles During Login (Optional)</h1></a>
+<a name="heading_12.16"><h1>UMP_LOGIN - To Prompt Users to Enter Profiles During Login (Optional)</h1></a>
  UMP_LOGIN.COM may be run during login to determine if the user has ever 
  modified their own profile. If they have not entered their profile, 
  UMP_LOGIN will ask them if they would like to do so immediately and 
@@ -6383,7 +6383,7 @@
  install OECN$:UMPMODIFIED.EXE as a known image to speed up the login 
  process.
 
-<a name="heading_12.17"><h1>12.17 UMPID2DIS - Creating Distribution Lists from VMS Identifiers (Optional)</h1></a>
+<a name="heading_12.17"><h1>UMPID2DIS - Creating Distribution Lists from VMS Identifiers (Optional)</h1></a>
 
 <p>
  UMPID2DIS.EXE is an optional utility which builds PMDF style 
@@ -6487,7 +6487,7 @@
 <br>
 $ EXIT
 
-<a name="exam_build_proc"><h1>12.18 Example Procedure for Periodic Rebuilds</h1></a>
+<a name="exam_build_proc"><h1>Example Procedure for Periodic Rebuilds</h1></a>
 
 <p>
  Periodically, each site should run EXPORT_LISTS.COM to update the 
@@ -6665,7 +6665,7 @@
 
 <p>
 
-<a name="heading_12.19"><h1>12.19 Multiple Non-Clustered Systems</h1></a>
+<a name="heading_12.19"><h1>Multiple Non-Clustered Systems</h1></a>
  DAS's with a single VMS system, or a single VMS cluster, need not be 
  concerned with this section.
 
@@ -6730,7 +6730,7 @@
  one that needs to run the EXPORT_LISTS.COM to produce the mail_ and 
  oecn_ for your DAS.
 
-<a name="heading_12.20"><h1>12.20 Programming Considerations</h1></a>
+<a name="heading_12.20"><h1>Programming Considerations</h1></a>
 
 <p>
  DAS programmers may wish to use DTR, COBOL or other high level language 
@@ -6773,7 +6773,7 @@
   </tr>
 </table>
 
-<a name="heading_12.20.1"><h2>12.20.1 Field Requirements</h2></a>
+<a name="heading_12.20.1"><h2>Field Requirements</h2></a>
 
 <p>
 Some fields in UMP may display to the user differently than is 
@@ -6804,7 +6804,7 @@
 <p>
 
 <hr size=5>
-<a name="vfc2pdf_chap"><h1>Chapter 13<br>VFC2PDF - Converting Text Files to PDF Format</h1></a>
+<a name="vfc2pdf_chap"><h1>VFC2PDF - Converting Text Files to PDF Format</h1></a>
 
 <p>
 VFC2PDF converts VFC or plain text files into PDF (Portable Document