AMK's megapatch:
	* \bcode, \ecode added everywhere
	* \label{module-foo} added everywhere
	* A few \seealso sections added.
	* Indentation fixed inside verbatim in lib*tex files
diff --git a/Doc/lib/libaifc.tex b/Doc/lib/libaifc.tex
index 04ed2e4..590f0d4 100644
--- a/Doc/lib/libaifc.tex
+++ b/Doc/lib/libaifc.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{aifc}}
+\label{module-aifc}
 \stmodindex{aifc}
 
 This module provides support for reading and writing AIFF and AIFF-C
diff --git a/Doc/lib/libal.tex b/Doc/lib/libal.tex
index 6a812dd..5655be6 100644
--- a/Doc/lib/libal.tex
+++ b/Doc/lib/libal.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{al}}
+\label{module-al}
 \bimodindex{al}
 
 This module provides access to the audio facilities of the SGI Indy
diff --git a/Doc/lib/libamoeba.tex b/Doc/lib/libamoeba.tex
index 54a9dfb..1ff5bd4 100644
--- a/Doc/lib/libamoeba.tex
+++ b/Doc/lib/libamoeba.tex
@@ -82,7 +82,7 @@
 aa:1c:95:52:6a:fa/14(ff)/8e:ba:5b:8:11:1a
 >>> 
 \end{verbatim}\ecode
-
+%
 The following methods are defined for capability objects.
 
 \renewcommand{\indexsubitem}{(capability method)}
diff --git a/Doc/lib/libarray.tex b/Doc/lib/libarray.tex
index 1b028b3..eb76251 100644
--- a/Doc/lib/libarray.tex
+++ b/Doc/lib/libarray.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{array}}
+\label{module-array}
 \bimodindex{array}
 \index{arrays}
 
diff --git a/Doc/lib/libaudioop.tex b/Doc/lib/libaudioop.tex
index 40ef0f4..fb6c944 100644
--- a/Doc/lib/libaudioop.tex
+++ b/Doc/lib/libaudioop.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{audioop}}
+\label{module-audioop}
 \bimodindex{audioop}
 
 The \code{audioop} module contains some useful operations on sound fragments.
@@ -210,7 +211,7 @@
     rsample = audioop.tostereo(rsample, width, 0, 1)
     return audioop.add(lsample, rsample, width)
 \end{verbatim}\ecode
-
+%
 If you use the ADPCM coder to build network packets and you want your
 protocol to be stateless (i.e.\ to be able to tolerate packet loss)
 you should not only transmit the data but also the state.  Note that
diff --git a/Doc/lib/libbase64.tex b/Doc/lib/libbase64.tex
index c487576..ab00ded 100644
--- a/Doc/lib/libbase64.tex
+++ b/Doc/lib/libbase64.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{base64}}
+\label{module-base64}
 \stmodindex{base64}
 
 This module perform base-64 encoding and decoding of arbitrary binary
diff --git a/Doc/lib/libbastion.tex b/Doc/lib/libbastion.tex
index 158ec08..dd30284 100644
--- a/Doc/lib/libbastion.tex
+++ b/Doc/lib/libbastion.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{Bastion}}
+\label{module-Bastion}
 \stmodindex{Bastion}
 \renewcommand{\indexsubitem}{(in module Bastion)}
 
diff --git a/Doc/lib/libbinascii.tex b/Doc/lib/libbinascii.tex
index 4e3d674..33974c8 100644
--- a/Doc/lib/libbinascii.tex
+++ b/Doc/lib/libbinascii.tex
@@ -1,4 +1,5 @@
 \section{Standard module \sectcode{binhex}}
+\label{module-binhex}
 \stmodindex{binhex}
 
 This module encodes and decodes files in binhex4 format, a format
