diff --git a/Doc/tools/undoc_symbols.py b/Doc/tools/undoc_symbols.py
new file mode 100644
index 0000000..59a92fb
--- /dev/null
+++ b/Doc/tools/undoc_symbols.py
@@ -0,0 +1,99 @@
+# Thomas Heller, 11/2001
+
+"""This script prints out a list of undocumented symbols found in
+Python include files, prefixed by their tag kind.
+
+First, a temporary file is written which contains all Python include
+files, with DL_IMPORT simply removed.  This file is passed to ctags,
+and the output is parsed into a dictionary mapping symbol names to tag
+kinds.
+
+Then, the .tex files from Python docs are read into a giant string.
+
+Finally all symbols not found in the docs are written to standard
+output, prefixed with their tag kind.
+"""
+
+# Which kind of tags do we need?
+TAG_KINDS = "dpt"
+
+# Doc sections to use
+DOCSECTIONS = ["api", "ext"]
+
+# Only print symbols starting with this prefix
+# to get all symbols, use an empty string
+PREFIX = "Py"
+
+# end of customization section
+
+
+# Tested with EXUBERANT CTAGS
+# see http://ctags.sourceforge.net
+#
+# ctags fields are separated by tabs.
+# The first field is the name, the last field the type:
+# d macro definitions (and #undef names)
+# e enumerators
+# f function definitions
+# g enumeration names
+# m class, struct, or union members
+# n namespaces
+# p function prototypes and declarations
+# s structure names
+# t typedefs
+# u union names
+# v variable definitions
+# x extern and forward variable declarations
+
+import os, glob, re, sys, tempfile
+
+def findnames(file, prefix=""):
+    names = {}
+    for line in file.readlines():
+        if line[0] == '!':
+            continue
+        fields = line.split()
+        name, tag = fields[0], fields[-1]
+        if tag == 'd' and name.endswith('_H'):
+            continue
+        if name.startswith(prefix):
+            names[name] = tag
+    return names
+
+def print_undoc_symbols(prefix):
+    incfile = tempfile.mktemp(".h")
+    
+    fp = open(incfile, "w")
+
+    for file in glob.glob(os.path.join(INCDIR, "*.h")):
+        text = open(file).read()
+        # remove all DL_IMPORT, they will confuse ctags
+        text = re.sub("DL_IMPORT", "", text)
+        fp.write(text)
+    fp.close()
+
+    docs = []
+
+    for sect in DOCSECTIONS:
+        for file in glob.glob(os.path.join(DOCDIR, sect, "*.tex")):
+            docs.append(open(file).read())
+
+    docs = "\n".join(docs)
+
+    fp = os.popen("ctags --c-types=%s -f - %s" % (TAG_KINDS, incfile))
+    dict = findnames(fp, prefix)
+    names = dict.keys()
+    names.sort()
+    for name in names:
+        if docs.find(name) == -1:
+            print dict[name], name
+    os.remove(incfile)
+
+if __name__ == '__main__':
+    global INCDIR
+    global DOCDIR
+    SRCDIR = os.path.dirname(sys.argv[0])
+    INCDIR = os.path.normpath(os.path.join(SRCDIR, "../../Include"))
+    DOCDIR = os.path.normpath(os.path.join(SRCDIR, ".."))
+
+    print_undoc_symbols(PREFIX)
