diff --git a/Doc/tools/support.py b/Doc/tools/support.py
new file mode 100644
index 0000000..448abee
--- /dev/null
+++ b/Doc/tools/support.py
@@ -0,0 +1,144 @@
+"""
+"""
+__version__ = '$Revision$'
+
+
+import getopt
+import sys
+
+
+class Options:
+    __short_args = "a:c:ho:"
+    __long_args = [
+        # script controls
+        "columns=", "help", "output=",
+
+        # content components
+        "address=", "iconserver=",
+        "title=", "uplink=", "uptitle="]
+
+    outputfile = "-"
+    columns = 1
+    letters = 0
+    uplink = "./"
+    uptitle = "Python Documentation Index"
+
+    def __init__(self):
+        self.args = []
+        self.variables = {"address": "",
+                          "iconserver": "icons",
+                          "imgtype": "gif",
+                          "title": "Global Module Index",
+                          }
+
+    def add_args(self, short=None, long=None):
+        if short:
+            self.__short_args += short
+        if long:
+            self.__long_args += long
+
+    def parse(self, args):
+        try:
+            opts, args = getopt.getopt(args, self.__short_args,
+                                       self.__long_args)
+        except getopt.error:
+            sys.stdout = sys.stderr
+            self.usage()
+            sys.exit(2)
+        self.args += args
+        for opt, val in opts:
+            if opt in ("-a", "--address"):
+                val = val.strip()
+                if val:
+                    val = "<address>\n%s\n</address>\n" % val
+                    self.variables["address"] = val
+            elif opt in ("-h", "--help"):
+                self.usage()
+                sys.exit()
+            elif opt in ("-o", "--output"):
+                self.outputfile = val
+            elif opt in ("-c", "--columns"):
+                self.columns = int(val)
+            elif opt == "--title":
+                self.variables["title"] = val.strip()
+            elif opt == "--uplink":
+                self.uplink = val.strip()
+            elif opt == "--uptitle":
+                self.uptitle = val.strip()
+            elif opt == "--iconserver":
+                self.variables["iconserver"] = val.strip() or "."
+            else:
+                self.handle_option(opt, val)
+        if self.uplink and self.uptitle:
+            self.variables["uplinkalt"] = "up"
+            self.variables["uplinkicon"] = "up"
+        else:
+            self.variables["uplinkalt"] = ""
+            self.variables["uplinkicon"] = "blank"
+        self.variables["uplink"] = self.uplink
+        self.variables["uptitle"] = self.uptitle
+
+    def handle_option(self, opt, val):
+        raise getopt.error("option %s not recognized" % opt)
+
+    def get_header(self):
+        return HEAD % self.variables
+
+    def get_footer(self):
+        return TAIL % self.variables
+
+    def get_output_file(self, filename=None):
+        if filename is None:
+            filename = self.outputfile
+        if filename == "-":
+            return sys.stdout
+        else:
+            return open(filename, "w")
+
+
+NAVIGATION = '''\
+<div class="navigation">
+<table width="100%%" cellpadding="0" cellspacing="2">
+<tr>
+<td><img width="32" height="32" align="bottom" border="0" alt=""
+ src="%(iconserver)s/blank.%(imgtype)s"></td>
+<td><a href="%(uplink)s"
+ title="%(uptitle)s"><img width="32" height="32" align="bottom" border="0"
+ alt="%(uplinkalt)s"
+ src="%(iconserver)s/%(uplinkicon)s.%(imgtype)s"></a></td>
+<td><img width="32" height="32" align="bottom" border="0" alt=""
+ src="%(iconserver)s/blank.%(imgtype)s"></td>
+<td align="center" width="100%%">%(title)s</td>
+<td><img width="32" height="32" align="bottom" border="0" alt=""
+ src="%(iconserver)s/blank.%(imgtype)s"></td>
+<td><img width="32" height="32" align="bottom" border="0" alt=""
+ src="%(iconserver)s/blank.%(imgtype)s"></td>
+<td><img width="32" height="32" align="bottom" border="0" alt=""
+ src="%(iconserver)s/blank.%(imgtype)s"></td>
+</tr></table>
+<b class="navlabel">Up:</b> <span class="sectref"><a href="%(uplink)s"
+ title="%(uptitle)s">%(uptitle)s</A></span>
+<br></div>
+'''
+
+HEAD = '''\
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>%(title)s</title>
+  <meta name="description" content="%(title)s">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="STYLESHEET" href="lib/lib.css">
+</head>
+<body>
+''' + NAVIGATION + '''\
+<hr>
+
+<h2>%(title)s</h2>
+
+'''
+
+TAIL = "<hr>\n" + NAVIGATION + '''\
+%(address)s</body>
+</html>
+'''