diff --git a/Doc/lib/libbltin.tex b/Doc/lib/libbltin.tex
index 63b7c63..6afcac9 100644
--- a/Doc/lib/libbltin.tex
+++ b/Doc/lib/libbltin.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{__builtin__}}
+\label{module-builtin}
 \bimodindex{__builtin__}
 
 This module provides direct access to all `built-in' identifiers of
diff --git a/Doc/lib/libcd.tex b/Doc/lib/libcd.tex
index 98ed560..6e64b77 100644
--- a/Doc/lib/libcd.tex
+++ b/Doc/lib/libcd.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{cd}}
+\label{module-cd}
 \bimodindex{cd}
 
 This module provides an interface to the Silicon Graphics CD library.
diff --git a/Doc/lib/libcgi.tex b/Doc/lib/libcgi.tex
index 4768f0f..56643d0 100644
--- a/Doc/lib/libcgi.tex
+++ b/Doc/lib/libcgi.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{cgi}}
+\label{module-cgi}
 \stmodindex{cgi}
 \indexii{WWW}{server}
 \indexii{CGI}{protocol}
@@ -39,21 +40,21 @@
 telling the client what kind of data is following.  Python code to
 generate a minimal header section looks like this:
 
-\begin{verbatim}
-    print "Content-type: text/html"     # HTML is following
-    print                               # blank line, end of headers
-\end{verbatim}
-
+\bcode\begin{verbatim}
+print "Content-type: text/html"     # HTML is following
+print                               # blank line, end of headers
+\end{verbatim}\ecode
+%
 The second section is usually HTML, which allows the client software
 to display nicely formatted text with header, in-line images, etc.
 Here's Python code that prints a simple piece of HTML:
 
-\begin{verbatim}
-    print "<TITLE>CGI script output</TITLE>"
-    print "<H1>This is my first CGI script</H1>"
-    print "Hello, world!"
-\end{verbatim}
-
+\bcode\begin{verbatim}
+print "<TITLE>CGI script output</TITLE>"
+print "<H1>This is my first CGI script</H1>"
+print "Hello, world!"
+\end{verbatim}\ecode
+%
 (It may not be fully legal HTML according to the letter of the
 standard, but any browser will understand it.)
 
@@ -76,19 +77,19 @@
 \code{Content-type} header and blank line have already been printed) checks that 
 the fields \code{name} and \code{addr} are both set to a non-empty string:
 
-\begin{verbatim}
-    form = cgi.FieldStorage()
-    form_ok = 0
-    if form.has_key("name") and form.has_key("addr"):
-        if form["name"].value != "" and form["addr"].value != "":
-            form_ok = 1
-    if not form_ok:
-        print "<H1>Error</H1>"
-        print "Please fill in the name and addr fields."
-        return
-    ...further form processing here...
-\end{verbatim}
-
+\bcode\begin{verbatim}
+form = cgi.FieldStorage()
+form_ok = 0
+if form.has_key("name") and form.has_key("addr"):
+    if form["name"].value != "" and form["addr"].value != "":
+        form_ok = 1
+if not form_ok:
+    print "<H1>Error</H1>"
+    print "Please fill in the name and addr fields."
+    return
+...further form processing here...
+\end{verbatim}\ecode
+%
 Here the fields, accessed through \code{form[key]}, are themselves instances
 of \code{FieldStorage} (or \code{MiniFieldStorage}, depending on the form encoding).
 
@@ -100,40 +101,40 @@
 instance or a list of instances.  For example, here's code that
 concatenates any number of username fields, separated by commas:
 
-\begin{verbatim}
-    username = form["username"]
-    if type(username) is type([]):
-        # Multiple username fields specified
-        usernames = ""
-        for item in username:
-            if usernames:
-                # Next item -- insert comma
-                usernames = usernames + "," + item.value
-            else:
-                # First item -- don't insert comma
-                usernames = item.value
-    else:
-        # Single username field specified
-        usernames = username.value
-\end{verbatim}
-
+\bcode\begin{verbatim}
+username = form["username"]
+if type(username) is type([]):
+    # Multiple username fields specified
+    usernames = ""
+    for item in username:
+        if usernames:
+            # Next item -- insert comma
+            usernames = usernames + "," + item.value
+        else:
+            # First item -- don't insert comma
+            usernames = item.value
+else:
+    # Single username field specified
+    usernames = username.value
+\end{verbatim}\ecode
+%
 If a field represents an uploaded file, the value attribute reads the 
 entire file in memory as a string.  This may not be what you want.  You can 
 test for an uploaded file by testing either the filename attribute or the 
 file attribute.  You can then read the data at leasure from the file 
 attribute:
 
-\begin{verbatim}
-    fileitem = form["userfile"]
-    if fileitem.file:
-        # It's an uploaded file; count lines
-        linecount = 0
-        while 1:
-            line = fileitem.file.readline()
-            if not line: break
-            linecount = linecount + 1
-\end{verbatim}
-
+\bcode\begin{verbatim}
+fileitem = form["userfile"]
+if fileitem.file:
+    # It's an uploaded file; count lines
+    linecount = 0
+    while 1:
+        line = fileitem.file.readline()
+        if not line: break
+        linecount = linecount + 1
+\end{verbatim}\ecode
+%
 The file upload draft standard entertains the possibility of uploading
 multiple files from one field (using a recursive \code{multipart/*}
 encoding).  When this occurs, the item will be a dictionary-like
@@ -251,10 +252,10 @@
 that the first line of the script contains \code{\#!} starting in column 1
 followed by the pathname of the Python interpreter, for instance:
 
-\begin{verbatim}
-    #!/usr/local/bin/python
-\end{verbatim}
-
+\bcode\begin{verbatim}
+#!/usr/local/bin/python
+\end{verbatim}\ecode
+%
 Make sure the Python interpreter exists and is executable by ``others''.
 
 Make sure that any files your script needs to read or write are
@@ -273,12 +274,12 @@
 default module search path, you can change the path in your script,
 before importing other modules, e.g.:
 
-\begin{verbatim}
-    import sys
-    sys.path.insert(0, "/usr/home/joe/lib/python")
-    sys.path.insert(0, "/usr/local/lib/python")
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import sys
+sys.path.insert(0, "/usr/home/joe/lib/python")
+sys.path.insert(0, "/usr/local/lib/python")
+\end{verbatim}\ecode
+%
 (This way, the directory inserted last will be searched first!)
 
 Instructions for non-Unix systems will vary; check your HTTP server's
@@ -311,10 +312,10 @@
 in the standard \code{cgi-bin} directory, it should be possible to send it a
 request by entering a URL into your browser of the form:
 
-\begin{verbatim}
-    http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home
-\end{verbatim}
-
+\bcode\begin{verbatim}
+http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home
+\end{verbatim}\ecode
+%
 If this gives an error of type 404, the server cannot find the script
 -- perhaps you need to install it in a different directory.  If it
 gives another error (e.g.  500), there's an installation problem that
@@ -328,10 +329,10 @@
 The next step could be to call the \code{cgi} module's test() function from
 your script: replace its main code with the single statement
 
-\begin{verbatim}
-    cgi.test()
-\end{verbatim}
-
+\bcode\begin{verbatim}
+cgi.test()
+\end{verbatim}\ecode
+%
 This should produce the same results as those gotten from installing
 the \code{cgi.py} file itself.
 
@@ -363,19 +364,19 @@
 
 For example:
 
-\begin{verbatim}
-    import sys
-    import traceback
-    print "Content-type: text/html"
-    print
-    sys.stderr = sys.stdout
-    try:
-        ...your code here...
-    except:
-        print "\n\n<PRE>"
-        traceback.print_exc()
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import sys
+import traceback
+print "Content-type: text/html"
+print
+sys.stderr = sys.stdout
+try:
+    ...your code here...
+except:
+    print "\n\n<PRE>"
+    traceback.print_exc()
+\end{verbatim}\ecode
+%
 Notes: The assignment to \code{sys.stderr} is needed because the traceback
 prints to \code{sys.stderr}.  The \code{print "$\backslash$n$\backslash$n<PRE>"} statement is necessary to
 disable the word wrapping in HTML.
@@ -384,14 +385,14 @@
 module, you can use an even more robust approach (which only uses
 built-in modules):
 
-\begin{verbatim}
-    import sys
-    sys.stderr = sys.stdout
-    print "Content-type: text/plain"
-    print
-    ...your code here...
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import sys
+sys.stderr = sys.stdout
+print "Content-type: text/plain"
+print
+...your code here...
+\end{verbatim}\ecode
+%
 This relies on the Python interpreter to print the traceback.  The
 content type of the output is set to plain text, which disables all
 HTML processing.  If your script works, the raw HTML will be displayed
diff --git a/Doc/lib/libcopy.tex b/Doc/lib/libcopy.tex
index 4c0ce72..8f5e03c 100644
--- a/Doc/lib/libcopy.tex
+++ b/Doc/lib/libcopy.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{copy}}
+\label{module-copy}
 \stmodindex{copy}
 \renewcommand{\indexsubitem}{(copy function)}
 \ttindex{copy}
@@ -8,13 +9,13 @@
 
 Interface summary:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import copy
 
 x = copy.copy(y)        # make a shallow copy of y
 x = copy.deepcopy(y)    # make a deep copy of y
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 For module specific errors, \code{copy.error} is raised.
 
 The difference between shallow and deep copying is only relevant for
diff --git a/Doc/lib/libcrypt.tex b/Doc/lib/libcrypt.tex
index 132ae51..8a4ec92 100644
--- a/Doc/lib/libcrypt.tex
+++ b/Doc/lib/libcrypt.tex
@@ -1,4 +1,5 @@
-\section{Built-in module {\tt crypt}}
+\section{Built-in Module {\tt crypt}}
+\label{module-crypt}
 \bimodindex{crypt}
 
 This module implements an interface to the crypt({\bf 3}) routine,
diff --git a/Doc/lib/libdbm.tex b/Doc/lib/libdbm.tex
index bae388b..977e05c 100644
--- a/Doc/lib/libdbm.tex
+++ b/Doc/lib/libdbm.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{dbm}}
+\label{module-dbm}
 \bimodindex{dbm}
 
 The \code{dbm} module provides an interface to the \UNIX{}
diff --git a/Doc/lib/libfcntl.tex b/Doc/lib/libfcntl.tex
index 3a51ce1..b76a28c 100644
--- a/Doc/lib/libfcntl.tex
+++ b/Doc/lib/libfcntl.tex
@@ -65,7 +65,7 @@
 lockdata = struct.pack('hhllhh', FCNTL.F_WRLCK, 0, 0, 0, 0, 0)
 rv = fcntl(file.fileno(), FCNTL.F_SETLKW, lockdata)
 \end{verbatim}\ecode
-
+%
 Note that in the first example the return value variable \code{rv} will
 hold an integer value; in the second example it will hold a string
 value.  The structure lay-out for the \var{lockadata} variable is
diff --git a/Doc/lib/libfl.tex b/Doc/lib/libfl.tex
index d5332a0..bacbf76 100644
--- a/Doc/lib/libfl.tex
+++ b/Doc/lib/libfl.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{fl}}
+\label{module-fl}
 \bimodindex{fl}
 
 This module provides an interface to the FORMS Library by Mark
@@ -471,7 +472,7 @@
 import fl
 from FL import *
 \end{verbatim}\ecode
-
+%
 \section{Standard Module \sectcode{flp}}
 \stmodindex{flp}
 
diff --git a/Doc/lib/libfm.tex b/Doc/lib/libfm.tex
index 45d820c..6f1e685 100644
--- a/Doc/lib/libfm.tex
+++ b/Doc/lib/libfm.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{fm}}
+\label{module-fm}
 \bimodindex{fm}
 
 This module provides access to the IRIS {\em Font Manager} library.
diff --git a/Doc/lib/libfnmatch.tex b/Doc/lib/libfnmatch.tex
index 78b21a4..86c9073 100644
--- a/Doc/lib/libfnmatch.tex
+++ b/Doc/lib/libfnmatch.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{fnmatch}}
+\label{module-fnmatch}
 \stmodindex{fnmatch}
 
 This module provides support for Unix shell-style wildcards, which are
diff --git a/Doc/lib/libformatter.tex b/Doc/lib/libformatter.tex
index 86e6db1..430c9d7 100644
--- a/Doc/lib/libformatter.tex
+++ b/Doc/lib/libformatter.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{formatter}}
+\label{module-formatter}
 \stmodindex{formatter}
 
 \renewcommand{\indexsubitem}{(in module formatter)}
diff --git a/Doc/lib/libftplib.tex b/Doc/lib/libftplib.tex
index ba18119..dfbaa2b 100644
--- a/Doc/lib/libftplib.tex
+++ b/Doc/lib/libftplib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{ftplib}}
+\label{module-ftplib}
 \stmodindex{ftplib}
 
 \renewcommand{\indexsubitem}{(in module ftplib)}
@@ -13,7 +14,7 @@
 
 Here's a sample session using the \code{ftplib} module:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> from ftplib import FTP
 >>> ftp = FTP('ftp.cwi.nl')   # connect to host, default port
 >>> ftp.login()               # user anonymous, passwd user@hostname
@@ -26,8 +27,8 @@
  .
  .
 >>> ftp.quit()
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The module defines the following items:
 
 \begin{funcdesc}{FTP}{\optional{host\optional{\, user\, passwd\, acct}}}
diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex
index 712cb6f..0ef8201 100644
--- a/Doc/lib/libfuncs.tex
+++ b/Doc/lib/libfuncs.tex
@@ -119,7 +119,7 @@
 2
 >>> 
 \end{verbatim}\ecode
-
+%
   This function can also be used to execute arbitrary code objects
   (e.g.\ created by \code{compile()}).  In this case pass a code
   object instead of a string.  The code object must have been compiled
diff --git a/Doc/lib/libgetopt.tex b/Doc/lib/libgetopt.tex
index 7ab46e4..0d2f4a0 100644
--- a/Doc/lib/libgetopt.tex
+++ b/Doc/lib/libgetopt.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{getopt}}
+\label{module-getopt}
 
 \stmodindex{getopt}
 This module helps scripts to parse the command line arguments in
@@ -56,7 +57,7 @@
 ['a1', 'a2']
 >>> 
 \end{verbatim}\ecode
-
+%
 Using long option names is equally easy:
 
 \bcode\begin{verbatim}
@@ -72,7 +73,7 @@
 ['a1', 'a2']
 >>> 
 \end{verbatim}\ecode
-
+%
 The exception
 \code{getopt.error = 'getopt.error'}
 is raised when an unrecognized option is found in the argument list or
diff --git a/Doc/lib/libgl.tex b/Doc/lib/libgl.tex
index c32ea6f..3445465 100644
--- a/Doc/lib/libgl.tex
+++ b/Doc/lib/libgl.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{gl}}
+\label{module-gl}
 \bimodindex{gl}
 
 This module provides access to the Silicon Graphics
@@ -43,13 +44,13 @@
 \bcode\begin{verbatim}
 lmdef(deftype, index, np, props)
 \end{verbatim}\ecode
-
+%
 is translated to Python as
 
 \bcode\begin{verbatim}
 lmdef(deftype, index, props)
 \end{verbatim}\ecode
-
+%
 \item
 Output arguments are omitted from the argument list; they are
 transmitted as function return values instead.
@@ -62,13 +63,13 @@
 \bcode\begin{verbatim}
 getmcolor(i, &red, &green, &blue)
 \end{verbatim}\ecode
-
+%
 is translated to Python as
 
 \bcode\begin{verbatim}
 red, green, blue = getmcolor(i)
 \end{verbatim}\ecode
-
+%
 \end{itemize}
 
 The following functions are non-standard or have special argument
@@ -183,7 +184,7 @@
 
 main()
 \end{verbatim}\ecode
-
+%
 \section{Standard Modules \sectcode{GL} and \sectcode{DEVICE}}
 \nodename{GL and DEVICE}
 \stmodindex{GL}
diff --git a/Doc/lib/libglob.tex b/Doc/lib/libglob.tex
index 142afd8..b63d153 100644
--- a/Doc/lib/libglob.tex
+++ b/Doc/lib/libglob.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{glob}}
+\label{module-glob}
 \stmodindex{glob}
 \renewcommand{\indexsubitem}{(in module glob)}
 
@@ -24,7 +25,7 @@
 will produce the following results.  Notice how any leading components
 of the path are preserved.
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import glob
 >>> glob.glob('./[0-9].*')
 ['./1.gif', './2.txt']
@@ -32,4 +33,4 @@
 ['1.gif', 'card.gif']
 >>> glob.glob('?.gif')
 ['1.gif']
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libgopherlib.tex b/Doc/lib/libgopherlib.tex
index e94e1f9..6ae913c 100644
--- a/Doc/lib/libgopherlib.tex
+++ b/Doc/lib/libgopherlib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{gopherlib}}
+\label{module-gopherlib}
 \stmodindex{gopherlib}
 
 \renewcommand{\indexsubitem}{(in module gopherlib)}
diff --git a/Doc/lib/libgrp.tex b/Doc/lib/libgrp.tex
index 90a2ed3..2942a1b 100644
--- a/Doc/lib/libgrp.tex
+++ b/Doc/lib/libgrp.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{grp}}
+\label{module-grp}
 
 \bimodindex{grp}
 This module provides access to the \UNIX{} group database.
diff --git a/Doc/lib/libhtmllib.tex b/Doc/lib/libhtmllib.tex
index bf57ea9..aaa2072 100644
--- a/Doc/lib/libhtmllib.tex
+++ b/Doc/lib/libhtmllib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{htmllib}}
+\label{module-htmllib}
 \stmodindex{htmllib}
 \index{HTML}
 \index{hypertext}
@@ -38,11 +39,11 @@
 unprocessed data, call the \code{close()} method.
 
 For example, to parse the entire contents of a file, use:
-\begin{verbatim}
+\bcode\begin{verbatim}
 parser.feed(open('myfile.html').read())
 parser.close()
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 \item
 The interface to define semantics for HTML tags is very simple: derive
 a class and define methods called \code{start_\var{tag}()},
diff --git a/Doc/lib/libhttplib.tex b/Doc/lib/libhttplib.tex
index 70bcb3c..7671ab3 100644
--- a/Doc/lib/libhttplib.tex
+++ b/Doc/lib/libhttplib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{httplib}}
+\label{module-httplib}
 \stmodindex{httplib}
 \index{HTTP}
 
@@ -19,12 +20,12 @@
 following calls all create instances that connect to the server at the
 same host and port:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> h1 = httplib.HTTP('www.cwi.nl')
 >>> h2 = httplib.HTTP('www.cwi.nl:80')
 >>> h3 = httplib.HTTP('www.cwi.nl', 80)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Once an \code{HTTP} instance has been connected to an HTTP server, it
 should be used as follows:
 
@@ -111,7 +112,7 @@
 
 Here is an example session:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import httplib
 >>> h = httplib.HTTP('www.cwi.nl')
 >>> h.putrequest('GET', '/index.html')
@@ -124,4 +125,4 @@
 >>> data f.read() # Get the raw HTML
 >>> f.close()
 >>> 
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libimageop.tex b/Doc/lib/libimageop.tex
index 4e15117..48f9188 100644
--- a/Doc/lib/libimageop.tex
+++ b/Doc/lib/libimageop.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{imageop}}
+\label{module-imageop}
 \bimodindex{imageop}
 
 The \code{imageop} module contains some useful operations on images.
diff --git a/Doc/lib/libimgfile.tex b/Doc/lib/libimgfile.tex
index 1e8b2aa..96afc9b 100644
--- a/Doc/lib/libimgfile.tex
+++ b/Doc/lib/libimgfile.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{imgfile}}
+\label{module-imgfile}
 \bimodindex{imgfile}
 
 The imgfile module allows python programs to access SGI imglib image
diff --git a/Doc/lib/libimghdr.tex b/Doc/lib/libimghdr.tex
index 22d4d0d..0dec8a1 100644
--- a/Doc/lib/libimghdr.tex
+++ b/Doc/lib/libimghdr.tex
@@ -1,4 +1,5 @@
 \section{Standard module \sectcode{imghdr}}
+\label{module-imghdr}
 \stmodindex{imghdr}
 
 The \code{imghdr} module determines the type of image contained in a
@@ -53,8 +54,8 @@
 
 Example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import imghdr
 >>> imghdr.what('/tmp/bass.gif')
 'gif'
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libimp.tex b/Doc/lib/libimp.tex
index e1e4a53..0f63524 100644
--- a/Doc/lib/libimp.tex
+++ b/Doc/lib/libimp.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{imp}}
+\label{module-imp}
 \bimodindex{imp}
 \index{import}
 
@@ -132,7 +133,7 @@
 \subsection{Examples}
 The following function emulates the default import statement:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import imp
 import sys
 
@@ -171,4 +172,4 @@
     finally:
         # Since we may exit via an exception, close fp explicitly.
         fp.close()
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libjpeg.tex b/Doc/lib/libjpeg.tex
index 8215cad..0d1dc1c 100644
--- a/Doc/lib/libjpeg.tex
+++ b/Doc/lib/libjpeg.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{jpeg}}
+\label{module-jpeg}
 \bimodindex{jpeg}
 
 The module \code{jpeg} provides access to the jpeg compressor and
diff --git a/Doc/lib/libmailcap.tex b/Doc/lib/libmailcap.tex
index 7fea9b5..d7d47c4 100644
--- a/Doc/lib/libmailcap.tex
+++ b/Doc/lib/libmailcap.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{mailcap}}
+\label{module-mailcap}
 \stmodindex{mailcap}
 \renewcommand{\indexsubitem}{(in module mailcap)}
 
@@ -67,9 +68,9 @@
 \end{funcdesc}
 
 An example usage:
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import mailcap
 >>> d=mailcap.getcaps()
 >>> mailcap.findmatch(d, 'video/mpeg', filename='/tmp/tmp1223')
 ('xmpeg /tmp/tmp1223', {'view': 'xmpeg %s'})
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libmain.tex b/Doc/lib/libmain.tex
index c730a03..8ce73a8 100644
--- a/Doc/lib/libmain.tex
+++ b/Doc/lib/libmain.tex
@@ -1,5 +1,5 @@
 \section{Built-in Module \sectcode{__main__}}
-
+\label{module-main}
 \bimodindex{__main__}
 This module represents the (otherwise anonymous) scope in which the
 interpreter's main program executes --- commands read either from
diff --git a/Doc/lib/libmarshal.tex b/Doc/lib/libmarshal.tex
index 58becdb..16472db 100644
--- a/Doc/lib/libmarshal.tex
+++ b/Doc/lib/libmarshal.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{marshal}}
+\label{module-marshal}
 
 \bimodindex{marshal}
 This module contains functions that can read and write Python
diff --git a/Doc/lib/libmath.tex b/Doc/lib/libmath.tex
index 765fcdf..935b940 100644
--- a/Doc/lib/libmath.tex
+++ b/Doc/lib/libmath.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{math}}
+\label{module-math}
 
 \bimodindex{math}
 \renewcommand{\indexsubitem}{(in module math)}
@@ -70,3 +71,7 @@
 \else
 \code{pi} and \code{e}.
 \fi
+
+\begin{seealso}
+\seealso{cmath}{versions of these functions that can handle complex numbers}
+\end{seealso}
diff --git a/Doc/lib/libmd5.tex b/Doc/lib/libmd5.tex
index 773f93c..d71bacd 100644
--- a/Doc/lib/libmd5.tex
+++ b/Doc/lib/libmd5.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{md5}}
+\label{module-md5}
 \bimodindex{md5}
 
 This module implements the interface to RSA's MD5 message digest
@@ -21,14 +22,14 @@
 >>> m.digest()
 '\273d\234\203\335\036\245\311\331\336\311\241\215\360\377\351'
 \end{verbatim}\ecode
-
+%
 More condensed:
 
 \bcode\begin{verbatim}
 >>> md5.new("Nobody inspects the spammish repetition").digest()
 '\273d\234\203\335\036\245\311\331\336\311\241\215\360\377\351'
 \end{verbatim}\ecode
-
+%
 \renewcommand{\indexsubitem}{(in module md5)}
 
 \begin{funcdesc}{new}{\optional{arg}}
diff --git a/Doc/lib/libmimetools.tex b/Doc/lib/libmimetools.tex
index ecf50dc..41a62ba 100644
--- a/Doc/lib/libmimetools.tex
+++ b/Doc/lib/libmimetools.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{mimetools}}
+\label{module-mimetools}
 \stmodindex{mimetools}
 
 \renewcommand{\indexsubitem}{(in module mimetools)}
diff --git a/Doc/lib/libmpz.tex b/Doc/lib/libmpz.tex
index 46a2d47..9fb165b 100644
--- a/Doc/lib/libmpz.tex
+++ b/Doc/lib/libmpz.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{mpz}}
+\label{module-mpz}
 \bimodindex{mpz}
 
 This is an optional module.  It is only available when Python is
diff --git a/Doc/lib/libnntplib.tex b/Doc/lib/libnntplib.tex
index 2641d82..41539b4 100644
--- a/Doc/lib/libnntplib.tex
+++ b/Doc/lib/libnntplib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{nntplib}}
+\label{module-nntplib}
 \stmodindex{nntplib}
 
 \renewcommand{\indexsubitem}{(in module nntplib)}
@@ -13,7 +14,7 @@
 articles:
 
 \small{
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> s = NNTP('news.cwi.nl')
 >>> resp, count, first, last, name = s.group('comp.lang.python')
 >>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last
@@ -34,13 +35,13 @@
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
 >>> 
-\end{verbatim}
+\end{verbatim}\ecode
 }
 
 To post an article from a file (this assumes that the article has
 valid headers):
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> s = NNTP('news.cwi.nl')
 >>> f = open('/tmp/article')
 >>> s.post(f)
@@ -48,8 +49,8 @@
 >>> s.quit()
 '205 news.cwi.nl closing connection.  Goodbye.'
 >>> 
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The module itself defines the following items:
 
 \begin{funcdesc}{NNTP}{host\optional{\, port}}
diff --git a/Doc/lib/liboperator.tex b/Doc/lib/liboperator.tex
index 7fed767..d7c11fc 100644
--- a/Doc/lib/liboperator.tex
+++ b/Doc/lib/liboperator.tex
@@ -184,10 +184,10 @@
 Example: Build a dictionary that maps the ordinals from 0 to 256 to their
 character equivalents.
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import operator
 >>> d = {}
 >>> keys = range(256)
 >>> vals = map(chr, keys)
 >>> map(operator.setitem, [d]*len(keys), keys, vals)
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex
index 51442ef..f17ce95 100644
--- a/Doc/lib/libos.tex
+++ b/Doc/lib/libos.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{os}}
+\label{module-os}
 
 \stmodindex{os}
 This module provides a more portable way of using operating system
diff --git a/Doc/lib/libpanel.tex b/Doc/lib/libpanel.tex
index b82bf98..a696f30 100644
--- a/Doc/lib/libpanel.tex
+++ b/Doc/lib/libpanel.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{panel}}
+\label{module-panel}
 \stmodindex{panel}
 
 \strong{Please note:} The FORMS library, to which the \code{fl} module described
diff --git a/Doc/lib/libparser.tex b/Doc/lib/libparser.tex
index a51b01b..4503358 100644
--- a/Doc/lib/libparser.tex
+++ b/Doc/lib/libparser.tex
@@ -288,30 +288,30 @@
 this purpose, using the \code{parser} module to produce an
 intermediate data structure is equivelent to the code
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> code = compile('a + 5', 'eval')
 >>> a = 5
 >>> eval(code)
 10
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The equivelent operation using the \code{parser} module is somewhat
 longer, and allows the intermediate internal parse tree to be retained
 as an AST object:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import parser
 >>> ast = parser.expr('a + 5')
 >>> code = parser.compileast(ast)
 >>> a = 5
 >>> eval(code)
 10
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 An application which needs both AST and code objects can package this
 code into readily available functions:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import parser
 
 def load_suite(source_string):
@@ -323,8 +323,8 @@
     ast = parser.expr(source_string)
     code = parser.compileast(ast)
     return ast, code
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 \subsubsection{Information Discovery}
 
 Some applications benefit from direct access to the parse tree.  The
@@ -366,16 +366,16 @@
 a module consisting of a docstring and nothing else.  (See file
 \file{docstring.py}.)
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 """Some documentation.
 """
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Using the interpreter to take a look at the parse tree, we find a
 bewildering mass of numbers and parentheses, with the documentation
 buried deep in nested tuples.
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import parser
 >>> import pprint
 >>> ast = parser.suite(open('docstring.py').read())
@@ -403,8 +403,8 @@
    (4, ''))),
  (4, ''),
  (0, ''))
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The numbers at the first element of each node in the tree are the node
 types; they map directly to terminal and non-terminal symbols in the
 grammar.  Unfortunately, they are represented as integers in the
@@ -442,7 +442,7 @@
 the pattern matching, returning a boolean and a dictionary of variable
 name to value mappings.  (See file \file{example.py}.)
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 from types import ListType, TupleType
 
 def match(pattern, data, vars=None):
@@ -460,13 +460,13 @@
         if not same:
             break
     return same, vars
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Using this simple representation for syntactic variables and the symbolic
 node types, the pattern for the candidate docstring subtrees becomes
 fairly readable.  (See file \file{example.py}.)
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import symbol
 import token
 
@@ -493,19 +493,19 @@
                      )))))))))))))))),
      (token.NEWLINE, '')
      ))
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Using the \code{match()} function with this pattern, extracting the
 module docstring from the parse tree created previously is easy:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> found, vars = match(DOCSTRING_STMT_PATTERN, tup[1])
 >>> found
 1
 >>> vars
 {'docstring': '"""Some documentation.\012"""'}
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Once specific data can be extracted from a location where it is
 expected, the question of where information can be expected
 needs to be answered.  When dealing with docstrings, the answer is
@@ -567,7 +567,7 @@
 objects requires further examination.  Here is the relevant part of
 the \code{SuiteInfoBase} definition from \file{example.py}:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 class SuiteInfoBase:
     _docstring = ''
     _name = ''
@@ -597,8 +597,8 @@
                 elif cstmt[0] == symbol.classdef:
                     name = cstmt[2][1]
                     self._class_info[name] = ClassInfo(cstmt)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 After initializing some internal state, the constructor calls the
 \code{_extract_info()} method.  This method performs the bulk of the
 information extraction which takes place in the entire example.  The
@@ -611,21 +611,21 @@
 the code block is on the same line as the definition of the code
 block, as in
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 def square(x): "Square an argument."; return x ** 2
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 while the long form uses an indented block and allows nested
 definitions:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 def make_power(exp):
     "Make a function that raises an argument to the exponent `exp'."
     def raiser(x, y=exp):
         return x ** y
     return raiser
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 When the short form is used, the code block may contain a docstring as
 the first, and possibly only, \code{small_stmt} element.  The
 extraction of such a docstring is slightly different and requires only
