Replaced the fiddly 5-tuples with a new Book convenience class, allowing
to reference fields via names instead of meaningless little integers.
This turned up one case where the wrong little integer was being used,
in informative progress output.  Fixed that too.
diff --git a/Doc/tools/prechm.py b/Doc/tools/prechm.py
index 845a546..9ce8f1e 100644
--- a/Doc/tools/prechm.py
+++ b/Doc/tools/prechm.py
@@ -97,84 +97,102 @@
 the
 '''
 
-# Library Doc list of tuples:
+# s is a string or None.  If None or empty, return None.  Else tack '.html'
+# on to the end, unless it's already there.
+def addhtml(s):
+    if s:
+        if not s.endswith('.html'):
+            s += '.html'
+    return s
+
+# Convenience class to hold info about "a book" in HTMLHelp terms == a doc
+# directory in Python terms.
+class Book:
+    def __init__(self, directory, title, firstpage,
+                 contentpage=None, indexpage=None):
+        self.directory   = directory
+        self.title       = title
+        self.firstpage   = addhtml(firstpage)
+        self.contentpage = addhtml(contentpage)
+        self.indexpage   = addhtml(indexpage)
+
+# Library Doc list of books:
 # each 'book' : (Dir, Title, First page, Content page, Index page)
-#
 supported_libraries = {
     '2.2':  ### Beta!!!  fix for actual release
     [
-        ('.', 'Global Module Index', 'modindex.html', None, None),
-        ('whatsnew', "What's New", 'index.html', 'contents.html', None),
-        ('tut','Tutorial','tut.html','node2.html',None),
-        ('lib','Library Reference','lib.html','contents.html','genindex.html'),
-        ('ref','Language Reference','ref.html','contents.html','genindex.html'),
-        ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'),
-        ('ext','Extending and Embedding','ext.html','contents.html',None),
-        ('api','Python/C API','api.html','contents.html','genindex.html'),
-        ('doc','Documenting Python','doc.html','contents.html',None),
-        ('inst','Installing Python Modules', 'inst.html', 'index.html', None),
-        ('dist','Distributing Python Modules', 'dist.html', 'index.html', None),
+        Book('.', 'Global Module Index', 'modindex'),
+        Book('whatsnew', "What's New", 'index', 'contents'),
+        Book('tut','Tutorial','tut','node2'),
+        Book('lib','Library Reference','lib','contents','genindex'),
+        Book('ref','Language Reference','ref','contents','genindex'),
+        Book('mac','Macintosh Reference','mac','contents','genindex'),
+        Book('ext','Extending and Embedding','ext','contents'),
+        Book('api','Python/C API','api','contents','genindex'),
+        Book('doc','Documenting Python','doc','contents'),
+        Book('inst','Installing Python Modules', 'inst', 'index'),
+        Book('dist','Distributing Python Modules', 'dist', 'index'),
     ],
 
     '2.1.1':
     [
-        ('.', 'Global Module Index', 'modindex.html', None, None),
-        ('tut','Tutorial','tut.html','node2.html',None),
-        ('lib','Library Reference','lib.html','contents.html','genindex.html'),
-        ('ref','Language Reference','ref.html','contents.html','genindex.html'),
-        ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'),
-        ('ext','Extending and Embedding','ext.html','contents.html',None),
-        ('api','Python/C API','api.html','contents.html','genindex.html'),
-        ('doc','Documenting Python','doc.html','contents.html',None),
-        ('inst','Installing Python Modules', 'inst.html', 'index.html', None),
-        ('dist','Distributing Python Modules', 'dist.html', 'index.html', None),
+        Book('.', 'Global Module Index', 'modindex'),
+        Book('tut','Tutorial','tut','node2'),
+        Book('lib','Library Reference','lib','contents','genindex'),
+        Book('ref','Language Reference','ref','contents','genindex'),
+        Book('mac','Macintosh Reference','mac','contents','genindex'),
+        Book('ext','Extending and Embedding','ext','contents'),
+        Book('api','Python/C API','api','contents','genindex'),
+        Book('doc','Documenting Python','doc','contents'),
+        Book('inst','Installing Python Modules', 'inst', 'index'),
+        Book('dist','Distributing Python Modules', 'dist', 'index'),
     ],
 
     '2.0.0':
     [
-        ('.', 'Global Module Index', 'modindex.html', None, None),
-        ('tut','Tutorial','tut.html','node2.html',None),
-        ('lib','Library Reference','lib.html','contents.html','genindex.html'),
-        ('ref','Language Reference','ref.html','contents.html','genindex.html'),
-        ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'),
-        ('ext','Extending and Embedding','ext.html','contents.html',None),
-        ('api','Python/C API','api.html','contents.html','genindex.html'),
-        ('doc','Documenting Python','doc.html','contents.html',None),
-        ('inst','Installing Python Modules', 'inst.html', 'contents.html', None),
-        ('dist','Distributing Python Modules', 'dist.html', 'contents.html', None),
+        Book('.', 'Global Module Index', 'modindex'),
+        Book('tut','Tutorial','tut','node2'),
+        Book('lib','Library Reference','lib','contents','genindex'),
+        Book('ref','Language Reference','ref','contents','genindex'),
+        Book('mac','Macintosh Reference','mac','contents','genindex'),
+        Book('ext','Extending and Embedding','ext','contents'),
+        Book('api','Python/C API','api','contents','genindex'),
+        Book('doc','Documenting Python','doc','contents'),
+        Book('inst','Installing Python Modules', 'inst', 'contents'),
+        Book('dist','Distributing Python Modules', 'dist', 'contents'),
     ],
 
     # <dnagata@creo.com> Apr 17/99: library for 1.5.2 version:
     # <hernan.foffani@iname.com> May 01/99: library for 1.5.2 (04/30/99):
     '1.5.2':
     [
-        ('tut','Tutorial','tut.html','node2.html',None),
-        ('lib','Library Reference','lib.html','contents.html','genindex.html'),
-        ('ref','Language Reference','ref.html','contents.html','genindex.html'),
-        ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'),
-        ('ext','Extending and Embedding','ext.html','contents.html',None),
-        ('api','Python/C API','api.html','contents.html','genindex.html'),
-        ('doc','Documenting Python','doc.html','contents.html',None)
+        Book('tut','Tutorial','tut','node2'),
+        Book('lib','Library Reference','lib','contents','genindex'),
+        Book('ref','Language Reference','ref','contents','genindex'),
+        Book('mac','Macintosh Reference','mac','contents','genindex'),
+        Book('ext','Extending and Embedding','ext','contents'),
+        Book('api','Python/C API','api','contents','genindex'),
+        Book('doc','Documenting Python','doc','contents')
     ],
 
     # library for 1.5.1 version:
     '1.5.1':
     [
-        ('tut','Tutorial','tut.html','contents.html',None),
-        ('lib','Library Reference','lib.html','contents.html','genindex.html'),
-        ('ref','Language Reference','ref-1.html','ref-2.html','ref-11.html'),
-        ('ext','Extending and Embedding','ext.html','contents.html',None),
-        ('api','Python/C API','api.html','contents.html','genindex.html')
+        Book('tut','Tutorial','tut','contents'),
+        Book('lib','Library Reference','lib','contents','genindex'),
+        Book('ref','Language Reference','ref-1','ref-2','ref-11'),
+        Book('ext','Extending and Embedding','ext','contents'),
+        Book('api','Python/C API','api','contents','genindex')
     ],
 
     # library for 1.5 version:
     '1.5':
     [
-        ('tut','Tutorial','tut.html','node1.html',None),
-        ('lib','Library Reference','lib.html','node1.html','node268.html'),
-        ('ref','Language Reference','ref-1.html','ref-2.html','ref-11.html'),
-        ('ext','Extending and Embedding','ext.html','node1.html',None),
-        ('api','Python/C API','api.html','node1.html','node48.html')
+        Book('tut','Tutorial','tut','node1'),
+        Book('lib','Library Reference','lib','node1','node268'),
+        Book('ref','Language Reference','ref-1','ref-2','ref-11'),
+        Book('ext','Extending and Embedding','ext','node1'),
+        Book('api','Python/C API','api','node1','node48')
     ]
 }
 
@@ -263,42 +281,45 @@
         self.ft.write("\t" * self.indent + "<LI>")
 
 
-def index(path, archivo, output):
+def index(path, indexpage, output):
     f = formatter.AbstractFormatter(AlmostNullWriter())
     parser = IdxHlpHtmlParser(f)
     parser.path = path
     parser.ft = output
-    fil = path + '/' + archivo
-    parser.feed(open(fil).read())
+    f = open(path + '/' + indexpage)
+    parser.feed(f.read())
     parser.close()
+    f.close()
 
 
-def content(path, archivo, output):
+def content(path, contentpage, output):
     f = formatter.AbstractFormatter(AlmostNullWriter())
     parser = TocHlpHtmlParser(f)
     parser.path = path
     parser.ft = output
-    fil = path + '/' + archivo
-    parser.feed(open(fil).read())
+    f = open(path + '/' + contentpage)
+    parser.feed(f.read())
     parser.close()
+    f.close()
 
 
 def do_index(library, output):
     output.write('<UL>\n')
     for book in library:
-        print '\t', book[2]
-        if book[4]:
-            index(book[0], book[4], output)
+        print '\t', book.title, '-', book.indexpage
+        if book.indexpage:
+            index(book.directory, book.indexpage, output)
     output.write('</UL>\n')
 
 
 def do_content(library, version, output):
     output.write(contents_header % version)
     for book in library:
-        print '\t', book[2]
-        output.write(object_sitemap % (book[0]+"/"+book[2], book[1]))
-        if book[3]:
-            content(book[0], book[3], output)
+        print '\t', book.title, '-', book.firstpage
+        output.write(object_sitemap % (book.directory + "/" + book.firstpage,
+                                       book.title))
+        if book.contentpage:
+            content(book.directory, book.contentpage, output)
     output.write(contents_footer)
 
 # Fill in the [FILES] section of the project (.hhp) file.
@@ -307,7 +328,7 @@
 def do_project(library, output, arch, version):
     output.write(project_template % locals())
     for book in library:
-        directory = book[0]
+        directory = book.directory
         path = directory + '\\%s\n'
         for page in os.listdir(directory):
             if page.endswith('.html') or page.endswith('.css'):
@@ -353,7 +374,7 @@
     if not version:
         usage()
 
-    library = supported_libraries[ version ]
+    library = supported_libraries[version]
 
     if not (('-p','') in optlist):
         fname = arch + '.stp'