@@ -660,7 +660,7 @@
 blocks.  A high-level function can be used to extract the complete set
 of information from a source file.  (See file \file{example.py}.)
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 def get_docs(fileName):
     source = open(fileName).read()
     import os
@@ -669,8 +669,8 @@
     ast = parser.suite(source)
     tup = parser.ast2tuple(ast)
     return ModuleInfo(tup, basename)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 This provides an easy-to-use interface to the documentation of a
 module.  If information is required which is not extracted by the code
 of this example, the code may be extended at clearly defined points to
diff --git a/Doc/lib/libpdb.tex b/Doc/lib/libpdb.tex
index 84ae332..9785a40 100644
--- a/Doc/lib/libpdb.tex
+++ b/Doc/lib/libpdb.tex
@@ -29,7 +29,7 @@
 The debugger's prompt is ``\code{(Pdb) }''.
 Typical usage to run a program under control of the debugger is:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import pdb
 >>> import mymodule
 >>> pdb.run('mymodule.test()')
@@ -40,15 +40,15 @@
 NameError: 'spam'
 > <string>(1)?()
 (Pdb) 
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 \code{pdb.py} can also be invoked as
 a script to debug other scripts.  For example:
 \code{python /usr/local/lib/python1.4/pdb.py myscript.py}
 
 Typical usage to inspect a crashed program is:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import pdb
 >>> import mymodule
 >>> mymodule.test()
@@ -63,8 +63,8 @@
 > ./mymodule.py(3)test2()
 -> print spam
 (Pdb) 
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The module defines the following functions; each enters the debugger
 in a slightly different way:
 
@@ -224,11 +224,11 @@
 of the statement resembles a debugger command.
 To set a global variable, you can prefix the assignment
 command with a ``\code{global}'' command on the same line, e.g.:
-\begin{verbatim}
+\bcode\begin{verbatim}
 (Pdb) global list_options; list_options = ['-l']
 (Pdb)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 \item[q(uit)]
 
 Quit from the debugger.
diff --git a/Doc/lib/libpickle.tex b/Doc/lib/libpickle.tex
index 128b29d..cb054a7 100644
--- a/Doc/lib/libpickle.tex
+++ b/Doc/lib/libpickle.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{pickle}}
+\label{module-pickle}
 \stmodindex{pickle}
 \index{persistency}
 \indexii{persistent}{objects}
@@ -133,30 +134,30 @@
 
 To pickle an object \code{x} onto a file \code{f}, open for writing:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 p = pickle.Pickler(f)
 p.dump(x)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 A shorthand for this is:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 pickle.dump(x, f)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 To unpickle an object \code{x} from a file \code{f}, open for reading:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 u = pickle.Unpickler(f)
 x = u.load()
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 A shorthand is:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 x = pickle.load(f)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The \code{Pickler} class only calls the method \code{f.write} with a
 string argument.  The \code{Unpickler} calls the methods \code{f.read}
 (with an integer argument) and \code{f.readline} (without argument),
diff --git a/Doc/lib/libposix.tex b/Doc/lib/libposix.tex
index 7edd93e..e545c7a 100644
--- a/Doc/lib/libposix.tex
+++ b/Doc/lib/libposix.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{posix}}
+\label{module-posix}
 \bimodindex{posix}
 
 This module provides access to operating system functionality that is
diff --git a/Doc/lib/libppath.tex b/Doc/lib/libppath.tex
index 9078560..6bd8a20 100644
--- a/Doc/lib/libppath.tex
+++ b/Doc/lib/libppath.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{posixpath}}
+\label{module-posixpath}
 \stmodindex{posixpath}
 
 This module implements some useful functions on POSIX pathnames.
diff --git a/Doc/lib/libprofile.tex b/Doc/lib/libprofile.tex
index 7cd3c6b..2f69170 100644
--- a/Doc/lib/libprofile.tex
+++ b/Doc/lib/libprofile.tex
@@ -103,11 +103,11 @@
 To profile an application with a main entry point of \samp{foo()}, you
 would add the following to your module:
 
-\begin{verbatim}
-    import profile
-    profile.run("foo()")
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import profile
+profile.run("foo()")
+\end{verbatim}\ecode
+%
 The above action would cause \samp{foo()} to be run, and a series of
 informative lines (the profile) to be printed.  The above approach is
 most useful when working with the interpreter.  If you would like to
@@ -115,11 +115,11 @@
 can supply a file name as the second argument to the \code{run()}
 function:
 
-\begin{verbatim}
-    import profile
-    profile.run("foo()", 'fooprof')
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import profile
+profile.run("foo()", 'fooprof')
+\end{verbatim}\ecode
+%
 \code{profile.py} can also be invoked as
 a script to profile another script.  For example:
 \code{python /usr/local/lib/python1.4/profile.py myscript.py}
@@ -128,40 +128,40 @@
 \code{pstats} module.  Typically you would load the statistics data as
 follows:
 
-\begin{verbatim}
-    import pstats
-    p = pstats.Stats('fooprof')
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import pstats
+p = pstats.Stats('fooprof')
+\end{verbatim}\ecode
+%
 The class \code{Stats} (the above code just created an instance of
 this class) has a variety of methods for manipulating and printing the
 data that was just read into \samp{p}.  When you ran
 \code{profile.run()} above, what was printed was the result of three
 method calls:
 
-\begin{verbatim}
-    p.strip_dirs().sort_stats(-1).print_stats()
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.strip_dirs().sort_stats(-1).print_stats()
+\end{verbatim}\ecode
+%
 The first method removed the extraneous path from all the module
 names. The second method sorted all the entries according to the
 standard module/line/name string that is printed (this is to comply
 with the semantics of the old profiler).  The third method printed out
 all the statistics.  You might try the following sort calls:
 
-\begin{verbatim}
-    p.sort_stats('name')
-    p.print_stats()
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.sort_stats('name')
+p.print_stats()
+\end{verbatim}\ecode
+%
 The first call will actually sort the list by function name, and the
 second call will print out the statistics.  The following are some
 interesting calls to experiment with:
 
-\begin{verbatim}
-    p.sort_stats('cumulative').print_stats(10)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.sort_stats('cumulative').print_stats(10)
+\end{verbatim}\ecode
+%
 This sorts the profile by cumulative time in a function, and then only
 prints the ten most significant lines.  If you want to understand what
 algorithms are taking time, the above line is what you would use.
@@ -169,27 +169,27 @@
 If you were looking to see what functions were looping a lot, and
 taking a lot of time, you would do:
 
-\begin{verbatim}
-    p.sort_stats('time').print_stats(10)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.sort_stats('time').print_stats(10)
+\end{verbatim}\ecode
+%
 to sort according to time spent within each function, and then print
 the statistics for the top ten functions.
 
 You might also try:
 
-\begin{verbatim}
-    p.sort_stats('file').print_stats('__init__')
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.sort_stats('file').print_stats('__init__')
+\end{verbatim}\ecode
+%
 This will sort all the statistics by file name, and then print out
 statistics for only the class init methods ('cause they are spelled
 with \code{__init__} in them).  As one final example, you could try:
 
-\begin{verbatim}
-    p.sort_stats('time', 'cum').print_stats(.5, 'init')
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.sort_stats('time', 'cum').print_stats(.5, 'init')
+\end{verbatim}\ecode
+%
 This line sorts statistics with a primary key of time, and a secondary
 key of cumulative time, and then prints out some of the statistics.
 To be specific, the list is first culled down to 50\% (re: \samp{.5})
@@ -199,21 +199,20 @@
 If you wondered what functions called the above functions, you could
 now (\samp{p} is still sorted according to the last criteria) do:
 
-\begin{verbatim}
-    p.print_callers(.5, 'init')
-\end{verbatim}
-
+\bcode\begin{verbatim}
+p.print_callers(.5, 'init')
+\end{verbatim}\ecode
+%
 and you would get a list of callers for each of the listed functions. 
 
 If you want more functionality, you're going to have to read the
 manual, or guess what the following functions do:
 
-\begin{verbatim}
-    p.print_callees()
-    p.add('fooprof')
-\end{verbatim}
-
-
+\bcode\begin{verbatim}
+p.print_callees()
+p.add('fooprof')
+\end{verbatim}\ecode
+%
 \section{What Is Deterministic Profiling?}
 \nodename{Deterministic Profiling}
 
@@ -272,7 +271,7 @@
 each line.  The following is a typical output from such a call:
 
 \small{
-\begin{verbatim}
+\bcode\begin{verbatim}
       main()
       2706 function calls (2004 primitive calls) in 4.504 CPU seconds
 
@@ -282,7 +281,7 @@
      2    0.006    0.003    0.953    0.477 pobject.py:75(save_objects)
   43/3    0.533    0.012    0.749    0.250 pobject.py:99(evaluate)
  ...
-\end{verbatim}
+\end{verbatim}\ecode
 }
 
 The first line indicates that this profile was generated by the call:\\
@@ -446,18 +445,18 @@
 several restrictions are provided, then they are applied sequentially.
 For example:
 
-\begin{verbatim}
-    print_stats(.1, "foo:")
-\end{verbatim}
-
+\bcode\begin{verbatim}
+print_stats(.1, "foo:")
+\end{verbatim}\ecode
+%
 would first limit the printing to first 10\% of list, and then only
 print functions that were part of filename \samp{.*foo:}.  In
 contrast, the command:
 
-\begin{verbatim}
-    print_stats("foo:", .1)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+print_stats("foo:", .1)
+\end{verbatim}\ecode
+%
 would limit the list to all functions having file names \samp{.*foo:},
 and then proceed to only print the first 10\% of them.
 \end{funcdesc}
@@ -486,11 +485,11 @@
 return the instance that is being processed, so that the commands can
 be strung together.  For example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 pstats.Stats('foofile').strip_dirs().sort_stats('cum') \
                        .print_stats().ignore()
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 would perform all the indicated functions, but it would not return
 the final reference to the \code{Stats} instance.%
 \footnote{
@@ -550,28 +549,28 @@
 be used to obtain this constant for a given platform (see discussion
 in section Limitations above).
 
-\begin{verbatim}
-    import profile
-    pr = profile.Profile()
-    pr.calibrate(100)
-    pr.calibrate(100)
-    pr.calibrate(100)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+import profile
+pr = profile.Profile()
+pr.calibrate(100)
+pr.calibrate(100)
+pr.calibrate(100)
+\end{verbatim}\ecode
+%
 The argument to calibrate() is the number of times to try to do the
 sample calls to get the CPU times.  If your computer is \emph{very}
 fast, you might have to do:
 
-\begin{verbatim}
-    pr.calibrate(1000)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+pr.calibrate(1000)
+\end{verbatim}\ecode
+%
 or even:
 
-\begin{verbatim}
-    pr.calibrate(10000)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+pr.calibrate(10000)
+\end{verbatim}\ecode
+%
 The object of this exercise is to get a fairly consistent result.
 When you have a consistent answer, you are ready to use that number in
 the source code.  For a Sun Sparcstation 1000 running Solaris 2.3, the
@@ -583,27 +582,27 @@
 class should be modified to install the calibration constant on a Sun
 Sparcstation 1000:
 
-\begin{verbatim}
-    def trace_dispatch(self, frame, event, arg):
+\bcode\begin{verbatim}
+def trace_dispatch(self, frame, event, arg):
+    t = self.timer()
+    t = t[0] + t[1] - self.t - .00053 # Calibration constant
+
+    if self.dispatch[event](frame,t):
         t = self.timer()
-        t = t[0] + t[1] - self.t - .00053 # Calibration constant
-
-        if self.dispatch[event](frame,t):
-            t = self.timer()
-            self.t = t[0] + t[1]
-        else:
-            r = self.timer()
-            self.t = r[0] + r[1] - t # put back unrecorded delta
-        return
-\end{verbatim}
-
+        self.t = t[0] + t[1]
+    else:
+        r = self.timer()
+        self.t = r[0] + r[1] - t # put back unrecorded delta
+    return
+\end{verbatim}\ecode
+%
 Note that if there is no calibration constant, then the line
 containing the callibration constant should simply say:
 
-\begin{verbatim}
-        t = t[0] + t[1] - self.t  # no calibration constant
-\end{verbatim}
-
+\bcode\begin{verbatim}
+t = t[0] + t[1] - self.t  # no calibration constant
+\end{verbatim}\ecode
+%
 You can also achieve the same results using a derived class (and the
 profiler will actually run equally fast!!), but the above method is
 the simplest to use.  I could have made the profiler ``self
@@ -631,10 +630,10 @@
 the constructor for the class.  Consider passing the name of a
 function to call into the constructor:
 
-\begin{verbatim}
-    pr = profile.Profile(your_time_func)
-\end{verbatim}
-
+\bcode\begin{verbatim}
+pr = profile.Profile(your_time_func)
+\end{verbatim}\ecode
+%
 The resulting profiler will call \code{your_time_func()} instead of
 \code{os.times()}.  The function should return either a single number
 or a list of numbers (like what \code{os.times()} returns).  If the
@@ -663,7 +662,7 @@
 user's code.  It is also a lot more accurate than the old profiler, as
 it does not charge all its overhead time to the user's code.
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 class OldProfile(Profile):
 
     def trace_dispatch_exception(self, frame, t):
@@ -713,9 +712,8 @@
                       callers[func_caller]
                 nc = nc + callers[func_caller]
             self.stats[nor_func] = nc, nc, tt, ct, nor_callers
-\end{verbatim}
-        
-
+\end{verbatim}\ecode
+%
 \subsection{HotProfile Class}
 
 This profiler is the fastest derived profile example.  It does not
@@ -725,7 +723,7 @@
 the basic profiler is so fast, that is probably not worth the savings
 to give up the data, but this class still provides a nice example.
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 class HotProfile(Profile):
 
     def trace_dispatch_exception(self, frame, t):
@@ -761,4 +759,4 @@
             nc, tt = self.timings[func]
             nor_func = self.func_normalize(func)
             self.stats[nor_func] = nc, nc, tt, 0, {}
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libpwd.tex b/Doc/lib/libpwd.tex
index 7bb30d8..073c19a 100644
--- a/Doc/lib/libpwd.tex
+++ b/Doc/lib/libpwd.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{pwd}}
+\label{module-pwd}
 
 \bimodindex{pwd}
 This module provides access to the \UNIX{} password database.
diff --git a/Doc/lib/libquopri.tex b/Doc/lib/libquopri.tex
index 0314f8a..2fbd35a 100644
--- a/Doc/lib/libquopri.tex
+++ b/Doc/lib/libquopri.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{quopri}}
+\label{module-quopri}
 \stmodindex{quopri}
 
 This module performs quoted-printable transport encoding and decoding,
diff --git a/Doc/lib/librand.tex b/Doc/lib/librand.tex
index 5a4df3e..0660566 100644
--- a/Doc/lib/librand.tex
+++ b/Doc/lib/librand.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{rand}}
+\label{module-rand}
 \stmodindex{rand}
 
 The \code{rand} module simulates the C library's \code{rand()}
@@ -20,3 +21,7 @@
 can be an arbitrary integer. 
 \end{funcdesc}
 
+\begin{seealso}
+\seemodule{whrandom}{the standard Python random number generator}
+\end{seealso}
+
diff --git a/Doc/lib/librandom.tex b/Doc/lib/librandom.tex
index 3bc92ce..b8d5f78 100644
--- a/Doc/lib/librandom.tex
+++ b/Doc/lib/librandom.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{random}}
+\label{module-random}
 \stmodindex{random}
 
 This module implements pseudo-random number generators for various
@@ -69,3 +70,8 @@
 distribution reduces to a uniform random angle over the range 0 to
 \code{2*pi}.
 \end{funcdesc}
+
+
+\begin{seealso}
+\seemodule{whrandom}{the standard Python random number generator}
+\end{seealso}
diff --git a/Doc/lib/libregex.tex b/Doc/lib/libregex.tex
index d3f44ba..ee1563d 100644
--- a/Doc/lib/libregex.tex
+++ b/Doc/lib/libregex.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{regex}}
+\label{module-regex}
 
 \bimodindex{regex}
 This module provides regular expression matching operations similar to
@@ -204,13 +205,13 @@
 prog = regex.compile(pat)
 result = prog.match(str)
 \end{verbatim}\ecode
-
+%
 is equivalent to
 
 \bcode\begin{verbatim}
 result = regex.match(pat, str)
 \end{verbatim}\ecode
-
+%
 but the version using \code{compile()} is more efficient when multiple
 regular expressions are used concurrently in a single program.  (The
 compiled version of the last pattern passed to \code{regex.match()} or
diff --git a/Doc/lib/libregsub.tex b/Doc/lib/libregsub.tex
index d075e99..6d48986 100644
--- a/Doc/lib/libregsub.tex
+++ b/Doc/lib/libregsub.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{regsub}}
+\label{module-regsub}
 
 \stmodindex{regsub}
 This module defines a number of functions useful for working with
diff --git a/Doc/lib/libresource.tex b/Doc/lib/libresource.tex
index ff78025..5c93fa6 100644
--- a/Doc/lib/libresource.tex
+++ b/Doc/lib/libresource.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{resource}}
+\label{module-resource}
 
 \bimodindex{resource}
 This module provides basic mechanisms for measuring and controlling
diff --git a/Doc/lib/librexec.tex b/Doc/lib/librexec.tex
index 4b1a100..742e32b 100644
--- a/Doc/lib/librexec.tex
+++ b/Doc/lib/librexec.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{rexec}}
+\label{module-rexec}
 \stmodindex{rexec}
 \renewcommand{\indexsubitem}{(in module rexec)}
 
@@ -206,7 +207,7 @@
         else: raise IOError, "Illegal open() mode"
         return open(file, mode, buf)
 \end{verbatim}\ecode
-
+%
 Notice that the above code will occasionally forbid a perfectly valid
 filename; for example, code in the restricted environment won't be
 able to open a file called \file{/tmp/foo/../bar}.  To fix this, the
diff --git a/Doc/lib/librfc822.tex b/Doc/lib/librfc822.tex
index 3617e8a..cd3d271 100644
--- a/Doc/lib/librfc822.tex
+++ b/Doc/lib/librfc822.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{rfc822}}
+\label{module-rfc822}
 \stmodindex{rfc822}
 
 \renewcommand{\indexsubitem}{(in module rfc822)}
diff --git a/Doc/lib/librgbimg.tex b/Doc/lib/librgbimg.tex
index ace426f..d923fc2 100644
--- a/Doc/lib/librgbimg.tex
+++ b/Doc/lib/librgbimg.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{rgbimg}}
+\label{module-rgbimg}
 \bimodindex{rgbimg}
 
 The rgbimg module allows python programs to access SGI imglib image
diff --git a/Doc/lib/librotor.tex b/Doc/lib/librotor.tex
index c333686..a3431fc 100644
--- a/Doc/lib/librotor.tex
+++ b/Doc/lib/librotor.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{rotor}}
+\label{module-rotor}
 \bimodindex{rotor}
 
 This module implements a rotor-based encryption algorithm, contributed by
@@ -79,7 +80,7 @@
 'l(\315'
 >>> del rt
 \end{verbatim}\ecode
-
+%
 The module's code is not an exact simulation of the original Enigma device;
 it implements the rotor encryption scheme differently from the original. The
 most important difference is that in the original Enigma, there were only 5
diff --git a/Doc/lib/libselect.tex b/Doc/lib/libselect.tex
index 0b50101..4291dbf 100644
--- a/Doc/lib/libselect.tex
+++ b/Doc/lib/libselect.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{select}}
+\label{module-select}
 \bimodindex{select}
 
 This module provides access to the function \code{select} available in
diff --git a/Doc/lib/libsgmllib.tex b/Doc/lib/libsgmllib.tex
index dc3582b..19ce91c 100644
--- a/Doc/lib/libsgmllib.tex
+++ b/Doc/lib/libsgmllib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{sgmllib}}
+\label{module-sgmllib}
 \stmodindex{sgmllib}
 \index{SGML}
 
diff --git a/Doc/lib/libshelve.tex b/Doc/lib/libshelve.tex
index a232add..05b3a93 100644
--- a/Doc/lib/libshelve.tex
+++ b/Doc/lib/libshelve.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{shelve}}
+\label{module-shelve}
 \stmodindex{shelve}
 \stmodindex{pickle}
 \bimodindex{dbm}
@@ -14,7 +15,7 @@
 To summarize the interface (\code{key} is a string, \code{data} is an
 arbitrary object):
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import shelve
 
 d = shelve.open(filename) # open, with (g)dbm filename -- no suffix
@@ -29,8 +30,8 @@
 list = d.keys() # a list of all existing keys (slow!)
 
 d.close()       # close it
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 Restrictions:
 
 \begin{itemize}
diff --git a/Doc/lib/libsignal.tex b/Doc/lib/libsignal.tex
index 802c4d1..2844b57 100644
--- a/Doc/lib/libsignal.tex
+++ b/Doc/lib/libsignal.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{signal}}
+\label{module-signal}
 
 \bimodindex{signal}
 This module provides mechanisms to use signal handlers in Python.
diff --git a/Doc/lib/libsite.tex b/Doc/lib/libsite.tex
index c97fd4e..9b7eb91 100644
--- a/Doc/lib/libsite.tex
+++ b/Doc/lib/libsite.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{site}}
+\label{module-site}
 \stmodindex{site}
 
 Scripts or modules that need to use site-specific modules should
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index 9d5536c..5422796 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{socket}}
+\label{module-socket}
 
 \bimodindex{socket}
 This module provides access to the BSD {\em socket} interface.
@@ -336,7 +337,7 @@
     conn.send(data)
 conn.close()
 \end{verbatim}\ecode
-
+%
 \bcode\begin{verbatim}
 # Echo client program
 from socket import *
@@ -349,3 +350,7 @@
 s.close()
 print 'Received', `data`
 \end{verbatim}\ecode
+%
+\begin{seealso}
+\seemodule{SocketServer}{classes that simplify writing network servers}
+\end{seealso}
diff --git a/Doc/lib/libsoundex.tex b/Doc/lib/libsoundex.tex
index 4c15c55..373da38 100644
--- a/Doc/lib/libsoundex.tex
+++ b/Doc/lib/libsoundex.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{soundex}}
+\label{module-soundex}
 \stmodindex{soundex}
 
 \renewcommand{\indexsubitem}{(in module soundex)}
diff --git a/Doc/lib/libstat.tex b/Doc/lib/libstat.tex
index 67335a5..bb3b66a 100644
--- a/Doc/lib/libstat.tex
+++ b/Doc/lib/libstat.tex
@@ -81,7 +81,7 @@
 
 Example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import os, sys
 from stat import *
 
@@ -103,4 +103,4 @@
     print 'frobbed', file
 
 if __name__ == '__main__': process(sys.argv[1], f)
-\end{verbatim}
+\end{verbatim}\ecode
diff --git a/Doc/lib/libstdwin.tex b/Doc/lib/libstdwin.tex
index 2f2bd42..514252f 100644
--- a/Doc/lib/libstdwin.tex
+++ b/Doc/lib/libstdwin.tex
@@ -774,7 +774,7 @@
 
 main()
 \end{verbatim}\ecode
-
+%
 \section{Standard Module \sectcode{stdwinevents}}
 \stmodindex{stdwinevents}
 
@@ -788,7 +788,7 @@
 >>> from stdwinevents import *
 >>> 
 \end{verbatim}\ecode
-
+%
 \section{Standard Module \sectcode{rect}}
 \stmodindex{rect}
 
@@ -801,7 +801,7 @@
 \bcode\begin{verbatim}
 (10, 20), (90, 80)
 \end{verbatim}\ecode
-
+%
 is a rectangle whose left, top, right and bottom edges are 10, 20, 90
 and 80, respectively.
 Note that the positive vertical axis points down (as in
diff --git a/Doc/lib/libstring.tex b/Doc/lib/libstring.tex
index 7b91717..930ce22 100644
--- a/Doc/lib/libstring.tex
+++ b/Doc/lib/libstring.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{string}}
+\label{module-string}
 
 \stmodindex{string}
 
diff --git a/Doc/lib/libstruct.tex b/Doc/lib/libstruct.tex
index f7879f1..d57a2b7 100644
--- a/Doc/lib/libstruct.tex
+++ b/Doc/lib/libstruct.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{struct}}
+\label{module-struct}
 \bimodindex{struct}
 \indexii{C}{structures}
 
@@ -126,7 +127,7 @@
 8
 >>> 
 \end{verbatim}\ecode
-
+%
 Hint: to align the end of a structure to the alignment requirement of
 a particular type, end the format with the code for that type with a
 repeat count of zero, e.g.\ the format \code{'llh0l'} specifies two
diff --git a/Doc/lib/libsys.tex b/Doc/lib/libsys.tex
index ae02d8d..f137052 100644
--- a/Doc/lib/libsys.tex
+++ b/Doc/lib/libsys.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{sys}}
+\label{module-sys}
 
 \bimodindex{sys}
 This module provides access to some variables used or maintained by the
diff --git a/Doc/lib/libsyslog.tex b/Doc/lib/libsyslog.tex
index 5b4fdde..37d6b66 100644
--- a/Doc/lib/libsyslog.tex
+++ b/Doc/lib/libsyslog.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{syslog}}
+\label{module-syslog}
 \bimodindex{syslog}
 
 This module provides an interface to the Unix \code{syslog} library
diff --git a/Doc/lib/libtempfile.tex b/Doc/lib/libtempfile.tex
index 0a582e1..e033f70 100644
--- a/Doc/lib/libtempfile.tex
+++ b/Doc/lib/libtempfile.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{tempfile}}
+\label{module-tempfile}
 \stmodindex{tempfile}
 \indexii{temporary}{file name}
 \indexii{temporary}{file}
diff --git a/Doc/lib/libtemplate.tex b/Doc/lib/libtemplate.tex
index cd49a8f..1edc21d 100644
--- a/Doc/lib/libtemplate.tex
+++ b/Doc/lib/libtemplate.tex
@@ -96,13 +96,13 @@
 
 Example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 >>> import spam
 >>> can = spam.open('/etc/passwd')
 >>> can.empty()
 >>> can.close()
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 % ==== 5. ====
 % If your module defines new object types (for a built-in module) or
 % classes (for a module written in Python), you should list the
diff --git a/Doc/lib/libtermios.tex b/Doc/lib/libtermios.tex
index 3d007c3..2d233f2 100644
--- a/Doc/lib/libtermios.tex
+++ b/Doc/lib/libtermios.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{termios}}
+\label{module-termios}
 \bimodindex{termios}
 \indexii{Posix}{I/O control}
 \indexii{tty}{I/O control}
@@ -76,7 +77,7 @@
 and a \code{try \ldots{} finally} statement to ensure that the old tty
 attributes are restored exactly no matter what happens:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 def getpass(prompt = "Password: "):
     import termios, TERMIOS, sys
     fd = sys.stdin.fileno()
@@ -89,9 +90,8 @@
     finally:
         termios.tcsetattr(fd, TERMIOS.TCSADRAIN, old)
     return passwd
-\end{verbatim}
-
-
+\end{verbatim}\ecode
+%
 \section{Standard Module \sectcode{TERMIOS}}
 \stmodindex{TERMIOS}
 \indexii{Posix}{I/O control}
diff --git a/Doc/lib/libthread.tex b/Doc/lib/libthread.tex
index f745384..080a35c 100644
--- a/Doc/lib/libthread.tex
+++ b/Doc/lib/libthread.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{thread}}
+\label{module-thread}
 \bimodindex{thread}
 
 This module provides low-level primitives for working with multiple
diff --git a/Doc/lib/libtime.tex b/Doc/lib/libtime.tex
index 7ee886d..e352505 100644
--- a/Doc/lib/libtime.tex
+++ b/Doc/lib/libtime.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{time}}
+\label{module-time}
 
 \bimodindex{time}
 This module provides various time-related functions.
diff --git a/Doc/lib/libtraceback.tex b/Doc/lib/libtraceback.tex
index ca9c374..4fcc4d1 100644
--- a/Doc/lib/libtraceback.tex
+++ b/Doc/lib/libtraceback.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{traceback}}
+\label{module-traceback}
 \stmodindex{traceback}
 
 \renewcommand{\indexsubitem}{(in module traceback)}
diff --git a/Doc/lib/libtypes2.tex b/Doc/lib/libtypes2.tex
index d0f20c9..afb02e5 100644
--- a/Doc/lib/libtypes2.tex
+++ b/Doc/lib/libtypes2.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{types}}
+\label{module-types}
 \stmodindex{types}
 
 \renewcommand{\indexsubitem}{(in module types)}
@@ -13,15 +14,15 @@
 Typical use is for functions that do different things depending on
 their argument types, like the following:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 from types import *
 def delete(list, item):
     if type(item) is IntType:
        del list[item]
     else:
        list.remove(item)
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The module defines the following names:
 
 \begin{datadesc}{NoneType}
diff --git a/Doc/lib/liburllib.tex b/Doc/lib/liburllib.tex
index 8fe7132..51a700a 100644
--- a/Doc/lib/liburllib.tex
+++ b/Doc/lib/liburllib.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{urllib}}
+\label{module-urllib}
 \stmodindex{urllib}
 \index{WWW}
 \index{World-Wide Web}
diff --git a/Doc/lib/liburlparse.tex b/Doc/lib/liburlparse.tex
index 36ca949..76fd9f8 100644
--- a/Doc/lib/liburlparse.tex
+++ b/Doc/lib/liburlparse.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{urlparse}}
+\label{module-urlparse}
 \stmodindex{urlparse}
 \index{WWW}
 \index{World-Wide Web}
@@ -34,16 +35,16 @@
 
 Example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 yields the tuple
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '')
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 If the \var{default_scheme} argument is specified, it gives the
 default addressing scheme, to be used only if the URL string does not
 specify one.  The default value for this argument is the empty string.
@@ -69,16 +70,16 @@
 
 Example:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 yields the string
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 'http://www.cwi.nl/%7Eguido/FAQ.html'
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 The \var{allow_fragments} argument has the same meaning as for
 \code{urlparse}.
 \end{funcdesc}
diff --git a/Doc/lib/libwhichdb.tex b/Doc/lib/libwhichdb.tex
index fbdfa8c..19bca3a 100644
--- a/Doc/lib/libwhichdb.tex
+++ b/Doc/lib/libwhichdb.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{whichdb}}
+\label{module-whichdb}
 \stmodindex{whichdb}
 
 The single function in this module attempts to guess which of the
diff --git a/Doc/lib/libwhrandom.tex b/Doc/lib/libwhrandom.tex
index 6094462..09d7816 100644
--- a/Doc/lib/libwhrandom.tex
+++ b/Doc/lib/libwhrandom.tex
@@ -1,4 +1,5 @@
 \section{Standard Module \sectcode{whrandom}}
+\label{module-whrandom}
 \stmodindex{whrandom}
 
 This module implements a Wichmann-Hill pseudo-random number generator
@@ -36,7 +37,14 @@
 the \code{whrandom} class, and makes the methods of that instance
 available at the module level.  Therefore one can write either 
 \code{N = whrandom.random()} or:
-\begin{verbatim}
+\bcode\begin{verbatim}
 generator = whrandom.whrandom()
 N = generator.random()
-\end{verbatim}
+\end{verbatim}\ecode
+%
+\begin{seealso}
+\seemodule{random}{generators for various random distributions}
+\seetext{Wichmann, B. A. \& Hill, I. D., ``Algorithm AS 183: 
+An efficient and portable pseudo-random number generator'', 
+Applied Statistics 31 (1982) 188-190}
+\end{seealso}
diff --git a/Doc/lib/libxdrlib.tex b/Doc/lib/libxdrlib.tex
index 1221fff..0de5695 100644
--- a/Doc/lib/libxdrlib.tex
+++ b/Doc/lib/libxdrlib.tex
@@ -1,4 +1,5 @@
 \section{Standard module \sectcode{xdrlib}}
+\label{module-xdrlib}
 \stmodindex{xdrlib}
 \index{XDR}
 
@@ -221,15 +222,15 @@
 
 Here is an example of how you would catch one of these exceptions:
 
-\begin{verbatim}
+\bcode\begin{verbatim}
 import xdrlib
 p = xdrlib.Packer()
 try:
     p.pack_double(8.01)
 except xdrlib.ConversionError, instance:
     print 'packing the double failed:', instance.msg
-\end{verbatim}
-
+\end{verbatim}\ecode
+%
 \subsection{Supporting Floating Point Data}
 
 Packing and unpacking floating point data,
diff --git a/Doc/lib/libzlib.tex b/Doc/lib/libzlib.tex
index ab30a32..28365ae 100644
--- a/Doc/lib/libzlib.tex
+++ b/Doc/lib/libzlib.tex
@@ -1,4 +1,5 @@
 \section{Built-in Module \sectcode{zlib}}
+\label{module-zlib}
 \bimodindex{zlib}
 
 For applications that require data compression, the functions in this
@@ -95,5 +96,8 @@
 action is to delete the object.
 \end{funcdesc}
 
+\begin{seealso}
+\seemodule{gzip}{reading and writing \file{gzip}-format files}
+\end{seealso}