Restructured library documentation
diff --git a/Doc/lib/libal.tex b/Doc/lib/libal.tex
new file mode 100644
index 0000000..708c54e
--- /dev/null
+++ b/Doc/lib/libal.tex
@@ -0,0 +1,177 @@
+\section{Built-in Module \sectcode{al}}
+\bimodindex{al}
+
+This module provides access to the audio facilities of the Indigo and
+4D/35 workstations, described in section 3A of the IRIX 4.0 man pages
+(and also available as an option in IRIX 3.3).  You'll need to read
+those man pages to understand what these functions do!
+Some of the functions are not available in releases below 4.0.5.
+Again, see the manual to check whether a specific function is
+available on your platform.
+
+Symbolic constants from the C header file \file{<audio.h>} are defined
+in the standard module \code{AL}, see below.
+
+\strong{Warning:} the current version of the audio library may dump core
+when bad argument values are passed rather than returning an error
+status.  Unfortunately, since the precise circumstances under which
+this may happen are undocumented and hard to check, the Python
+interface can provide no protection against this kind of problems.
+(One example is specifying an excessive queue size --- there is no
+documented upper limit.)
+
+Module \code{al} defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module al)}
+\begin{funcdesc}{openport}{name\, direction\, config}
+Equivalent to the C function ALopenport().  The name and direction
+arguments are strings.  The optional config argument is an opaque
+configuration object as returned by \code{al.newconfig()}.  The return
+value is an opaque port object; methods of port objects are described
+below.
+\end{funcdesc}
+
+\begin{funcdesc}{newconfig}{}
+Equivalent to the C function ALnewconfig().  The return value is a new
+opaque configuration object; methods of configuration objects are
+described below.
+\end{funcdesc}
+
+\begin{funcdesc}{queryparams}{device}
+Equivalent to the C function ALqueryparams().  The device argument is
+an integer.  The return value is a list of integers containing the
+data returned by ALqueryparams().
+\end{funcdesc}
+
+\begin{funcdesc}{getparams}{device\, list}
+Equivalent to the C function ALgetparams().  The device argument is an
+integer.  The list argument is a list such as returned by
+\code{queryparams}; it is modified in place (!).
+\end{funcdesc}
+
+\begin{funcdesc}{setparams}{device\, list}
+Equivalent to the C function ALsetparams().  The device argument is an
+integer.The list argument is a list such as returned by
+\code{al.queryparams}.
+\end{funcdesc}
+
+Configuration objects (returned by \code{al.newconfig()} have the
+following methods:
+
+\renewcommand{\indexsubitem}{(audio configuration object method)}
+\begin{funcdesc}{getqueuesize}{}
+Return the queue size; equivalent to the C function ALgetqueuesize().
+\end{funcdesc}
+
+\begin{funcdesc}{setqueuesize}{size}
+Set the queue size; equivalent to the C function ALsetqueuesize().
+\end{funcdesc}
+
+\begin{funcdesc}{getwidth}{}
+Get the sample width; equivalent to the C function ALgetwidth().
+\end{funcdesc}
+
+\begin{funcdesc}{getwidth}{width}
+Set the sample width; equivalent to the C function ALsetwidth().
+\end{funcdesc}
+
+\begin{funcdesc}{getchannels}{}
+Get the channel count; equivalent to the C function ALgetchannels().
+\end{funcdesc}
+
+\begin{funcdesc}{setchannels}{nchannels}
+Set the channel count; equivalent to the C function ALsetchannels().
+\end{funcdesc}
+
+\begin{funcdesc}{getsampfmt}{}
+Get the sample format; equivalent to the C function ALgetsampfmt().
+\end{funcdesc}
+
+\begin{funcdesc}{setsampfmt}{sampfmt}
+Set the sample format; equivalent to the C function ALsetsampfmt().
+\end{funcdesc}
+
+\begin{funcdesc}{getfloatmax}{}
+Get the maximum value for floating sample formats;
+equivalent to the C function ALgetfloatmax().
+\end{funcdesc}
+
+\begin{funcdesc}{setfloatmax}{floatmax}
+Set the maximum value for floating sample formats;
+equivalent to the C function ALsetfloatmax().
+\end{funcdesc}
+
+Port objects (returned by \code{al.openport()} have the following
+methods:
+
+\renewcommand{\indexsubitem}{(audio port object method)}
+\begin{funcdesc}{closeport}{}
+Close the port; equivalent to the C function ALcloseport().
+\end{funcdesc}
+
+\begin{funcdesc}{getfd}{}
+Return the file descriptor as an int; equivalent to the C function
+ALgetfd().
+\end{funcdesc}
+
+\begin{funcdesc}{getfilled}{}
+Return the number of filled samples; equivalent to the C function
+ALgetfilled().
+\end{funcdesc}
+
+\begin{funcdesc}{getfillable}{}
+Return the number of fillable samples; equivalent to the C function
+ALgetfillable().
+\end{funcdesc}
+
+\begin{funcdesc}{readsamps}{nsamples}
+Read a number of samples from the queue, blocking if necessary;
+equivalent to the C function ALreadsamples.  The data is returned as a
+string containing the raw data (e.g. 2 bytes per sample in big-endian
+byte order (high byte, low byte) if you have set the sample width to 2
+bytes.
+\end{funcdesc}
+
+\begin{funcdesc}{writesamps}{samples}
+Write samples into the queue, blocking if necessary; equivalent to the
+C function ALwritesamples.  The samples are encoded as described for
+the \code{readsamps} return value.
+\end{funcdesc}
+
+\begin{funcdesc}{getfillpoint}{}
+Return the `fill point'; equivalent to the C function ALgetfillpoint().
+\end{funcdesc}
+
+\begin{funcdesc}{setfillpoint}{fillpoint}
+Set the `fill point'; equivalent to the C function ALsetfillpoint().
+\end{funcdesc}
+
+\begin{funcdesc}{getconfig}{}
+Return a configuration object containing the current configuration of
+the port; equivalent to the C function ALgetconfig().
+\end{funcdesc}
+
+\begin{funcdesc}{setconfig}{config}
+Set the configuration from the argument, a configuration object;
+equivalent to the C function ALsetconfig().
+\end{funcdesc}
+
+\begin{funcdesc}{getstatus}{list}
+Get status information on last error
+equivalent to C function ALgetstatus().
+\end{funcdesc}
+
+\section{Standard Module \sectcode{AL}}
+\nodename{AL (uppercase)}
+\stmodindex{AL}
+
+This module defines symbolic constants needed to use the built-in
+module \code{al} (see above); they are equivalent to those defined in
+the C header file \file{<audio.h>} except that the name prefix
+\samp{AL_} is omitted.  Read the module source for a complete list of
+the defined names.  Suggested use:
+
+\bcode\begin{verbatim}
+import al
+from AL import *
+\end{verbatim}\ecode
diff --git a/Doc/lib/libamoeba.tex b/Doc/lib/libamoeba.tex
new file mode 100644
index 0000000..db4fefd
--- /dev/null
+++ b/Doc/lib/libamoeba.tex
@@ -0,0 +1,128 @@
+\chapter{AMOEBA ONLY}
+
+\section{Built-in Module \sectcode{amoeba}}
+
+\bimodindex{amoeba}
+This module provides some object types and operations useful for
+Amoeba applications.  It is only available on systems that support
+Amoeba operations.  RPC errors and other Amoeba errors are reported as
+the exception \code{amoeba.error = 'amoeba.error'}.
+
+The module \code{amoeba} defines the following items:
+
+\renewcommand{\indexsubitem}{(in module amoeba)}
+\begin{funcdesc}{name_append}{path\, cap}
+Stores a capability in the Amoeba directory tree.
+Arguments are the pathname (a string) and the capability (a capability
+object as returned by
+\code{name_lookup()}).
+\end{funcdesc}
+
+\begin{funcdesc}{name_delete}{path}
+Deletes a capability from the Amoeba directory tree.
+Argument is the pathname.
+\end{funcdesc}
+
+\begin{funcdesc}{name_lookup}{path}
+Looks up a capability.
+Argument is the pathname.
+Returns a
+\dfn{capability}
+object, to which various interesting operations apply, described below.
+\end{funcdesc}
+
+\begin{funcdesc}{name_replace}{path\, cap}
+Replaces a capability in the Amoeba directory tree.
+Arguments are the pathname and the new capability.
+(This differs from
+\code{name_append()}
+in the behavior when the pathname already exists:
+\code{name_append()}
+finds this an error while
+\code{name_replace()}
+allows it, as its name suggests.)
+\end{funcdesc}
+
+\begin{datadesc}{capv}
+A table representing the capability environment at the time the
+interpreter was started.
+(Alas, modifying this table does not affect the capability environment
+of the interpreter.)
+For example,
+\code{amoeba.capv['ROOT']}
+is the capability of your root directory, similar to
+\code{getcap("ROOT")}
+in C.
+\end{datadesc}
+
+\begin{excdesc}{error}
+The exception raised when an Amoeba function returns an error.
+The value accompanying this exception is a pair containing the numeric
+error code and the corresponding string, as returned by the C function
+\code{err_why()}.
+\end{excdesc}
+
+\begin{funcdesc}{timeout}{msecs}
+Sets the transaction timeout, in milliseconds.
+Returns the previous timeout.
+Initially, the timeout is set to 2 seconds by the Python interpreter.
+\end{funcdesc}
+
+\subsection{Capability Operations}
+
+Capabilities are written in a convenient ASCII format, also used by the
+Amoeba utilities
+{\it c2a}(U)
+and
+{\it a2c}(U).
+For example:
+
+\bcode\begin{verbatim}
+>>> amoeba.name_lookup('/profile/cap')
+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)}
+\begin{funcdesc}{dir_list}{}
+Returns a list of the names of the entries in an Amoeba directory.
+\end{funcdesc}
+
+\begin{funcdesc}{b_read}{offset\, maxsize}
+Reads (at most)
+\var{maxsize}
+bytes from a bullet file at offset
+\var{offset.}
+The data is returned as a string.
+EOF is reported as an empty string.
+\end{funcdesc}
+
+\begin{funcdesc}{b_size}{}
+Returns the size of a bullet file.
+\end{funcdesc}
+
+\begin{funcdesc}{dir_append}{}
+\funcline{dir_delete}{}\ 
+\funcline{dir_lookup}{}\ 
+\funcline{dir_replace}{}
+Like the corresponding
+\samp{name_}*
+functions, but with a path relative to the capability.
+(For paths beginning with a slash the capability is ignored, since this
+is the defined semantics for Amoeba.)
+\end{funcdesc}
+
+\begin{funcdesc}{std_info}{}
+Returns the standard info string of the object.
+\end{funcdesc}
+
+\begin{funcdesc}{tod_gettime}{}
+Returns the time (in seconds since the Epoch, in UCT, as for POSIX) from
+a time server.
+\end{funcdesc}
+
+\begin{funcdesc}{tod_settime}{t}
+Sets the time kept by a time server.
+\end{funcdesc}
diff --git a/Doc/lib/libarray.tex b/Doc/lib/libarray.tex
new file mode 100644
index 0000000..21122f0
--- /dev/null
+++ b/Doc/lib/libarray.tex
@@ -0,0 +1,109 @@
+\section{Built-in module \sectcode{array}}
+\bimodindex{array}
+\index{arrays}
+
+This module defines a new object type which can efficiently represent
+an array of basic values: characters, integers, floating point
+numbers.  Arrays are sequence types and behave very much like lists,
+except that the type of objects stored in them is constrained.  The
+type is specified at object creation time by using a \dfn{type code},
+which is a single character.  The following type codes are defined:
+
+\begin{tableiii}{|c|c|c|}{code}{Typecode}{Type}{Minimal size in bytes}
+\lineiii{'c'}{character}{1}
+\lineiii{'b'}{signed integer}{1}
+\lineiii{'h'}{signed integer}{2}
+\lineiii{'i'}{signed integer}{2}
+\lineiii{'l'}{signed integer}{4}
+\lineiii{'f'}{floating point}{4}
+\lineiii{'d'}{floating point}{8}
+\end{tableiii}
+
+The actual representation of values is determined by the machine
+architecture (strictly spoken, by the C implementation).  The actual
+size can be accessed through the \var{typecode} attribute.
+
+The module defines the following function:
+
+\renewcommand{\indexsubitem}{(in module array)}
+
+\begin{funcdesc}{array}{typecode\, initializer}
+Return a new array whose items are restricted by \var{typecode}, and
+initialized from the optional \var{initializer} value, which must be a
+list or a string.  The list or string is passed to the new array's
+\code{fromlist()} or \code{fromstring()} method (see below) to add
+initial items to the array.
+\end{funcdesc}
+
+Array objects support the following data items and methods:
+
+\begin{datadesc}{typecode}
+The typecode character used to create the array.
+\end{datadesc}
+
+\begin{datadesc}{itemsize}
+The length in bytes of one array item in the internal representation.
+\end{datadesc}
+
+\begin{funcdesc}{append}{x}
+Append a new item with value \var{x} to the end of the array.
+\end{funcdesc}
+
+\begin{funcdesc}{byteswap}{x}
+``Byteswap'' all items of the array.  This is only supported for
+integer values.  It is useful when reading data ffrom a file written
+on a machine with a different byte order.
+\end{funcdesc}
+
+\begin{funcdesc}{fromfile}{f\, n}
+Read \var{n} items (as machine values) from the file object \var{f}
+and append them to the end of the array.  If less than \var{n} items
+are available, \code{EOFError} is raised, but the items that were
+available are still inserted into the array.
+\end{funcdesc}
+
+\begin{funcdesc}{fromlist}{list}
+Appends items from the list.  This is equivalent to
+\code{for x in \var{list}: a.append(x)}
+except that if there is a type error, the array is unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{fromstring}{s}
+Appends items from the string, interpreting the string as an
+array of machine values (i.e. as if it had been read from a
+file using the \code{fromfile()} method).
+\end{funcdesc}
+
+\begin{funcdesc}{insert}{i\, x}
+Insert a new item with value \var{x} in the array before position
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{tofile}{f}
+Write all items (as machine values) to the file object \var{f}.
+\end{funcdesc}
+
+\begin{funcdesc}{tolist}{}
+Convert the array to an ordinary list with the same items.
+\end{funcdesc}
+
+\begin{funcdesc}{tostring}{}
+Convert the array to an array of machine values and return the
+string representation (the same sequence of bytes that would
+be written to a file by the \code{tofile()} method.)
+\end{funcdesc}
+
+When an array object is printed or converted to a string, it is
+represented as \code{array(\var{typecode}, \var{initializer})}.  The
+\var{initializer} is omitted if the array is empty, otherwise it is a
+string if the \var{typecode} is \code{'c'}, otherwise it is a list of
+numbers.  The string is guaranteed to be able to be converted back to
+an array with the same type and value using reverse quotes
+(\code{``}).  Examples:
+
+\bcode\begin{verbatim}
+array('l')
+array('c', 'hello world')
+array('l', [1, 2, 3, 4, 5])
+array('d', [1.0, 2.0, 3.14])
+\end{verbatim}\ecode
diff --git a/Doc/lib/libaudioop.tex b/Doc/lib/libaudioop.tex
new file mode 100644
index 0000000..734065a
--- /dev/null
+++ b/Doc/lib/libaudioop.tex
@@ -0,0 +1,241 @@
+\section{Built-in module \sectcode{audioop}}
+\bimodindex{audioop}
+
+The audioop module contains some useful operations on sound fragments.
+It operates on sound fragments consisting of signed integer samples of
+8, 16 or 32 bits wide, stored in Python strings.  This is the same
+format as used by the \code{al} and \code{sunaudiodev} modules.  All
+scalar items are integers, unless specified otherwise.
+
+A few of the more complicated operations only take 16-bit samples,
+otherwise the sample size (in bytes) is always a parameter of the operation.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module audioop)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unknown number of bytes
+per sample, etc.
+\end{excdesc}
+
+\begin{funcdesc}{add}{fragment1\, fragment2\, width}
+This function returns a fragment that is the addition of the two samples
+passed as parameters. \var{width} is the sample width in bytes, either
+\code{1}, \code{2} or \code{4}. Both fragments should have the same length.
+\end{funcdesc}
+
+\begin{funcdesc}{adpcm2lin}{adpcmfragment\, width\, state}
+This routine decodes an Intel/DVI ADPCM coded fragment to a linear
+fragment. See the description of \code{lin2adpcm} for details on ADPCM
+coding. The routine returns a tuple
+\code{(\var{sample}, \var{newstate})}
+where the sample has the width specified in \var{width}.
+\end{funcdesc}
+
+\begin{funcdesc}{adpcm32lin}{adpcmfragment\, width\, state}
+This routine decodes an alternative 3-bit ADPCM code. See
+\code{lin2adpcm3} for details.
+\end{funcdesc}
+
+\begin{funcdesc}{avg}{fragment\, width}
+This function returns the average over all samples in the fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{avgpp}{fragment\, width}
+This function returns the average peak-peak value over all samples in
+the fragment. No filtering is done, so the useability of this routine
+is questionable.
+\end{funcdesc}
+
+\begin{funcdesc}{bias}{fragment\, width\, bias}
+This function returns a fragment that is the original fragment with a
+bias added to each sample.
+\end{funcdesc}
+
+\begin{funcdesc}{cross}{fragment\, width}
+This function returns the number of zero crossings in the fragment
+passed as an argument.
+\end{funcdesc}
+
+\begin{funcdesc}{findfactor}{fragment\, reference}
+This routine (which only accepts 2-byte sample fragments) calculates a
+factor \var{F} such that \code{rms(add(fragment, mul(reference, -F)))}
+is minimal, i.e. it calculates the factor with which you should
+multiply \var{reference} to make it match as good as possible to
+\var{fragment}. The fragments should be the same size.
+
+The time taken by this routine is proportional to \code{len(fragment)}. 
+\end{funcdesc}
+
+\begin{funcdesc}{findfit}{fragment\, reference}
+This routine (which only accepts 2-byte sample fragments) tries to
+match \var{reference} as good as possible to a portion of
+\var{fragment} (which should be the longer fragment). It
+(conceptually) does this by taking slices out of \var{fragment}, using
+\code{findfactor} to compute the best match, and minimizing the
+result.
+It returns a tuple \code{(\var{offset}, \var{factor})} with offset the
+(integer) offset into \var{fragment} where the optimal match started
+and \var{factor} the floating-point factor as per findfactor.
+\end{funcdesc}
+
+\begin{funcdesc}{findmax}{fragment\, length}
+This routine (which only accepts 2-byte sample fragments) searches
+\var{fragment} for a slice of length \var{length} samples (not bytes!)
+with maximum energy, i.e. it returns \var{i} for which
+\code{rms(fragment[i*2:(i+length)*2])} is maximal.
+
+The routine takes time proportional to \code{len(fragment)}.
+\end{funcdesc}
+
+\begin{funcdesc}{getsample}{fragment\, width\, index}
+This function returns the value of sample \var{index} from the
+fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2lin}{fragment\, width\, newwidth}
+This function converts samples between 1-, 2- and 4-byte formats.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2adpcm}{fragment\, width\, state}
+This function converts samples to 4 bit Intel/DVI ADPCM encoding.
+ADPCM coding is an adaptive coding scheme, whereby each 4 bit number
+is the difference between one sample and the next, divided by a
+(varying) step. The Intel/DVI ADPCM algorythm has been selected for
+use by the IMA, so may well become a standard.
+
+\code{State} is a tuple containing the state of the coder. The coder
+returns a tuple \code{(\var{adpcmfrag}, \var{newstate})}, and the
+\var{newstate} should be passed to the next call of lin2adpcm.  In the
+initial call \code{None} can be passed as the state. \var{adpcmfrag} is
+the ADPCM coded fragment packed 2 4-bit values per byte.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2adpcm3}{fragment\, width\, state}
+This is an alternative ADPCM coder that uses only 3 bits per sample.
+It is not compatible with the Intel/DVI ADPCM coder and its output is
+not packed (due to laziness on the side of the author). Its use is
+discouraged.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2ulaw}{fragment\, width}
+This function converts samples in the audio fragment to U-LAW encoding
+and returns this as a python string. U-LAW is an audio encoding format
+whereby you get a dynamic range of about 14 bits using only 8 bit
+samples. It is used by the Sun audio hardware, among others.
+\end{funcdesc}
+
+\begin{funcdesc}{minmax}{fragment\, width}
+This function returns a tuple consisting of the minimum and maximum
+values of all samples in the sound fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{max}{fragment\, width}
+This function returns the maximum of the {\em absolute value} of all
+samples in a fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{maxpp}{fragment\, width}
+This function returns the maximum peak-peak value in the sound fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{mul}{fragment\, width\, factor}
+Mul returns a fragment that has all samples in the original framgent
+multiplied by the floating-point value \var{factor}. Overflow is
+silently ignored.
+\end{funcdesc}
+
+\begin{funcdesc}{reverse}{fragment\, width}
+This function reverses the samples in a fragment and returns the
+modified fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{tomono}{fragment\, width\, lfactor\, rfactor} 
+This function converts a stereo fragment to a mono fragment. The left
+channel is multiplied by \var{lfactor} and the right channel by
+\var{rfactor} before adding the two channels to give a mono signal.
+\end{funcdesc}
+
+\begin{funcdesc}{tostereo}{fragment\, width\, lfactor\, rfactor}
+This function generates a stereo fragment from a mono fragment. Each
+pair of samples in the stereo fragment are computed from the mono
+sample, whereby left channel samples are multiplied by \var{lfactor}
+and right channel samples by \var{rfactor}.
+\end{funcdesc}
+
+\begin{funcdesc}{mul}{fragment\, width\, factor}
+Mul returns a fragment that has all samples in the original framgent
+multiplied by the floating-point value \var{factor}. Overflow is
+silently ignored.
+\end{funcdesc}
+
+\begin{funcdesc}{rms}{fragment\, width\, factor}
+Returns the root-mean-square of the fragment, i.e.
+\iftexi
+the square root of the quotient of the sum of all squared sample value,
+divided by the sumber of samples.
+\else
+% in eqn: sqrt { sum S sub i sup 2  over n }
+\begin{displaymath}
+\catcode`_=8
+\sqrt{\frac{\sum{{S_{i}}^{2}}}{n}}
+\end{displaymath}
+\fi
+This is a measure of the power in an audio signal.
+\end{funcdesc}
+
+\begin{funcdesc}{ulaw2lin}{fragment\, width}
+This function converts sound fragments in ULAW encoding to linearly
+encoded sound fragments. ULAW encoding always uses 8 bits samples, so
+\var{width} refers only to the sample width of the output fragment here.
+\end{funcdesc}
+
+Note that operations such as \code{mul} or \code{max} make no
+distinction between mono and stereo fragments, i.e. all samples are
+treated equal.  If this is a problem the stereo fragment should be split
+into two mono fragments first and recombined later.  Here is an example
+of how to do that:
+\bcode\begin{verbatim}
+def mul_stereo(sample, width, lfactor, rfactor):
+    lsample = audioop.tomono(sample, width, 1, 0)
+    rsample = audioop.tomono(sample, width, 0, 1)
+    lsample = audioop.mul(sample, width, lfactor)
+    rsample = audioop.mul(sample, width, rfactor)
+    lsample = audioop.tostereo(lsample, width, 1, 0)
+    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
+you should send the \var{initial} state (the one you passed to
+lin2adpcm) along to the decoder, not the final state (as returned by
+the coder). If you want to use \code{struct} to store the state in
+binary you can code the first element (the predicted value) in 16 bits
+and the second (the delta index) in 8.
+
+The ADPCM coders have never been tried against other ADPCM coders,
+only against themselves. It could well be that I misinterpreted the
+standards in which case they will not be interoperable with the
+respective standards.
+
+The \code{find...} routines might look a bit funny at first sight.
+They are primarily meant for doing echo cancellation. A reasonably
+fast way to do this is to pick the most energetic piece of the output
+sample, locate that in the input sample and subtract the whole output
+sample from the input sample:
+\bcode\begin{verbatim}
+def echocancel(outputdata, inputdata):
+    pos = audioop.findmax(outputdata, 800)    # one tenth second
+    out_test = outputdata[pos*2:]
+    in_test = inputdata[pos*2:]
+    ipos, factor = audioop.findfit(in_test, out_test)
+    # Optional (for better cancellation):
+    # factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)], 
+    #              out_test)
+    prefill = '\0'*(pos+ipos)*2
+    postfill = '\0'*(len(inputdata)-len(prefill)-len(outputdata))
+    outputdata = prefill + audioop.mul(outputdata,2,-factor) + postfill
+    return audioop.add(inputdata, outputdata, 2)
+\end{verbatim}\ecode
diff --git a/Doc/lib/libbltin.tex b/Doc/lib/libbltin.tex
new file mode 100644
index 0000000..04cea20
--- /dev/null
+++ b/Doc/lib/libbltin.tex
@@ -0,0 +1,6 @@
+\section{Built-in Module \sectcode{__builtin__}}
+\bimodindex{__builtin__}
+
+This module provides direct access to all `built-in' identifier of
+Python; e.g. \code{__builtin__.open} is the full name for the built-in
+function \code{open}.
diff --git a/Doc/lib/libcrypto.tex b/Doc/lib/libcrypto.tex
new file mode 100644
index 0000000..467bee4
--- /dev/null
+++ b/Doc/lib/libcrypto.tex
@@ -0,0 +1,5 @@
+\chapter{CRYPTOGRAPHIC EXTENSIONS}
+
+The modules described in this chapter implement various algorithms of
+a cryptographic nature.  They are available at the discretion of the
+installation.
diff --git a/Doc/lib/libdbm.tex b/Doc/lib/libdbm.tex
new file mode 100644
index 0000000..7ff4ee5
--- /dev/null
+++ b/Doc/lib/libdbm.tex
@@ -0,0 +1,24 @@
+\section{Built-in Module \sectcode{dbm}}
+\bimodindex{dbm}
+
+Dbm provides python programs with an interface to the unix \code{ndbm}
+database library.  Dbm objects are of the mapping type, so they can be
+handled just like objects of the built-in \dfn{dictionary} type,
+except that keys and values are always strings, and printing a dbm
+object doesn't print the keys and values.
+
+The module defines the following constant and functions:
+
+\renewcommand{\indexsubitem}{(in module dbm)}
+\begin{excdesc}{error}
+Raised on dbm-specific errors, such as I/O errors. \code{KeyError} is
+raised for general mapping errors like specifying an incorrect key.
+\end{excdesc}
+
+\begin{funcdesc}{open}{filename\, rwmode\, filemode}
+Open a dbm database and return a mapping object.  \var{filename} is
+the name of the database file (without the \file{.dir} or \file{.pag}
+extensions), \var{rwmode} is \code{'r'}, \code{'w'} or \code{'rw'} as for
+\code{open}, and \var{filemode} is the unix mode of the file, used only
+when the database has to be created.
+\end{funcdesc}
diff --git a/Doc/lib/libexcs.tex b/Doc/lib/libexcs.tex
new file mode 100644
index 0000000..33083cd
--- /dev/null
+++ b/Doc/lib/libexcs.tex
@@ -0,0 +1,172 @@
+\section{Built-in Exceptions}
+
+Exceptions are string objects.  Two distinct string objects with the
+same value are different exceptions.  This is done to force programmers
+to use exception names rather than their string value when specifying
+exception handlers.  The string value of all built-in exceptions is
+their name, but this is not a requirement for user-defined exceptions
+or exceptions defined by library modules.
+
+The following exceptions can be generated by the interpreter or
+built-in functions.  Except where mentioned, they have an `associated
+value' indicating the detailed cause of the error.  This may be a
+string or a tuple containing several items of information (e.g., an
+error code and a string explaining the code).
+
+User code can raise built-in exceptions.  This can be used to test an
+exception handler or to report an error condition `just like' the
+situation in which the interpreter raises the same exception; but
+beware that there is nothing to prevent user code from raising an
+inappropriate error.
+
+\renewcommand{\indexsubitem}{(built-in exception)}
+
+\begin{excdesc}{AttributeError}
+% xref to attribute reference?
+  Raised when an attribute reference or assignment fails.  (When an
+  object does not support attributes references or attribute assignments
+  at all, \code{TypeError} is raised.)
+\end{excdesc}
+
+\begin{excdesc}{EOFError}
+% XXXJH xrefs here
+  Raised when one of the built-in functions (\code{input()} or
+  \code{raw_input()}) hits an end-of-file condition (\EOF{}) without
+  reading any data.
+% XXXJH xrefs here
+  (N.B.: the \code{read()} and \code{readline()} methods of file
+  objects return an empty string when they hit \EOF{}.)  No associated value.
+\end{excdesc}
+
+\begin{excdesc}{IOError}
+% XXXJH xrefs here
+  Raised when an I/O operation (such as a \code{print} statement, the
+  built-in \code{open()} function or a method of a file object) fails
+  for an I/O-related reason, e.g., `file not found', `disk full'.
+\end{excdesc}
+
+\begin{excdesc}{ImportError}
+% XXXJH xref to import statement?
+  Raised when an \code{import} statement fails to find the module
+  definition or when a \code{from {\rm \ldots} import} fails to find a
+  name that is to be imported.
+\end{excdesc}
+
+\begin{excdesc}{IndexError}
+% XXXJH xref to sequences
+  Raised when a sequence subscript is out of range.  (Slice indices are
+  silently truncated to fall in the allowed range; if an index is not a
+  plain integer, \code{TypeError} is raised.)
+\end{excdesc}
+
+\begin{excdesc}{KeyError}
+% XXXJH xref to mapping objects?
+  Raised when a mapping (dictionary) key is not found in the set of
+  existing keys.
+\end{excdesc}
+
+\begin{excdesc}{KeyboardInterrupt}
+  Raised when the user hits the interrupt key (normally
+  \kbd{Control-C} or
+\key{DEL}).  During execution, a check for interrupts is made regularly.
+% XXXJH xrefs here
+  Interrupts typed when a built-in function \code{input()} or
+  \code{raw_input()}) is waiting for input also raise this exception.  No
+  associated value.
+\end{excdesc}
+
+\begin{excdesc}{MemoryError}
+  Raised when an operation runs out of memory but the situation may
+  still be rescued (by deleting some objects).  The associated value is
+  a string indicating what kind of (internal) operation ran out of memory.
+  Note that because of the underlying memory management architecture
+  (\C{}'s \code{malloc()} function), the interpreter may not always be able
+  to completely recover from this situation; it nevertheless raises an
+  exception so that a stack traceback can be printed, in case a run-away
+  program was the cause.
+\end{excdesc}
+
+\begin{excdesc}{NameError}
+  Raised when a local or global name is not found.  This applies only
+  to unqualified names.  The associated value is the name that could
+  not be found.
+\end{excdesc}
+
+\begin{excdesc}{OverflowError}
+% XXXJH reference to long's and/or int's?
+  Raised when the result of an arithmetic operation is too large to be
+  represented.  This cannot occur for long integers (which would rather
+  raise \code{MemoryError} than give up).  Because of the lack of
+  standardization of floating point exception handling in \C{}, most
+  floating point operations also aren't checked.  For plain integers,
+  all operations that can overflow are checked except left shift, where
+  typical applications prefer to drop bits than raise an exception.
+\end{excdesc}
+
+\begin{excdesc}{RuntimeError}
+  Raised when an error is detected that doesn't fall in any of the
+  other categories.  The associated value is a string indicating what
+  precisely went wrong.  (This exception is a relic from a previous
+  version of the interpreter; it is not used any more except by some
+  extension modules that haven't been converted to define their own
+  exceptions yet.)
+\end{excdesc}
+
+\begin{excdesc}{SyntaxError}
+% XXXJH xref to these functions?
+  Raised when the parser encounters a syntax error.  This may occur in
+  an \code{import} statement, in an \code{exec} statement, in a call
+  to the built-in function \code{eval()} or \code{input()}, or
+  when reading the initial script or standard input (also
+  interactively).
+\end{excdesc}
+
+\begin{excdesc}{SystemError}
+  Raised when the interpreter finds an internal error, but the
+  situation does not look so serious to cause it to abandon all hope.
+  The associated value is a string indicating what went wrong (in
+  low-level terms).
+  
+  You should report this to the author or maintainer of your Python
+  interpreter.  Be sure to report the version string of the Python
+  interpreter (\code{sys.version}; it is also printed at the start of an
+  interactive Python session), the exact error message (the exception's
+  associated value) and if possible the source of the program that
+  triggered the error.
+\end{excdesc}
+
+\begin{excdesc}{SystemExit}
+% XXXJH xref to module sys?
+  This exception is raised by the \code{sys.exit()} function.  When it
+  is not handled, the Python interpreter exits; no stack traceback is
+  printed.  If the associated value is a plain integer, it specifies the
+  system exit status (passed to \C{}'s \code{exit()} function); if it is
+  \code{None}, the exit status is zero; if it has another type (such as
+  a string), the object's value is printed and the exit status is one.
+  
+  A call to \code{sys.exit} is translated into an exception so that
+  clean-up handlers (\code{finally} clauses of \code{try} statements)
+  can be executed, and so that a debugger can execute a script without
+  running the risk of losing control.  The \code{posix._exit()} function
+  can be used if it is absolutely positively necessary to exit
+  immediately (e.g., after a \code{fork()} in the child process).
+\end{excdesc}
+
+\begin{excdesc}{TypeError}
+  Raised when a built-in operation or function is applied to an object
+  of inappropriate type.  The associated value is a string giving
+  details about the type mismatch.
+\end{excdesc}
+
+\begin{excdesc}{ValueError}
+  Raised when a built-in operation or function receives an argument
+  that has the right type but an inappropriate value, and the
+  situation is not described by a more precise exception such as
+  \code{IndexError}.
+\end{excdesc}
+
+\begin{excdesc}{ZeroDivisionError}
+  Raised when the second argument of a division or modulo operation is
+  zero.  The associated value is a string indicating the type of the
+  operands and the operation.
+\end{excdesc}
diff --git a/Doc/lib/libfl.tex b/Doc/lib/libfl.tex
new file mode 100644
index 0000000..b705a6b
--- /dev/null
+++ b/Doc/lib/libfl.tex
@@ -0,0 +1,483 @@
+\section{Built-in Module \sectcode{fl}}
+\bimodindex{fl}
+
+This module provides an interface to the FORMS Library by Mark
+Overmars, version 2.0b.  For more info about FORMS, write to
+{\tt markov@cs.ruu.nl}.
+
+Most functions are literal translations of their C equivalents,
+dropping the initial \samp{fl_} from their name.  Constants used by the
+library are defined in module \code{FL} described below.
+
+The creation of objects is a little different in Python than in C:
+instead of the `current form' maintained by the library to which new
+FORMS objects are added, all functions that add a FORMS object to a
+button are methods of the Python object representing the form.
+Consequently, there are no Python equivalents for the C functions
+\code{fl_addto_form} and \code{fl_end_form}, and the equivalent of
+\code{fl_bgn_form} is called \code{fl.make_form}.
+
+Watch out for the somewhat confusing terminology: FORMS uses the word
+\dfn{object} for the buttons, sliders etc. that you can place in a form.
+In Python, `object' means any value.  The Python interface to FORMS
+introduces two new Python object types: form objects (representing an
+entire form) and FORMS objects (representing one button, slider etc.).
+Hopefully this isn't too confusing...
+
+There are no `free objects' in the Python interface to FORMS, nor is
+there an easy way to add object classes written in Python.  The FORMS
+interface to GL event handling is avaiable, though, so you can mix
+FORMS with pure GL windows.
+
+\strong{Please note:} importing \code{fl} implies a call to the GL function
+\code{foreground()} and to the FORMS routine \code{fl_init()}.
+
+\subsection{Functions defined in module \sectcode{fl}}
+
+Module \code{fl} defines the following functions.  For more information
+about what they do, see the description of the equivalent C function
+in the FORMS documentation:
+
+\renewcommand{\indexsubitem}{(in module fl)}
+\begin{funcdesc}{make_form}{type\, width\, height}
+Create a form with given type, width and height.  This returns a
+\dfn{form} object, whose methods are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{do_forms}{}
+The standard FORMS main loop.  Returns a Python object representing
+the FORMS object needing interaction, or the special value
+\code{FL.EVENT}.
+\end{funcdesc}
+
+\begin{funcdesc}{check_forms}{}
+Check for FORMS events.  Returns what \code{do_forms} above returns,
+or \code{None} if there is no event that immediately needs
+interaction.
+\end{funcdesc}
+
+\begin{funcdesc}{set_event_call_back}{function}
+Set the event callback function.
+\end{funcdesc}
+
+\begin{funcdesc}{set_graphics_mode}{rgbmode\, doublebuffering}
+Set the graphics modes.
+\end{funcdesc}
+
+\begin{funcdesc}{get_rgbmode}{}
+Return the current rgb mode.  This is the value of the C global
+variable \code{fl_rgbmode}.
+\end{funcdesc}
+
+\begin{funcdesc}{show_message}{str1\, str2\, str3}
+Show a dialog box with a three-line message and an OK button.
+\end{funcdesc}
+
+\begin{funcdesc}{show_question}{str1\, str2\, str3}
+Show a dialog box with a three-line message and YES and NO buttons.
+It returns \code{1} if the user pressed YES, \code{0} if NO.
+\end{funcdesc}
+
+\begin{funcdesc}{show_choice}{str1\, str2\, str3\, but1\, but2\, but3}
+Show a dialog box with a three-line message and up to three buttons.
+It returns the number of the button clicked by the user
+(\code{1}, \code{2} or \code{3}).
+The \var{but2} and \var{but3} arguments are optional.
+\end{funcdesc}
+
+\begin{funcdesc}{show_input}{prompt\, default}
+Show a dialog box with a one-line prompt message and text field in
+which the user can enter a string.  The second argument is the default
+input string.  It returns the string value as edited by the user.
+\end{funcdesc}
+
+\begin{funcdesc}{show_file_selector}{message\, directory\, pattern\, default}
+Show a dialog box inm which the user can select a file.  It returns
+the absolute filename selected by the user, or \code{None} if the user
+presses Cancel.
+\end{funcdesc}
+
+\begin{funcdesc}{get_directory}{}
+\funcline{get_pattern}{}
+\funcline{get_filename}{}
+These functions return the directory, pattern and filename (the tail
+part only) selected by the user in the last \code{show_file_selector}
+call.
+\end{funcdesc}
+
+\begin{funcdesc}{qdevice}{dev}
+\funcline{unqdevice}{dev}
+\funcline{isqueued}{dev}
+\funcline{qtest}{}
+\funcline{qread}{}
+%\funcline{blkqread}{?}
+\funcline{qreset}{}
+\funcline{qenter}{dev\, val}
+\funcline{get_mouse}{}
+\funcline{tie}{button\, valuator1\, valuator2}
+These functions are the FORMS interfaces to the corresponding GL
+functions.  Use these if you want to handle some GL events yourself
+when using \code{fl.do_events}.  When a GL event is detected that
+FORMS cannot handle, \code{fl.do_forms()} returns the special value
+\code{FL.EVENT} and you should call \code{fl.qread()} to read the
+event from the queue.  Don't use the equivalent GL functions!
+\end{funcdesc}
+
+\begin{funcdesc}{color}{}
+\funcline{mapcolor}{}
+\funcline{getmcolor}{}
+See the description in the FORMS documentation of \code{fl_color},
+\code{fl_mapcolor} and \code{fl_getmcolor}.
+\end{funcdesc}
+
+\subsection{Form object methods and data attributes}
+
+Form objects (returned by \code{fl.make_form()} above) have the
+following methods.  Each method corresponds to a C function whose name
+is prefixed with \samp{fl_}; and whose first argument is a form
+pointer; please refer to the official FORMS documentation for
+descriptions.
+
+All the \samp{add_{\rm \ldots}} functions return a Python object representing
+the FORMS object.  Methods of FORMS objects are described below.  Most
+kinds of FORMS object also have some methods specific to that kind;
+these methods are listed here.
+
+\begin{flushleft}
+\renewcommand{\indexsubitem}{(form object method)}
+\begin{funcdesc}{show_form}{placement\, bordertype\, name}
+  Show the form.
+\end{funcdesc}
+
+\begin{funcdesc}{hide_form}{}
+  Hide the form.
+\end{funcdesc}
+
+\begin{funcdesc}{redraw_form}{}
+  Redraw the form.
+\end{funcdesc}
+
+\begin{funcdesc}{set_form_position}{x\, y}
+Set the form's position.
+\end{funcdesc}
+
+\begin{funcdesc}{freeze_form}{}
+Freeze the form.
+\end{funcdesc}
+
+\begin{funcdesc}{unfreeze_form}{}
+  Unfreeze the form.
+\end{funcdesc}
+
+\begin{funcdesc}{activate_form}{}
+  Activate the form.
+\end{funcdesc}
+
+\begin{funcdesc}{deactivate_form}{}
+  Deactivate the form.
+\end{funcdesc}
+
+\begin{funcdesc}{bgn_group}{}
+  Begin a new group of objects; return a group object.
+\end{funcdesc}
+
+\begin{funcdesc}{end_group}{}
+  End the current group of objects.
+\end{funcdesc}
+
+\begin{funcdesc}{find_first}{}
+  Find the first object in the form.
+\end{funcdesc}
+
+\begin{funcdesc}{find_last}{}
+  Find the last object in the form.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_box}{type\, x\, y\, w\, h\, name}
+Add a box object to the form.
+No extra methods.
+\end{funcdesc}
+
+\begin{funcdesc}{add_text}{type\, x\, y\, w\, h\, name}
+Add a text object to the form.
+No extra methods.
+\end{funcdesc}
+
+%\begin{funcdesc}{add_bitmap}{type\, x\, y\, w\, h\, name}
+%Add a bitmap object to the form.
+%\end{funcdesc}
+
+\begin{funcdesc}{add_clock}{type\, x\, y\, w\, h\, name}
+Add a clock object to the form. \\
+Method:
+\code{get_clock}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_button}{type\, x\, y\, w\, h\,  name}
+Add a button object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_lightbutton}{type\, x\, y\, w\, h\, name}
+Add a lightbutton object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_roundbutton}{type\, x\, y\, w\, h\, name}
+Add a roundbutton object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_slider}{type\, x\, y\, w\, h\, name}
+Add a slider object to the form. \\
+Methods:
+\code{set_slider_value},
+\code{get_slider_value},
+\code{set_slider_bounds},
+\code{get_slider_bounds},
+\code{set_slider_return},
+\code{set_slider_size},
+\code{set_slider_precision},
+\code{set_slider_step}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_valslider}{type\, x\, y\, w\, h\, name}
+Add a valslider object to the form. \\
+Methods:
+\code{set_slider_value},
+\code{get_slider_value},
+\code{set_slider_bounds},
+\code{get_slider_bounds},
+\code{set_slider_return},
+\code{set_slider_size},
+\code{set_slider_precision},
+\code{set_slider_step}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_dial}{type\, x\, y\, w\, h\, name}
+Add a dial object to the form. \\
+Methods:
+\code{set_dial_value},
+\code{get_dial_value},
+\code{set_dial_bounds},
+\code{get_dial_bounds}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_positioner}{type\, x\, y\, w\, h\, name}
+Add a positioner object to the form. \\
+Methods:
+\code{set_positioner_xvalue},
+\code{set_positioner_yvalue},
+\code{set_positioner_xbounds},
+\code{set_positioner_ybounds},
+\code{get_positioner_xvalue},
+\code{get_positioner_yvalue},
+\code{get_positioner_xbounds},
+\code{get_positioner_ybounds}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_counter}{type\, x\, y\, w\, h\, name}
+Add a counter object to the form. \\
+Methods:
+\code{set_counter_value},
+\code{get_counter_value},
+\code{set_counter_bounds},
+\code{set_counter_step},
+\code{set_counter_precision},
+\code{set_counter_return}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_input}{type\, x\, y\, w\, h\, name}
+Add a input object to the form. \\
+Methods:
+\code{set_input},
+\code{get_input},
+\code{set_input_color},
+\code{set_input_return}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_menu}{type\, x\, y\, w\, h\, name}
+Add a menu object to the form. \\
+Methods:
+\code{set_menu},
+\code{get_menu},
+\code{addto_menu}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_choice}{type\, x\, y\, w\, h\, name}
+Add a choice object to the form. \\
+Methods:
+\code{set_choice},
+\code{get_choice},
+\code{clear_choice},
+\code{addto_choice},
+\code{replace_choice},
+\code{delete_choice},
+\code{get_choice_text},
+\code{set_choice_fontsize},
+\code{set_choice_fontstyle}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_browser}{type\, x\, y\, w\, h\, name}
+Add a browser object to the form. \\
+Methods:
+\code{set_browser_topline},
+\code{clear_browser},
+\code{add_browser_line},
+\code{addto_browser},
+\code{insert_browser_line},
+\code{delete_browser_line},
+\code{replace_browser_line},
+\code{get_browser_line},
+\code{load_browser},
+\code{get_browser_maxline},
+\code{select_browser_line},
+\code{deselect_browser_line},
+\code{deselect_browser},
+\code{isselected_browser_line},
+\code{get_browser},
+\code{set_browser_fontsize},
+\code{set_browser_fontstyle},
+\code{set_browser_specialkey}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_timer}{type\, x\, y\, w\, h\, name}
+Add a timer object to the form. \\
+Methods:
+\code{set_timer},
+\code{get_timer}.
+\end{funcdesc}
+\end{flushleft}
+
+Form objects have the following data attributes; see the FORMS
+documentation:
+
+\begin{tableiii}{|l|c|l|}{code}{Name}{Type}{Meaning}
+  \lineiii{window}{int (read-only)}{GL window id}
+  \lineiii{w}{float}{form width}
+  \lineiii{h}{float}{form height}
+  \lineiii{x}{float}{form x origin}
+  \lineiii{y}{float}{form y origin}
+  \lineiii{deactivated}{int}{nonzero if form is deactivated}
+  \lineiii{visible}{int}{nonzero if form is visible}
+  \lineiii{frozen}{int}{nonzero if form is frozen}
+  \lineiii{doublebuf}{int}{nonzero if double buffering on}
+\end{tableiii}
+
+\subsection{FORMS object methods and data attributes}
+
+Besides methods specific to particular kinds of FORMS objects, all
+FORMS objects also have the following methods:
+
+\renewcommand{\indexsubitem}{(FORMS object method)}
+\begin{funcdesc}{set_call_back}{function\, argument}
+Set the object's callback function and argument.  When the object
+needs interaction, the callback function will be called with two
+arguments: the object, and the callback argument.  (FORMS objects
+without a callback function are returned by \code{fl.do_forms()} or
+\code{fl.check_forms()} when they need interaction.)  Call this method
+without arguments to remove the callback function.
+\end{funcdesc}
+
+\begin{funcdesc}{delete_object}{}
+  Delete the object.
+\end{funcdesc}
+
+\begin{funcdesc}{show_object}{}
+  Show the object.
+\end{funcdesc}
+
+\begin{funcdesc}{hide_object}{}
+  Hide the object.
+\end{funcdesc}
+
+\begin{funcdesc}{redraw_object}{}
+  Redraw the object.
+\end{funcdesc}
+
+\begin{funcdesc}{freeze_object}{}
+  Freeze the object.
+\end{funcdesc}
+
+\begin{funcdesc}{unfreeze_object}{}
+  Unfreeze the object.
+\end{funcdesc}
+
+%\begin{funcdesc}{handle_object}{} XXX
+%\end{funcdesc}
+
+%\begin{funcdesc}{handle_object_direct}{} XXX
+%\end{funcdesc}
+
+FORMS objects have these data attributes; see the FORMS documentation:
+
+\begin{tableiii}{|l|c|l|}{code}{Name}{Type}{Meaning}
+  \lineiii{objclass}{int (read-only)}{object class}
+  \lineiii{type}{int (read-only)}{object type}
+  \lineiii{boxtype}{int}{box type}
+  \lineiii{x}{float}{x origin}
+  \lineiii{y}{float}{y origin}
+  \lineiii{w}{float}{width}
+  \lineiii{h}{float}{height}
+  \lineiii{col1}{int}{primary color}
+  \lineiii{col2}{int}{secondary color}
+  \lineiii{align}{int}{alignment}
+  \lineiii{lcol}{int}{label color}
+  \lineiii{lsize}{float}{label font size}
+  \lineiii{label}{string}{label string}
+  \lineiii{lstyle}{int}{label style}
+  \lineiii{pushed}{int (read-only)}{(see FORMS docs)}
+  \lineiii{focus}{int (read-only)}{(see FORMS docs)}
+  \lineiii{belowmouse}{int (read-only)}{(see FORMS docs)}
+  \lineiii{frozen}{int (read-only)}{(see FORMS docs)}
+  \lineiii{active}{int (read-only)}{(see FORMS docs)}
+  \lineiii{input}{int (read-only)}{(see FORMS docs)}
+  \lineiii{visible}{int (read-only)}{(see FORMS docs)}
+  \lineiii{radio}{int (read-only)}{(see FORMS docs)}
+  \lineiii{automatic}{int (read-only)}{(see FORMS docs)}
+\end{tableiii}
+
+\section{Standard Module \sectcode{FL}}
+\nodename{FL (uppercase)}
+\stmodindex{FL}
+
+This module defines symbolic constants needed to use the built-in
+module \code{fl} (see above); they are equivalent to those defined in
+the C header file \file{<forms.h>} except that the name prefix
+\samp{FL_} is omitted.  Read the module source for a complete list of
+the defined names.  Suggested use:
+
+\bcode\begin{verbatim}
+import fl
+from FL import *
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{flp}}
+\stmodindex{flp}
+
+This module defines functions that can read form definitions created
+by the `form designer' (\code{fdesign}) program that comes with the
+FORMS library (see module \code{fl} above).
+
+For now, see the file \file{flp.doc} in the Python library source
+directory for a description.
+
+XXX A complete description should be inserted here!
diff --git a/Doc/lib/libfm.tex b/Doc/lib/libfm.tex
new file mode 100644
index 0000000..acbc05d
--- /dev/null
+++ b/Doc/lib/libfm.tex
@@ -0,0 +1,86 @@
+\section{Built-in Module \sectcode{fm}}
+\bimodindex{fm}
+
+This module provides access to the IRIS {\em Font Manager} library.
+It is available only on Silicon Graphics machines.
+See also: 4Sight User's Guide, Section 1, Chapter 5: Using the IRIS
+Font Manager.
+
+This is not yet a full interface to the IRIS Font Manager.
+Among the unsupported features are: matrix operations; cache
+operations; character operations (use string operations instead); some
+details of font info; individual glyph metrics; and printer matching.
+
+It supports the following operations:
+
+\renewcommand{\indexsubitem}{(in module fm)}
+\begin{funcdesc}{init}{}
+Initialization function.
+Calls \code{fminit()}.
+It is normally not necessary to call this function, since it is called
+automatically the first time the \code{fm} module is imported.
+\end{funcdesc}
+
+\begin{funcdesc}{findfont}{fontname}
+Return a font handle object.
+Calls \code{fmfindfont(\var{fontname})}.
+\end{funcdesc}
+
+\begin{funcdesc}{enumerate}{}
+Returns a list of available font names.
+This is an interface to \code{fmenumerate()}.
+\end{funcdesc}
+
+\begin{funcdesc}{prstr}{string}
+Render a string using the current font (see the \code{setfont()} font
+handle method below).
+Calls \code{fmprstr(\var{string})}.
+\end{funcdesc}
+
+\begin{funcdesc}{setpath}{string}
+Sets the font search path.
+Calls \code{fmsetpath(string)}.
+(XXX Does not work!?!)
+\end{funcdesc}
+
+\begin{funcdesc}{fontpath}{}
+Returns the current font search path.
+\end{funcdesc}
+
+Font handle objects support the following operations:
+
+\renewcommand{\indexsubitem}{(font handle method)}
+\begin{funcdesc}{scalefont}{factor}
+Returns a handle for a scaled version of this font.
+Calls \code{fmscalefont(\var{fh}, \var{factor})}.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{}
+Makes this font the current font.
+Note: the effect is undone silently when the font handle object is
+deleted.
+Calls \code{fmsetfont(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfontname}{}
+Returns this font's name.
+Calls \code{fmgetfontname(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getcomment}{}
+Returns the comment string associated with this font.
+Raises an exception if there is none.
+Calls \code{fmgetcomment(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfontinfo}{}
+Returns a tuple giving some pertinent data about this font.
+This is an interface to \code{fmgetfontinfo()}.
+The returned tuple contains the following numbers:
+\code{(\var{printermatched}, \var{fixed_width}, \var{xorig}, \var{yorig}, \var{xsize}, \var{ysize}, \var{height}, \var{nglyphs})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getstrwidth}{string}
+Returns the width, in pixels, of the string when drawn in this font.
+Calls \code{fmgetstrwidth(\var{fh}, \var{string})}.
+\end{funcdesc}
diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex
new file mode 100644
index 0000000..e0b36f3
--- /dev/null
+++ b/Doc/lib/libfuncs.tex
@@ -0,0 +1,356 @@
+\section{Built-in Functions}
+
+The Python interpreter has a number of functions built into it that
+are always available.  They are listed here in alphabetical order.
+
+
+\renewcommand{\indexsubitem}{(built-in function)}
+\begin{funcdesc}{abs}{x}
+  Return the absolute value of a number.  The argument may be a plain
+  or long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{apply}{function\, args}
+The \var{function} argument must be a callable object (a user-defined or
+built-in function or method, or a class object) and the \var{args}
+argument must be a tuple.  The \var{function} is called with
+\var{args} as argument list; the number of arguments is the the length
+of the tuple.  (This is different from just calling
+\code{\var{func}(\var{args})}, since in that case there is always
+exactly one argument.)
+\end{funcdesc}
+
+\begin{funcdesc}{chr}{i}
+  Return a string of one character whose \ASCII{} code is the integer
+  \var{i}, e.g., \code{chr(97)} returns the string \code{'a'}.  This is the
+  inverse of \code{ord()}.  The argument must be in the range [0..255],
+  inclusive.
+\end{funcdesc}
+
+\begin{funcdesc}{cmp}{x\, y}
+  Compare the two objects \var{x} and \var{y} and return an integer
+  according to the outcome.  The return value is negative if \code{\var{x}
+  < \var{y}}, zero if \code{\var{x} == \var{y}} and strictly positive if
+  \code{\var{x} > \var{y}}.
+\end{funcdesc}
+
+\begin{funcdesc}{coerce}{x\, y}
+  Return a tuple consisting of the two numeric arguments converted to
+  a common type, using the same rules as used by arithmetic
+  operations.
+\end{funcdesc}
+
+\begin{funcdesc}{compile}{string\, filename\, kind}
+  Compile the \var{string} into a code object.  Code objects can be
+  executed by a \code{exec()} statement or evaluated by a call to
+  \code{eval()}.  The \var{filename} argument should
+  give the file from which the code was read; pass e.g. \code{'<string>'}
+  if it wasn't read from a file.  The \var{kind} argument specifies
+  what kind of code must be compiled; it can be \code{'exec'} if
+  \var{string} consists of a sequence of statements, or \code{'eval'}
+  if it consists of a single expression.
+\end{funcdesc}
+
+\begin{funcdesc}{dir}{}
+  Without arguments, return the list of names in the current local
+  symbol table.  With a module, class or class instance object as
+  argument (or anything else that has a \code{__dict__} attribute),
+  returns the list of names in that object's attribute dictionary.
+  The resulting list is sorted.  For example:
+
+\bcode\begin{verbatim}
+>>> import sys
+>>> dir()
+['sys']
+>>> dir(sys)
+['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout']
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{divmod}{a\, b}
+  Take two numbers as arguments and return a pair of integers
+  consisting of their integer quotient and remainder.  With mixed
+  operand types, the rules for binary arithmetic operators apply.  For
+  plain and long integers, the result is the same as
+  \code{(\var{a} / \var{b}, \var{a} \%{} \var{b})}.
+  For floating point numbers the result is the same as
+  \code{(math.floor(\var{a} / \var{b}), \var{a} \%{} \var{b})}.
+\end{funcdesc}
+
+\begin{funcdesc}{eval}{s\, globals\, locals}
+  The arguments are a string and two optional dictionaries.  The
+  string argument is parsed and evaluated as a Python expression
+  (technically speaking, a condition list) using the dictionaries as
+  global and local name space.  The string must not contain null bytes
+  or newline characters.  The return value is the
+  result of the expression.  If the third argument is omitted it
+  defaults to the second.  If both dictionaries are omitted, the
+  expression is executed in the environment where \code{eval} is
+  called.  Syntax errors are reported as exceptions.  Example:
+
+\bcode\begin{verbatim}
+>>> x = 1
+>>> print eval('x+1')
+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
+  passing \code{'eval'} to the \var{kind} argument.
+
+  Note: dynamic execution of statements is supported by the
+  \code{exec} statement.
+
+\end{funcdesc}
+
+\begin{funcdesc}{filter}{function\, list}
+Construct a list from those elements of \var{list} for which
+\var{function} returns true.  If \var{list} is a string or a tuple,
+the result also has that type; otherwise it is always a list.  If
+\var{function} is \code{None}, the identity function is assumed,
+i.e. all elements of \var{list} that are false (zero or empty) are
+removed.
+\end{funcdesc}
+
+\begin{funcdesc}{float}{x}
+  Convert a number to floating point.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{getattr}{object\, name}
+  The arguments are an object and a string.  The string must be the
+  name
+  of one of the object's attributes.  The result is the value of that
+  attribute.  For example, \code{getattr(\var{x}, '\var{foobar}')} is equivalent to
+  \code{\var{x}.\var{foobar}}.
+\end{funcdesc}
+
+\begin{funcdesc}{hasattr}{object\, name}
+  The arguments are an object and a string.  The result is 1 if the
+  string is the name of one of the object's attributes, 0 if not.
+  (This is implemented by calling \code{getattr(object, name)} and
+  seeing whether it raises an exception or not.)
+\end{funcdesc}
+
+\begin{funcdesc}{hash}{object}
+  Return the hash value of the object (if it has one).  Hash values
+  are 32-bit integers.  They are used to quickly compare dictionary
+  keys during a dictionary lookup.  Numeric values that compare equal
+  have the same hash value (even if they are of different types, e.g.
+  1 and 1.0).
+\end{funcdesc}
+
+\begin{funcdesc}{hex}{x}
+  Convert a number to a hexadecimal string.  The result is a valid
+  Python expression.
+\end{funcdesc}
+
+\begin{funcdesc}{id}{object}
+  Return the `identity' of an object.  This is an integer which is
+  guaranteed to be unique and constant for this object during its
+  lifetime.  (Two objects whose lifetimes are disjunct may have the
+  same id() value.)  (Implementation note: this is the address of the
+  object.)
+\end{funcdesc}
+
+\begin{funcdesc}{input}{prompt}
+  Almost equivalent to \code{eval(raw_input(\var{prompt}))}.  As for
+  \code{raw_input()}, the prompt argument is optional.  The difference is
+  that a long input expression may be broken over multiple lines using the
+  backslash convention.
+\end{funcdesc}
+
+\begin{funcdesc}{int}{x}
+  Convert a number to a plain integer.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{len}{s}
+  Return the length (the number of items) of an object.  The argument
+  may be a sequence (string, tuple or list) or a mapping (dictionary).
+\end{funcdesc}
+
+\begin{funcdesc}{long}{x}
+  Convert a number to a long integer.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{map}{function\, list\, ...}
+Apply \var{function} to every item of \var{list} and return a list
+of the results.  If additional \var{list} arguments are passed, 
+\var{function} must take that many arguments and is applied to
+the items of all lists in parallel; if a list is shorter than another
+it is assumed to be extended with \code{None} items.  If
+\var{function} is \code{None}, the identity function is assumed; if
+there are multiple list arguments, \code{map} returns a list
+consisting of tuples containing the corresponding items from all lists
+(i.e. a kind of transpose operation).  The \var{list} arguments may be
+any kind of sequence; the result is always a list.
+\end{funcdesc}
+
+\begin{funcdesc}{max}{s}
+  Return the largest item of a non-empty sequence (string, tuple or
+  list).
+\end{funcdesc}
+
+\begin{funcdesc}{min}{s}
+  Return the smallest item of a non-empty sequence (string, tuple or
+  list).
+\end{funcdesc}
+
+\begin{funcdesc}{oct}{x}
+  Convert a number to an octal string.  The result is a valid Python
+  expression.
+\end{funcdesc}
+
+\begin{funcdesc}{open}{filename\, mode}
+  % XXXJH xrefs here to Built-in types?
+  Return a new file object (described earlier under Built-in Types).
+  The string arguments are the same as for \code{stdio}'s
+  \code{fopen()}: \var{filename} is the file name to be opened,
+  \var{mode} indicates how the file is to be opened: \code{'r'} for
+  reading, \code{'w'} for writing (truncating an existing file), and
+  \code{'a'} opens it for appending.  Modes \code{'r+'}, \code{'w+'} and
+  \code{'a+'} open the file for updating, provided the underlying
+  \code{stdio} library understands this.  On systems that differentiate
+  between binary and text files, \code{'b'} appended to the mode opens
+  the file in binary mode.  If the file cannot be opened, \code{IOError}
+  is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{ord}{c}
+  Return the \ASCII{} value of a string of one character.  E.g.,
+  \code{ord('a')} returns the integer \code{97}.  This is the inverse of
+  \code{chr()}.
+\end{funcdesc}
+
+\begin{funcdesc}{pow}{x\, y}
+  Return \var{x} to the power \var{y}.  The arguments must have
+  numeric types.  With mixed operand types, the rules for binary
+  arithmetic operators apply.  The effective operand type is also the
+  type of the result; if the result is not expressible in this type, the
+  function raises an exception; e.g., \code{pow(2, -1)} is not allowed.
+\end{funcdesc}
+
+\begin{funcdesc}{range}{start\, end\, step}
+  This is a versatile function to create lists containing arithmetic
+  progressions.  It is most often used in \code{for} loops.  The
+  arguments must be plain integers.  If the \var{step} argument is
+  omitted, it defaults to \code{1}.  If the \var{start} argument is
+  omitted, it defaults to \code{0}.  The full form returns a list of
+  plain integers \code{[\var{start}, \var{start} + \var{step},
+  \var{start} + 2 * \var{step}, \ldots]}.  If \var{step} is positive,
+  the last element is the largest \code{\var{start} + \var{i} *
+  \var{step}} less than \var{end}; if \var{step} is negative, the last
+  element is the largest \code{\var{start} + \var{i} * \var{step}}
+  greater than \var{end}.  \var{step} must not be zero.  Example:
+
+\bcode\begin{verbatim}
+>>> range(10)
+[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+>>> range(1, 11)
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+>>> range(0, 30, 5)
+[0, 5, 10, 15, 20, 25]
+>>> range(0, 10, 3)
+[0, 3, 6, 9]
+>>> range(0, -10, -1)
+[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+>>> range(0)
+[]
+>>> range(1, 0)
+[]
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{raw_input}{prompt}
+  The string argument is optional; if present, it is written to
+  standard
+  output without a trailing newline.  The function then reads a line
+  from input, converts it to a string (stripping a trailing newline),
+  and returns that.  When \EOF{} is read, \code{EOFError} is raised.
+  Example:
+
+\bcode\begin{verbatim}
+>>> s = raw_input('--> ')
+--> Monty Python's Flying Circus
+>>> s
+'Monty Python\'s Flying Circus'
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{reduce}{function\, list\, initializer}
+Apply the binary \var{function} to the items of \var{list} so as to
+reduce the list to a single value.  E.g.,
+\code{reduce(lambda x, y: x*y, \var{list}, 1)} returns the product of
+the elements of \var{list}.  The optional \var{initializer} can be
+thought of as being prepended to \var{list} so as to allow reduction
+of an empty \var{list}.  The \var{list} arguments may be any kind of
+sequence.
+\end{funcdesc}
+
+\begin{funcdesc}{reload}{module}
+  Re-parse and re-initialize an already imported \var{module}.  The
+  argument must be a module object, so it must have been successfully
+  imported before.  This is useful if you have edited the module source
+  file using an external editor and want to try out the new version
+  without leaving the Python interpreter.  Note that if a module is
+  syntactically correct but its initialization fails, the first
+  \code{import} statement for it does not import the name, but does
+  create a (partially initialized) module object; to reload the module
+  you must first \code{import} it again (this will just make the
+  partially initialized module object available) before you can
+  \code{reload()} it.
+\end{funcdesc}
+
+\begin{funcdesc}{repr}{object}
+Return a string containing a printable representation of an object.
+This is the same value yielded by conversions (reverse quotes).
+It is sometimes useful to be able to access this operation as an
+ordinary function.  For many types, this function makes an attempt
+to return a string that would yield an object with the same value
+when passed to \code{eval()}.
+\end{funcdesc}
+
+\begin{funcdesc}{round}{x\, n}
+  Return the floating point value \var{x} rounded to \var{n} digits
+  after the decimal point.  If \var{n} is omitted, it defaults to zero.
+  The result is a floating point number.  Values are rounded to the
+  closest multiple of 10 to the power minus \var{n}; if two multiples
+  are equally close, rounding is done away from 0 (so e.g.
+  \code{round(0.5)} is \code{1.0} and \code{round(-0.5)} is \code{-1.0}).
+\end{funcdesc}
+
+\begin{funcdesc}{setattr}{object\, name\, value}
+  This is the counterpart of \code{getattr}.  The arguments are an
+  object, a string and an arbitrary value.  The string must be the name
+  of one of the object's attributes.  The function assigns the value to
+  the attribute, provided the object allows it.  For example,
+  \code{setattr(\var{x}, '\var{foobar}', 123)} is equivalent to
+  \code{\var{x}.\var{foobar} = 123}.
+\end{funcdesc}
+
+\begin{funcdesc}{str}{object}
+Return a string containing a nicely printable representation of an
+object.  For strings, this returns the string itself.  The difference
+with \code{repr(\var{object}} is that \code{str(\var{object}} does not
+always attempt to return a string that is acceptable to \code{eval()};
+its goal is to return a printable string.
+\end{funcdesc}
+
+\begin{funcdesc}{type}{object}
+% XXXJH xref to buil-in objects here?
+  Return the type of an \var{object}.  The return value is a type
+  object.  There is not much you can do with type objects except compare
+  them to other type objects; e.g., the following checks if a variable
+  is a string:
+
+\bcode\begin{verbatim}
+>>> if type(x) == type(''): print 'It is a string'
+\end{verbatim}\ecode
+\end{funcdesc}
diff --git a/Doc/lib/libgetopt.tex b/Doc/lib/libgetopt.tex
new file mode 100644
index 0000000..250d31f
--- /dev/null
+++ b/Doc/lib/libgetopt.tex
@@ -0,0 +1,55 @@
+\section{Standard Module \sectcode{getopt}}
+
+\stmodindex{getopt}
+This module helps scripts to parse the command line arguments in
+\code{sys.argv}.
+It uses the same conventions as the \UNIX{}
+\code{getopt()}
+function.
+It defines the function
+\code{getopt.getopt(args, options)}
+and the exception
+\code{getopt.error}.
+
+The first argument to
+\code{getopt()}
+is the argument list passed to the script with its first element
+chopped off (i.e.,
+\code{sys.argv[1:]}).
+The second argument is the string of option letters that the
+script wants to recognize, with options that require an argument
+followed by a colon (i.e., the same format that \UNIX{}
+\code{getopt()}
+uses).
+The return value consists of two elements: the first is a list of
+option-and-value pairs; the second is the list of program arguments
+left after the option list was stripped (this is a trailing slice of the
+first argument).
+Each option-and-value pair returned has the option as its first element,
+prefixed with a hyphen (e.g.,
+\code{'-x'}),
+and the option argument as its second element, or an empty string if the
+option has no argument.
+The options occur in the list in the same order in which they were
+found, thus allowing multiple occurrences.
+Example:
+
+\bcode\begin{verbatim}
+>>> import getopt, string
+>>> args = string.split('-a -b -cfoo -d bar a1 a2')
+>>> args
+['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
+>>> optlist, args = getopt.getopt(args, 'abc:d:')
+>>> optlist
+[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
+>>> args
+['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
+when an option requiring an argument is given none.
+The argument to the exception is a string indicating the cause of the
+error.
diff --git a/Doc/lib/libgl.tex b/Doc/lib/libgl.tex
new file mode 100644
index 0000000..e86c04b
--- /dev/null
+++ b/Doc/lib/libgl.tex
@@ -0,0 +1,197 @@
+\section{Built-in Module \sectcode{gl}}
+\bimodindex{gl}
+
+This module provides access to the Silicon Graphics
+{\em Graphics Library}.
+It is available only on Silicon Graphics machines.
+
+\strong{Warning:}
+Some illegal calls to the GL library cause the Python interpreter to dump
+core.
+In particular, the use of most GL calls is unsafe before the first
+window is opened.
+
+The module is too large to document here in its entirety, but the
+following should help you to get started.
+The parameter conventions for the C functions are translated to Python as
+follows:
+
+\begin{itemize}
+\item
+All (short, long, unsigned) int values are represented by Python
+integers.
+\item
+All float and double values are represented by Python floating point
+numbers.
+In most cases, Python integers are also allowed.
+\item
+All arrays are represented by one-dimensional Python lists.
+In most cases, tuples are also allowed.
+\item
+\begin{sloppypar}
+All string and character arguments are represented by Python strings,
+for instance,
+\code{winopen('Hi There!')}
+and
+\code{rotate(900, 'z')}.
+\end{sloppypar}
+\item
+All (short, long, unsigned) integer arguments or return values that are
+only used to specify the length of an array argument are omitted.
+For example, the C call
+
+\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.
+If more than one value must be returned, the return value is a tuple.
+If the C function has both a regular return value (that is not omitted
+because of the previous rule) and an output argument, the return value
+comes first in the tuple.
+Examples: the C call
+
+\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
+conventions:
+
+\renewcommand{\indexsubitem}{(in module gl)}
+\begin{funcdesc}{varray}{argument}
+%JHXXX the argument-argument added
+Equivalent to but faster than a number of
+\code{v3d()}
+calls.
+The \var{argument} is a list (or tuple) of points.
+Each point must be a tuple of coordinates
+\code{(\var{x}, \var{y}, \var{z})} or \code{(\var{x}, \var{y})}.
+The points may be 2- or 3-dimensional but must all have the
+same dimension.
+Float and int values may be mixed however.
+The points are always converted to 3D double precision points
+by assuming \code{\var{z} = 0.0} if necessary (as indicated in the man page),
+and for each point
+\code{v3d()}
+is called.
+\end{funcdesc}
+
+\begin{funcdesc}{nvarray}{}
+Equivalent to but faster than a number of
+\code{n3f}
+and
+\code{v3f}
+calls.
+The argument is an array (list or tuple) of pairs of normals and points.
+Each pair is a tuple of a point and a normal for that point.
+Each point or normal must be a tuple of coordinates
+\code{(\var{x}, \var{y}, \var{z})}.
+Three coordinates must be given.
+Float and int values may be mixed.
+For each pair,
+\code{n3f()}
+is called for the normal, and then
+\code{v3f()}
+is called for the point.
+\end{funcdesc}
+
+\begin{funcdesc}{vnarray}{}
+Similar to 
+\code{nvarray()}
+but the pairs have the point first and the normal second.
+\end{funcdesc}
+
+\begin{funcdesc}{nurbssurface}{s_k\, t_k\, ctl\, s_ord\, t_ord\, type}
+% XXX s_k[], t_k[], ctl[][]
+%\itembreak
+Defines a nurbs surface.
+The dimensions of
+\code{\var{ctl}[][]}
+are computed as follows:
+\code{[len(\var{s_k}) - \var{s_ord}]},
+\code{[len(\var{t_k}) - \var{t_ord}]}.
+\end{funcdesc}
+
+\begin{funcdesc}{nurbscurve}{knots\, ctlpoints\, order\, type}
+Defines a nurbs curve.
+The length of ctlpoints is
+\code{len(\var{knots}) - \var{order}}.
+\end{funcdesc}
+
+\begin{funcdesc}{pwlcurve}{points\, type}
+Defines a piecewise-linear curve.
+\var{points}
+is a list of points.
+\var{type}
+must be
+\code{N_ST}.
+\end{funcdesc}
+
+\begin{funcdesc}{pick}{n}
+\funcline{select}{n}
+The only argument to these functions specifies the desired size of the
+pick or select buffer.
+\end{funcdesc}
+
+\begin{funcdesc}{endpick}{}
+\funcline{endselect}{}
+These functions have no arguments.
+They return a list of integers representing the used part of the
+pick/select buffer.
+No method is provided to detect buffer overrun.
+\end{funcdesc}
+
+Here is a tiny but complete example GL program in Python:
+
+\bcode\begin{verbatim}
+import gl, GL, time
+
+def main():
+    gl.foreground()
+    gl.prefposition(500, 900, 500, 900)
+    w = gl.winopen('CrissCross')
+    gl.ortho2(0.0, 400.0, 0.0, 400.0)
+    gl.color(GL.WHITE)
+    gl.clear()
+    gl.color(GL.RED)
+    gl.bgnline()
+    gl.v2f(0.0, 0.0)
+    gl.v2f(400.0, 400.0)
+    gl.endline()
+    gl.bgnline()
+    gl.v2f(400.0, 0.0)
+    gl.v2f(0.0, 400.0)
+    gl.endline()
+    time.sleep(5)
+
+main()
+\end{verbatim}\ecode
+
+\section{Standard Modules \sectcode{GL} and \sectcode{DEVICE}}
+\stmodindex{GL}
+\stmodindex{DEVICE}
+
+These modules define the constants used by the Silicon Graphics
+{\em Graphics Library}
+that C programmers find in the header files
+\file{<gl/gl.h>}
+and
+\file{<gl/device.h>}.
+Read the module source files for details.
diff --git a/Doc/lib/libgrp.tex b/Doc/lib/libgrp.tex
new file mode 100644
index 0000000..1c4dd15
--- /dev/null
+++ b/Doc/lib/libgrp.tex
@@ -0,0 +1,32 @@
+\section{Built-in Module \sectcode{grp}}
+
+\bimodindex{grp}
+This module provides access to the \UNIX{} group database.
+It is available on all \UNIX{} versions.
+
+Group database entries are reported as 4-tuples containing the
+following items from the group database (see \file{<grp.h>}), in order:
+\code{gr_name},
+\code{gr_passwd},
+\code{gr_gid},
+\code{gr_mem}.
+The gid is an integer, name and password are strings, and the member
+list is a list of strings.
+(Note that most users are not explicitly listed as members of the
+group(s) they are in.)
+An exception is raised if the entry asked for cannot be found.
+
+It defines the following items:
+
+\renewcommand{\indexsubitem}{(in module grp)}
+\begin{funcdesc}{getgrgid}{gid}
+Return the group database entry for the given numeric group ID.
+\end{funcdesc}
+
+\begin{funcdesc}{getgrnam}{name}
+Return the group database entry for the given group name.
+\end{funcdesc}
+
+\begin{funcdesc}{getgrall}{}
+Return a list of all available group entries entries, in arbitrary order.
+\end{funcdesc}
diff --git a/Doc/lib/libimageop.tex b/Doc/lib/libimageop.tex
new file mode 100644
index 0000000..c1cdac4
--- /dev/null
+++ b/Doc/lib/libimageop.tex
@@ -0,0 +1,87 @@
+\section{Built-in module \sectcode{imageop}}
+\bimodindex{imageop}
+
+The imageop module contains some useful operations on images.
+It operates on images consisting of 8 or 32 bit pixels
+stored in python strings. This is the same format as used
+by \code{gl.lrectwrite} and the \code{imgfile} module.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module imageop)}
+
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unknown number of bits
+per pixel, etc.
+\end{excdesc}
+
+
+\begin{funcdesc}{crop}{image\, psize\, width\, height\, x0\, y0\, x1\, y1}
+This function takes the image in \code{image}, which should by
+\code{width} by \code{height} in size and consist of pixels of
+\code{psize} bytes, and returns the selected part of that image. \code{X0},
+\code{y0}, \code{x1} and \code{y1} are like the \code{lrectread}
+parameters, i.e. the boundary is included in the new image.
+The new boundaries need not be inside the picture. Pixels that fall
+outside the old image will have their value set to zero.
+If \code{x0} is bigger than \code{x1} the new image is mirrored. The
+same holds for the y coordinates.
+\end{funcdesc}
+
+\begin{funcdesc}{scale}{image\, psize\, width\, height\, newwidth\, newheight}
+This function returns a \code{image} scaled to size \code{newwidth} by
+\code{newheight}. No interpolation is done, scaling is done by
+simple-minded pixel duplication or removal. Therefore, computer-generated
+images or dithered images will not look nice after scaling.
+\end{funcdesc}
+
+\begin{funcdesc}{tovideo}{image\, psize\, width\, height}
+This function runs a vertical low-pass filter over an image. It does
+so by computing each destination pixel as the average of two
+vertically-aligned source pixels. The main use of this routine is to
+forestall excessive flicker if the image is displayed on a video
+device that uses interlacing, hence the name.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2mono}{image\, width\, height\, threshold}
+This function converts a 8-bit deep greyscale image to a 1-bit deep
+image by tresholding all the pixels. The resulting image is tightly
+packed and is probably only useful as an argument to \code{mono2grey}.
+\end{funcdesc}
+
+\begin{funcdesc}{dither2mono}{image\, width\, height}
+This function also converts an 8-bit greyscale image to a 1-bit
+monochrome image but it uses a (simple-minded) dithering algorithm.
+\end{funcdesc}
+
+\begin{funcdesc}{mono2grey}{image\, width\, height\, p0\, p1}
+This function converts a 1-bit monochrome image to an 8 bit greyscale
+or color image. All pixels that are zero-valued on input get value
+\code{p0} on output and all one-value input pixels get value \code{p1}
+on output. To convert a monochrome black-and-white image to greyscale
+pass the values \code{0} and \code{255} respectively.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2grey4}{image\, width\, height}
+Convert an 8-bit greyscale image to a 4-bit greyscale image without
+dithering.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2grey2}{image\, width\, height}
+Convert an 8-bit greyscale image to a 2-bit greyscale image without
+dithering.
+\end{funcdesc}
+
+\begin{funcdesc}{dither2grey2}{image\, width\, height}
+Convert an 8-bit greyscale image to a 2-bit greyscale image with
+dithering. As for \code{dither2mono}, the dithering algorithm is
+currently very simple.
+\end{funcdesc}
+
+\begin{funcdesc}{grey42grey}{image\, width\, height}
+Convert a 4-bit greyscale image to an 8-bit greyscale image.
+\end{funcdesc}
+
+\begin{funcdesc}{grey22grey}{image\, width\, height}
+Convert a 2-bit greyscale image to an 8-bit greyscale image.
+\end{funcdesc}
diff --git a/Doc/lib/libimgfile.tex b/Doc/lib/libimgfile.tex
new file mode 100644
index 0000000..99efaf4
--- /dev/null
+++ b/Doc/lib/libimgfile.tex
@@ -0,0 +1,63 @@
+\section{Built-in module \sectcode{imgfile}}
+\bimodindex{imgfile}
+
+The imgfile module allows python programs to access SGI imglib image
+files (also known as \file{.rgb} files).  The module is far from
+complete, but is provided anyway since the functionality that there is
+is enough in some cases.  Currently, colormap files are not supported.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module imgfile)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unsupported file type, etc.
+\end{excdesc}
+
+\begin{funcdesc}{getsizes}{file}
+This function returns a tuple \code{(\var{x}, \var{y}, \var{z})} where
+\var{x} and \var{y} are the size of the image in pixels and
+\var{z} is the number of
+bytes per pixel. Only 3 byte RGB pixels and 1 byte greyscale pixels
+are currently supported.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{file}
+This function reads and decodes the image on the specified file, and
+returns it as a python string. The string has either 1 byte greyscale
+pixels or 4 byte RGBA pixels. The bottom left pixel is the first in
+the string. This format is suitable to pass to \code{gl.lrectwrite},
+for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{readscaled}{file\, x\, y\, filter\, blur}
+This function is identical to read but it returns an image that is
+scaled to the given \var{x} and \var{y} sizes. If the \var{filter} and
+\var{blur} parameters are omitted scaling is done by
+simply dropping or duplicating pixels, so the result will be less than
+perfect, especially for computer-generated images.
+
+Alternatively, you can specify a filter to use to smoothen the image
+after scaling. The filter forms supported are \code{'impulse'},
+\code{'box'}, \code{'triangle'}, \code{'quadratic'} and
+\code{'gaussian'}. If a filter is specified \var{blur} is an optional
+parameter specifying the blurriness of the filter. It defaults to \code{1.0}.
+
+Readscaled makes no
+attempt to keep the aspect ratio correct, so that is the users'
+responsibility.
+\end{funcdesc}
+
+\begin{funcdesc}{ttob}{flag}
+This function sets a global flag which defines whether the scan lines
+of the image are read or written from bottom to top (flag is zero,
+compatible with SGI GL) or from top to bottom(flag is one,
+compatible with X).  The default is zero.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{file\, data\, x\, y\, z}
+This function writes the RGB or greyscale data in \var{data} to image
+file \var{file}. \var{x} and \var{y} give the size of the image,
+\var{z} is 1 for 1 byte greyscale images or 3 for RGB images (which are
+stored as 4 byte values of which only the lower three bytes are used).
+These are the formats returned by \code{gl.lrectread}.
+\end{funcdesc}
diff --git a/Doc/lib/libintro.tex b/Doc/lib/libintro.tex
new file mode 100644
index 0000000..fa591ec
--- /dev/null
+++ b/Doc/lib/libintro.tex
@@ -0,0 +1,17 @@
+\chapter{Introduction}
+
+The Python library consists of three parts, with different levels of
+integration with the interpreter.
+Closest to the interpreter are built-in types, exceptions and functions.
+Next are built-in modules, which are written in \C{} and linked statically
+with the interpreter.
+Finally there are standard modules that are implemented entirely in
+Python, but are always available.
+For efficiency, some standard modules may become built-in modules in
+future versions of the interpreter.
+\indexii{built-in}{types}
+\indexii{built-in}{exceptions}
+\indexii{built-in}{functions}
+\indexii{built-in}{modules}
+\indexii{standard}{modules}
+\indexii{\C{}}{language}
diff --git a/Doc/lib/libjpeg.tex b/Doc/lib/libjpeg.tex
new file mode 100644
index 0000000..d0c1604
--- /dev/null
+++ b/Doc/lib/libjpeg.tex
@@ -0,0 +1,51 @@
+\section{Built-in Module \sectcode{jpeg}}
+\bimodindex{jpeg}
+
+The module jpeg provides access to the jpeg compressor and
+decompressor written by the Independent JPEG Group. JPEG is a (draft?)
+standard for compressing pictures.  For details on jpeg or the
+Indepent JPEG Group software refer to the JPEG standard or the
+documentation provided with the software.
+
+The jpeg module defines these functions:
+
+\renewcommand{\indexsubitem}{(in module jpeg)}
+\begin{funcdesc}{compress}{data\, w\, h\, b}
+Treat data as a pixmap of width w and height h, with b bytes per
+pixel.  The data is in sgi gl order, so the first pixel is in the
+lower-left corner. This means that lrectread return data can
+immedeately be passed to compress.  Currently only 1 byte and 4 byte
+pixels are allowed, the former being treaded as greyscale and the
+latter as RGB color.  Compress returns a string that contains the
+compressed picture, in JFIF format.
+\end{funcdesc}
+
+\begin{funcdesc}{decompress}{data}
+Data is a string containing a picture in JFIF format. It returns a
+tuple
+\code{(\var{data}, \var{width}, \var{height}, \var{bytesperpixel})}.
+Again, the data is suitable to pass to lrectwrite.
+\end{funcdesc}
+
+\begin{funcdesc}{setoption}{name\, value}
+Set various options.  Subsequent compress and decompress calls
+will use these options.  The following options are available:
+\begin{description}
+\item[\code{'forcegray'}]
+Force output to be grayscale, even if input is RGB.
+
+\item[\code{'quality'}]
+Set the quality of the compressed image to a
+value between \code{0} and \code{100} (default is \code{75}).  Compress only.
+
+\item[\code{'optimize'}]
+Perform huffman table optimization.  Takes longer, but results in
+smaller compressed image.  Compress only.
+
+\item[\code{'smooth'}]
+Perform inter-block smoothing on uncompressed image.  Only useful for
+low-quality images.  Decompress only.
+\end{description}
+\end{funcdesc}
+
+Compress and uncompress raise the error jpeg.error in case of errors.
diff --git a/Doc/lib/libmain.tex b/Doc/lib/libmain.tex
new file mode 100644
index 0000000..c730a03
--- /dev/null
+++ b/Doc/lib/libmain.tex
@@ -0,0 +1,6 @@
+\section{Built-in Module \sectcode{__main__}}
+
+\bimodindex{__main__}
+This module represents the (otherwise anonymous) scope in which the
+interpreter's main program executes --- commands read either from
+standard input or from a script file.
diff --git a/Doc/lib/libmarshal.tex b/Doc/lib/libmarshal.tex
new file mode 100644
index 0000000..2b0a400
--- /dev/null
+++ b/Doc/lib/libmarshal.tex
@@ -0,0 +1,59 @@
+\section{Built-in Module \sectcode{marshal}}
+
+\bimodindex{marshal}
+This module contains functions that can read and write Python
+values in a binary format.  The format is specific to Python, but
+independent of machine architecture issues (e.g., you can write a
+Python value to a file on a VAX, transport the file to a Mac, and read
+it back there).  Details of the format not explained here; read the
+source if you're interested.%
+\footnote{The name of this module stems from a bit of terminology used
+by the designers of Modula-3 (amongst others), who use the term
+``marshalling'' for shipping of data around in a self-contained form.
+Strictly speaking, ``to marshal'' means to convert some data from
+internal to external form (in an RPC buffer for instance) and
+``unmarshalling'' for the reverse process.}
+
+
+Not all Python object types are supported; in general, only objects
+whose value is independent from a particular invocation of Python can
+be written and read by this module.  The following types are supported:
+\code{None}, integers, long integers, floating point numbers,
+strings, tuples, lists, dictionaries, and code objects, where it
+should be understood that tuples, lists and dictionaries are only
+supported as long as the values contained therein are themselves
+supported; and recursive lists and dictionaries should not be written
+(they will cause an infinite loop).
+
+There are functions that read/write files as well as functions
+operating on strings.
+
+The module defines these functions:
+
+\renewcommand{\indexsubitem}{(in module marshal)}
+\begin{funcdesc}{dump}{value\, file}
+  Write the value on the open file.  The value must be a supported
+  type.  The file must be an open file object such as
+  \code{sys.stdout} or returned by \code{open()} or
+  \code{posix.popen()}.
+  
+  If the value has an unsupported type, garbage is written which cannot
+  be read back by \code{load()}.
+\end{funcdesc}
+
+\begin{funcdesc}{load}{file}
+  Read one value from the open file and return it.  If no valid value
+  is read, raise \code{EOFError}, \code{ValueError} or
+  \code{TypeError}.  The file must be an open file object.
+\end{funcdesc}
+
+\begin{funcdesc}{dumps}{value}
+  Return the string that would be written to a file by
+  \code{dump(value, file)}.  The value must be a supported type.
+\end{funcdesc}
+
+\begin{funcdesc}{loads}{string}
+  Convert the string to a value.  If no valid value is found, raise
+  \code{EOFError}, \code{ValueError} or \code{TypeError}.  Extra
+  characters in the string are ignored.
+\end{funcdesc}
diff --git a/Doc/lib/libmath.tex b/Doc/lib/libmath.tex
new file mode 100644
index 0000000..62da689
--- /dev/null
+++ b/Doc/lib/libmath.tex
@@ -0,0 +1,70 @@
+\section{Built-in Module \sectcode{math}}
+
+\bimodindex{math}
+\renewcommand{\indexsubitem}{(in module math)}
+This module is always available.
+It provides access to the mathematical functions defined by the C
+standard.
+They are:
+\iftexi
+\begin{funcdesc}{acos}{x}
+\funcline{asin}{x}
+\funcline{atan}{x}
+\funcline{atan2}{x, y}
+\funcline{ceil}{x}
+\funcline{cos}{x}
+\funcline{cosh}{x}
+\funcline{exp}{x}
+\funcline{fabs}{x}
+\funcline{floor}{x}
+\funcline{fmod}{x, y}
+\funcline{frexp}{x}
+\funcline{ldexp}{x, y}
+\funcline{log}{x}
+\funcline{log10}{x}
+\funcline{modf}{x}
+\funcline{pow}{x, y}
+\funcline{sin}{x}
+\funcline{sinh}{x}
+\funcline{sqrt}{x}
+\funcline{tan}{x}
+\funcline{tanh}{x}
+\end{funcdesc}
+\else
+\code{acos(\varvars{x})},
+\code{asin(\varvars{x})},
+\code{atan(\varvars{x})},
+\code{atan2(\varvars{x\, y})},
+\code{ceil(\varvars{x})},
+\code{cos(\varvars{x})},
+\code{cosh(\varvars{x})},
+\code{exp(\varvars{x})},
+\code{fabs(\varvars{x})},
+\code{floor(\varvars{x})},
+\code{fmod(\varvars{x\, y})},
+\code{frexp(\varvars{x})},
+\code{ldexp(\varvars{x\, y})},
+\code{log(\varvars{x})},
+\code{log10(\varvars{x})},
+\code{modf(\varvars{x})},
+\code{pow(\varvars{x\, y})},
+\code{sin(\varvars{x})},
+\code{sinh(\varvars{x})},
+\code{sqrt(\varvars{x})},
+\code{tan(\varvars{x})},
+\code{tanh(\varvars{x})}.
+\fi
+
+Note that \code{frexp} and \code{modf} have a different call/return
+pattern than their C equivalents: they take a single argument and
+return a pair of values, rather than returning their second return
+value through an `output parameter' (there is no such thing in Python).
+
+The module also defines two mathematical constants:
+\iftexi
+\begin{datadesc}{pi}
+\dataline{e}
+\end{datadesc}
+\else
+\code{pi} and \code{e}.
+\fi
diff --git a/Doc/lib/libmd5.tex b/Doc/lib/libmd5.tex
new file mode 100644
index 0000000..29e4b31
--- /dev/null
+++ b/Doc/lib/libmd5.tex
@@ -0,0 +1,53 @@
+\section{Built-in module \sectcode{md5}}
+\bimodindex{md5}
+
+This module implements the interface to RSA's MD5 message digest
+algorithm (see also the file \file{md5.doc}). It's use is very
+straightforward: use the function \code{md5} to create an
+\dfn{md5}-object. You can now ``feed'' this object with arbitrary
+strings.
+
+At any time you can ask the ``final'' digest of the object. Internally,
+a temorary copy of the object is made and the digest is computed and
+returned. Because of the copy, the digest operation is not desctructive
+for the object. Before a more exact description of the use, a small
+example: to obtain the digest of the string \code{'abc'}, use \ldots
+
+\bcode\begin{verbatim}
+>>> from md5 import md5
+>>> m = md5()
+>>> m.update('abc')
+>>> m.digest()
+'\220\001P\230<\322O\260\326\226?}(\341\177r'
+\end{verbatim}\ecode
+
+More condensed:
+
+\bcode\begin{verbatim}
+>>> md5('abc').digest()
+'\220\001P\230<\322O\260\326\226?}(\341\177r'
+\end{verbatim}\ecode
+
+\renewcommand{\indexsubitem}{(in module md5)}
+\begin{funcdesc}{md5}{arg}
+  Create a new md5-object. \var{arg} is optional: if present, an initial
+  \code{update} method is called with \var{arg} as argument.
+\end{funcdesc}
+
+An md5-object has the following methods:
+
+\renewcommand{\indexsubitem}{(md5 method)}
+\begin{funcdesc}{update}{arg}
+  Update this md5-object with the string \var{arg}.
+\end{funcdesc}
+
+\begin{funcdesc}{digest}{}
+  Return the \dfn{digest} of this md5-object. Internally, a copy is made
+  and the \C-function \code{MD5Final} is called. Finally the digest is
+  returned.
+\end{funcdesc}
+
+\begin{funcdesc}{copy}{}
+  Return a separate copy of this md5-object.  An \code{update} to this
+  copy won't affect the original object.
+\end{funcdesc}
diff --git a/Doc/lib/libmm.tex b/Doc/lib/libmm.tex
new file mode 100644
index 0000000..c17aa55
--- /dev/null
+++ b/Doc/lib/libmm.tex
@@ -0,0 +1,5 @@
+\chapter{MULTIMEDIA EXTENSIONS}
+
+The modules described in this chapter implement various algorithms
+that are mainly useful for multimedia applications.  They are
+available at the discretion of the installation.
diff --git a/Doc/lib/libmpz.tex b/Doc/lib/libmpz.tex
new file mode 100644
index 0000000..ea0d1b7
--- /dev/null
+++ b/Doc/lib/libmpz.tex
@@ -0,0 +1,74 @@
+\section{Built-in module \sectcode{mpz}}
+\bimodindex{mpz}
+
+This module implements the interface to part of the GNU MP library.
+This library contains arbitrary precision integer and rational number
+arithmetic routines. Only the interfaces to the \emph{integer}
+(\samp{mpz_{\rm \ldots}}) routines are provided. If not stated
+otherwise, the description in the GNU MP documentation can be applied.
+
+In general, \dfn{mpz}-numbers can be used just like other standard
+Python numbers, e.g. you can use the built-in operators like \code{+},
+\code{*}, etc., as well as the standard built-in functions like
+\code{abs}, \code{int}, \ldots, \code{divmod}, \code{pow}.
+\strong{Please note:} the {\it bitwise-xor} operation has been implemented as
+a bunch of {\it and}s, {\it invert}s and {\it or}s, because the library
+lacks an \code{mpz_xor} function, and I didn't need one.
+
+You create an mpz-number, by calling the function called \code{mpz} (see
+below for an excact description). An mpz-number is printed like this:
+\code{mpz(\var{value})}.
+
+\renewcommand{\indexsubitem}{(in module mpz)}
+\begin{funcdesc}{mpz}{value}
+  Create a new mpz-number. \var{value} can be an integer, a long,
+  another mpz-number, or even a string. If it is a string, it is
+  interpreted as an array of radix-256 digits, least significant digit
+  first, resulting in a positive number. See also the \code{binary}
+  method, described below.
+\end{funcdesc}
+
+A number of {\em extra} functions are defined in this module. Non
+mpz-arguments are converted to mpz-values first, and the functions
+return mpz-numbers.
+
+\begin{funcdesc}{powm}{base\, exponent\, modulus}
+  Return \code{pow(\var{base}, \var{exponent}) \%{} \var{modulus}}. If
+  \code{\var{exponent} == 0}, return \code{mpz(1)}. In contrast to the
+  \C-library function, this version can handle negative exponents.
+\end{funcdesc}
+
+\begin{funcdesc}{gcd}{op1\, op2}
+  Return the greatest common divisor of \var{op1} and \var{op2}.
+\end{funcdesc}
+
+\begin{funcdesc}{gcdext}{a\, b}
+  Return a tuple \code{(\var{g}, \var{s}, \var{t})}, such that
+  \code{\var{a}*\var{s} + \var{b}*\var{t} == \var{g} == gcd(\var{a}, \var{b})}.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrt}{op}
+  Return the square root of \var{op}. The result is rounded towards zero.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrtrem}{op}
+  Return a tuple \code{(\var{root}, \var{remainder})}, such that
+  \code{\var{root}*\var{root} + \var{remainder} == \var{op}}.
+\end{funcdesc}
+
+\begin{funcdesc}{divm}{numerator\, denominator\, modulus}
+  Returns a number \var{q}. such that
+  \code{\var{q} * \var{denominator} \%{} \var{modulus} == \var{numerator}}.
+  One could also implement this function in python, using \code{gcdext}.
+\end{funcdesc}
+
+An mpz-number has one method:
+
+\renewcommand{\indexsubitem}{(mpz method)}
+\begin{funcdesc}{binary}{}
+  Convert this mpz-number to a binary string, where the number has been
+  stored as an array of radix-256 digits, least significant digit first.
+
+  The mpz-number must have a value greater than- or equal to zero,
+  otherwise a \code{ValueError}-exception will be raised.
+\end{funcdesc}
diff --git a/Doc/lib/libobjs.tex b/Doc/lib/libobjs.tex
new file mode 100644
index 0000000..49a86fc
--- /dev/null
+++ b/Doc/lib/libobjs.tex
@@ -0,0 +1,19 @@
+\chapter{Built-in Types, Exceptions and Functions}
+
+\nodename{Built-in Objects}
+
+Names for built-in exceptions and functions are found in a separate
+symbol table.  This table is searched last, so local and global
+user-defined names can override built-in names.  Built-in types have
+no names but are created easily by constructing an object of the
+desired type (e.g., using a literal) and applying the built-in
+function \code{type()} to it.  They are described together here for
+easy reference.%
+\footnote{Some descriptions sorely lack explanations of the exceptions
+	that may be raised --- this will be fixed in a future version of
+	this document.}
+\indexii{built-in}{types}
+\indexii{built-in}{exceptions}
+\indexii{built-in}{functions}
+\index{symbol table}
+\bifuncindex{type}
diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex
new file mode 100644
index 0000000..6763ed4
--- /dev/null
+++ b/Doc/lib/libos.tex
@@ -0,0 +1,77 @@
+\section{Standard Module \sectcode{os}}
+
+\stmodindex{os}
+This module provides a more portable way of using operating system
+(OS) dependent functionality than importing an OS dependent built-in
+module like \code{posix}.
+
+When the optional built-in module \code{posix} is available, this
+module exports the same functions and data as \code{posix}; otherwise,
+it searches for an OS dependent built-in module like \code{mac} and
+exports the same functions and data as found there.  The design of all
+Python's built-in OS dependen modules is such that as long as the same
+functionality is available, it uses the same interface; e.g., the
+function \code{os.stat(\var{file})} returns stat info about a \var{file} in a
+format compatible with the POSIX interface.
+
+Extensions peculiar to a particular OS are also available through the
+\code{os} module, but using them is of course a threat to portability!
+
+Note that after the first time \code{os} is imported, there is \emph{no}
+performance penalty in using functions from \code{os} instead of
+directly from the OS dependent built-in module, so there should be
+\emph{no} reason not to use \code{os}!
+
+In addition to whatever the correct OS dependent module exports, the
+following variables and functions are always exported by \code{os}:
+
+\renewcommand{\indexsubitem}{(in module os)}
+\begin{datadesc}{name}
+The name of the OS dependent module imported, e.g. \code{'posix'} or
+\code{'mac'}.
+\end{datadesc}
+
+\begin{datadesc}{path}
+The corresponding OS dependent standard module for pathname
+operations, e.g., \code{posixpath} or \code{macpath}.  Thus, (given
+the proper imports), \code{os.path.split(\var{file})} is equivalent to but
+more portable than \code{posixpath.split(\var{file})}.
+\end{datadesc}
+
+\begin{datadesc}{curdir}
+The constant string used by the OS to refer to the current directory,
+e.g. \code{'.'} for POSIX or \code{':'} for the Mac.
+\end{datadesc}
+
+\begin{datadesc}{pardir}
+The constant string used by the OS to refer to the parent directory,
+e.g. \code{'..'} for POSIX or \code{'::'} for the Mac.
+\end{datadesc}
+
+\begin{datadesc}{sep}
+The character used by the OS to separate pathname components, e.g.
+\code{'/'} for POSIX or \code{':'} for the Mac.  Note that knowing this
+is not sufficient to be able to parse or concatenate pathnames---better
+use \code{os.path.split()} and \code{os.path.join()}---but it is
+occasionally useful.
+\end{datadesc}
+
+\begin{funcdesc}{execl}{path\, arg0\, arg1\, ...}
+This is equivalent to a call to \code{os.execv} with an \var{argv}
+of \code{[\var{arg0}, \var{arg1}, ...]}.
+\end{funcdesc}
+
+\begin{funcdesc}{execle}{path\, arg0\, arg1\, ...\, env}
+This is equivalent to a call to \code{os.execve} with an \var{argv}
+of \code{[\var{arg0}, \var{arg1}, ...]}.
+\end{funcdesc}
+
+\begin{funcdesc}{execlp}{path\, arg0\, arg1\, ...}
+This is like \code{execl} but duplicates the shell's actions in
+searching for an executable file in a list of directories.  The
+directory list is obtained from \code{environ['PATH']}.
+\end{funcdesc}
+
+\begin{funcdesc}{execvp}{path\, arg0\, arg1\, ...}
+\code{execvp} is for \code{execv} what \code{execlp} is for \code{execl}.
+\end{funcdesc}
diff --git a/Doc/lib/libpanel.tex b/Doc/lib/libpanel.tex
new file mode 100644
index 0000000..b82bf98
--- /dev/null
+++ b/Doc/lib/libpanel.tex
@@ -0,0 +1,66 @@
+\section{Standard Module \sectcode{panel}}
+\stmodindex{panel}
+
+\strong{Please note:} The FORMS library, to which the \code{fl} module described
+above interfaces, is a simpler and more accessible user interface
+library for use with GL than the Panel Module (besides also being by a
+Dutch author).
+
+This module should be used instead of the built-in module
+\code{pnl}
+to interface with the
+{\em Panel Library}.
+
+The module is too large to document here in its entirety.
+One interesting function:
+
+\renewcommand{\indexsubitem}{(in module panel)}
+\begin{funcdesc}{defpanellist}{filename}
+Parses a panel description file containing S-expressions written by the
+{\em Panel Editor}
+that accompanies the Panel Library and creates the described panels.
+It returns a list of panel objects.
+\end{funcdesc}
+
+\strong{Warning:}
+the Python interpreter will dump core if you don't create a GL window
+before calling
+\code{panel.mkpanel()}
+or
+\code{panel.defpanellist()}.
+
+\section{Standard Module \sectcode{panelparser}}
+\stmodindex{panelparser}
+
+This module defines a self-contained parser for S-expressions as output
+by the Panel Editor (which is written in Scheme so it can't help writing
+S-expressions).
+The relevant function is
+\code{panelparser.parse_file(\var{file})}
+which has a file object (not a filename!) as argument and returns a list
+of parsed S-expressions.
+Each S-expression is converted into a Python list, with atoms converted
+to Python strings and sub-expressions (recursively) to Python lists.
+For more details, read the module file.
+% XXXXJH should be funcdesc, I think
+
+\section{Built-in Module \sectcode{pnl}}
+\bimodindex{pnl}
+
+This module provides access to the
+{\em Panel Library}
+built by NASA Ames (to get it, send e-mail to
+{\tt panel-request@nas.nasa.gov}).
+All access to it should be done through the standard module
+\code{panel},
+which transparantly exports most functions from
+\code{pnl}
+but redefines
+\code{pnl.dopanel()}.
+
+\strong{Warning:}
+the Python interpreter will dump core if you don't create a GL window
+before calling
+\code{pnl.mkpanel()}.
+
+The module is too large to document here in its entirety.
diff --git a/Doc/lib/libposix.tex b/Doc/lib/libposix.tex
new file mode 100644
index 0000000..737ddb1
--- /dev/null
+++ b/Doc/lib/libposix.tex
@@ -0,0 +1,306 @@
+\section{Built-in Module \sectcode{posix}}
+
+\bimodindex{posix}
+
+This module provides access to operating system functionality that is
+standardized by the C Standard and the POSIX standard (a thinly diguised
+\UNIX{} interface).
+It is available in all Python versions except on the Macintosh;
+the MS-DOS version does not support certain functions.
+The descriptions below are very terse; refer to the
+corresponding \UNIX{} manual entry for more information.
+
+Errors are reported as exceptions; the usual exceptions are given
+for type errors, while errors reported by the system calls raise
+\code{posix.error}, described below.
+
+Module \code{posix} defines the following data items:
+
+\renewcommand{\indexsubitem}{(data in module posix)}
+\begin{datadesc}{environ}
+A dictionary representing the string environment at the time
+the interpreter was started.
+(Modifying this dictionary does not affect the string environment of the
+interpreter.)
+For example,
+\code{posix.environ['HOME']}
+is the pathname of your home directory, equivalent to
+\code{getenv("HOME")}
+in C.
+\end{datadesc}
+
+\renewcommand{\indexsubitem}{(exception in module posix)}
+\begin{excdesc}{error}
+This exception is raised when an POSIX function returns a
+POSIX-related error (e.g., not for illegal argument types).  Its
+string value is \code{'posix.error'}.  The accompanying value is a
+pair containing the numeric error code from \code{errno} and the
+corresponding string, as would be printed by the C function
+\code{perror()}.
+\end{excdesc}
+
+It defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module posix)}
+\begin{funcdesc}{chdir}{path}
+Change the current working directory to \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{chmod}{path\, mode}
+Change the mode of \var{path} to the numeric \var{mode}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{fd}
+Close file descriptor \var{fd}.
+\end{funcdesc}
+
+\begin{funcdesc}{dup}{fd}
+Return a duplicate of file descriptor \var{fd}.
+\end{funcdesc}
+
+\begin{funcdesc}{dup2}{fd\, fd2}
+Duplicate file descriptor \var{fd} to \var{fd2}, closing the latter
+first if necessary.  Return \code{None}.
+\end{funcdesc}
+
+\begin{funcdesc}{execv}{path\, args}
+Execute the executable \var{path} with argument list \var{args},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{execve}{path\, args\, env}
+Execute the executable \var{path} with argument list \var{args},
+and environment \var{env},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+The environment must be a dictionary mapping strings to strings.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{_exit}{n}
+Exit to the system with status \var{n}, without calling cleanup
+handlers, flushing stdio buffers, etc.
+(Not on MS-DOS.)
+
+Note: the standard way to exit is \code{sys.exit(\var{n})}.
+\code{posix._exit()} should normally only be used in the child process
+after a \code{fork()}.
+\end{funcdesc}
+
+\begin{funcdesc}{fork}{}
+Fork a child process.  Return 0 in the child, the child's process id
+in the parent.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{fstat}{fd}
+Return status for file descriptor \var{fd}, like \code{stat()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getcwd}{}
+Return a string representing the current working directory.
+\end{funcdesc}
+
+\begin{funcdesc}{getegid}{}
+Return the current process's effective group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{geteuid}{}
+Return the current process's effective user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getgid}{}
+Return the current process's group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getpid}{}
+Return the current process id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getppid}{}
+Return the parent's process id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getuid}{}
+Return the current process's user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{kill}{pid\, sig}
+Kill the process \var{pid} with signal \var{sig}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{link}{src\, dst}
+Create a hard link pointing to \var{src} named \var{dst}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{listdir}{path}
+Return a list containing the names of the entries in the directory.
+The list is in arbitrary order.  It includes the special entries
+\code{'.'} and \code{'..'} if they are present in the directory.
+\end{funcdesc}
+
+\begin{funcdesc}{lseek}{fd\, pos\, how}
+Set the current position of file descriptor \var{fd} to position
+\var{pos}, modified by \var{how}: 0 to set the position relative to
+the beginning of the file; 1 to set it relative to the current
+position; 2 to set it relative to the end of the file.
+\end{funcdesc}
+
+\begin{funcdesc}{lstat}{path}
+Like \code{stat()}, but do not follow symbolic links.  (On systems
+without symbolic links, this is identical to \code{posix.stat}.)
+\end{funcdesc}
+
+\begin{funcdesc}{mkdir}{path\, mode}
+Create a directory named \var{path} with numeric mode \var{mode}.
+\end{funcdesc}
+
+\begin{funcdesc}{nice}{increment}
+Add \var{incr} to the process' ``niceness''.  Return the new niceness.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{open}{file\, flags\, mode}
+Open the file \var{file} and set various flags according to
+\var{flags} and possibly its mode according to \var{mode}.
+Return the file descriptor for the newly opened file.
+\end{funcdesc}
+
+\begin{funcdesc}{pipe}{}
+Create a pipe.  Return a pair of file descriptors \code{(r, w)}
+usable for reading and writing, respectively.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{popen}{command\, mode}
+Open a pipe to or from \var{command}.  The return value is an open
+file object connected to the pipe, which can be read or written
+depending on whether \var{mode} is \code{'r'} or \code{'w'}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{read}{fd\, n}
+Read at most \var{n} bytes from file descriptor \var{fd}.
+Return a string containing the bytes read.
+\end{funcdesc}
+
+\begin{funcdesc}{readlink}{path}
+Return a string representing the path to which the symbolic link
+points.  (On systems without symbolic links, this always raises
+\code{posix.error}.)
+\end{funcdesc}
+
+\begin{funcdesc}{rename}{src\, dst}
+Rename the file or directory \var{src} to \var{dst}.
+\end{funcdesc}
+
+\begin{funcdesc}{rmdir}{path}
+Remove the directory \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{setgid}{gid}
+Set the current process's group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{setuid}{uid}
+Set the current process's user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{stat}{path}
+Perform a {\em stat} system call on the given path.  The return value
+is a tuple of at least 10 integers giving the most important (and
+portable) members of the {\em stat} structure, in the order
+\code{st_mode},
+\code{st_ino},
+\code{st_dev},
+\code{st_nlink},
+\code{st_uid},
+\code{st_gid},
+\code{st_size},
+\code{st_atime},
+\code{st_mtime},
+\code{st_ctime}.
+More items may be added at the end by some implementations.
+(On MS-DOS, some items are filled with dummy values.)
+
+Note: The standard module \code{stat} defines functions and constants
+that are useful for extracting information from a stat structure.
+\end{funcdesc}
+
+\begin{funcdesc}{symlink}{src\, dst}
+Create a symbolic link pointing to \var{src} named \var{dst}.  (On
+systems without symbolic links, this always raises
+\code{posix.error}.)
+\end{funcdesc}
+
+\begin{funcdesc}{system}{command}
+Execute the command (a string) in a subshell.  This is implemented by
+calling the Standard C function \code{system()}, and has the same
+limitations.  Changes to \code{posix.environ}, \code{sys.stdin} etc. are
+not reflected in the environment of the executed command.  The return
+value is the exit status of the process as returned by Standard C
+\code{system()}.
+\end{funcdesc}
+
+\begin{funcdesc}{times}{}
+Return a 4-tuple of floating point numbers indicating accumulated CPU
+times, in seconds.  The items are: user time, system time, children's
+user time, and children's system time, in that order.  See the \UNIX{}
+manual page {\it times}(2).  (Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{umask}{mask}
+Set the current numeric umask and returns the previous umask.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{uname}{}
+Return a 5-tuple containing information identifying the current
+operating system.  The tuple contains 5 strings:
+\code{(\var{sysname}, \var{nodename}, \var{release}, \var{version}, \var{machine})}.
+Some systems truncate the nodename to 8
+characters or to the leading component; an better way to get the
+hostname is \code{socket.gethostname()}.  (Not on MS-DOS, nor on older
+\UNIX{} systems.)
+\end{funcdesc}
+
+\begin{funcdesc}{unlink}{path}
+Unlink \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{utime}{path\, \(atime\, mtime\)}
+Set the access and modified time of the file to the given values.
+(The second argument is a tuple of two items.)
+\end{funcdesc}
+
+\begin{funcdesc}{wait}{}
+Wait for completion of a child process, and return a tuple containing
+its pid and exit status indication (encoded as by \UNIX{}).
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{waitpid}{pid\, options}
+Wait for completion of a child process given by proces id, and return
+a tuple containing its pid and exit status indication (encoded as by
+\UNIX{}).  The semantics of the call are affected by the value of
+the integer options, which should be 0 for normal operation.  (If the
+system does not support waitpid(), this always raises
+\code{posix.error}.  Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{write}{fd\, str}
+Write the string \var{str} to file descriptor \var{fd}.
+Return the number of bytes actually written.
+\end{funcdesc}
diff --git a/Doc/lib/libppath.tex b/Doc/lib/libppath.tex
new file mode 100644
index 0000000..e6430be
--- /dev/null
+++ b/Doc/lib/libppath.tex
@@ -0,0 +1,128 @@
+\section{Standard Module \sectcode{posixpath}}
+
+\stmodindex{posixpath}
+This module implements some useful functions on POSIX pathnames.
+
+\renewcommand{\indexsubitem}{(in module posixpath)}
+\begin{funcdesc}{basename}{p}
+Return the base name of pathname
+\var{p}.
+This is the second half of the pair returned by
+\code{posixpath.split(\var{p})}.
+\end{funcdesc}
+
+\begin{funcdesc}{commonprefix}{list}
+Return the longest string that is a prefix of all strings in
+\var{list}.
+If
+\var{list}
+is empty, return the empty string (\code{''}).
+\end{funcdesc}
+
+\begin{funcdesc}{exists}{p}
+Return true if
+\var{p}
+refers to an existing path.
+\end{funcdesc}
+
+\begin{funcdesc}{expanduser}{p}
+Return the argument with an initial component of \samp{\~} or
+\samp{\~\var{user}} replaced by that \var{user}'s home directory.  An
+initial \samp{\~{}} is replaced by the environment variable \code{\${}HOME};
+an initial \samp{\~\var{user}} is looked up in the password directory through
+the built-in module \code{pwd}.  If the expansion fails, or if the
+path does not begin with a tilde, the path is returned unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{isabs}{p}
+Return true if \var{p} is an absolute pathname (begins with a slash).
+\end{funcdesc}
+
+\begin{funcdesc}{isfile}{p}
+Return true if \var{p} is an existing regular file.  This follows
+symbolic links, so both islink() and isfile() can be true for the same
+path.
+\end{funcdesc}
+
+\begin{funcdesc}{isdir}{p}
+Return true if \var{p} is an existing directory.  This follows
+symbolic links, so both islink() and isdir() can be true for the same
+path.
+\end{funcdesc}
+
+\begin{funcdesc}{islink}{p}
+Return true if
+\var{p}
+refers to a directory entry that is a symbolic link.
+Always false if symbolic links are not supported.
+\end{funcdesc}
+
+\begin{funcdesc}{ismount}{p}
+Return true if \var{p} is a mount point.  (This currently checks whether
+\code{\var{p}/..} is on a different device from \var{p} or whether
+\code{\var{p}/..} and \var{p} point to the same i-node on the same
+device --- is this test correct for all \UNIX{} and POSIX variants?)
+\end{funcdesc}
+
+\begin{funcdesc}{join}{p\, q}
+Join the paths
+\var{p}
+and
+\var{q} intelligently:
+If
+\var{q}
+is an absolute path, the return value is
+\var{q}.
+Otherwise, the concatenation of
+\var{p}
+and
+\var{q}
+is returned, with a slash (\code{'/'}) inserted unless
+\var{p}
+is empty or ends in a slash.
+\end{funcdesc}
+
+\begin{funcdesc}{normcase}{p}
+Normalize the case of a pathname.  This returns the path unchanged;
+however, a similar function in \code{macpath} converts upper case to
+lower case.
+\end{funcdesc}
+
+\begin{funcdesc}{samefile}{p\, q}
+Return true if both pathname arguments refer to the same file or directory
+(as indicated by device number and i-node number).
+Raise an exception if a stat call on either pathname fails.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{p}
+Split the pathname \var{p} in a pair \code{(\var{head}, \var{tail})}, where
+\var{tail} is the last pathname component and \var{head} is
+everything leading up to that.  If \var{p} ends in a slash (except if
+it is the root), the trailing slash is removed and the operation
+applied to the result; otherwise, \code{join(\var{head}, \var{tail})} equals
+\var{p}.  The \var{tail} part never contains a slash.  Some boundary
+cases: if \var{p} is the root, \var{head} equals \var{p} and
+\var{tail} is empty; if \var{p} is empty, both \var{head} and
+\var{tail} are empty; if \var{p} contains no slash, \var{head} is
+empty and \var{tail} equals \var{p}.
+\end{funcdesc}
+
+\begin{funcdesc}{splitext}{p}
+Split the pathname \var{p} in a pair \code{(\var{root}, \var{ext})}
+such that \code{\var{root} + \var{ext} == \var{p}},
+the last component of \var{root} contains no periods,
+and \var{ext} is empty or begins with a period.
+\end{funcdesc}
+
+\begin{funcdesc}{walk}{p\, visit\, arg}
+Calls the function \var{visit} with arguments
+\code{(\var{arg}, \var{dirname}, \var{names})} for each directory in the
+directory tree rooted at \var{p} (including \var{p} itself, if it is a
+directory).  The argument \var{dirname} specifies the visited directory,
+the argument \var{names} lists the files in the directory (gotten from
+\code{posix.listdir(\var{dirname})}).  The \var{visit} function may
+modify \var{names} to influence the set of directories visited below
+\var{dirname}, e.g., to avoid visiting certain parts of the tree.  (The
+object referred to by \var{names} must be modified in place, using
+\code{del} or slice assignment.)
+\end{funcdesc}
diff --git a/Doc/lib/libpwd.tex b/Doc/lib/libpwd.tex
new file mode 100644
index 0000000..7bb30d8
--- /dev/null
+++ b/Doc/lib/libpwd.tex
@@ -0,0 +1,32 @@
+\section{Built-in Module \sectcode{pwd}}
+
+\bimodindex{pwd}
+This module provides access to the \UNIX{} password database.
+It is available on all \UNIX{} versions.
+
+Password database entries are reported as 7-tuples containing the
+following items from the password database (see \file{<pwd.h>}), in order:
+\code{pw_name},
+\code{pw_passwd},
+\code{pw_uid},
+\code{pw_gid},
+\code{pw_gecos},
+\code{pw_dir},
+\code{pw_shell}.
+The uid and gid items are integers, all others are strings.
+An exception is raised if the entry asked for cannot be found.
+
+It defines the following items:
+
+\renewcommand{\indexsubitem}{(in module pwd)}
+\begin{funcdesc}{getpwuid}{uid}
+Return the password database entry for the given numeric user ID.
+\end{funcdesc}
+
+\begin{funcdesc}{getpwnam}{name}
+Return the password database entry for the given user name.
+\end{funcdesc}
+
+\begin{funcdesc}{getpwall}{}
+Return a list of all available password database entries, in arbitrary order.
+\end{funcdesc}
diff --git a/Doc/lib/librand.tex b/Doc/lib/librand.tex
new file mode 100644
index 0000000..b03ac41
--- /dev/null
+++ b/Doc/lib/librand.tex
@@ -0,0 +1,21 @@
+\section{Standard Module \sectcode{rand}}
+
+\stmodindex{rand} This module implements a pseudo-random number
+generator with an interface similar to \code{rand()} in C.  It defines
+the following functions:
+
+\renewcommand{\indexsubitem}{(in module rand)}
+\begin{funcdesc}{rand}{}
+Returns an integer random number in the range [0 ... 32768).
+\end{funcdesc}
+
+\begin{funcdesc}{choice}{s}
+Returns a random element from the sequence (string, tuple or list)
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{srand}{seed}
+Initializes the random number generator with the given integral seed.
+When the module is first imported, the random number is initialized with
+the current time.
+\end{funcdesc}
diff --git a/Doc/lib/libregex.tex b/Doc/lib/libregex.tex
new file mode 100644
index 0000000..544c204
--- /dev/null
+++ b/Doc/lib/libregex.tex
@@ -0,0 +1,162 @@
+\section{Built-in Module \sectcode{regex}}
+
+\bimodindex{regex}
+This module provides regular expression matching operations similar to
+those found in Emacs.  It is always available.
+
+By default the patterns are Emacs-style regular expressions; there is
+a way to change the syntax to match that of several well-known
+\UNIX{} utilities.
+
+This module is 8-bit clean: both patterns and strings may contain null
+bytes and characters whose high bit is set.
+
+\strong{Please note:} There is a little-known fact about Python string literals
+which means that you don't usually have to worry about doubling
+backslashes, even though they are used to escape special characters in
+string literals as well as in regular expressions.  This is because
+Python doesn't remove backslashes from string literals if they are
+followed by an unrecognized escape character.  \emph{However}, if you
+want to include a literal \dfn{backslash} in a regular expression
+represented as a string literal, you have to \emph{quadruple} it.  E.g.
+to extract LaTeX \samp{\e section\{{\rm \ldots}\}} headers from a document, you can
+use this pattern: \code{'\e \e \e\e section\{\e (.*\e )\}'}.
+
+The module defines these functions, and an exception:
+
+\renewcommand{\indexsubitem}{(in module regex)}
+\begin{funcdesc}{match}{pattern\, string}
+  Return how many characters at the beginning of \var{string} match
+  the regular expression \var{pattern}.  Return \code{-1} if the
+  string does not match the pattern (this is different from a
+  zero-length match!).
+\end{funcdesc}
+
+\begin{funcdesc}{search}{pattern\, string}
+  Return the first position in \var{string} that matches the regular
+  expression \var{pattern}.  Return -1 if no position in the string
+  matches the pattern (this is different from a zero-length match
+  anywhere!).
+\end{funcdesc}
+
+\begin{funcdesc}{compile}{pattern\, translate}
+  Compile a regular expression pattern into a regular expression
+  object, which can be used for matching using its \code{match} and
+  \code{search} methods, described below.  The optional
+  \var{translate}, if present, must be a 256-character string
+  indicating how characters (both of the pattern and of the strings to
+  be matched) are translated before comparing them; the \code{i}-th
+  element of the string gives the translation for the character with
+  ASCII code \code{i}.
+
+  The sequence
+
+\bcode\begin{verbatim}
+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
+\code{regex.search()} is cached, so programs that use only a single
+regular expression at a time needn't worry about compiling regular
+expressions.)
+\end{funcdesc}
+
+\begin{funcdesc}{set_syntax}{flags}
+  Set the syntax to be used by future calls to \code{compile},
+  \code{match} and \code{search}.  (Already compiled expression objects
+  are not affected.)  The argument is an integer which is the OR of
+  several flag bits.  The return value is the previous value of
+  the syntax flags.  Names for the flags are defined in the standard
+  module \code{regex_syntax}; read the file \file{regex_syntax.py} for
+  more information.
+\end{funcdesc}
+
+\begin{excdesc}{error}
+  Exception raised when a string passed to one of the functions here
+  is not a valid regular expression (e.g., unmatched parentheses) or
+  when some other error occurs during compilation or matching.  (It is
+  never an error if a string contains no match for a pattern.)
+\end{excdesc}
+
+\begin{datadesc}{casefold}
+A string suitable to pass as \var{translate} argument to
+\code{compile} to map all upper case characters to their lowercase
+equivalents.
+\end{datadesc}
+
+\noindent
+Compiled regular expression objects support these methods:
+
+\renewcommand{\indexsubitem}{(regex method)}
+\begin{funcdesc}{match}{string\, pos}
+  Return how many characters at the beginning of \var{string} match
+  the compiled regular expression.  Return \code{-1} if the string
+  does not match the pattern (this is different from a zero-length
+  match!).
+  
+  The optional second parameter \var{pos} gives an index in the string
+  where the search is to start; it defaults to \code{0}.  This is not
+  completely equivalent to slicing the string; the \code{'\^'} pattern
+  character matches at the real begin of the string and at positions
+  just after a newline, not necessarily at the index where the search
+  is to start.
+\end{funcdesc}
+
+\begin{funcdesc}{search}{string\, pos}
+  Return the first position in \var{string} that matches the regular
+  expression \code{pattern}.  Return \code{-1} if no position in the
+  string matches the pattern (this is different from a zero-length
+  match anywhere!).
+  
+  The optional second parameter has the same meaning as for the
+  \code{match} method.
+\end{funcdesc}
+
+\begin{funcdesc}{group}{index\, index\, ...}
+This method is only valid when the last call to the \code{match}
+or \code{search} method found a match.  It returns one or more
+groups of the match.  If there is a single \var{index} argument,
+the result is a single string; if there are multiple arguments, the
+result is a tuple with one item per argument.  If the \var{index} is
+zero, the corresponding return value is the entire matching string; if
+it is in the inclusive range [1..9], it is the string matching the
+the corresponding parenthesized group (using the default syntax,
+groups are parenthesized using \code{\\(} and \code{\\)}).  If no
+such group exists, the corresponding result is \code{None}.
+\end{funcdesc}
+
+\noindent
+Compiled regular expressions support these data attributes:
+
+\renewcommand{\indexsubitem}{(regex attribute)}
+\begin{datadesc}{regs}
+When the last call to the \code{match} or \code{search} method found a
+match, this is a tuple of pairs of indices corresponding to the
+beginning and end of all parenthesized groups in the pattern.  Indices
+are relative to the string argument passed to \code{match} or
+\code{search}.  The 0-th tuple gives the beginning and end or the
+whole pattern.  When the last match or search failed, this is
+\code{None}.
+\end{datadesc}
+
+\begin{datadesc}{last}
+When the last call to the \code{match} or \code{search} method found a
+match, this is the string argument passed to that method.  When the
+last match or search failed, this is \code{None}.
+\end{datadesc}
+
+\begin{datadesc}{translate}
+This is the value of the \var{translate} argument to
+\code{regex.compile} that created this regular expression object.  If
+the \var{translate} argument was omitted in the \code{regex.compile}
+call, this is \code{None}.
+\end{datadesc}
diff --git a/Doc/lib/libregsub.tex b/Doc/lib/libregsub.tex
new file mode 100644
index 0000000..5747e4f
--- /dev/null
+++ b/Doc/lib/libregsub.tex
@@ -0,0 +1,30 @@
+\section{Standard Module \sectcode{regsub}}
+
+\stmodindex{regsub}
+This module defines a number of functions useful for working with
+regular expressions (see built-in module \code{regex}).
+
+\renewcommand{\indexsubitem}{(in module regsub)}
+\begin{funcdesc}{sub}{pat\, repl\, str}
+Replace the first occurrence of pattern \var{pat} in string
+\var{str} by replacement \var{repl}.  If the pattern isn't found,
+the string is returned unchanged.  The pattern may be a string or an
+already compiled pattern.  The replacement may contain references
+\samp{\e \var{digit}} to subpatterns and escaped backslashes.
+\end{funcdesc}
+
+\begin{funcdesc}{gsub}{pat\, repl\, str}
+Replace all (non-overlapping) occurrences of pattern \var{pat} in
+string \var{str} by replacement \var{repl}.  The same rules as for
+\code{sub()} apply.  Empty matches for the pattern are replaced only
+when not adjacent to a previous match, so e.g.
+\code{gsub('', '-', 'abc')} returns \code{'-a-b-c-'}.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{str\, pat}
+Split the string \var{str} in fields separated by delimiters matching
+the pattern \var{pat}, and return a list containing the fields.  Only
+non-empty matches for the pattern are considered, so e.g.
+\code{split('a:b', ':*')} returns \code{['a', 'b']} and
+\code{split('abc', '')} returns \code{['abc']}.
+\end{funcdesc}
diff --git a/Doc/lib/librgbimg.tex b/Doc/lib/librgbimg.tex
new file mode 100644
index 0000000..367851b
--- /dev/null
+++ b/Doc/lib/librgbimg.tex
@@ -0,0 +1,45 @@
+\section{Built-in module \sectcode{rgbimg}}
+\bimodindex{rgbimg}
+
+The rgbimg module allows python programs to access SGI imglib image
+files (also known as \file{.rgb} files).  The module is far from
+complete, but is provided anyway since the functionality that there is
+is enough in some cases.  Currently, colormap files are not supported.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module rgbimg)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unsupported file type, etc.
+\end{excdesc}
+
+\begin{funcdesc}{sizeofimage}{file}
+This function returns a tuple \code{(\var{x}, \var{y})} where
+\var{x} and \var{y} are the size of the image in pixels.
+Only 4 byte RGBA pixels, 3 byte RGB pixels, and 1 byte greyscale pixels
+are currently supported.
+\end{funcdesc}
+
+\begin{funcdesc}{longimagedata}{file}
+This function reads and decodes the image on the specified file, and
+returns it as a python string. The string has 4 byte RGBA pixels.
+The bottom left pixel is the first in
+the string. This format is suitable to pass to \code{gl.lrectwrite},
+for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{longstoimage}{data\, x\, y\, z\, file}
+This function writes the RGBA data in \var{data} to image
+file \var{file}. \var{x} and \var{y} give the size of the image.
+\var{z} is 1 if the saved image should be 1 byte greyscale, 3 if the
+saved image should be 3 byte RGB data, or 4 if the saved images should
+be 4 byte RGBA data.  The input data always contains 4 bytes per pixel.
+These are the formats returned by \code{gl.lrectread}.
+\end{funcdesc}
+
+\begin{funcdesc}{ttob}{flag}
+This function sets a global flag which defines whether the scan lines
+of the image are read or written from bottom to top (flag is zero,
+compatible with SGI GL) or from top to bottom(flag is one,
+compatible with X).  The default is zero.
+\end{funcdesc}
diff --git a/Doc/lib/librotor.tex b/Doc/lib/librotor.tex
new file mode 100644
index 0000000..657d2ac
--- /dev/null
+++ b/Doc/lib/librotor.tex
@@ -0,0 +1,6 @@
+\section{Built-in module \sectcode{rotor}}
+\bimodindex{rotor}
+
+This module implements a rotor-based encryption algorithm, contributed
+by Lance Ellinghouse.  Currently no further documentation is available
+--- you are kindly advised to read the source...
diff --git a/Doc/lib/libselect.tex b/Doc/lib/libselect.tex
new file mode 100644
index 0000000..d47face
--- /dev/null
+++ b/Doc/lib/libselect.tex
@@ -0,0 +1,42 @@
+\section{Built-in module \sectcode{select}}
+\bimodindex{select}
+
+This module provides access to the function \code{select} available in
+most \UNIX{} versions.  It defines the following:
+
+\renewcommand{\indexsubitem}{(in module select)}
+\begin{excdesc}{error}
+The exception raised when an error occurs.  The accompanying value is
+a pair containing the numeric error code from \code{errno} and the
+corresponding string, as would be printed by the C function
+\code{perror()}.
+\end{excdesc}
+
+\begin{funcdesc}{select}{iwtd\, owtd\, ewtd\, timeout}
+This is a straightforward interface to the \UNIX{} \code{select()}
+system call.  The first three arguments are lists of `waitable
+objects': either integers representing \UNIX{} file descriptors or
+objects with a parameterless method named \code{fileno()} returning
+such an integer.  The three lists of waitable objects are for input,
+output and `exceptional conditions', respectively.  Empty lists are
+allowed.  The optional last argument is a time-out specified as a
+floating point number in seconds.  When the \var{timeout} argument
+is omitted the function blocks until at least one file descriptor is
+ready.  A time-out value of zero specifies a poll and never blocks.
+
+The return value is a triple of lists of objects that are ready:
+subsets of the first three arguments.  When the time-out is reached
+without a file descriptor becoming ready, three empty lists are
+returned.
+
+Amongst the acceptable object types in the lists are Python file
+objects (e.g. \code{sys.stdin}, or objects returned by \code{open()}
+or \code{posix.popen()}), socket objects returned by
+\code{socket.socket()}, and the module \code{stdwin} which happens to
+define a function \code{fileno()} for just this purpose.  You may
+also define a \dfn{wrapper} class yourself, as long as it has an
+appropriate \code{fileno()} method (that really returns a \UNIX{} file
+descriptor, not just a random integer).
+\end{funcdesc}
+\ttindex{socket}
+\ttindex{stdwin}
diff --git a/Doc/lib/libsgi.tex b/Doc/lib/libsgi.tex
new file mode 100644
index 0000000..f8c87b0
--- /dev/null
+++ b/Doc/lib/libsgi.tex
@@ -0,0 +1,4 @@
+\chapter{SGI IRIX ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to SGI's IRIX operating system (versions 4 and 5).
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
new file mode 100644
index 0000000..a5d5a17
--- /dev/null
+++ b/Doc/lib/libsocket.tex
@@ -0,0 +1,265 @@
+\section{Built-in Module \sectcode{socket}}
+
+\bimodindex{socket}
+This module provides access to the BSD {\em socket} interface.
+It is available on \UNIX{} systems that support this interface.
+
+For an introduction to socket programming (in C), see the following
+papers: \emph{An Introductory 4.3BSD Interprocess Communication
+Tutorial}, by Stuart Sechrest and \emph{An Advanced 4.3BSD Interprocess
+Communication Tutorial}, by Samuel J.  Leffler et al, both in the
+\UNIX{} Programmer's Manual, Supplementary Documents 1 (sections PS1:7
+and PS1:8).  The \UNIX{} manual pages for the various socket-related
+system calls also a valuable source of information on the details of
+socket semantics.
+
+The Python interface is a straightforward transliteration of the
+\UNIX{} system call and library interface for sockets to Python's
+object-oriented style: the \code{socket()} function returns a
+\dfn{socket object} whose methods implement the various socket system
+calls.  Parameter types are somewhat higer-level than in the C
+interface: as with \code{read()} and \code{write()} operations on Python
+files, buffer allocation on receive operations is automatic, and
+buffer length is implicit on send operations.
+
+Socket addresses are represented as a single string for the
+\code{AF_UNIX} address family and as a pair
+\code{(\var{host}, \var{port})} for the \code{AF_INET} address family,
+where \var{host} is a string representing
+either a hostname in Internet domain notation like
+\code{'daring.cwi.nl'} or an IP address like \code{'100.50.200.5'},
+and \var{port} is an integral port number.  Other address families are
+currently not supported.  The address format required by a particular
+socket object is automatically selected based on the address family
+specified when the socket object was created.
+
+All errors raise exceptions.  The normal exceptions for invalid
+argument types and out-of-memory conditions can be raised; errors
+related to socket or address semantics raise the error \code{socket.error}.
+
+Non-blocking and asynchronous mode are not supported; see module
+\code{select} for a way to do non-blocking socket I/O.
+
+The module \code{socket} exports the following constants and functions:
+
+\renewcommand{\indexsubitem}{(in module socket)}
+\begin{excdesc}{error}
+This exception is raised for socket- or address-related errors.
+The accompanying value is either a string telling what went wrong or a
+pair \code{(\var{errno}, \var{string})}
+representing an error returned by a system
+call, similar to the value accompanying \code{posix.error}.
+\end{excdesc}
+
+\begin{datadesc}{AF_UNIX}
+\dataline{AF_INET}
+These constants represent the address (and protocol) families,
+used for the first argument to \code{socket()}.
+\end{datadesc}
+
+\begin{datadesc}{SOCK_STREAM}
+\dataline{SOCK_DGRAM}
+These constants represent the socket types,
+used for the second argument to \code{socket()}.
+(There are other types, but only \code{SOCK_STREAM} and
+\code{SOCK_DGRAM} appear to be generally useful.)
+\end{datadesc}
+
+\begin{funcdesc}{gethostbyname}{hostname}
+Translate a host name to IP address format.  The IP address is
+returned as a string, e.g.,  \code{'100.50.200.5'}.  If the host name
+is an IP address itself it is returned unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{getservbyname}{servicename\, protocolname}
+Translate an Internet service name and protocol name to a port number
+for that service.  The protocol name should be \code{'tcp'} or
+\code{'udp'}.
+\end{funcdesc}
+
+\begin{funcdesc}{socket}{family\, type\, proto}
+Create a new socket using the given address family, socket type and
+protocol number.  The address family should be \code{AF_INET} or
+\code{AF_UNIX}.  The socket type should be \code{SOCK_STREAM},
+\code{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
+The protocol number is usually zero and may be omitted in that case.
+\end{funcdesc}
+
+\begin{funcdesc}{fromfd}{fd\, family\, type\, proto}
+Build a socket object from an existing file descriptor (an integer as
+returned by a file object's \code{fileno} method).  Address family,
+socket type and protocol number are as for the \code{socket} function
+above.  The file descriptor should refer to a socket, but this is not
+checked --- subsequent operations on the object may fail if the file
+descriptor is invalid.  This function is rarely needed, but can be
+used to get or set socket options on a socket passed to a program as
+standard input or output (e.g. a server started by the \UNIX{} inet
+daemon).
+\end{funcdesc}
+
+\subsection{Socket Object Methods}
+
+\noindent
+Socket objects have the following methods.  Except for
+\code{makefile()} these correspond to \UNIX{} system calls applicable to
+sockets.
+
+\renewcommand{\indexsubitem}{(socket method)}
+\begin{funcdesc}{accept}{}
+Accept a connection.
+The socket must be bound to an address and listening for connections.
+The return value is a pair \code{(\var{conn}, \var{address})}
+where \var{conn} is a \emph{new} socket object usable to send and
+receive data on the connection, and \var{address} is the address bound
+to the socket on the other end of the connection.
+\end{funcdesc}
+
+\begin{funcdesc}{avail}{}
+Return true (nonzero) if at least one byte of data can be received
+from the socket without blocking, false (zero) if not.  There is no
+indication of how many bytes are available.  (\strong{This function is
+obsolete --- see module \code{select} for a more general solution.})
+\end{funcdesc}
+
+\begin{funcdesc}{bind}{address}
+Bind the socket to an address.  The socket must not already be bound.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Close the socket.  All future operations on the socket object will fail.
+The remote end will receive no more data (after queued data is flushed).
+Sockets are automatically closed when they are garbage-collected.
+\end{funcdesc}
+
+\begin{funcdesc}{connect}{address}
+Connect to a remote socket.
+\end{funcdesc}
+
+\begin{funcdesc}{fileno}{}
+Return the socket's file descriptor (a small integer).  This is useful
+with \code{select}.
+\end{funcdesc}
+
+\begin{funcdesc}{getpeername}{}
+Return the remote address to which the socket is connected.  This is
+useful to find out the port number of a remote IP socket, for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{getsockname}{}
+Return the socket's own address.  This is useful to find out the port
+number of an IP socket, for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{getsockopt}{level\, optname\, buflen}
+Return the value of the given socket option (see the \UNIX{} man page
+{\it getsockopt}(2)).  The needed symbolic constants are defined in module
+SOCKET.  If the optional third argument is absent, an integer option
+is assumed and its integer value is returned by the function.  If
+\var{buflen} is present, it specifies the maximum length of the buffer used
+to receive the option in, and this buffer is returned as a string.
+It's up to the caller to decode the contents of the buffer (see the
+optional built-in module \code{struct} for a way to decode C structures
+encoded as strings).
+\end{funcdesc}
+
+\begin{funcdesc}{listen}{backlog}
+Listen for connections made to the socket.
+The argument (in the range 0-5) specifies the maximum number of
+queued connections.
+\end{funcdesc}
+
+\begin{funcdesc}{makefile}{mode}
+Return a \dfn{file object} associated with the socket.
+(File objects were described earlier under Built-in Types.)
+The file object references a \code{dup}ped version of the socket file
+descriptor, so the file object and socket object may be closed or
+garbage-collected independently.
+\end{funcdesc}
+
+\begin{funcdesc}{recv}{bufsize\, flags}
+Receive data from the socket.  The return value is a string representing
+the data received.  The maximum amount of data to be received
+at once is specified by \var{bufsize}.  See the \UNIX{} manual page
+for the meaning of the optional argument \var{flags}; it defaults to
+zero.
+\end{funcdesc}
+
+\begin{funcdesc}{recvfrom}{bufsize}
+Receive data from the socket.  The return value is a pair
+\code{(\var{string}, \var{address})} where \var{string} is a string
+representing the data received and \var{address} is the address of the
+socket sending the data.
+\end{funcdesc}
+
+\begin{funcdesc}{send}{string}
+Send data to the socket.  The socket must be connected to a remote
+socket.
+\end{funcdesc}
+
+\begin{funcdesc}{sendto}{string\, address}
+Send data to the socket.  The socket should not be connected to a
+remote socket, since the destination socket is specified by
+\code{address}.
+\end{funcdesc}
+
+\begin{funcdesc}{setsockopt}{level\, optname\, value}
+Set the value of the given socket option (see the \UNIX{} man page
+{\it setsockopt}(2)).  The needed symbolic constants are defined in module
+\code{SOCKET}.  The value can be an integer or a string representing a
+buffer.  In the latter case it is up to the caller to ensure that the
+string contains the proper bits (see the optional built-in module
+\code{struct} for a way to encode C structures as strings).
+\end{funcdesc}
+
+\begin{funcdesc}{shutdown}{how}
+Shut down one or both halves of the connection.  If \var{how} is \code{0},
+further receives are disallowed.  If \var{how} is \code{1}, further sends are
+disallowed.  If \var{how} is \code{2}, further sends and receives are
+disallowed.
+\end{funcdesc}
+
+Note that there are no methods \code{read()} or \code{write()}; use
+\code{recv()} and \code{send()} without \var{flags} argument instead.
+
+\subsection{Example}
+\nodename{Socket Example}
+
+Here are two minimal example programs using the TCP/IP protocol: a
+server that echoes all data that it receives back (servicing only one
+client), and a client using it.  Note that a server must perform the
+sequence \code{socket}, \code{bind}, \code{listen}, \code{accept}
+(possibly repeating the \code{accept} to service more than one client),
+while a client only needs the sequence \code{socket}, \code{connect}.
+Also note that the server does not \code{send}/\code{receive} on the
+socket it is listening on but on the new socket returned by
+\code{accept}.
+
+\bcode\begin{verbatim}
+# Echo server program
+from socket import *
+HOST = ''                 # Symbolic name meaning the local host
+PORT = 50007              # Arbitrary non-privileged server
+s = socket(AF_INET, SOCK_STREAM)
+s.bind(HOST, PORT)
+s.listen(0)
+conn, addr = s.accept()
+print 'Connected by', addr
+while 1:
+    data = conn.recv(1024)
+    if not data: break
+    conn.send(data)
+conn.close()
+\end{verbatim}\ecode
+
+\bcode\begin{verbatim}
+# Echo client program
+from socket import *
+HOST = 'daring.cwi.nl'    # The remote host
+PORT = 50007              # The same port as used by the server
+s = socket(AF_INET, SOCK_STREAM)
+s.connect(HOST, PORT)
+s.send('Hello, world')
+data = s.recv(1024)
+s.close()
+print 'Received', `data`
+\end{verbatim}\ecode
diff --git a/Doc/lib/libstdwin.tex b/Doc/lib/libstdwin.tex
new file mode 100644
index 0000000..12771c9
--- /dev/null
+++ b/Doc/lib/libstdwin.tex
@@ -0,0 +1,893 @@
+\chapter{STDWIN ONLY}
+
+\section{Built-in Module \sectcode{stdwin}}
+\bimodindex{stdwin}
+
+This module defines several new object types and functions that
+provide access to the functionality of the Standard Window System
+Interface, STDWIN [CWI report CR-R8817].
+It is available on systems to which STDWIN has been ported (which is
+most systems).
+It is only available if the \code{DISPLAY} environment variable is set
+or an explicit \samp{-display \var{displayname}} argument is passed to
+the interpreter.
+
+Functions have names that usually resemble their C STDWIN counterparts
+with the initial `w' dropped.
+Points are represented by pairs of integers; rectangles
+by pairs of points.
+For a complete description of STDWIN please refer to the documentation
+of STDWIN for C programmers (aforementioned CWI report).
+
+\subsection{Functions Defined in Module \sectcode{stdwin}}
+
+The following functions are defined in the \code{stdwin} module:
+
+\renewcommand{\indexsubitem}{(in module stdwin)}
+\begin{funcdesc}{open}{title}
+Open a new window whose initial title is given by the string argument.
+Return a window object; window object methods are described below.%
+\footnote{The Python version of STDWIN does not support draw procedures; all
+	drawing requests are reported as draw events.}
+\end{funcdesc}
+
+\begin{funcdesc}{getevent}{}
+Wait for and return the next event.
+An event is returned as a triple: the first element is the event
+type, a small integer; the second element is the window object to which
+the event applies, or
+\code{None}
+if it applies to no window in particular;
+the third element is type-dependent.
+Names for event types and command codes are defined in the standard
+module
+\code{stdwinevent}.
+\end{funcdesc}
+
+\begin{funcdesc}{pollevent}{}
+Return the next event, if one is immediately available.
+If no event is available, return \code{()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getactive}{}
+Return the window that is currently active, or \code{None} if no
+window is currently active.  (This can be emulated by monitoring
+WE_ACTIVATE and WE_DEACTIVATE events.)
+\end{funcdesc}
+
+\begin{funcdesc}{listfontnames}{pattern}
+Return the list of font names in the system that match the pattern (a
+string).  The pattern should normally be \code{'*'}; returns all
+available fonts.  If the underlying window system is X11, other
+patterns follow the standard X11 font selection syntax (as used e.g.
+in resource definitions), i.e. the wildcard character \code{'*'}
+matches any sequence of characters (including none) and \code{'?'}
+matches any single character.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefscrollbars}{hflag\, vflag}
+Set the flags controlling whether subsequently opened windows will
+have horizontal and/or vertical scroll bars.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefwinpos}{h\, v}
+Set the default window position for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefwinsize}{width\, height}
+Set the default window size for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefscrollbars}{}
+Return the flags controlling whether subsequently opened windows will
+have horizontal and/or vertical scroll bars.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefwinpos}{}
+Return the default window position for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefwinsize}{}
+Return the default window size for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getscrsize}{}
+Return the screen size in pixels.
+\end{funcdesc}
+
+\begin{funcdesc}{getscrmm}{}
+Return the screen size in millimeters.
+\end{funcdesc}
+
+\begin{funcdesc}{fetchcolor}{colorname}
+Return the pixel value corresponding to the given color name.
+Return the default foreground color for unknown color names.
+Hint: the following code tests wheter you are on a machine that
+supports more than two colors:
+\bcode\begin{verbatim}
+if stdwin.fetchcolor('black') <> \
+          stdwin.fetchcolor('red') <> \
+          stdwin.fetchcolor('white'):
+    print 'color machine'
+else:
+    print 'monochrome machine'
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{setfgcolor}{pixel}
+Set the default foreground color.
+This will become the default foreground color of windows opened
+subsequently, including dialogs.
+\end{funcdesc}
+
+\begin{funcdesc}{setbgcolor}{pixel}
+Set the default background color.
+This will become the default background color of windows opened
+subsequently, including dialogs.
+\end{funcdesc}
+
+\begin{funcdesc}{getfgcolor}{}
+Return the pixel value of the current default foreground color.
+\end{funcdesc}
+
+\begin{funcdesc}{getbgcolor}{}
+Return the pixel value of the current default background color.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{fontname}
+Set the current default font.
+This will become the default font for windows opened subsequently,
+and is also used by the text measuring functions \code{textwidth},
+\code{textbreak}, \code{lineheight} and \code{baseline} below.
+This accepts two more optional parameters, size and style:
+Size is the font size (in `points').
+Style is a single character specifying the style, as follows:
+\code{'b'} = bold,
+\code{'i'} = italic,
+\code{'o'} = bold + italic,
+\code{'u'} = underline;
+default style is roman.
+Size and style are ignored under X11 but used on the Macintosh.
+(Sorry for all this complexity --- a more uniform interface is being designed.)
+\end{funcdesc}
+
+\begin{funcdesc}{menucreate}{title}
+Create a menu object referring to a global menu (a menu that appears in
+all windows).
+Methods of menu objects are described below.
+Note: normally, menus are created locally; see the window method
+\code{menucreate} below.
+\strong{Warning:} the menu only appears in a window as long as the object
+returned by this call exists.
+\end{funcdesc}
+
+\begin{funcdesc}{newbitmap}{width\, height}
+Create a new bitmap object of the given dimensions.
+Methods of bitmap objects are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{fleep}{}
+Cause a beep or bell (or perhaps a `visual bell' or flash, hence the
+name).
+\end{funcdesc}
+
+\begin{funcdesc}{message}{string}
+Display a dialog box containing the string.
+The user must click OK before the function returns.
+\end{funcdesc}
+
+\begin{funcdesc}{askync}{prompt\, default}
+Display a dialog that prompts the user to answer a question with yes or
+no.
+Return 0 for no, 1 for yes.
+If the user hits the Return key, the default (which must be 0 or 1) is
+returned.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{askstr}{prompt\, default}
+Display a dialog that prompts the user for a string.
+If the user hits the Return key, the default string is returned.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{askfile}{prompt\, default\, new}
+Ask the user to specify a filename.
+If
+\var{new}
+is zero it must be an existing file; otherwise, it must be a new file.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{setcutbuffer}{i\, string}
+Store the string in the system's cut buffer number
+\var{i},
+where it can be found (for pasting) by other applications.
+On X11, there are 8 cut buffers (numbered 0..7).
+Cut buffer number 0 is the `clipboard' on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{getcutbuffer}{i}
+Return the contents of the system's cut buffer number
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{rotatecutbuffers}{n}
+On X11, rotate the 8 cut buffers by
+\var{n}.
+Ignored on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{getselection}{i}
+Return X11 selection number
+\var{i.}
+Selections are not cut buffers.
+Selection numbers are defined in module
+\code{stdwinevents}.
+Selection \code{WS_PRIMARY} is the
+\dfn{primary}
+selection (used by
+xterm,
+for instance);
+selection \code{WS_SECONDARY} is the
+\dfn{secondary}
+selection; selection \code{WS_CLIPBOARD} is the
+\dfn{clipboard}
+selection (used by
+xclipboard).
+On the Macintosh, this always returns an empty string.
+\end{funcdesc}
+
+\begin{funcdesc}{resetselection}{i}
+Reset selection number
+\var{i},
+if this process owns it.
+(See window method
+\code{setselection()}).
+\end{funcdesc}
+
+\begin{funcdesc}{baseline}{}
+Return the baseline of the current font (defined by STDWIN as the
+vertical distance between the baseline and the top of the
+characters).
+\end{funcdesc}
+
+\begin{funcdesc}{lineheight}{}
+Return the total line height of the current font.
+\end{funcdesc}
+
+\begin{funcdesc}{textbreak}{str\, width}
+Return the number of characters of the string that fit into a space of
+\var{width}
+bits wide when drawn in the curent font.
+\end{funcdesc}
+
+\begin{funcdesc}{textwidth}{str}
+Return the width in bits of the string when drawn in the current font.
+\end{funcdesc}
+
+\begin{funcdesc}{connectionnumber}{}
+\funcline{fileno}{}
+(X11 under \UNIX{} only) Return the ``connection number'' used by the
+underlying X11 implementation.  (This is normally the file number of
+the socket.)  Both functions return the same value;
+\code{connectionnumber()} is named after the corresponding function in
+X11 and STDWIN, while \code{fileno()} makes it possible to use the
+\code{stdwin} module as a ``file'' object parameter to
+\code{select.select()}.  Note that if \code{select()} implies that
+input is possible on \code{stdwin}, this does not guarantee that an
+event is ready --- it may be some internal communication going on
+between the X server and the client library.  Thus, you should call
+\code{stdwin.pollevent()} until it returns \code{None} to check for
+events if you don't want your program to block.  Because of internal
+buffering in X11, it is also possible that \code{stdwin.pollevent()}
+returns an event while \code{select()} does not find \code{stdwin} to
+be ready, so you should read any pending events with
+\code{stdwin.pollevent()} until it returns \code{None} before entering
+a blocking \code{select()} call.
+\ttindex{select}
+\end{funcdesc}
+
+\subsection{Window Object Methods}
+
+Window objects are created by \code{stdwin.open()}.  They are closed
+by their \code{close()} method or when they are garbage-collected.
+Window objects have the following methods:
+
+\renewcommand{\indexsubitem}{(window method)}
+
+\begin{funcdesc}{begindrawing}{}
+Return a drawing object, whose methods (described below) allow drawing
+in the window.
+\end{funcdesc}
+
+\begin{funcdesc}{change}{rect}
+Invalidate the given rectangle; this may cause a draw event.
+\end{funcdesc}
+
+\begin{funcdesc}{gettitle}{}
+Returns the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{getdocsize}{}
+\begin{sloppypar}
+Return a pair of integers giving the size of the document as set by
+\code{setdocsize()}.
+\end{sloppypar}
+\end{funcdesc}
+
+\begin{funcdesc}{getorigin}{}
+Return a pair of integers giving the origin of the window with respect
+to the document.
+\end{funcdesc}
+
+\begin{funcdesc}{gettitle}{}
+Return the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{getwinsize}{}
+Return a pair of integers giving the size of the window.
+\end{funcdesc}
+
+\begin{funcdesc}{getwinpos}{}
+Return a pair of integers giving the position of the window's upper
+left corner (relative to the upper left corner of the screen).
+\end{funcdesc}
+
+\begin{funcdesc}{menucreate}{title}
+Create a menu object referring to a local menu (a menu that appears
+only in this window).
+Methods of menu objects are described below.
+{\bf Warning:} the menu only appears as long as the object
+returned by this call exists.
+\end{funcdesc}
+
+\begin{funcdesc}{scroll}{rect\, point}
+Scroll the given rectangle by the vector given by the point.
+\end{funcdesc}
+
+\begin{funcdesc}{setdocsize}{point}
+Set the size of the drawing document.
+\end{funcdesc}
+
+\begin{funcdesc}{setorigin}{point}
+Move the origin of the window (its upper left corner)
+to the given point in the document.
+\end{funcdesc}
+
+\begin{funcdesc}{setselection}{i\, str}
+Attempt to set X11 selection number
+\var{i}
+to the string
+\var{str}.
+(See stdwin method
+\code{getselection()}
+for the meaning of
+\var{i}.)
+Return true if it succeeds.
+If  succeeds, the window ``owns'' the selection until
+(a) another applications takes ownership of the selection; or
+(b) the window is deleted; or
+(c) the application clears ownership by calling
+\code{stdwin.resetselection(\var{i})}.
+When another application takes ownership of the selection, a
+\code{WE_LOST_SEL}
+event is received for no particular window and with the selection number
+as detail.
+Ignored on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{settimer}{dsecs}
+Schedule a timer event for the window in
+\code{\var{dsecs}/10}
+seconds.
+\end{funcdesc}
+
+\begin{funcdesc}{settitle}{title}
+Set the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{setwincursor}{name}
+\begin{sloppypar}
+Set the window cursor to a cursor of the given name.
+It raises the
+\code{RuntimeError}
+exception if no cursor of the given name exists.
+Suitable names include
+\code{'ibeam'},
+\code{'arrow'},
+\code{'cross'},
+\code{'watch'}
+and
+\code{'plus'}.
+On X11, there are many more (see
+\file{<X11/cursorfont.h>}).
+\end{sloppypar}
+\end{funcdesc}
+
+\begin{funcdesc}{setwinpos}{h\, v}
+Set the the position of the window's upper left corner (relative to
+the upper left corner of the screen).
+\end{funcdesc}
+
+\begin{funcdesc}{setwinsize}{width\, height}
+Set the window's size.
+\end{funcdesc}
+
+\begin{funcdesc}{show}{rect}
+Try to ensure that the given rectangle of the document is visible in
+the window.
+\end{funcdesc}
+
+\begin{funcdesc}{textcreate}{rect}
+Create a text-edit object in the document at the given rectangle.
+Methods of text-edit objects are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{setactive}{}
+Attempt to make this window the active window.  If successful, this
+will generate a WE_ACTIVATE event (and a WE_DEACTIVATE event in case
+another window in this application became inactive).
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the window object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Drawing Object Methods}
+
+Drawing objects are created exclusively by the window method
+\code{begindrawing()}.
+Only one drawing object can exist at any given time; the drawing object
+must be deleted to finish drawing.
+No drawing object may exist when
+\code{stdwin.getevent()}
+is called.
+Drawing objects have the following methods:
+
+\renewcommand{\indexsubitem}{(drawing method)}
+
+\begin{funcdesc}{box}{rect}
+Draw a box just inside a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{circle}{center\, radius}
+Draw a circle with given center point and radius.
+\end{funcdesc}
+
+\begin{funcdesc}{elarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+Draw an elliptical arc with given center point.
+\code{(\var{rh}, \var{rv})}
+gives the half sizes of the horizontal and vertical radii.
+\code{(\var{a1}, \var{a2})}
+gives the angles (in degrees) of the begin and end points.
+0 degrees is at 3 o'clock, 90 degrees is at 12 o'clock.
+\end{funcdesc}
+
+\begin{funcdesc}{erase}{rect}
+Erase a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{fillcircle}{center\, radius}
+Draw a filled circle with given center point and radius.
+\end{funcdesc}
+
+\begin{funcdesc}{fillelarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+Draw a filled elliptical arc; arguments as for \code{elarc}.
+\end{funcdesc}
+
+\begin{funcdesc}{fillpoly}{points}
+Draw a filled polygon given by a list (or tuple) of points.
+\end{funcdesc}
+
+\begin{funcdesc}{invert}{rect}
+Invert a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{line}{p1\, p2}
+Draw a line from point
+\var{p1}
+to
+\var{p2}.
+\end{funcdesc}
+
+\begin{funcdesc}{paint}{rect}
+Fill a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{poly}{points}
+Draw the lines connecting the given list (or tuple) of points.
+\end{funcdesc}
+
+\begin{funcdesc}{shade}{rect\, percent}
+Fill a rectangle with a shading pattern that is about
+\var{percent}
+percent filled.
+\end{funcdesc}
+
+\begin{funcdesc}{text}{p\, str}
+Draw a string starting at point p (the point specifies the
+top left coordinate of the string).
+\end{funcdesc}
+
+\begin{funcdesc}{xorcircle}{center\, radius}
+\funcline{xorelarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+\funcline{xorline}{p1\, p2}
+\funcline{xorpoly}{points}
+Draw a circle, an elliptical arc, a line or a polygon, respectively,
+in XOR mode.
+\end{funcdesc}
+
+\begin{funcdesc}{setfgcolor}{}
+\funcline{setbgcolor}{}
+\funcline{getfgcolor}{}
+\funcline{getbgcolor}{}
+These functions are similar to the corresponding functions described
+above for the
+\code{stdwin}
+module, but affect or return the colors currently used for drawing
+instead of the global default colors.
+When a drawing object is created, its colors are set to the window's
+default colors, which are in turn initialized from the global default
+colors when the window is created.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{}
+\funcline{baseline}{}
+\funcline{lineheight}{}
+\funcline{textbreak}{}
+\funcline{textwidth}{}
+These functions are similar to the corresponding functions described
+above for the
+\code{stdwin}
+module, but affect or use the current drawing font instead of
+the global default font.
+When a drawing object is created, its font is set to the window's
+default font, which is in turn initialized from the global default
+font when the window is created.
+\end{funcdesc}
+
+\begin{funcdesc}{bitmap}{point\, bitmap\, mask}
+Draw the \var{bitmap} with its top left corner at \var{point}.
+If the optional \var{mask} argument is present, it should be either
+the same object as \var{bitmap}, to draw only those bits that are set
+in the bitmap, in the foreground color, or \code{None}, to draw all
+bits (ones are drawn in the foreground color, zeros in the background
+color).
+\end{funcdesc}
+
+\begin{funcdesc}{cliprect}{rect}
+Set the ``clipping region'' to a rectangle.
+The clipping region limits the effect of all drawing operations, until
+it is changed again or until the drawing object is closed.  When a
+drawing object is created the clipping region is set to the entire
+window.  When an object to be drawn falls partly outside the clipping
+region, the set of pixels drawn is the intersection of the clipping
+region and the set of pixels that would be drawn by the same operation
+in the absence of a clipping region.
+clipping region 
+\end{funcdesc}
+
+\begin{funcdesc}{noclip}{}
+Reset the clipping region to the entire window.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+\funcline{enddrawing}{}
+Discard the drawing object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Menu Object Methods}
+
+A menu object represents a menu.
+The menu is destroyed when the menu object is deleted.
+The following methods are defined:
+
+\renewcommand{\indexsubitem}{(menu method)}
+
+\begin{funcdesc}{additem}{text\, shortcut}
+Add a menu item with given text.
+The shortcut must be a string of length 1, or omitted (to specify no
+shortcut).
+\end{funcdesc}
+
+\begin{funcdesc}{setitem}{i\, text}
+Set the text of item number
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{enable}{i\, flag}
+Enable or disables item
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{check}{i\, flag}
+Set or clear the
+\dfn{check mark}
+for item
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the menu object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Bitmap Object Methods}
+
+A bitmap represents a rectangular array of bits.
+The top left bit has coordinate (0, 0).
+A bitmap can be drawn with the \code{bitmap} method of a drawing object.
+The following methods are defined:
+
+\renewcommand{\indexsubitem}{(bitmap method)}
+
+\begin{funcdesc}{getsize}{}
+Return a tuple representing the width and height of the bitmap.
+(This returns the values that have been passed to the \code{newbitmap}
+function.)
+\end{funcdesc}
+
+\begin{funcdesc}{setbit}{point\, bit}
+Set the value of the bit indicated by \var{point} to \var{bit}.
+\end{funcdesc}
+
+\begin{funcdesc}{getbit}{point}
+Return the value of the bit indicated by \var{point}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the bitmap object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Text-edit Object Methods}
+
+A text-edit object represents a text-edit block.
+For semantics, see the STDWIN documentation for C programmers.
+The following methods exist:
+
+\renewcommand{\indexsubitem}{(text-edit method)}
+
+\begin{funcdesc}{arrow}{code}
+Pass an arrow event to the text-edit block.
+The
+\var{code}
+must be one of
+\code{WC_LEFT},
+\code{WC_RIGHT},
+\code{WC_UP}
+or
+\code{WC_DOWN}
+(see module
+\code{stdwinevents}).
+\end{funcdesc}
+
+\begin{funcdesc}{draw}{rect}
+Pass a draw event to the text-edit block.
+The rectangle specifies the redraw area.
+\end{funcdesc}
+
+\begin{funcdesc}{event}{type\, window\, detail}
+Pass an event gotten from
+\code{stdwin.getevent()}
+to the text-edit block.
+Return true if the event was handled.
+\end{funcdesc}
+
+\begin{funcdesc}{getfocus}{}
+Return 2 integers representing the start and end positions of the
+focus, usable as slice indices on the string returned by
+\code{gettext()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfocustext}{}
+Return the text in the focus.
+\end{funcdesc}
+
+\begin{funcdesc}{getrect}{}
+Return a rectangle giving the actual position of the text-edit block.
+(The bottom coordinate may differ from the initial position because
+the block automatically shrinks or grows to fit.)
+\end{funcdesc}
+
+\begin{funcdesc}{gettext}{}
+Return the entire text buffer.
+\end{funcdesc}
+
+\begin{funcdesc}{move}{rect}
+Specify a new position for the text-edit block in the document.
+\end{funcdesc}
+
+\begin{funcdesc}{replace}{str}
+Replace the text in the focus by the given string.
+The new focus is an insert point at the end of the string.
+\end{funcdesc}
+
+\begin{funcdesc}{setfocus}{i\, j}
+Specify the new focus.
+Out-of-bounds values are silently clipped.
+\end{funcdesc}
+
+\begin{funcdesc}{settext}{str}
+Replace the entire text buffer by the given string and set the focus
+to \code{(0, 0)}.
+\end{funcdesc}
+
+\begin{funcdesc}{setview}{rect}
+Set the view rectangle to \var{rect}.  If \var{rect} is \code{None},
+viewing mode is reset.  In viewing mode, all output from the text-edit
+object is clipped to the viewing rectangle.  This may be useful to
+implement your own scrolling text subwindow.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the text-edit object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Example}
+\nodename{Stdwin Example}
+
+Here is a minimal example of using STDWIN in Python.
+It creates a window and draws the string ``Hello world'' in the top
+left corner of the window.
+The window will be correctly redrawn when covered and re-exposed.
+The program quits when the close icon or menu item is requested.
+
+\bcode\begin{verbatim}
+import stdwin
+from stdwinevents import *
+
+def main():
+    mywin = stdwin.open('Hello')
+    #
+    while 1:
+        (type, win, detail) = stdwin.getevent()
+        if type == WE_DRAW:
+            draw = win.begindrawing()
+            draw.text((0, 0), 'Hello, world')
+            del draw
+        elif type == WE_CLOSE:
+            break
+
+main()
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{stdwinevents}}
+\stmodindex{stdwinevents}
+
+This module defines constants used by STDWIN for event types
+(\code{WE_ACTIVATE} etc.), command codes (\code{WC_LEFT} etc.)
+and selection types (\code{WS_PRIMARY} etc.).
+Read the file for details.
+Suggested usage is
+
+\bcode\begin{verbatim}
+>>> from stdwinevents import *
+>>> 
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{rect}}
+\stmodindex{rect}
+
+This module contains useful operations on rectangles.
+A rectangle is defined as in module
+\code{stdwin}:
+a pair of points, where a point is a pair of integers.
+For example, the rectangle
+
+\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
+\code{stdwin}).
+
+The module defines the following objects:
+
+\renewcommand{\indexsubitem}{(in module rect)}
+\begin{excdesc}{error}
+The exception raised by functions in this module when they detect an
+error.
+The exception argument is a string describing the problem in more
+detail.
+\end{excdesc}
+
+\begin{datadesc}{empty}
+The rectangle returned when some operations return an empty result.
+This makes it possible to quickly check whether a result is empty:
+
+\bcode\begin{verbatim}
+>>> import rect
+>>> r1 = (10, 20), (90, 80)
+>>> r2 = (0, 0), (10, 20)
+>>> r3 = rect.intersect([r1, r2])
+>>> if r3 is rect.empty: print 'Empty intersection'
+Empty intersection
+>>> 
+\end{verbatim}\ecode
+\end{datadesc}
+
+\begin{funcdesc}{is_empty}{r}
+Returns true if the given rectangle is empty.
+A rectangle
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})}
+is empty if
+\iftexi
+\code{\var{left} >= \var{right}} or \code{\var{top} => \var{bottom}}.
+\else
+$\var{left} \geq \var{right}$ or $\var{top} \geq \var{bottom}$.
+%%JHXXX{\em left~$\geq$~right} or {\em top~$\leq$~bottom}.
+\fi
+\end{funcdesc}
+
+\begin{funcdesc}{intersect}{list}
+Returns the intersection of all rectangles in the list argument.
+It may also be called with a tuple argument.
+Raises
+\code{rect.error}
+if the list is empty.
+Returns
+\code{rect.empty}
+if the intersection of the rectangles is empty.
+\end{funcdesc}
+
+\begin{funcdesc}{union}{list}
+Returns the smallest rectangle that contains all non-empty rectangles in
+the list argument.
+It may also be called with a tuple argument or with two or more
+rectangles as arguments.
+Returns
+\code{rect.empty}
+if the list is empty or all its rectangles are empty.
+\end{funcdesc}
+
+\begin{funcdesc}{pointinrect}{point\, rect}
+Returns true if the point is inside the rectangle.
+By definition, a point
+\code{(\var{h}, \var{v})}
+is inside a rectangle
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})} if
+\iftexi
+\code{\var{left} <= \var{h} < \var{right}} and
+\code{\var{top} <= \var{v} < \var{bottom}}.
+\else
+$\var{left} \leq \var{h} < \var{right}$ and
+$\var{top} \leq \var{v} < \var{bottom}$.
+\fi
+\end{funcdesc}
+
+\begin{funcdesc}{inset}{rect\, \(dh\, dv\)}
+Returns a rectangle that lies inside the
+\code{rect}
+argument by
+\var{dh}
+pixels horizontally
+and
+\var{dv}
+pixels
+vertically.
+If
+\var{dh}
+or
+\var{dv}
+is negative, the result lies outside
+\var{rect}.
+\end{funcdesc}
+
+\begin{funcdesc}{rect2geom}{rect}
+Converts a rectangle to geometry representation:
+\code{(\var{left}, \var{top}), (\var{width}, \var{height})}.
+\end{funcdesc}
+
+\begin{funcdesc}{geom2rect}{geom}
+Converts a rectangle given in geometry representation back to the
+standard rectangle representation
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})}.
+\end{funcdesc}
diff --git a/Doc/lib/libstring.tex b/Doc/lib/libstring.tex
new file mode 100644
index 0000000..2bcbdfc
--- /dev/null
+++ b/Doc/lib/libstring.tex
@@ -0,0 +1,193 @@
+\section{Standard Module \sectcode{string}}
+
+\stmodindex{string}
+
+This module defines some constants useful for checking character
+classes, some exceptions, and some useful string functions.
+The constants are:
+
+\renewcommand{\indexsubitem}{(data in module string)}
+\begin{datadesc}{digits}
+  The string \code{'0123456789'}.
+\end{datadesc}
+
+\begin{datadesc}{hexdigits}
+  The string \code{'0123456789abcdefABCDEF'}.
+\end{datadesc}
+
+\begin{datadesc}{letters}
+  The concatenation of the strings \code{lowercase} and
+  \code{uppercase} described below.
+\end{datadesc}
+
+\begin{datadesc}{lowercase}
+  A string containing all the characters that are considered lowercase
+  letters.  On most systems this is the string
+  \code{'abcdefghijklmnopqrstuvwxyz'}.  Do not change its definition --
+  the effect on the routines \code{upper} and \code{swapcase} is
+  undefined.
+\end{datadesc}
+
+\begin{datadesc}{octdigits}
+  The string \code{'01234567'}.
+\end{datadesc}
+
+\begin{datadesc}{uppercase}
+  A string containing all the characters that are considered uppercase
+  letters.  On most systems this is the string
+  \code{'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}.  Do not change its definition --
+  the effect on the routines \code{lower} and \code{swapcase} is
+  undefined.
+\end{datadesc}
+
+\begin{datadesc}{whitespace}
+  A string containing all characters that are considered whitespace.
+  On most systems this includes the characters space, tab, linefeed,
+  return, formfeed, and vertical tab.  Do not change its definition --
+  the effect on the routines \code{strip} and \code{split} is
+  undefined.
+\end{datadesc}
+
+The exceptions are:
+
+\renewcommand{\indexsubitem}{(exception in module string)}
+
+\begin{excdesc}{atof_error}
+Exception raised by
+\code{atof}
+when a non-float string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{atoi_error}
+Exception raised by
+\code{atoi}
+when a non-integer string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{atol_error}
+Exception raised by
+\code{atol}
+when a non-integer string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{index_error}
+Exception raised by \code{index} when \var{sub} is not found.
+The exception argument is undefined (it may be a tuple containing the
+offending arguments to \code{index} or it may be the constant string
+\code{'substring not found'}).
+\end{excdesc}
+
+The functions are:
+
+\renewcommand{\indexsubitem}{(in module string)}
+
+\begin{funcdesc}{atof}{s}
+Convert a string to a floating point number.  The string must have
+the standard syntax for a floating point literal in Python, optionally
+preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{atoi}{s}
+Convert a string to an integer.  The string must consist of one or more
+digits, optionally preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{atol}{s}
+Convert a string to a long integer.  The string must consist of one
+or more digits, optionally preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{expandtabs}{s\, tabsize}
+Expand tabs in a string, i.e. replace them by one or more spaces,
+depending on the current column and the given tab size.  The column
+number is reset to zero after each newline occurring in the string.
+This doesn't understand other non-printing characters or escape
+sequences.
+\end{funcdesc}
+
+\begin{funcdesc}{find}{s\, sub\, i}
+Return the lowest index in \var{s} not smaller than \var{i} where the
+substring \var{sub} is found.  Return \code{-1} when \var{sub}
+does not occur as a substring of \var{s} with index at least \var{i}.
+If \var{i} is omitted, it defaults to \code{0}.  If \var{i} is
+negative, \code{len(\var{s})} is added.
+\end{funcdesc}
+
+\begin{funcdesc}{rfind}{s\, sub\, i}
+Like \code{find} but finds the highest index.
+\end{funcdesc}
+
+\begin{funcdesc}{index}{s\, sub\, i}
+Like \code{find} but raise \code{index_error} when the substring is
+not found.
+\end{funcdesc}
+
+\begin{funcdesc}{rindex}{s\, sub\, i}
+Like \code{rfind} but raise \code{index_error} when the substring is
+not found.
+\end{funcdesc}
+
+\begin{funcdesc}{lower}{s}
+Convert letters to lower case.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{s}
+Returns a list of the whitespace-delimited words of the string
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{splitfields}{s\, sep}
+  Returns a list containing the fields of the string \var{s}, using
+  the string \var{sep} as a separator.  The list will have one more
+  items than the number of non-overlapping occurrences of the
+  separator in the string.  Thus, \code{string.splitfields(\var{s}, '
+  ')} is not the same as \code{string.split(\var{s})}, as the latter
+  only returns non-empty words.  As a special case,
+  \code{splitfields(\var{s}, '')} returns \code{[\var{s}]}, for any string
+  \var{s}.  (See also \code{regsub.split()}.)
+\end{funcdesc}
+
+\begin{funcdesc}{join}{words}
+Concatenate a list or tuple of words with intervening spaces.
+\end{funcdesc}
+
+\begin{funcdesc}{joinfields}{words\, sep}
+Concatenate a list or tuple of words with intervening separators.
+It is always true that
+\code{string.joinfields(string.splitfields(\var{t}, \var{sep}), \var{sep})}
+equals \var{t}.
+\end{funcdesc}
+
+\begin{funcdesc}{strip}{s}
+Removes leading and trailing whitespace from the string
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{swapcase}{s}
+Converts lower case letters to upper case and vice versa.
+\end{funcdesc}
+
+\begin{funcdesc}{upper}{s}
+Convert letters to upper case.
+\end{funcdesc}
+
+\begin{funcdesc}{ljust}{s\, width}
+\funcline{rjust}{s\, width}
+\funcline{center}{s\, width}
+These functions respectively left-justify, right-justify and center a
+string in a field of given width.
+They return a string that is at least
+\var{width}
+characters wide, created by padding the string
+\var{s}
+with spaces until the given width on the right, left or both sides.
+The string is never truncated.
+\end{funcdesc}
+
+\begin{funcdesc}{zfill}{s\, width}
+Pad a numeric string on the left with zero digits until the given
+width is reached.  Strings starting with a sign are handled correctly.
+\end{funcdesc}
diff --git a/Doc/lib/libstruct.tex b/Doc/lib/libstruct.tex
new file mode 100644
index 0000000..5b4a9aa
--- /dev/null
+++ b/Doc/lib/libstruct.tex
@@ -0,0 +1,75 @@
+\section{Built-in module \sectcode{struct}}
+\bimodindex{struct}
+\indexii{C}{structures}
+
+This module performs conversions between Python values and C
+structs represented as Python strings.  It uses \dfn{format strings}
+(explained below) as compact descriptions of the lay-out of the C
+structs and the intended conversion to/from Python values.
+
+The module defines the following exception and functions:
+
+\renewcommand{\indexsubitem}{(in module struct)}
+\begin{excdesc}{error}
+  Exception raised on various occasions; argument is a string
+  describing what is wrong.
+\end{excdesc}
+
+\begin{funcdesc}{pack}{fmt\, v1\, v2\, {\rm \ldots}}
+  Return a string containing the values
+  \code{\var{v1}, \var{v2}, {\rm \ldots}} packed according to the given
+  format.  The arguments must match the values required by the format
+  exactly.
+\end{funcdesc}
+
+\begin{funcdesc}{unpack}{fmt\, string}
+  Unpack the string (presumably packed by \code{pack(\var{fmt}, {\rm \ldots})})
+  according to the given format.  The result is a tuple even if it
+  contains exactly one item.  The string must contain exactly the
+  amount of data required by the format (i.e.  \code{len(\var{string})} must
+  equal \code{calcsize(\var{fmt})}).
+\end{funcdesc}
+
+\begin{funcdesc}{calcsize}{fmt}
+  Return the size of the struct (and hence of the string)
+  corresponding to the given format.
+\end{funcdesc}
+
+Format characters have the following meaning; the conversion between C
+and Python values should be obvious given their types:
+
+\begin{tableiii}{|c|l|l|}{samp}{Format}{C}{Python}
+  \lineiii{x}{pad byte}{no value}
+  \lineiii{c}{char}{string of length 1}
+  \lineiii{b}{signed char}{integer}
+  \lineiii{h}{short}{integer}
+  \lineiii{i}{int}{integer}
+  \lineiii{l}{long}{integer}
+  \lineiii{f}{float}{float}
+  \lineiii{d}{double}{float}
+\end{tableiii}
+
+A format character may be preceded by an integral repeat count; e.g.
+the format string \code{'4h'} means exactly the same as \code{'hhhh'}.
+
+C numbers are represented in the machine's native format and byte
+order, and properly aligned by skipping pad bytes if necessary
+(according to the rules used by the C compiler).
+
+Examples (all on a big-endian machine):
+
+\bcode\begin{verbatim}
+pack('hhl', 1, 2, 3) == '\000\001\000\002\000\000\000\003'
+unpack('hhl', '\000\001\000\002\000\000\000\003') == (1, 2, 3)
+calcsize('hhl') == 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
+pad bytes at the end, assuming longs are aligned on 4-byte boundaries.
+
+(More format characters are planned, e.g. \code{'s'} for character
+arrays, upper case for unsigned variants, and a way to specify the
+byte order, which is useful for [de]constructing network packets and
+reading/writing portable binary file formats like TIFF and AIFF.)
diff --git a/Doc/lib/libsun.tex b/Doc/lib/libsun.tex
new file mode 100644
index 0000000..9624b9c
--- /dev/null
+++ b/Doc/lib/libsun.tex
@@ -0,0 +1,113 @@
+\chapter{SUNOS ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to the SunOS operating system (versions 4 and 5; the
+latter is also known as SOLARIS version 2).
+
+\section{Built-in module \sectcode{sunaudiodev}}
+\bimodindex{sunaudiodev}
+
+This module allows you to access the sun audio interface. The sun
+audio hardware is capable of recording and playing back audio data
+in U-LAW format with a sample rate of 8K per second. A full
+description can be gotten with \samp{man audio}.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module sunaudiodev)}
+\begin{excdesc}{error}
+This exception is raised on all errors. The argument is a string
+describing what went wrong.
+\end{excdesc}
+
+\begin{funcdesc}{open}{mode}
+This function opens the audio device and returns a sun audio device
+object. This object can then be used to do I/O on. The \var{mode} parameter
+is one of \code{'r'} for record-only access, \code{'w'} for play-only
+access, \code{'rw'} for both and \code{'control'} for access to the
+control device. Since only one process is allowed to have the recorder
+or player open at the same time it is a good idea to open the device
+only for the activity needed. See the audio manpage for details.
+\end{funcdesc}
+
+\subsection{Audio device object methods}
+
+The audio device objects are returned by \code{open} define the
+following methods (except \code{control} objects which only provide
+getinfo, setinfo and drain):
+
+\renewcommand{\indexsubitem}{(audio device method)}
+
+\begin{funcdesc}{close}{}
+This method explicitly closes the device. It is useful in situations
+where deleting the object does not immediately close it since there
+are other references to it. A closed device should not be used again.
+\end{funcdesc}
+
+\begin{funcdesc}{drain}{}
+This method waits until all pending output is processed and then returns.
+Calling this method is often not necessary: destroying the object will
+automatically close the audio device and this will do an implicit drain.
+\end{funcdesc}
+
+\begin{funcdesc}{flush}{}
+This method discards all pending output. It can be used avoid the
+slow response to a user's stop request (due to buffering of up to one
+second of sound).
+\end{funcdesc}
+
+\begin{funcdesc}{getinfo}{}
+This method retrieves status information like input and output volume,
+etc. and returns it in the form of
+an audio status object. This object has no methods but it contains a
+number of attributes describing the current device status. The names
+and meanings of the attributes are described in
+\file{/usr/include/sun/audioio.h} and in the audio man page. Member names
+are slightly different from their C counterparts: a status object is
+only a single structure. Members of the \code{play} substructure have
+\samp{o_} prepended to their name and members of the \code{record}
+structure have \samp{i_}. So, the C member \code{play.sample_rate} is
+accessed as \code{o_sample_rate}, \code{record.gain} as \code{i_gain}
+and \code{monitor_gain} plainly as \code{monitor_gain}.
+\end{funcdesc}
+
+\begin{funcdesc}{ibufcount}{}
+This method returns the number of samples that are buffered on the
+recording side, i.e.
+the program will not block on a \code{read} call of so many samples.
+\end{funcdesc}
+
+\begin{funcdesc}{obufcount}{}
+This method returns the number of samples buffered on the playback
+side. Unfortunately, this number cannot be used to determine a number
+of samples that can be written without blocking since the kernel
+output queue length seems to be variable.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{size}
+This method reads \var{size} samples from the audio input and returns
+them as a python string. The function blocks until enough data is available.
+\end{funcdesc}
+
+\begin{funcdesc}{setinfo}{status}
+This method sets the audio device status parameters. The \var{status}
+parameter is an device status object as returned by \code{getinfo} and
+possibly modified by the program.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{samples}
+Write is passed a python string containing audio samples to be played.
+If there is enough buffer space free it will immedeately return,
+otherwise it will block.
+\end{funcdesc}
+
+There is a companion module, \code{SUNAUDIODEV}, which defines useful
+symbolic constants like \code{MIN_GAIN}, \code{MAX_GAIN},
+\code{SPEAKER}, etc. The names of
+the constants are the same names as used in the C include file
+\file{<sun/audioio.h>}, with the leading string \samp{AUDIO_} stripped.
+
+Useability of the control device is limited at the moment, since there
+is no way to use the 'wait for something to happen' feature the device
+provides. This is because that feature makes heavy use of signals, and
+these do not map too well onto Python.
diff --git a/Doc/lib/libsys.tex b/Doc/lib/libsys.tex
new file mode 100644
index 0000000..ba6b896
--- /dev/null
+++ b/Doc/lib/libsys.tex
@@ -0,0 +1,129 @@
+\section{Built-in Module \sectcode{sys}}
+
+\bimodindex{sys}
+This module provides access to some variables used or maintained by the
+interpreter and to functions that interact strongly with the interpreter.
+It is always available.
+
+\renewcommand{\indexsubitem}{(in module sys)}
+\begin{datadesc}{argv}
+  The list of command line arguments passed to a Python script.
+  \code{sys.argv[0]} is the script name.
+  If no script name was passed to the Python interpreter,
+  \code{sys.argv} is empty.
+\end{datadesc}
+
+\begin{datadesc}{builtin_module_names}
+  A list of strings giving the names of all modules that are compiled
+  into this Python interpreter.  (This information is not available in
+  any other way --- \code{sys.modules.keys()} only lists the imported
+  modules.)
+\end{datadesc}
+
+\begin{datadesc}{exc_type}
+\dataline{exc_value}
+\dataline{exc_traceback}
+  These three variables are not always defined; they are set when an
+  exception handler (an \code{except} clause of a \code{try} statement) is
+  invoked.  Their meaning is: \code{exc_type} gets the exception type of
+  the exception being handled; \code{exc_value} gets the exception
+  parameter (its \dfn{associated value} or the second argument to
+  \code{raise}); \code{exc_traceback} gets a traceback object which
+  encapsulates the call stack at the point where the exception
+  originally occurred.
+\end{datadesc}
+
+\begin{funcdesc}{exit}{n}
+  Exit from Python with numeric exit status \var{n}.  This is
+  implemented by raising the \code{SystemExit} exception, so cleanup
+  actions specified by \code{finally} clauses of \code{try} statements
+  are honored, and it is possible to catch the exit attempt at an outer
+  level.
+\end{funcdesc}
+
+\begin{datadesc}{exitfunc}
+  This value is not actually defined by the module, but can be set by
+  the user (or by a program) to specify a clean-up action at program
+  exit.  When set, it should be a parameterless function.  This function
+  will be called when the interpreter exits in any way (but not when a
+  fatal error occurs: in that case the interpreter's internal state
+  cannot be trusted).
+\end{datadesc}
+
+\begin{datadesc}{last_type}
+\dataline{last_value}
+\dataline{last_traceback}
+  These three variables are not always defined; they are set when an
+  exception is not handled and the interpreter prints an error message
+  and a stack traceback.  Their intended use is to allow an interactive
+  user to import a debugger module and engage in post-mortem debugging
+  without having to re-execute the command that cause the error (which
+  may be hard to reproduce).  The meaning of the variables is the same
+  as that of \code{exc_type}, \code{exc_value} and \code{exc_tracaback},
+  respectively.
+\end{datadesc}
+
+\begin{datadesc}{modules}
+  Gives the list of modules that have already been loaded.
+  This can be manipulated to force reloading of modules and other tricks.
+\end{datadesc}
+
+\begin{datadesc}{path}
+  A list of strings that specifies the search path for modules.
+  Initialized from the environment variable \code{PYTHONPATH}, or an
+  installation-dependent default.
+\end{datadesc}
+
+\begin{datadesc}{ps1}
+\dataline{ps2}
+  Strings specifying the primary and secondary prompt of the
+  interpreter.  These are only defined if the interpreter is in
+  interactive mode.  Their initial values in this case are
+  \code{'>>> '} and \code{'... '}.
+\end{datadesc}
+
+\begin{funcdesc}{settrace}{tracefunc}
+  Set the system's trace function, which allows you to implement a
+  Python source code debugger in Python.  The standard modules
+  \code{pdb} and \code{wdb} are such debuggers; the difference is that
+  \code{wdb} uses windows and needs STDWIN, while \code{pdb} has a
+  line-oriented interface not unlike dbx.  See the file \file{pdb.doc}
+  in the Python library source directory for more documentation (both
+  about \code{pdb} and \code{sys.trace}).
+\end{funcdesc}
+\ttindex{pdb}
+\ttindex{wdb}
+\index{trace function}
+
+\begin{funcdesc}{setprofile}{profilefunc}
+  Set the system's profile function, which allows you to implement a
+  Python source code profiler in Python.  The system's profile function
+  is called similarly to the system's trace function (see
+  \code{sys.settrace}), but it isn't called for each executed line of
+  code (only on call and return and when an exception occurs).  Also,
+  its return value is not used, so it can just return \code{None}.
+\end{funcdesc}
+\index{profile function}
+
+\begin{datadesc}{stdin}
+\dataline{stdout}
+\dataline{stderr}
+  File objects corresponding to the interpreter's standard input,
+  output and error streams.  \code{sys.stdin} is used for all
+  interpreter input except for scripts but including calls to
+  \code{input()} and \code{raw_input()}.  \code{sys.stdout} is used
+  for the output of \code{print} and expression statements and for the
+  prompts of \code{input()} and \code{raw_input()}.  The interpreter's
+  own prompts and (almost all of) its error messages go to
+  \code{sys.stderr}.  \code{sys.stdout} and \code{sys.stderr} needn't
+  be built-in file objects: any object is acceptable as long as it has
+  a \code{write} method that takes a string argument.
+\end{datadesc}
+
+\begin{datadesc}{tracebacklimit}
+When this variable is set to an integer value, it determines the
+maximum number of levels of traceback information printed when an
+unhandled exception occurs.  The default is 1000.  When set to 0 or
+less, all traceback information is suppressed and only the exception
+type and value are printed.
+\end{datadesc}
diff --git a/Doc/lib/libthread.tex b/Doc/lib/libthread.tex
new file mode 100644
index 0000000..c836615
--- /dev/null
+++ b/Doc/lib/libthread.tex
@@ -0,0 +1,89 @@
+\section{Built-in Module \sectcode{thread}}
+\bimodindex{thread}
+
+This module provides low-level primitives for working with multiple
+threads (a.k.a. \dfn{light-weight processes} or \dfn{tasks}) --- multiple
+threads of control sharing their global data space.  For
+synchronization, simple locks (a.k.a. \dfn{mutexes} or \dfn{binary
+semaphores}) are provided.
+
+The module is optional and supported on SGI and Sun Sparc systems only.
+
+It defines the following constant and functions:
+
+\renewcommand{\indexsubitem}{(in module thread)}
+\begin{excdesc}{error}
+Raised on thread-specific errors.
+\end{excdesc}
+
+\begin{funcdesc}{start_new_thread}{func\, arg}
+Start a new thread.  The thread executes the function \var{func}
+with the argument list \var{arg} (which must be a tuple).  When the
+function returns, the thread silently exits.  When the function raises
+terminates with an unhandled exception, a stack trace is printed and
+then the thread exits (but other threads continue to run).
+\end{funcdesc}
+
+\begin{funcdesc}{exit_thread}{}
+Exit the current thread silently.  Other threads continue to run.
+\strong{Caveat:} code in pending \code{finally} clauses is not executed.
+\end{funcdesc}
+
+\begin{funcdesc}{exit_prog}{status}
+Exit all threads and report the value of the integer argument
+\var{status} as the exit status of the entire program.
+\strong{Caveat:} code in pending \code{finally} clauses, in this thread
+or in other threads, is not executed.
+\end{funcdesc}
+
+\begin{funcdesc}{allocate_lock}{}
+Return a new lock object.  Methods of locks are described below.  The
+lock is initially unlocked.
+\end{funcdesc}
+
+Lock objects have the following methods:
+
+\renewcommand{\indexsubitem}{(lock method)}
+\begin{funcdesc}{acquire}{waitflag}
+Without the optional argument, this method acquires the lock
+unconditionally, if necessary waiting until it is released by another
+thread (only one thread at a time can acquire a lock --- that's their
+reason for existence), and returns \code{None}.  If the integer
+\var{waitflag} argument is present, the action depends on its value:
+if it is zero, the lock is only acquired if it can be acquired
+immediately without waiting, while if it is nonzero, the lock is
+acquired unconditionally as before.  If an argument is present, the
+return value is 1 if the lock is acquired successfully, 0 if not.
+\end{funcdesc}
+
+\begin{funcdesc}{release}{}
+Releases the lock.  The lock must have been acquired earlier, but not
+necessarily by the same thread.
+\end{funcdesc}
+
+\begin{funcdesc}{locked}{}
+Return the status of the lock: 1 if it has been acquired by some
+thread, 0 if not.
+\end{funcdesc}
+
+{\bf Caveats:}
+
+\begin{itemize}
+\item
+Threads interact strangely with interrupts: the
+\code{KeyboardInterrupt} exception will be received by an arbitrary
+thread.
+
+\item
+Calling \code{sys.exit(\var{status})} or executing
+\code{raise SystemExit, \var{status}} is almost equivalent to calling
+\code{thread.exit_prog(\var{status})}, except that the former ways of
+exiting the entire program do honor \code{finally} clauses in the
+current thread (but not in other threads).
+
+\item
+Not all built-in functions that may block waiting for I/O allow other
+threads to run, although the most popular ones (\code{sleep},
+\code{read}, \code{select}) work as expected.
+
+\end{itemize}
diff --git a/Doc/lib/libtime.tex b/Doc/lib/libtime.tex
new file mode 100644
index 0000000..fe8b7dc
--- /dev/null
+++ b/Doc/lib/libtime.tex
@@ -0,0 +1,121 @@
+\section{Built-in Module \sectcode{time}}
+
+\bimodindex{time}
+This module provides various time-related functions.
+It is always available.  (On some systems, not all functions may
+exist; e.g. the ``milli'' variants can't always be implemented.)
+
+An explanation of some terminology and conventions is in order.
+
+\begin{itemize}
+
+\item
+The ``epoch'' is the point where the time starts.  On January 1st that
+year, at 0 hours, the ``time since the epoch'' is zero.  For UNIX, the
+epoch is 1970.  To find out what the epoch is, look at the first
+element of \code{gmtime(0)}.
+
+\item
+UTC is Coordinated Universal Time (formerly known as Greenwich Mean
+Time).  The acronym UTC is not a mistake but a compromise between
+English and French.
+
+\item
+DST is Daylight Saving Time, an adjustment of the timezone by
+(usually) one hour during part of the year.  DST rules are magic
+(determined by local law) and can change from year to year.  The C
+library has a table containing the local rules (often it is read from
+a system file for flexibility) and is the only source of True Wisdom
+in this respect.
+
+\item
+The precision of the various real-time functions may be less than
+suggested by the units in which their value or argument is expressed.
+E.g. on most UNIX systems, the clock ``ticks'' only every 1/50th or
+1/100th of a second, and on the Mac, it ticks 60 times a second.
+
+\end{itemize}
+
+Functions and data items are:
+
+\renewcommand{\indexsubitem}{(in module time)}
+
+\begin{datadesc}{altzone}
+The offset of the local DST timezone, in seconds west of the 0th
+meridian, if one is defined.  Only use this if \code{daylight} is
+nonzero.
+\end{datadesc}
+
+
+\begin{funcdesc}{asctime}{tuple}
+Convert a tuple representing a time as returned by \code{gmtime()} or
+\code{localtime()} to a 24-character string of the following form:
+\code{'Sun Jun 20 23:21:05 1993'}.  Note: unlike the C function of
+the same name, there is no trailing newline.
+\end{funcdesc}
+
+
+\begin{funcdesc}{ctime}{secs}
+Convert a time expressed in seconds since the epoch to a string
+representing local time.  \code{ctime(t)} is equivalent to
+\code{asctime(localtime(t))}.
+\end{funcdesc}
+
+\begin{datadesc}{daylight}
+Nonzero if a DST timezone is defined.
+\end{datadesc}
+
+\begin{funcdesc}{gmtime}{secs}
+Convert a time expressed in seconds since the epoch to a tuple of 9
+integers, in UTC: year (e.g. 1993), month (1-12), day (1-31), hour
+(0-23), minute (0-59), second (0-59), weekday (0-6, monday is 0),
+julian day (1-366), dst flag (always zero).  Fractions of a second are
+ignored.  Note subtle differences with the C function of this name.
+\end{funcdesc}
+
+\begin{funcdesc}{localtime}{secs}
+Like \code{gmtime} but converts to local time.  The dst flag is set
+to 1 when DST applies to the given time.
+\end{funcdesc}
+
+\begin{funcdesc}{millisleep}{msecs}
+Suspend execution for the given number of milliseconds.  (Obsolete,
+you can now use use \code{sleep} with a floating point argument.)
+\end{funcdesc}
+
+\begin{funcdesc}{millitimer}{}
+Return the number of milliseconds of real time elapsed since some
+point in the past that is fixed per execution of the python
+interpreter (but may change in each following run).  The return value
+may be negative, and it may wrap around.
+\end{funcdesc}
+
+\begin{funcdesc}{mktime}{tuple}
+This is the inverse function of \code{localtime}.  Its argument is the
+full 9-tuple (since the dst flag is needed).  It returns an integer.
+\end{funcdesc}
+
+\begin{funcdesc}{sleep}{secs}
+Suspend execution for the given number of seconds.  The argument may
+be a floating point number to indicate a more precise sleep time.
+\end{funcdesc}
+
+\begin{funcdesc}{time}{}
+Return the time as a floating point number expressed in seconds since
+the epoch, in UTC.  Note that even though the time is always returned
+as a floating point number, not all systems provide time with a better
+precision than 1 second.  An alternative for measuring precise
+intervals is \code{millitimer}.
+\end{funcdesc}
+
+\begin{datadesc}{timezone}
+The offset of the local (non-DST) timezone, in seconds west of the 0th
+meridian (i.e. negative in most of Western Europe, positive in the US,
+zero in the UK).
+\end{datadesc}
+
+\begin{datadesc}{tzname}
+A tuple of two strings: the first is the name of the local non-DST
+timezone, the second is the name of the local DST timezone.  If no DST
+timezone is defined, the second string should not be used.
+\end{datadesc}
diff --git a/Doc/lib/libtypes.tex b/Doc/lib/libtypes.tex
new file mode 100644
index 0000000..be8d990
--- /dev/null
+++ b/Doc/lib/libtypes.tex
@@ -0,0 +1,618 @@
+\section{Built-in Types}
+
+The following sections describe the standard types that are built into
+the interpreter.  These are the numeric types, sequence types, and
+several others, including types themselves.  There is no explicit
+Boolean type; use integers instead.
+\indexii{built-in}{types}
+\indexii{Boolean}{type}
+
+Some operations are supported by several object types; in particular,
+all objects can be compared, tested for truth value, and converted to
+a string (with the \code{`{\rm \ldots}`} notation).  The latter conversion is
+implicitly used when an object is written by the \code{print} statement.
+\stindex{print}
+
+\subsection{Truth Value Testing}
+
+Any object can be tested for truth value, for use in an \code{if} or
+\code{while} condition or as operand of the Boolean operations below.
+The following values are false:
+\stindex{if}
+\stindex{while}
+\indexii{truth}{value}
+\indexii{Boolean}{operations}
+\index{false}
+
+\begin{itemize}
+\renewcommand{\indexsubitem}{(Built-in object)}
+
+\item	\code{None}
+	\ttindex{None}
+
+\item	zero of any numeric type, e.g., \code{0}, \code{0L}, \code{0.0}.
+
+\item	any empty sequence, e.g., \code{''}, \code{()}, \code{[]}.
+
+\item	any empty mapping, e.g., \code{\{\}}.
+
+\end{itemize}
+
+\emph{All} other values are true --- so objects of many types are
+always true.
+\index{true}
+
+\subsection{Boolean Operations}
+
+These are the Boolean operations:
+\indexii{Boolean}{operations}
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\var{x} or \var{y}}{if \var{x} is false, then \var{y}, else \var{x}}{(1)}
+  \lineiii{\var{x} and \var{y}}{if \var{x} is false, then \var{x}, else \var{y}}{(1)}
+  \lineiii{not \var{x}}{if \var{x} is false, then \code{1}, else \code{0}}{}
+\end{tableiii}
+\opindex{and}
+\opindex{or}
+\opindex{not}
+
+\noindent
+Notes:
+
+\begin{description}
+
+\item[(1)]
+These only evaluate their second argument if needed for their outcome.
+
+\end{description}
+
+\subsection{Comparisons}
+
+Comparison operations are supported by all objects:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Meaning}{Notes}
+  \lineiii{<}{strictly less than}{}
+  \lineiii{<=}{less than or equal}{}
+  \lineiii{>}{strictly greater than}{}
+  \lineiii{>=}{greater than or equal}{}
+  \lineiii{==}{equal}{}
+  \lineiii{<>}{not equal}{(1)}
+  \lineiii{!=}{not equal}{(1)}
+  \lineiii{is}{object identity}{}
+  \lineiii{is not}{negated object identity}{}
+\end{tableiii}
+\indexii{operator}{comparison}
+\opindex{==} % XXX *All* others have funny characters < ! >
+\opindex{is}
+\opindex{is not}
+
+\noindent
+Notes:
+
+\begin{description}
+
+\item[(1)]
+\code{<>} and \code{!=} are alternate spellings for the same operator.
+(I couldn't choose between \ABC{} and \C{}! :-)
+\indexii{\ABC{}}{language}
+\indexii{\C{}}{language}
+
+\end{description}
+
+Objects of different types, except different numeric types, never
+compare equal; such objects are ordered consistently but arbitrarily
+(so that sorting a heterogeneous array yields a consistent result).
+Furthermore, some types (e.g., windows) support only a degenerate
+notion of comparison where any two objects of that type are unequal.
+Again, such objects are ordered arbitrarily but consistently.
+\indexii{types}{numeric}
+\indexii{objects}{comparing}
+
+(Implementation note: objects of different types except numbers are
+ordered by their type names; objects of the same types that don't
+support proper comparison are ordered by their address.)
+
+Two more operations with the same syntactic priority, \code{in} and
+\code{not in}, are supported only by sequence types (below).
+\opindex{in}
+\opindex{not in}
+
+\subsection{Numeric Types}
+
+There are three numeric types: \dfn{plain integers}, \dfn{long integers}, and
+\dfn{floating point numbers}.  Plain integers (also just called \dfn{integers})
+are implemented using \code{long} in \C{}, which gives them at least 32
+bits of precision.  Long integers have unlimited precision.  Floating
+point numbers are implemented using \code{double} in \C{}.  All bets on
+their precision are off unless you happen to know the machine you are
+working with.
+\indexii{numeric}{types}
+\indexii{integer}{types}
+\indexii{integer}{type}
+\indexiii{long}{integer}{type}
+\indexii{floating point}{type}
+\indexii{\C{}}{language}
+
+Numbers are created by numeric literals or as the result of built-in
+functions and operators.  Unadorned integer literals (including hex
+and octal numbers) yield plain integers.  Integer literals with an \samp{L}
+or \samp{l} suffix yield long integers
+(\samp{L} is preferred because \code{1l} looks too much like eleven!).
+Numeric literals containing a decimal point or an exponent sign yield
+floating point numbers.
+\indexii{numeric}{literals}
+\indexii{integer}{literals}
+\indexiii{long}{integer}{literals}
+\indexii{floating point}{literals}
+\indexii{hexadecimal}{literals}
+\indexii{octal}{literals}
+
+Python fully supports mixed arithmetic: when a binary arithmetic
+operator has operands of different numeric types, the operand with the
+``smaller'' type is converted to that of the other, where plain
+integer is smaller than long integer is smaller than floating point.
+Comparisons between numbers of mixed type use the same rule.%
+\footnote{As a consequence, the list \code{[1, 2]} is considered equal
+	to \code{[1.0, 2.0]}, and similar for tuples.}
+The functions \code{int()}, \code{long()} and \code{float()} can be used
+to coerce numbers to a specific type.
+\index{arithmetic}
+\bifuncindex{int}
+\bifuncindex{long}
+\bifuncindex{float}
+
+All numeric types support the following operations:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{abs(\var{x})}{absolute value of \var{x}}{}
+  \lineiii{int(\var{x})}{\var{x} converted to integer}{(1)}
+  \lineiii{long(\var{x})}{\var{x} converted to long integer}{(1)}
+  \lineiii{float(\var{x})}{\var{x} converted to floating point}{}
+  \lineiii{-\var{x}}{\var{x} negated}{}
+  \lineiii{+\var{x}}{\var{x} unchanged}{}
+  \lineiii{\var{x} + \var{y}}{sum of \var{x} and \var{y}}{}
+  \lineiii{\var{x} - \var{y}}{difference of \var{x} and \var{y}}{}
+  \lineiii{\var{x} * \var{y}}{product of \var{x} and \var{y}}{}
+  \lineiii{\var{x} / \var{y}}{quotient of \var{x} and \var{y}}{(2)}
+  \lineiii{\var{x} \%{} \var{y}}{remainder of \code{\var{x} / \var{y}}}{}
+  \lineiii{divmod(\var{x}, \var{y})}{the pair \code{(\var{x} / \var{y}, \var{x} \%{} \var{y})}}{(3)}
+  \lineiii{pow(\var{x}, \var{y})}{\var{x} to the power \var{y}}{}
+\end{tableiii}
+\indexiii{operations on}{numeric}{types}
+
+\noindent
+Notes:
+\begin{description}
+\item[(1)]
+Conversion from floating point to (long or plain) integer may round or
+% XXXJH xref here
+truncate as in \C{}; see functions \code{floor} and \code{ceil} in module
+\code{math} for well-defined conversions.
+\indexii{numeric}{conversions}
+\ttindex{math}
+\indexii{\C{}}{language}
+
+\item[(2)]
+For (plain or long) integer division, the result is an integer; it
+always truncates towards zero.
+% XXXJH integer division is better defined nowadays
+\indexii{integer}{division}
+\indexiii{long}{integer}{division}
+
+\item[(3)]
+See the section on built-in functions for an exact definition.
+
+\end{description}
+% XXXJH exceptions: overflow (when? what operations?) zerodivision
+
+\subsubsection{Bit-string Operations on Integer Types.}
+
+Plain and long integer types support additional operations that make
+sense only for bit-strings.  Negative numbers are treated as their 2's
+complement value:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\~\var{x}}{the bits of \var{x} inverted}{}
+  \lineiii{\var{x} \^{} \var{y}}{bitwise \dfn{exclusive or} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} \&{} \var{y}}{bitwise \dfn{and} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} | \var{y}}{bitwise \dfn{or} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} << \var{n}}{\var{x} shifted left by \var{n} bits}{}
+  \lineiii{\var{x} >> \var{n}}{\var{x} shifted right by \var{n} bits}{}
+\end{tableiii}
+% XXXJH what's `left'? `right'? maybe better use lsb or msb or something
+\indexiii{operations on}{integer}{types}
+\indexii{bit-string}{operations}
+\indexii{shifting}{operations}
+\indexii{masking}{operations}
+
+\subsection{Sequence Types}
+
+There are three sequence types: strings, lists and tuples.
+Strings literals are written in single quotes: \code{'xyzzy'}.
+Lists are constructed with square brackets,
+separating items with commas:
+\code{[a, b, c]}.
+Tuples are constructed by the comma operator
+(not within square brackets), with or without enclosing parentheses,
+but an empty tuple must have the enclosing parentheses, e.g.,
+\code{a, b, c} or \code{()}.  A single item tuple must have a trailing comma,
+e.g., \code{(d,)}.
+\indexii{sequence}{types}
+\indexii{string}{type}
+\indexii{tuple}{type}
+\indexii{list}{type}
+
+Sequence types support the following operations (\var{s} and \var{t} are
+sequences of the same type; \var{n}, \var{i} and \var{j} are integers):
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{len(\var{s})}{length of \var{s}}{}
+  \lineiii{min(\var{s})}{smallest item of \var{s}}{}
+  \lineiii{max(\var{s})}{largest item of \var{s}}{}
+  \lineiii{\var{x} in \var{s}}{\code{1} if an item of \var{s} is equal to \var{x}, else \code{0}}{}
+  \lineiii{\var{x} not in \var{s}}{\code{0} if an item of \var{s} is equal to \var{x}, else \code{1}}{}
+  \lineiii{\var{s} + \var{t}}{the concatenation of \var{s} and \var{t}}{}
+  \lineiii{\var{s} * \var{n}{\rm ,} \var{n} * \var{s}}{\var{n} copies of \var{s} concatenated}{}
+  \lineiii{\var{s}[\var{i}]}{\var{i}'th item of \var{s}, origin 0}{(1)}
+  \lineiii{\var{s}[\var{i}:\var{j}]}{slice of \var{s} from \var{i} to \var{j}}{(1), (2)}
+\end{tableiii}
+\indexiii{operations on}{sequence}{types}
+\bifuncindex{len}
+\bifuncindex{min}
+\bifuncindex{max}
+\indexii{concatenation}{operation}
+\indexii{repetition}{operation}
+\indexii{subscript}{operation}
+\indexii{slice}{operation}
+\opindex{in}
+\opindex{not in}
+
+\noindent
+Notes:
+
+% XXXJH all TeX-math expressions replaced by python-syntax expressions
+\begin{description}
+  
+\item[(1)] If \var{i} or \var{j} is negative, the index is relative to
+  the end of the string, i.e., \code{len(\var{s}) + \var{i}} or
+  \code{len(\var{s}) + \var{j}} is substituted.  But note that \code{-0} is
+  still \code{0}.
+  
+\item[(2)] The slice of \var{s} from \var{i} to \var{j} is defined as
+  the sequence of items with index \var{k} such that \code{\var{i} <=
+  \var{k} < \var{j}}.  If \var{i} or \var{j} is greater than
+  \code{len(\var{s})}, use \code{len(\var{s})}.  If \var{i} is omitted,
+  use \code{0}.  If \var{j} is omitted, use \code{len(\var{s})}.  If
+  \var{i} is greater than or equal to \var{j}, the slice is empty.
+
+\end{description}
+
+\subsubsection{More String Operations.}
+
+String objects have one unique built-in operation: the \code{\%}
+operator (modulo) with a string left argument interprets this string
+as a C sprintf format string to be applied to the right argument, and
+returns the string resulting from this formatting operation.
+
+Unless the format string requires exactly one argument, the right
+argument should be a tuple of the correct size.  The following format
+characters are understood: \%, c, s, i, d, u, o, x, X, e, E, f, g, G.
+Width and precision may be a * to specify that an integer argument
+specifies the actual width or precision.  The flag characters -, +,
+blank, \# and 0 are understood.  The size specifiers h, l or L may be
+present but are ignored.  The ANSI features \code{\%p} and \code{\%n}
+are not supported.  Since Python strings have an explicit length,
+\code{\%s} conversions don't assume that \code{'\\0'} is the end of
+the string.
+
+For safety reasons, huge floating point precisions are truncated;
+\code{\%f} conversions for huge numbers are replaced by
+\code{\%g} conversions.  All other errors raise exceptions.
+
+Additional string operations are defined in standard module
+\code{string} and in built-in module \code{regex}.
+\index{string}
+\index{regex}
+
+\subsubsection{Mutable Sequence Types.}
+
+List objects support additional operations that allow in-place
+modification of the object.
+These operations would be supported by other mutable sequence types
+(when added to the language) as well.
+Strings and tuples are immutable sequence types and such objects cannot
+be modified once created.
+The following operations are defined on mutable sequence types (where
+\var{x} is an arbitrary object):
+\indexiii{mutable}{sequence}{types}
+\indexii{list}{type}
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\var{s}[\var{i}] = \var{x}}
+	{item \var{i} of \var{s} is replaced by \var{x}}{}
+  \lineiii{\var{s}[\var{i}:\var{j}] = \var{t}}
+  	{slice of \var{s} from \var{i} to \var{j} is replaced by \var{t}}{}
+  \lineiii{del \var{s}[\var{i}:\var{j}]}
+	{same as \code{\var{s}[\var{i}:\var{j}] = []}}{}
+  \lineiii{\var{s}.append(\var{x})}
+	{same as \code{\var{s}[len(\var{x}):len(\var{x})] = [\var{x}]}}{}
+  \lineiii{\var{s}.count(\var{x})}
+	{return number of \var{i}'s for which \code{\var{s}[\var{i}] == \var{x}}}{}
+  \lineiii{\var{s}.index(\var{x})}
+	{return smallest \var{i} such that \code{\var{s}[\var{i}] == \var{x}}}{(1)}
+  \lineiii{\var{s}.insert(\var{i}, \var{x})}
+	{same as \code{\var{s}[\var{i}:\var{i}] = [\var{x}]}}{}
+  \lineiii{\var{s}.remove(\var{x})}
+	{same as \code{del \var{s}[\var{s}.index(\var{x})]}}{(1)}
+  \lineiii{\var{s}.reverse()}
+	{reverses the items of \var{s} in place}{}
+  \lineiii{\var{s}.sort()}
+	{permutes the items of \var{s} to satisfy
+        \code{\var{s}[\var{i}] <= \var{s}[\var{j}]},
+        for \code{\var{i} < \var{j}}}{(2)}
+\end{tableiii}
+\indexiv{operations on}{mutable}{sequence}{types}
+\indexiii{operations on}{sequence}{types}
+\indexiii{operations on}{list}{type}
+\indexii{subscript}{assignment}
+\indexii{slice}{assignment}
+\stindex{del}
+\renewcommand{\indexsubitem}{(list method)}
+\ttindex{append}
+\ttindex{count}
+\ttindex{index}
+\ttindex{insert}
+\ttindex{remove}
+\ttindex{reverse}
+\ttindex{sort}
+
+\noindent
+Notes:
+\begin{description}
+\item[(1)] Raises an exception when \var{x} is not found in \var{s}.
+  
+\item[(2)] The \code{sort()} method takes an optional argument
+  specifying a comparison function of two arguments (list items) which
+  should return \code{-1}, \code{0} or \code{1} depending on whether the
+  first argument is considered smaller than, equal to, or larger than the
+  second argument.  Note that this slows the sorting process down
+  considerably; e.g. to sort an array in reverse order it is much faster
+  to use calls to \code{sort()} and \code{reverse()} than to use
+  \code{sort()} with a comparison function that reverses the ordering of
+  the elements.
+\end{description}
+
+\subsection{Mapping Types}
+
+A \dfn{mapping} object maps values of one type (the key type) to
+arbitrary objects.  Mappings are mutable objects.  There is currently
+only one mapping type, the \dfn{dictionary}.  A dictionary's keys are
+almost arbitrary values.  The only types of values not acceptable as
+keys are values containing lists or dictionaries or other mutable
+types that are compared by value rather than by object identity.
+Numeric types used for keys obey the normal rules for numeric
+comparison: if two numbers compare equal (e.g. 1 and 1.0) then they
+can be used interchangeably to index the same dictionary entry.
+
+\indexii{mapping}{types}
+\indexii{dictionary}{type}
+
+Dictionaries are created by placing a comma-separated list of
+\code{\var{key}: \var{value}} pairs within braces, for example:
+\code{\{'jack': 4098, 'sjoerd: 4127\}} or
+\code{\{4098: 'jack', 4127: 'sjoerd\}}.
+
+The following operations are defined on mappings (where \var{a} is a
+mapping, \var{k} is a key and \var{x} is an arbitrary object):
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{len(\var{a})}{the number of items in \var{a}}{}
+  \lineiii{\var{a}[\var{k}]}{the item of \var{a} with key \var{k}}{(1)}
+  \lineiii{\var{a}[\var{k}] = \var{x}}{set \code{\var{a}[\var{k}]} to \var{x}}{}
+  \lineiii{del \var{a}[\var{k}]}{remove \code{\var{a}[\var{k}]} from \var{a}}{(1)}
+  \lineiii{\var{a}.items()}{a copy of \var{a}'s list of (key, item) pairs}{(2)}
+  \lineiii{\var{a}.keys()}{a copy of \var{a}'s list of keys}{(2)}
+  \lineiii{\var{a}.values()}{a copy of \var{a}'s list of values}{(2)}
+  \lineiii{\var{a}.has_key(\var{k})}{\code{1} if \var{a} has a key \var{k}, else \code{0}}{}
+\end{tableiii}
+\indexiii{operations on}{mapping}{types}
+\indexiii{operations on}{dictionary}{type}
+\stindex{del}
+\bifuncindex{len}
+\renewcommand{\indexsubitem}{(dictionary method)}
+\ttindex{keys}
+\ttindex{has_key}
+
+% XXXJH some lines above, you talk about `true', elsewhere you
+% explicitely states \code{0} or \code{1}.
+\noindent
+Notes:
+\begin{description}
+\item[(1)] Raises an exception if \var{k} is not in the map.
+
+\item[(2)] Keys and values are listed in random order, but at any
+moment the ordering of the \code{keys()}, \code{values()} and
+\code{items()} lists is the consistent with each other.
+\end{description}
+
+\subsection{Other Built-in Types}
+
+The interpreter supports several other kinds of objects.
+Most of these support only one or two operations.
+
+\subsubsection{Modules.}
+
+The only special operation on a module is attribute access:
+\code{\var{m}.\var{name}}, where \var{m} is a module and \var{name} accesses
+a name defined in \var{m}'s symbol table.  Module attributes can be
+assigned to.  (Note that the \code{import} statement is not, strictly
+spoken, an operation on a module object; \code{import \var{foo}} does not
+require a module object named \var{foo} to exist, rather it requires
+an (external) \emph{definition} for a module named \var{foo}
+somewhere.)
+
+A special member of every module is \code{__dict__}.
+This is the dictionary containing the module's symbol table.
+Modifying this dictionary will actually change the module's symbol
+table, but direct assignment to the \code{__dict__} attribute is not
+possible (i.e., you can write \code{\var{m}.__dict__['a'] = 1}, which
+defines \code{\var{m}.a} to be \code{1}, but you can't write \code{\var{m}.__dict__ = \{\}}.
+
+Modules are written like this: \code{<module 'sys'>}.
+
+\subsubsection{Classes and Class Instances.}
+% XXXJH cross ref here
+(See the Python Reference Manual for these.)
+
+\subsubsection{Functions.}
+
+Function objects are created by function definitions.  The only
+operation on a function object is to call it:
+\code{\var{func}(\var{argument-list})}.
+
+There are really two flavors of function objects: built-in functions
+and user-defined functions.  Both support the same operation (to call
+the function), but the implementation is different, hence the
+different object types.
+
+The implementation adds two special read-only attributes:
+\code{\var{f}.func_code} is a function's \dfn{code object} (see below) and
+\code{\var{f}.func_globals} is the dictionary used as the function's
+global name space (this is the same as \code{\var{m}.__dict__} where
+\var{m} is the module in which the function \var{f} was defined).
+
+\subsubsection{Methods.}
+
+Methods are functions that are called using the attribute notation.
+There are two flavors: built-in methods (such as \code{append()} on
+lists) and class instance methods.  Built-in methods are described
+with the types that support them.
+
+The implementation adds two special read-only attributes to class
+instance methods: \code{\var{m}.im_self} is the object whose method this
+is, and \code{\var{m}.im_func} is the function implementing the method.
+Calling \code{\var{m}(\var{arg-1}, \var{arg-2}, {\rm \ldots},
+\var{arg-n})} is completely equivalent to calling
+\code{\var{m}.im_func(\var{m}.im_self, \var{arg-1}, \var{arg-2}, {\rm
+\ldots}, \var{arg-n})}.
+
+(See the Python Reference Manual for more info.)
+
+\subsubsection{Type Objects.}
+
+Type objects represent the various object types.  An object's type is
+% XXXJH xref here
+accessed by the built-in function \code{type()}.  There are no special
+operations on types.
+
+Types are written like this: \code{<type 'int'>}.
+
+\subsubsection{The Null Object.}
+
+This object is returned by functions that don't explicitly return a
+value.  It supports no special operations.  There is exactly one null
+object, named \code{None} (a built-in name).
+
+It is written as \code{None}.
+
+\subsubsection{File Objects.}
+
+File objects are implemented using \C{}'s \code{stdio} package and can be
+% XXXJH xref here
+created with the built-in function \code{open()} described under
+Built-in Functions below.
+
+When a file operation fails for an I/O-related reason, the exception
+\code{IOError} is raised.  This includes situations where the
+operation is not defined for some reason, like \code{seek()} on a tty
+device or writing a file opened for reading.
+
+Files have the following methods:
+
+
+\renewcommand{\indexsubitem}{(file method)}
+
+\begin{funcdesc}{close}{}
+  Close the file.  A closed file cannot be read or written anymore.
+\end{funcdesc}
+
+\begin{funcdesc}{flush}{}
+  Flush the internal buffer, like \code{stdio}'s \code{fflush()}.
+\end{funcdesc}
+
+\begin{funcdesc}{isatty}{}
+  Return \code{1} if the file is connected to a tty(-like) device, else
+  \code{0}.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{size}
+  Read at most \var{size} bytes from the file (less if the read hits
+  \EOF{} or no more data is immediately available on a pipe, tty or
+  similar device).  If the \var{size} argument is omitted, read all
+  data until \EOF{} is reached.  The bytes are returned as a string
+  object.  An empty string is returned when \EOF{} is encountered
+  immediately.  (For certain files, like ttys, it makes sense to
+  continue reading after an \EOF{} is hit.)
+\end{funcdesc}
+
+\begin{funcdesc}{readline}{}
+  Read one entire line from the file.  A trailing newline character is
+  kept in the string (but may be absent when a file ends with an
+  incomplete line).  An empty string is returned when \EOF{} is hit
+  immediately.  Note: unlike \code{stdio}'s \code{fgets()}, the returned
+  string contains null characters (\code{'\e 0'}) if they occurred in the
+  input.
+\end{funcdesc}
+
+\begin{funcdesc}{readlines}{}
+  Read until \EOF{} using \code{readline()} and return a list containing
+  the lines thus read.
+\end{funcdesc}
+
+\begin{funcdesc}{seek}{offset\, whence}
+  Set the file's current position, like \code{stdio}'s \code{fseek()}.
+  The \var{whence} argument is optional and defaults to \code{0}
+  (absolute file positioning); other values are \code{1} (seek
+  relative to the current position) and \code{2} (seek relative to the
+  file's end).  There is no return value.
+\end{funcdesc}
+
+\begin{funcdesc}{tell}{}
+  Return the file's current position, like \code{stdio}'s \code{ftell()}.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{str}
+  Write a string to the file.  There is no return value.
+\end{funcdesc}
+
+\subsubsection{Internal Objects.}
+
+(See the Python Reference Manual for these.)
+
+\subsection{Special Attributes}
+
+The implementation adds a few special read-only attributes to several
+object types, where they are relevant:
+
+\begin{itemize}
+
+\item
+\code{\var{x}.__dict__} is a dictionary of some sort used to store an
+object's (writable) attributes;
+
+\item
+\code{\var{x}.__methods__} lists the methods of many built-in object types,
+e.g., \code{[].__methods__} is
+% XXXJH results in?, yields?, written down as an example
+\code{['append', 'count', 'index', 'insert', 'remove', 'reverse', 'sort']};
+
+\item
+\code{\var{x}.__members__} lists data attributes;
+
+\item
+\code{\var{x}.__class__} is the class to which a class instance belongs;
+
+\item
+\code{\var{x}.__bases__} is the tuple of base classes of a class object.
+
+\end{itemize}
diff --git a/Doc/lib/libunix.tex b/Doc/lib/libunix.tex
new file mode 100644
index 0000000..ca4ec97
--- /dev/null
+++ b/Doc/lib/libunix.tex
@@ -0,0 +1,5 @@
+\chapter{UNIX ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to the UNIX operating system, or in some cases to
+some or many variants of it.
diff --git a/Doc/lib/libwhrandom.tex b/Doc/lib/libwhrandom.tex
new file mode 100644
index 0000000..8ad2339
--- /dev/null
+++ b/Doc/lib/libwhrandom.tex
@@ -0,0 +1,20 @@
+\section{Standard Module \sectcode{whrandom}}
+
+\stmodindex{whrandom}
+This module implements a Wichmann-Hill pseudo-random number generator.
+It defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module whrandom)}
+\begin{funcdesc}{random}{}
+Returns the next random floating point number in the range [0.0 ... 1.0).
+\end{funcdesc}
+
+\begin{funcdesc}{seed}{x\, y\, z}
+Initializes the random number generator from the integers
+\var{x},
+\var{y}
+and
+\var{z}.
+When the module is first imported, the random number is initialized
+using values derived from the current time.
+\end{funcdesc}
diff --git a/Doc/libal.tex b/Doc/libal.tex
new file mode 100644
index 0000000..708c54e
--- /dev/null
+++ b/Doc/libal.tex
@@ -0,0 +1,177 @@
+\section{Built-in Module \sectcode{al}}
+\bimodindex{al}
+
+This module provides access to the audio facilities of the Indigo and
+4D/35 workstations, described in section 3A of the IRIX 4.0 man pages
+(and also available as an option in IRIX 3.3).  You'll need to read
+those man pages to understand what these functions do!
+Some of the functions are not available in releases below 4.0.5.
+Again, see the manual to check whether a specific function is
+available on your platform.
+
+Symbolic constants from the C header file \file{<audio.h>} are defined
+in the standard module \code{AL}, see below.
+
+\strong{Warning:} the current version of the audio library may dump core
+when bad argument values are passed rather than returning an error
+status.  Unfortunately, since the precise circumstances under which
+this may happen are undocumented and hard to check, the Python
+interface can provide no protection against this kind of problems.
+(One example is specifying an excessive queue size --- there is no
+documented upper limit.)
+
+Module \code{al} defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module al)}
+\begin{funcdesc}{openport}{name\, direction\, config}
+Equivalent to the C function ALopenport().  The name and direction
+arguments are strings.  The optional config argument is an opaque
+configuration object as returned by \code{al.newconfig()}.  The return
+value is an opaque port object; methods of port objects are described
+below.
+\end{funcdesc}
+
+\begin{funcdesc}{newconfig}{}
+Equivalent to the C function ALnewconfig().  The return value is a new
+opaque configuration object; methods of configuration objects are
+described below.
+\end{funcdesc}
+
+\begin{funcdesc}{queryparams}{device}
+Equivalent to the C function ALqueryparams().  The device argument is
+an integer.  The return value is a list of integers containing the
+data returned by ALqueryparams().
+\end{funcdesc}
+
+\begin{funcdesc}{getparams}{device\, list}
+Equivalent to the C function ALgetparams().  The device argument is an
+integer.  The list argument is a list such as returned by
+\code{queryparams}; it is modified in place (!).
+\end{funcdesc}
+
+\begin{funcdesc}{setparams}{device\, list}
+Equivalent to the C function ALsetparams().  The device argument is an
+integer.The list argument is a list such as returned by
+\code{al.queryparams}.
+\end{funcdesc}
+
+Configuration objects (returned by \code{al.newconfig()} have the
+following methods:
+
+\renewcommand{\indexsubitem}{(audio configuration object method)}
+\begin{funcdesc}{getqueuesize}{}
+Return the queue size; equivalent to the C function ALgetqueuesize().
+\end{funcdesc}
+
+\begin{funcdesc}{setqueuesize}{size}
+Set the queue size; equivalent to the C function ALsetqueuesize().
+\end{funcdesc}
+
+\begin{funcdesc}{getwidth}{}
+Get the sample width; equivalent to the C function ALgetwidth().
+\end{funcdesc}
+
+\begin{funcdesc}{getwidth}{width}
+Set the sample width; equivalent to the C function ALsetwidth().
+\end{funcdesc}
+
+\begin{funcdesc}{getchannels}{}
+Get the channel count; equivalent to the C function ALgetchannels().
+\end{funcdesc}
+
+\begin{funcdesc}{setchannels}{nchannels}
+Set the channel count; equivalent to the C function ALsetchannels().
+\end{funcdesc}
+
+\begin{funcdesc}{getsampfmt}{}
+Get the sample format; equivalent to the C function ALgetsampfmt().
+\end{funcdesc}
+
+\begin{funcdesc}{setsampfmt}{sampfmt}
+Set the sample format; equivalent to the C function ALsetsampfmt().
+\end{funcdesc}
+
+\begin{funcdesc}{getfloatmax}{}
+Get the maximum value for floating sample formats;
+equivalent to the C function ALgetfloatmax().
+\end{funcdesc}
+
+\begin{funcdesc}{setfloatmax}{floatmax}
+Set the maximum value for floating sample formats;
+equivalent to the C function ALsetfloatmax().
+\end{funcdesc}
+
+Port objects (returned by \code{al.openport()} have the following
+methods:
+
+\renewcommand{\indexsubitem}{(audio port object method)}
+\begin{funcdesc}{closeport}{}
+Close the port; equivalent to the C function ALcloseport().
+\end{funcdesc}
+
+\begin{funcdesc}{getfd}{}
+Return the file descriptor as an int; equivalent to the C function
+ALgetfd().
+\end{funcdesc}
+
+\begin{funcdesc}{getfilled}{}
+Return the number of filled samples; equivalent to the C function
+ALgetfilled().
+\end{funcdesc}
+
+\begin{funcdesc}{getfillable}{}
+Return the number of fillable samples; equivalent to the C function
+ALgetfillable().
+\end{funcdesc}
+
+\begin{funcdesc}{readsamps}{nsamples}
+Read a number of samples from the queue, blocking if necessary;
+equivalent to the C function ALreadsamples.  The data is returned as a
+string containing the raw data (e.g. 2 bytes per sample in big-endian
+byte order (high byte, low byte) if you have set the sample width to 2
+bytes.
+\end{funcdesc}
+
+\begin{funcdesc}{writesamps}{samples}
+Write samples into the queue, blocking if necessary; equivalent to the
+C function ALwritesamples.  The samples are encoded as described for
+the \code{readsamps} return value.
+\end{funcdesc}
+
+\begin{funcdesc}{getfillpoint}{}
+Return the `fill point'; equivalent to the C function ALgetfillpoint().
+\end{funcdesc}
+
+\begin{funcdesc}{setfillpoint}{fillpoint}
+Set the `fill point'; equivalent to the C function ALsetfillpoint().
+\end{funcdesc}
+
+\begin{funcdesc}{getconfig}{}
+Return a configuration object containing the current configuration of
+the port; equivalent to the C function ALgetconfig().
+\end{funcdesc}
+
+\begin{funcdesc}{setconfig}{config}
+Set the configuration from the argument, a configuration object;
+equivalent to the C function ALsetconfig().
+\end{funcdesc}
+
+\begin{funcdesc}{getstatus}{list}
+Get status information on last error
+equivalent to C function ALgetstatus().
+\end{funcdesc}
+
+\section{Standard Module \sectcode{AL}}
+\nodename{AL (uppercase)}
+\stmodindex{AL}
+
+This module defines symbolic constants needed to use the built-in
+module \code{al} (see above); they are equivalent to those defined in
+the C header file \file{<audio.h>} except that the name prefix
+\samp{AL_} is omitted.  Read the module source for a complete list of
+the defined names.  Suggested use:
+
+\bcode\begin{verbatim}
+import al
+from AL import *
+\end{verbatim}\ecode
diff --git a/Doc/libamoeba.tex b/Doc/libamoeba.tex
new file mode 100644
index 0000000..db4fefd
--- /dev/null
+++ b/Doc/libamoeba.tex
@@ -0,0 +1,128 @@
+\chapter{AMOEBA ONLY}
+
+\section{Built-in Module \sectcode{amoeba}}
+
+\bimodindex{amoeba}
+This module provides some object types and operations useful for
+Amoeba applications.  It is only available on systems that support
+Amoeba operations.  RPC errors and other Amoeba errors are reported as
+the exception \code{amoeba.error = 'amoeba.error'}.
+
+The module \code{amoeba} defines the following items:
+
+\renewcommand{\indexsubitem}{(in module amoeba)}
+\begin{funcdesc}{name_append}{path\, cap}
+Stores a capability in the Amoeba directory tree.
+Arguments are the pathname (a string) and the capability (a capability
+object as returned by
+\code{name_lookup()}).
+\end{funcdesc}
+
+\begin{funcdesc}{name_delete}{path}
+Deletes a capability from the Amoeba directory tree.
+Argument is the pathname.
+\end{funcdesc}
+
+\begin{funcdesc}{name_lookup}{path}
+Looks up a capability.
+Argument is the pathname.
+Returns a
+\dfn{capability}
+object, to which various interesting operations apply, described below.
+\end{funcdesc}
+
+\begin{funcdesc}{name_replace}{path\, cap}
+Replaces a capability in the Amoeba directory tree.
+Arguments are the pathname and the new capability.
+(This differs from
+\code{name_append()}
+in the behavior when the pathname already exists:
+\code{name_append()}
+finds this an error while
+\code{name_replace()}
+allows it, as its name suggests.)
+\end{funcdesc}
+
+\begin{datadesc}{capv}
+A table representing the capability environment at the time the
+interpreter was started.
+(Alas, modifying this table does not affect the capability environment
+of the interpreter.)
+For example,
+\code{amoeba.capv['ROOT']}
+is the capability of your root directory, similar to
+\code{getcap("ROOT")}
+in C.
+\end{datadesc}
+
+\begin{excdesc}{error}
+The exception raised when an Amoeba function returns an error.
+The value accompanying this exception is a pair containing the numeric
+error code and the corresponding string, as returned by the C function
+\code{err_why()}.
+\end{excdesc}
+
+\begin{funcdesc}{timeout}{msecs}
+Sets the transaction timeout, in milliseconds.
+Returns the previous timeout.
+Initially, the timeout is set to 2 seconds by the Python interpreter.
+\end{funcdesc}
+
+\subsection{Capability Operations}
+
+Capabilities are written in a convenient ASCII format, also used by the
+Amoeba utilities
+{\it c2a}(U)
+and
+{\it a2c}(U).
+For example:
+
+\bcode\begin{verbatim}
+>>> amoeba.name_lookup('/profile/cap')
+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)}
+\begin{funcdesc}{dir_list}{}
+Returns a list of the names of the entries in an Amoeba directory.
+\end{funcdesc}
+
+\begin{funcdesc}{b_read}{offset\, maxsize}
+Reads (at most)
+\var{maxsize}
+bytes from a bullet file at offset
+\var{offset.}
+The data is returned as a string.
+EOF is reported as an empty string.
+\end{funcdesc}
+
+\begin{funcdesc}{b_size}{}
+Returns the size of a bullet file.
+\end{funcdesc}
+
+\begin{funcdesc}{dir_append}{}
+\funcline{dir_delete}{}\ 
+\funcline{dir_lookup}{}\ 
+\funcline{dir_replace}{}
+Like the corresponding
+\samp{name_}*
+functions, but with a path relative to the capability.
+(For paths beginning with a slash the capability is ignored, since this
+is the defined semantics for Amoeba.)
+\end{funcdesc}
+
+\begin{funcdesc}{std_info}{}
+Returns the standard info string of the object.
+\end{funcdesc}
+
+\begin{funcdesc}{tod_gettime}{}
+Returns the time (in seconds since the Epoch, in UCT, as for POSIX) from
+a time server.
+\end{funcdesc}
+
+\begin{funcdesc}{tod_settime}{t}
+Sets the time kept by a time server.
+\end{funcdesc}
diff --git a/Doc/libarray.tex b/Doc/libarray.tex
new file mode 100644
index 0000000..21122f0
--- /dev/null
+++ b/Doc/libarray.tex
@@ -0,0 +1,109 @@
+\section{Built-in module \sectcode{array}}
+\bimodindex{array}
+\index{arrays}
+
+This module defines a new object type which can efficiently represent
+an array of basic values: characters, integers, floating point
+numbers.  Arrays are sequence types and behave very much like lists,
+except that the type of objects stored in them is constrained.  The
+type is specified at object creation time by using a \dfn{type code},
+which is a single character.  The following type codes are defined:
+
+\begin{tableiii}{|c|c|c|}{code}{Typecode}{Type}{Minimal size in bytes}
+\lineiii{'c'}{character}{1}
+\lineiii{'b'}{signed integer}{1}
+\lineiii{'h'}{signed integer}{2}
+\lineiii{'i'}{signed integer}{2}
+\lineiii{'l'}{signed integer}{4}
+\lineiii{'f'}{floating point}{4}
+\lineiii{'d'}{floating point}{8}
+\end{tableiii}
+
+The actual representation of values is determined by the machine
+architecture (strictly spoken, by the C implementation).  The actual
+size can be accessed through the \var{typecode} attribute.
+
+The module defines the following function:
+
+\renewcommand{\indexsubitem}{(in module array)}
+
+\begin{funcdesc}{array}{typecode\, initializer}
+Return a new array whose items are restricted by \var{typecode}, and
+initialized from the optional \var{initializer} value, which must be a
+list or a string.  The list or string is passed to the new array's
+\code{fromlist()} or \code{fromstring()} method (see below) to add
+initial items to the array.
+\end{funcdesc}
+
+Array objects support the following data items and methods:
+
+\begin{datadesc}{typecode}
+The typecode character used to create the array.
+\end{datadesc}
+
+\begin{datadesc}{itemsize}
+The length in bytes of one array item in the internal representation.
+\end{datadesc}
+
+\begin{funcdesc}{append}{x}
+Append a new item with value \var{x} to the end of the array.
+\end{funcdesc}
+
+\begin{funcdesc}{byteswap}{x}
+``Byteswap'' all items of the array.  This is only supported for
+integer values.  It is useful when reading data ffrom a file written
+on a machine with a different byte order.
+\end{funcdesc}
+
+\begin{funcdesc}{fromfile}{f\, n}
+Read \var{n} items (as machine values) from the file object \var{f}
+and append them to the end of the array.  If less than \var{n} items
+are available, \code{EOFError} is raised, but the items that were
+available are still inserted into the array.
+\end{funcdesc}
+
+\begin{funcdesc}{fromlist}{list}
+Appends items from the list.  This is equivalent to
+\code{for x in \var{list}: a.append(x)}
+except that if there is a type error, the array is unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{fromstring}{s}
+Appends items from the string, interpreting the string as an
+array of machine values (i.e. as if it had been read from a
+file using the \code{fromfile()} method).
+\end{funcdesc}
+
+\begin{funcdesc}{insert}{i\, x}
+Insert a new item with value \var{x} in the array before position
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{tofile}{f}
+Write all items (as machine values) to the file object \var{f}.
+\end{funcdesc}
+
+\begin{funcdesc}{tolist}{}
+Convert the array to an ordinary list with the same items.
+\end{funcdesc}
+
+\begin{funcdesc}{tostring}{}
+Convert the array to an array of machine values and return the
+string representation (the same sequence of bytes that would
+be written to a file by the \code{tofile()} method.)
+\end{funcdesc}
+
+When an array object is printed or converted to a string, it is
+represented as \code{array(\var{typecode}, \var{initializer})}.  The
+\var{initializer} is omitted if the array is empty, otherwise it is a
+string if the \var{typecode} is \code{'c'}, otherwise it is a list of
+numbers.  The string is guaranteed to be able to be converted back to
+an array with the same type and value using reverse quotes
+(\code{``}).  Examples:
+
+\bcode\begin{verbatim}
+array('l')
+array('c', 'hello world')
+array('l', [1, 2, 3, 4, 5])
+array('d', [1.0, 2.0, 3.14])
+\end{verbatim}\ecode
diff --git a/Doc/libaudio.tex b/Doc/libaudio.tex
new file mode 100644
index 0000000..47c0b64
--- /dev/null
+++ b/Doc/libaudio.tex
@@ -0,0 +1,120 @@
+\section{Built-in Module \sectcode{audio}}
+\bimodindex{audio}
+
+\strong{Note:} This module is obsolete, since the hardware to which it
+interfaces is obsolete.  For audio on the Indigo or 4D/35, see
+built-in module \code{al} above.
+
+This module provides rudimentary access to the audio I/O device
+\file{/dev/audio} on the Silicon Graphics Personal IRIS 4D/25;
+see {\it audio}(7). It supports the following operations:
+
+\renewcommand{\indexsubitem}{(in module audio)}
+\begin{funcdesc}{setoutgain}{n}
+Sets the output gain.
+\iftexi
+\code{0 <= \var{n} < 256}.
+\else
+$0 \leq \var{n} < 256$.
+%%JHXXX Sets the output gain (0-255).
+\fi
+\end{funcdesc}
+
+\begin{funcdesc}{getoutgain}{}
+Returns the output gain.
+\end{funcdesc}
+
+\begin{funcdesc}{setrate}{n}
+Sets the sampling rate: \code{1} = 32K/sec, \code{2} = 16K/sec,
+\code{3} = 8K/sec.
+\end{funcdesc}
+
+\begin{funcdesc}{setduration}{n}
+Sets the `sound duration' in units of 1/100 seconds.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{n}
+Reads a chunk of
+\var{n}
+sampled bytes from the audio input (line in or microphone).
+The chunk is returned as a string of length n.
+Each byte encodes one sample as a signed 8-bit quantity using linear
+encoding.
+This string can be converted to numbers using \code{chr2num()} described
+below.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{buf}
+Writes a chunk of samples to the audio output (speaker).
+\end{funcdesc}
+
+These operations support asynchronous audio I/O:
+
+\renewcommand{\indexsubitem}{(in module audio)}
+\begin{funcdesc}{start_recording}{n}
+Starts a second thread (a process with shared memory) that begins reading
+\var{n}
+bytes from the audio device.
+The main thread immediately continues.
+\end{funcdesc}
+
+\begin{funcdesc}{wait_recording}{}
+Waits for the second thread to finish and returns the data read.
+\end{funcdesc}
+
+\begin{funcdesc}{stop_recording}{}
+Makes the second thread stop reading as soon as possible.
+Returns the data read so far.
+\end{funcdesc}
+
+\begin{funcdesc}{poll_recording}{}
+Returns true if the second thread has finished reading (so
+\code{wait_recording()} would return the data without delay).
+\end{funcdesc}
+
+\begin{funcdesc}{start_playing}{}
+\funcline{wait_playing}{}
+\funcline{stop_playing}{}
+\funcline{poll_playing}{}
+\begin{sloppypar}
+Similar but for output.
+\code{stop_playing()}
+returns a lower bound for the number of bytes actually played (not very
+accurate).
+\end{sloppypar}
+\end{funcdesc}
+
+The following operations do not affect the audio device but are
+implemented in C for efficiency:
+
+\renewcommand{\indexsubitem}{(in module audio)}
+\begin{funcdesc}{amplify}{buf\, f1\, f2}
+Amplifies a chunk of samples by a variable factor changing from
+\code{\var{f1}/256} to \code{\var{f2}/256.}
+Negative factors are allowed.
+Resulting values that are to large to fit in a byte are clipped.         
+\end{funcdesc}
+
+\begin{funcdesc}{reverse}{buf}
+Returns a chunk of samples backwards.
+\end{funcdesc}
+
+\begin{funcdesc}{add}{buf1\, buf2}
+Bytewise adds two chunks of samples.
+Bytes that exceed the range are clipped.
+If one buffer is shorter, it is assumed to be padded with zeros.
+\end{funcdesc}
+
+\begin{funcdesc}{chr2num}{buf}
+Converts a string of sampled bytes as returned by \code{read()} into
+a list containing the numeric values of the samples.
+\end{funcdesc}
+
+\begin{funcdesc}{num2chr}{list}
+\begin{sloppypar}
+Converts a list as returned by
+\code{chr2num()}
+back to a buffer acceptable by
+\code{write()}.
+\end{sloppypar}
+\end{funcdesc}
diff --git a/Doc/libaudioop.tex b/Doc/libaudioop.tex
new file mode 100644
index 0000000..734065a
--- /dev/null
+++ b/Doc/libaudioop.tex
@@ -0,0 +1,241 @@
+\section{Built-in module \sectcode{audioop}}
+\bimodindex{audioop}
+
+The audioop module contains some useful operations on sound fragments.
+It operates on sound fragments consisting of signed integer samples of
+8, 16 or 32 bits wide, stored in Python strings.  This is the same
+format as used by the \code{al} and \code{sunaudiodev} modules.  All
+scalar items are integers, unless specified otherwise.
+
+A few of the more complicated operations only take 16-bit samples,
+otherwise the sample size (in bytes) is always a parameter of the operation.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module audioop)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unknown number of bytes
+per sample, etc.
+\end{excdesc}
+
+\begin{funcdesc}{add}{fragment1\, fragment2\, width}
+This function returns a fragment that is the addition of the two samples
+passed as parameters. \var{width} is the sample width in bytes, either
+\code{1}, \code{2} or \code{4}. Both fragments should have the same length.
+\end{funcdesc}
+
+\begin{funcdesc}{adpcm2lin}{adpcmfragment\, width\, state}
+This routine decodes an Intel/DVI ADPCM coded fragment to a linear
+fragment. See the description of \code{lin2adpcm} for details on ADPCM
+coding. The routine returns a tuple
+\code{(\var{sample}, \var{newstate})}
+where the sample has the width specified in \var{width}.
+\end{funcdesc}
+
+\begin{funcdesc}{adpcm32lin}{adpcmfragment\, width\, state}
+This routine decodes an alternative 3-bit ADPCM code. See
+\code{lin2adpcm3} for details.
+\end{funcdesc}
+
+\begin{funcdesc}{avg}{fragment\, width}
+This function returns the average over all samples in the fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{avgpp}{fragment\, width}
+This function returns the average peak-peak value over all samples in
+the fragment. No filtering is done, so the useability of this routine
+is questionable.
+\end{funcdesc}
+
+\begin{funcdesc}{bias}{fragment\, width\, bias}
+This function returns a fragment that is the original fragment with a
+bias added to each sample.
+\end{funcdesc}
+
+\begin{funcdesc}{cross}{fragment\, width}
+This function returns the number of zero crossings in the fragment
+passed as an argument.
+\end{funcdesc}
+
+\begin{funcdesc}{findfactor}{fragment\, reference}
+This routine (which only accepts 2-byte sample fragments) calculates a
+factor \var{F} such that \code{rms(add(fragment, mul(reference, -F)))}
+is minimal, i.e. it calculates the factor with which you should
+multiply \var{reference} to make it match as good as possible to
+\var{fragment}. The fragments should be the same size.
+
+The time taken by this routine is proportional to \code{len(fragment)}. 
+\end{funcdesc}
+
+\begin{funcdesc}{findfit}{fragment\, reference}
+This routine (which only accepts 2-byte sample fragments) tries to
+match \var{reference} as good as possible to a portion of
+\var{fragment} (which should be the longer fragment). It
+(conceptually) does this by taking slices out of \var{fragment}, using
+\code{findfactor} to compute the best match, and minimizing the
+result.
+It returns a tuple \code{(\var{offset}, \var{factor})} with offset the
+(integer) offset into \var{fragment} where the optimal match started
+and \var{factor} the floating-point factor as per findfactor.
+\end{funcdesc}
+
+\begin{funcdesc}{findmax}{fragment\, length}
+This routine (which only accepts 2-byte sample fragments) searches
+\var{fragment} for a slice of length \var{length} samples (not bytes!)
+with maximum energy, i.e. it returns \var{i} for which
+\code{rms(fragment[i*2:(i+length)*2])} is maximal.
+
+The routine takes time proportional to \code{len(fragment)}.
+\end{funcdesc}
+
+\begin{funcdesc}{getsample}{fragment\, width\, index}
+This function returns the value of sample \var{index} from the
+fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2lin}{fragment\, width\, newwidth}
+This function converts samples between 1-, 2- and 4-byte formats.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2adpcm}{fragment\, width\, state}
+This function converts samples to 4 bit Intel/DVI ADPCM encoding.
+ADPCM coding is an adaptive coding scheme, whereby each 4 bit number
+is the difference between one sample and the next, divided by a
+(varying) step. The Intel/DVI ADPCM algorythm has been selected for
+use by the IMA, so may well become a standard.
+
+\code{State} is a tuple containing the state of the coder. The coder
+returns a tuple \code{(\var{adpcmfrag}, \var{newstate})}, and the
+\var{newstate} should be passed to the next call of lin2adpcm.  In the
+initial call \code{None} can be passed as the state. \var{adpcmfrag} is
+the ADPCM coded fragment packed 2 4-bit values per byte.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2adpcm3}{fragment\, width\, state}
+This is an alternative ADPCM coder that uses only 3 bits per sample.
+It is not compatible with the Intel/DVI ADPCM coder and its output is
+not packed (due to laziness on the side of the author). Its use is
+discouraged.
+\end{funcdesc}
+
+\begin{funcdesc}{lin2ulaw}{fragment\, width}
+This function converts samples in the audio fragment to U-LAW encoding
+and returns this as a python string. U-LAW is an audio encoding format
+whereby you get a dynamic range of about 14 bits using only 8 bit
+samples. It is used by the Sun audio hardware, among others.
+\end{funcdesc}
+
+\begin{funcdesc}{minmax}{fragment\, width}
+This function returns a tuple consisting of the minimum and maximum
+values of all samples in the sound fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{max}{fragment\, width}
+This function returns the maximum of the {\em absolute value} of all
+samples in a fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{maxpp}{fragment\, width}
+This function returns the maximum peak-peak value in the sound fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{mul}{fragment\, width\, factor}
+Mul returns a fragment that has all samples in the original framgent
+multiplied by the floating-point value \var{factor}. Overflow is
+silently ignored.
+\end{funcdesc}
+
+\begin{funcdesc}{reverse}{fragment\, width}
+This function reverses the samples in a fragment and returns the
+modified fragment.
+\end{funcdesc}
+
+\begin{funcdesc}{tomono}{fragment\, width\, lfactor\, rfactor} 
+This function converts a stereo fragment to a mono fragment. The left
+channel is multiplied by \var{lfactor} and the right channel by
+\var{rfactor} before adding the two channels to give a mono signal.
+\end{funcdesc}
+
+\begin{funcdesc}{tostereo}{fragment\, width\, lfactor\, rfactor}
+This function generates a stereo fragment from a mono fragment. Each
+pair of samples in the stereo fragment are computed from the mono
+sample, whereby left channel samples are multiplied by \var{lfactor}
+and right channel samples by \var{rfactor}.
+\end{funcdesc}
+
+\begin{funcdesc}{mul}{fragment\, width\, factor}
+Mul returns a fragment that has all samples in the original framgent
+multiplied by the floating-point value \var{factor}. Overflow is
+silently ignored.
+\end{funcdesc}
+
+\begin{funcdesc}{rms}{fragment\, width\, factor}
+Returns the root-mean-square of the fragment, i.e.
+\iftexi
+the square root of the quotient of the sum of all squared sample value,
+divided by the sumber of samples.
+\else
+% in eqn: sqrt { sum S sub i sup 2  over n }
+\begin{displaymath}
+\catcode`_=8
+\sqrt{\frac{\sum{{S_{i}}^{2}}}{n}}
+\end{displaymath}
+\fi
+This is a measure of the power in an audio signal.
+\end{funcdesc}
+
+\begin{funcdesc}{ulaw2lin}{fragment\, width}
+This function converts sound fragments in ULAW encoding to linearly
+encoded sound fragments. ULAW encoding always uses 8 bits samples, so
+\var{width} refers only to the sample width of the output fragment here.
+\end{funcdesc}
+
+Note that operations such as \code{mul} or \code{max} make no
+distinction between mono and stereo fragments, i.e. all samples are
+treated equal.  If this is a problem the stereo fragment should be split
+into two mono fragments first and recombined later.  Here is an example
+of how to do that:
+\bcode\begin{verbatim}
+def mul_stereo(sample, width, lfactor, rfactor):
+    lsample = audioop.tomono(sample, width, 1, 0)
+    rsample = audioop.tomono(sample, width, 0, 1)
+    lsample = audioop.mul(sample, width, lfactor)
+    rsample = audioop.mul(sample, width, rfactor)
+    lsample = audioop.tostereo(lsample, width, 1, 0)
+    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
+you should send the \var{initial} state (the one you passed to
+lin2adpcm) along to the decoder, not the final state (as returned by
+the coder). If you want to use \code{struct} to store the state in
+binary you can code the first element (the predicted value) in 16 bits
+and the second (the delta index) in 8.
+
+The ADPCM coders have never been tried against other ADPCM coders,
+only against themselves. It could well be that I misinterpreted the
+standards in which case they will not be interoperable with the
+respective standards.
+
+The \code{find...} routines might look a bit funny at first sight.
+They are primarily meant for doing echo cancellation. A reasonably
+fast way to do this is to pick the most energetic piece of the output
+sample, locate that in the input sample and subtract the whole output
+sample from the input sample:
+\bcode\begin{verbatim}
+def echocancel(outputdata, inputdata):
+    pos = audioop.findmax(outputdata, 800)    # one tenth second
+    out_test = outputdata[pos*2:]
+    in_test = inputdata[pos*2:]
+    ipos, factor = audioop.findfit(in_test, out_test)
+    # Optional (for better cancellation):
+    # factor = audioop.findfactor(in_test[ipos*2:ipos*2+len(out_test)], 
+    #              out_test)
+    prefill = '\0'*(pos+ipos)*2
+    postfill = '\0'*(len(inputdata)-len(prefill)-len(outputdata))
+    outputdata = prefill + audioop.mul(outputdata,2,-factor) + postfill
+    return audioop.add(inputdata, outputdata, 2)
+\end{verbatim}\ecode
diff --git a/Doc/libbltin.tex b/Doc/libbltin.tex
new file mode 100644
index 0000000..04cea20
--- /dev/null
+++ b/Doc/libbltin.tex
@@ -0,0 +1,6 @@
+\section{Built-in Module \sectcode{__builtin__}}
+\bimodindex{__builtin__}
+
+This module provides direct access to all `built-in' identifier of
+Python; e.g. \code{__builtin__.open} is the full name for the built-in
+function \code{open}.
diff --git a/Doc/libcrypto.tex b/Doc/libcrypto.tex
new file mode 100644
index 0000000..467bee4
--- /dev/null
+++ b/Doc/libcrypto.tex
@@ -0,0 +1,5 @@
+\chapter{CRYPTOGRAPHIC EXTENSIONS}
+
+The modules described in this chapter implement various algorithms of
+a cryptographic nature.  They are available at the discretion of the
+installation.
diff --git a/Doc/libdbm.tex b/Doc/libdbm.tex
new file mode 100644
index 0000000..7ff4ee5
--- /dev/null
+++ b/Doc/libdbm.tex
@@ -0,0 +1,24 @@
+\section{Built-in Module \sectcode{dbm}}
+\bimodindex{dbm}
+
+Dbm provides python programs with an interface to the unix \code{ndbm}
+database library.  Dbm objects are of the mapping type, so they can be
+handled just like objects of the built-in \dfn{dictionary} type,
+except that keys and values are always strings, and printing a dbm
+object doesn't print the keys and values.
+
+The module defines the following constant and functions:
+
+\renewcommand{\indexsubitem}{(in module dbm)}
+\begin{excdesc}{error}
+Raised on dbm-specific errors, such as I/O errors. \code{KeyError} is
+raised for general mapping errors like specifying an incorrect key.
+\end{excdesc}
+
+\begin{funcdesc}{open}{filename\, rwmode\, filemode}
+Open a dbm database and return a mapping object.  \var{filename} is
+the name of the database file (without the \file{.dir} or \file{.pag}
+extensions), \var{rwmode} is \code{'r'}, \code{'w'} or \code{'rw'} as for
+\code{open}, and \var{filemode} is the unix mode of the file, used only
+when the database has to be created.
+\end{funcdesc}
diff --git a/Doc/libexcs.tex b/Doc/libexcs.tex
new file mode 100644
index 0000000..33083cd
--- /dev/null
+++ b/Doc/libexcs.tex
@@ -0,0 +1,172 @@
+\section{Built-in Exceptions}
+
+Exceptions are string objects.  Two distinct string objects with the
+same value are different exceptions.  This is done to force programmers
+to use exception names rather than their string value when specifying
+exception handlers.  The string value of all built-in exceptions is
+their name, but this is not a requirement for user-defined exceptions
+or exceptions defined by library modules.
+
+The following exceptions can be generated by the interpreter or
+built-in functions.  Except where mentioned, they have an `associated
+value' indicating the detailed cause of the error.  This may be a
+string or a tuple containing several items of information (e.g., an
+error code and a string explaining the code).
+
+User code can raise built-in exceptions.  This can be used to test an
+exception handler or to report an error condition `just like' the
+situation in which the interpreter raises the same exception; but
+beware that there is nothing to prevent user code from raising an
+inappropriate error.
+
+\renewcommand{\indexsubitem}{(built-in exception)}
+
+\begin{excdesc}{AttributeError}
+% xref to attribute reference?
+  Raised when an attribute reference or assignment fails.  (When an
+  object does not support attributes references or attribute assignments
+  at all, \code{TypeError} is raised.)
+\end{excdesc}
+
+\begin{excdesc}{EOFError}
+% XXXJH xrefs here
+  Raised when one of the built-in functions (\code{input()} or
+  \code{raw_input()}) hits an end-of-file condition (\EOF{}) without
+  reading any data.
+% XXXJH xrefs here
+  (N.B.: the \code{read()} and \code{readline()} methods of file
+  objects return an empty string when they hit \EOF{}.)  No associated value.
+\end{excdesc}
+
+\begin{excdesc}{IOError}
+% XXXJH xrefs here
+  Raised when an I/O operation (such as a \code{print} statement, the
+  built-in \code{open()} function or a method of a file object) fails
+  for an I/O-related reason, e.g., `file not found', `disk full'.
+\end{excdesc}
+
+\begin{excdesc}{ImportError}
+% XXXJH xref to import statement?
+  Raised when an \code{import} statement fails to find the module
+  definition or when a \code{from {\rm \ldots} import} fails to find a
+  name that is to be imported.
+\end{excdesc}
+
+\begin{excdesc}{IndexError}
+% XXXJH xref to sequences
+  Raised when a sequence subscript is out of range.  (Slice indices are
+  silently truncated to fall in the allowed range; if an index is not a
+  plain integer, \code{TypeError} is raised.)
+\end{excdesc}
+
+\begin{excdesc}{KeyError}
+% XXXJH xref to mapping objects?
+  Raised when a mapping (dictionary) key is not found in the set of
+  existing keys.
+\end{excdesc}
+
+\begin{excdesc}{KeyboardInterrupt}
+  Raised when the user hits the interrupt key (normally
+  \kbd{Control-C} or
+\key{DEL}).  During execution, a check for interrupts is made regularly.
+% XXXJH xrefs here
+  Interrupts typed when a built-in function \code{input()} or
+  \code{raw_input()}) is waiting for input also raise this exception.  No
+  associated value.
+\end{excdesc}
+
+\begin{excdesc}{MemoryError}
+  Raised when an operation runs out of memory but the situation may
+  still be rescued (by deleting some objects).  The associated value is
+  a string indicating what kind of (internal) operation ran out of memory.
+  Note that because of the underlying memory management architecture
+  (\C{}'s \code{malloc()} function), the interpreter may not always be able
+  to completely recover from this situation; it nevertheless raises an
+  exception so that a stack traceback can be printed, in case a run-away
+  program was the cause.
+\end{excdesc}
+
+\begin{excdesc}{NameError}
+  Raised when a local or global name is not found.  This applies only
+  to unqualified names.  The associated value is the name that could
+  not be found.
+\end{excdesc}
+
+\begin{excdesc}{OverflowError}
+% XXXJH reference to long's and/or int's?
+  Raised when the result of an arithmetic operation is too large to be
+  represented.  This cannot occur for long integers (which would rather
+  raise \code{MemoryError} than give up).  Because of the lack of
+  standardization of floating point exception handling in \C{}, most
+  floating point operations also aren't checked.  For plain integers,
+  all operations that can overflow are checked except left shift, where
+  typical applications prefer to drop bits than raise an exception.
+\end{excdesc}
+
+\begin{excdesc}{RuntimeError}
+  Raised when an error is detected that doesn't fall in any of the
+  other categories.  The associated value is a string indicating what
+  precisely went wrong.  (This exception is a relic from a previous
+  version of the interpreter; it is not used any more except by some
+  extension modules that haven't been converted to define their own
+  exceptions yet.)
+\end{excdesc}
+
+\begin{excdesc}{SyntaxError}
+% XXXJH xref to these functions?
+  Raised when the parser encounters a syntax error.  This may occur in
+  an \code{import} statement, in an \code{exec} statement, in a call
+  to the built-in function \code{eval()} or \code{input()}, or
+  when reading the initial script or standard input (also
+  interactively).
+\end{excdesc}
+
+\begin{excdesc}{SystemError}
+  Raised when the interpreter finds an internal error, but the
+  situation does not look so serious to cause it to abandon all hope.
+  The associated value is a string indicating what went wrong (in
+  low-level terms).
+  
+  You should report this to the author or maintainer of your Python
+  interpreter.  Be sure to report the version string of the Python
+  interpreter (\code{sys.version}; it is also printed at the start of an
+  interactive Python session), the exact error message (the exception's
+  associated value) and if possible the source of the program that
+  triggered the error.
+\end{excdesc}
+
+\begin{excdesc}{SystemExit}
+% XXXJH xref to module sys?
+  This exception is raised by the \code{sys.exit()} function.  When it
+  is not handled, the Python interpreter exits; no stack traceback is
+  printed.  If the associated value is a plain integer, it specifies the
+  system exit status (passed to \C{}'s \code{exit()} function); if it is
+  \code{None}, the exit status is zero; if it has another type (such as
+  a string), the object's value is printed and the exit status is one.
+  
+  A call to \code{sys.exit} is translated into an exception so that
+  clean-up handlers (\code{finally} clauses of \code{try} statements)
+  can be executed, and so that a debugger can execute a script without
+  running the risk of losing control.  The \code{posix._exit()} function
+  can be used if it is absolutely positively necessary to exit
+  immediately (e.g., after a \code{fork()} in the child process).
+\end{excdesc}
+
+\begin{excdesc}{TypeError}
+  Raised when a built-in operation or function is applied to an object
+  of inappropriate type.  The associated value is a string giving
+  details about the type mismatch.
+\end{excdesc}
+
+\begin{excdesc}{ValueError}
+  Raised when a built-in operation or function receives an argument
+  that has the right type but an inappropriate value, and the
+  situation is not described by a more precise exception such as
+  \code{IndexError}.
+\end{excdesc}
+
+\begin{excdesc}{ZeroDivisionError}
+  Raised when the second argument of a division or modulo operation is
+  zero.  The associated value is a string indicating the type of the
+  operands and the operation.
+\end{excdesc}
diff --git a/Doc/libfl.tex b/Doc/libfl.tex
new file mode 100644
index 0000000..b705a6b
--- /dev/null
+++ b/Doc/libfl.tex
@@ -0,0 +1,483 @@
+\section{Built-in Module \sectcode{fl}}
+\bimodindex{fl}
+
+This module provides an interface to the FORMS Library by Mark
+Overmars, version 2.0b.  For more info about FORMS, write to
+{\tt markov@cs.ruu.nl}.
+
+Most functions are literal translations of their C equivalents,
+dropping the initial \samp{fl_} from their name.  Constants used by the
+library are defined in module \code{FL} described below.
+
+The creation of objects is a little different in Python than in C:
+instead of the `current form' maintained by the library to which new
+FORMS objects are added, all functions that add a FORMS object to a
+button are methods of the Python object representing the form.
+Consequently, there are no Python equivalents for the C functions
+\code{fl_addto_form} and \code{fl_end_form}, and the equivalent of
+\code{fl_bgn_form} is called \code{fl.make_form}.
+
+Watch out for the somewhat confusing terminology: FORMS uses the word
+\dfn{object} for the buttons, sliders etc. that you can place in a form.
+In Python, `object' means any value.  The Python interface to FORMS
+introduces two new Python object types: form objects (representing an
+entire form) and FORMS objects (representing one button, slider etc.).
+Hopefully this isn't too confusing...
+
+There are no `free objects' in the Python interface to FORMS, nor is
+there an easy way to add object classes written in Python.  The FORMS
+interface to GL event handling is avaiable, though, so you can mix
+FORMS with pure GL windows.
+
+\strong{Please note:} importing \code{fl} implies a call to the GL function
+\code{foreground()} and to the FORMS routine \code{fl_init()}.
+
+\subsection{Functions defined in module \sectcode{fl}}
+
+Module \code{fl} defines the following functions.  For more information
+about what they do, see the description of the equivalent C function
+in the FORMS documentation:
+
+\renewcommand{\indexsubitem}{(in module fl)}
+\begin{funcdesc}{make_form}{type\, width\, height}
+Create a form with given type, width and height.  This returns a
+\dfn{form} object, whose methods are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{do_forms}{}
+The standard FORMS main loop.  Returns a Python object representing
+the FORMS object needing interaction, or the special value
+\code{FL.EVENT}.
+\end{funcdesc}
+
+\begin{funcdesc}{check_forms}{}
+Check for FORMS events.  Returns what \code{do_forms} above returns,
+or \code{None} if there is no event that immediately needs
+interaction.
+\end{funcdesc}
+
+\begin{funcdesc}{set_event_call_back}{function}
+Set the event callback function.
+\end{funcdesc}
+
+\begin{funcdesc}{set_graphics_mode}{rgbmode\, doublebuffering}
+Set the graphics modes.
+\end{funcdesc}
+
+\begin{funcdesc}{get_rgbmode}{}
+Return the current rgb mode.  This is the value of the C global
+variable \code{fl_rgbmode}.
+\end{funcdesc}
+
+\begin{funcdesc}{show_message}{str1\, str2\, str3}
+Show a dialog box with a three-line message and an OK button.
+\end{funcdesc}
+
+\begin{funcdesc}{show_question}{str1\, str2\, str3}
+Show a dialog box with a three-line message and YES and NO buttons.
+It returns \code{1} if the user pressed YES, \code{0} if NO.
+\end{funcdesc}
+
+\begin{funcdesc}{show_choice}{str1\, str2\, str3\, but1\, but2\, but3}
+Show a dialog box with a three-line message and up to three buttons.
+It returns the number of the button clicked by the user
+(\code{1}, \code{2} or \code{3}).
+The \var{but2} and \var{but3} arguments are optional.
+\end{funcdesc}
+
+\begin{funcdesc}{show_input}{prompt\, default}
+Show a dialog box with a one-line prompt message and text field in
+which the user can enter a string.  The second argument is the default
+input string.  It returns the string value as edited by the user.
+\end{funcdesc}
+
+\begin{funcdesc}{show_file_selector}{message\, directory\, pattern\, default}
+Show a dialog box inm which the user can select a file.  It returns
+the absolute filename selected by the user, or \code{None} if the user
+presses Cancel.
+\end{funcdesc}
+
+\begin{funcdesc}{get_directory}{}
+\funcline{get_pattern}{}
+\funcline{get_filename}{}
+These functions return the directory, pattern and filename (the tail
+part only) selected by the user in the last \code{show_file_selector}
+call.
+\end{funcdesc}
+
+\begin{funcdesc}{qdevice}{dev}
+\funcline{unqdevice}{dev}
+\funcline{isqueued}{dev}
+\funcline{qtest}{}
+\funcline{qread}{}
+%\funcline{blkqread}{?}
+\funcline{qreset}{}
+\funcline{qenter}{dev\, val}
+\funcline{get_mouse}{}
+\funcline{tie}{button\, valuator1\, valuator2}
+These functions are the FORMS interfaces to the corresponding GL
+functions.  Use these if you want to handle some GL events yourself
+when using \code{fl.do_events}.  When a GL event is detected that
+FORMS cannot handle, \code{fl.do_forms()} returns the special value
+\code{FL.EVENT} and you should call \code{fl.qread()} to read the
+event from the queue.  Don't use the equivalent GL functions!
+\end{funcdesc}
+
+\begin{funcdesc}{color}{}
+\funcline{mapcolor}{}
+\funcline{getmcolor}{}
+See the description in the FORMS documentation of \code{fl_color},
+\code{fl_mapcolor} and \code{fl_getmcolor}.
+\end{funcdesc}
+
+\subsection{Form object methods and data attributes}
+
+Form objects (returned by \code{fl.make_form()} above) have the
+following methods.  Each method corresponds to a C function whose name
+is prefixed with \samp{fl_}; and whose first argument is a form
+pointer; please refer to the official FORMS documentation for
+descriptions.
+
+All the \samp{add_{\rm \ldots}} functions return a Python object representing
+the FORMS object.  Methods of FORMS objects are described below.  Most
+kinds of FORMS object also have some methods specific to that kind;
+these methods are listed here.
+
+\begin{flushleft}
+\renewcommand{\indexsubitem}{(form object method)}
+\begin{funcdesc}{show_form}{placement\, bordertype\, name}
+  Show the form.
+\end{funcdesc}
+
+\begin{funcdesc}{hide_form}{}
+  Hide the form.
+\end{funcdesc}
+
+\begin{funcdesc}{redraw_form}{}
+  Redraw the form.
+\end{funcdesc}
+
+\begin{funcdesc}{set_form_position}{x\, y}
+Set the form's position.
+\end{funcdesc}
+
+\begin{funcdesc}{freeze_form}{}
+Freeze the form.
+\end{funcdesc}
+
+\begin{funcdesc}{unfreeze_form}{}
+  Unfreeze the form.
+\end{funcdesc}
+
+\begin{funcdesc}{activate_form}{}
+  Activate the form.
+\end{funcdesc}
+
+\begin{funcdesc}{deactivate_form}{}
+  Deactivate the form.
+\end{funcdesc}
+
+\begin{funcdesc}{bgn_group}{}
+  Begin a new group of objects; return a group object.
+\end{funcdesc}
+
+\begin{funcdesc}{end_group}{}
+  End the current group of objects.
+\end{funcdesc}
+
+\begin{funcdesc}{find_first}{}
+  Find the first object in the form.
+\end{funcdesc}
+
+\begin{funcdesc}{find_last}{}
+  Find the last object in the form.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_box}{type\, x\, y\, w\, h\, name}
+Add a box object to the form.
+No extra methods.
+\end{funcdesc}
+
+\begin{funcdesc}{add_text}{type\, x\, y\, w\, h\, name}
+Add a text object to the form.
+No extra methods.
+\end{funcdesc}
+
+%\begin{funcdesc}{add_bitmap}{type\, x\, y\, w\, h\, name}
+%Add a bitmap object to the form.
+%\end{funcdesc}
+
+\begin{funcdesc}{add_clock}{type\, x\, y\, w\, h\, name}
+Add a clock object to the form. \\
+Method:
+\code{get_clock}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_button}{type\, x\, y\, w\, h\,  name}
+Add a button object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_lightbutton}{type\, x\, y\, w\, h\, name}
+Add a lightbutton object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_roundbutton}{type\, x\, y\, w\, h\, name}
+Add a roundbutton object to the form. \\
+Methods:
+\code{get_button},
+\code{set_button}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_slider}{type\, x\, y\, w\, h\, name}
+Add a slider object to the form. \\
+Methods:
+\code{set_slider_value},
+\code{get_slider_value},
+\code{set_slider_bounds},
+\code{get_slider_bounds},
+\code{set_slider_return},
+\code{set_slider_size},
+\code{set_slider_precision},
+\code{set_slider_step}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_valslider}{type\, x\, y\, w\, h\, name}
+Add a valslider object to the form. \\
+Methods:
+\code{set_slider_value},
+\code{get_slider_value},
+\code{set_slider_bounds},
+\code{get_slider_bounds},
+\code{set_slider_return},
+\code{set_slider_size},
+\code{set_slider_precision},
+\code{set_slider_step}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_dial}{type\, x\, y\, w\, h\, name}
+Add a dial object to the form. \\
+Methods:
+\code{set_dial_value},
+\code{get_dial_value},
+\code{set_dial_bounds},
+\code{get_dial_bounds}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_positioner}{type\, x\, y\, w\, h\, name}
+Add a positioner object to the form. \\
+Methods:
+\code{set_positioner_xvalue},
+\code{set_positioner_yvalue},
+\code{set_positioner_xbounds},
+\code{set_positioner_ybounds},
+\code{get_positioner_xvalue},
+\code{get_positioner_yvalue},
+\code{get_positioner_xbounds},
+\code{get_positioner_ybounds}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_counter}{type\, x\, y\, w\, h\, name}
+Add a counter object to the form. \\
+Methods:
+\code{set_counter_value},
+\code{get_counter_value},
+\code{set_counter_bounds},
+\code{set_counter_step},
+\code{set_counter_precision},
+\code{set_counter_return}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_input}{type\, x\, y\, w\, h\, name}
+Add a input object to the form. \\
+Methods:
+\code{set_input},
+\code{get_input},
+\code{set_input_color},
+\code{set_input_return}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_menu}{type\, x\, y\, w\, h\, name}
+Add a menu object to the form. \\
+Methods:
+\code{set_menu},
+\code{get_menu},
+\code{addto_menu}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_choice}{type\, x\, y\, w\, h\, name}
+Add a choice object to the form. \\
+Methods:
+\code{set_choice},
+\code{get_choice},
+\code{clear_choice},
+\code{addto_choice},
+\code{replace_choice},
+\code{delete_choice},
+\code{get_choice_text},
+\code{set_choice_fontsize},
+\code{set_choice_fontstyle}.
+\end{funcdesc}
+
+\begin{funcdesc}{add_browser}{type\, x\, y\, w\, h\, name}
+Add a browser object to the form. \\
+Methods:
+\code{set_browser_topline},
+\code{clear_browser},
+\code{add_browser_line},
+\code{addto_browser},
+\code{insert_browser_line},
+\code{delete_browser_line},
+\code{replace_browser_line},
+\code{get_browser_line},
+\code{load_browser},
+\code{get_browser_maxline},
+\code{select_browser_line},
+\code{deselect_browser_line},
+\code{deselect_browser},
+\code{isselected_browser_line},
+\code{get_browser},
+\code{set_browser_fontsize},
+\code{set_browser_fontstyle},
+\code{set_browser_specialkey}.
+\end{funcdesc}
+
+%---
+
+\begin{funcdesc}{add_timer}{type\, x\, y\, w\, h\, name}
+Add a timer object to the form. \\
+Methods:
+\code{set_timer},
+\code{get_timer}.
+\end{funcdesc}
+\end{flushleft}
+
+Form objects have the following data attributes; see the FORMS
+documentation:
+
+\begin{tableiii}{|l|c|l|}{code}{Name}{Type}{Meaning}
+  \lineiii{window}{int (read-only)}{GL window id}
+  \lineiii{w}{float}{form width}
+  \lineiii{h}{float}{form height}
+  \lineiii{x}{float}{form x origin}
+  \lineiii{y}{float}{form y origin}
+  \lineiii{deactivated}{int}{nonzero if form is deactivated}
+  \lineiii{visible}{int}{nonzero if form is visible}
+  \lineiii{frozen}{int}{nonzero if form is frozen}
+  \lineiii{doublebuf}{int}{nonzero if double buffering on}
+\end{tableiii}
+
+\subsection{FORMS object methods and data attributes}
+
+Besides methods specific to particular kinds of FORMS objects, all
+FORMS objects also have the following methods:
+
+\renewcommand{\indexsubitem}{(FORMS object method)}
+\begin{funcdesc}{set_call_back}{function\, argument}
+Set the object's callback function and argument.  When the object
+needs interaction, the callback function will be called with two
+arguments: the object, and the callback argument.  (FORMS objects
+without a callback function are returned by \code{fl.do_forms()} or
+\code{fl.check_forms()} when they need interaction.)  Call this method
+without arguments to remove the callback function.
+\end{funcdesc}
+
+\begin{funcdesc}{delete_object}{}
+  Delete the object.
+\end{funcdesc}
+
+\begin{funcdesc}{show_object}{}
+  Show the object.
+\end{funcdesc}
+
+\begin{funcdesc}{hide_object}{}
+  Hide the object.
+\end{funcdesc}
+
+\begin{funcdesc}{redraw_object}{}
+  Redraw the object.
+\end{funcdesc}
+
+\begin{funcdesc}{freeze_object}{}
+  Freeze the object.
+\end{funcdesc}
+
+\begin{funcdesc}{unfreeze_object}{}
+  Unfreeze the object.
+\end{funcdesc}
+
+%\begin{funcdesc}{handle_object}{} XXX
+%\end{funcdesc}
+
+%\begin{funcdesc}{handle_object_direct}{} XXX
+%\end{funcdesc}
+
+FORMS objects have these data attributes; see the FORMS documentation:
+
+\begin{tableiii}{|l|c|l|}{code}{Name}{Type}{Meaning}
+  \lineiii{objclass}{int (read-only)}{object class}
+  \lineiii{type}{int (read-only)}{object type}
+  \lineiii{boxtype}{int}{box type}
+  \lineiii{x}{float}{x origin}
+  \lineiii{y}{float}{y origin}
+  \lineiii{w}{float}{width}
+  \lineiii{h}{float}{height}
+  \lineiii{col1}{int}{primary color}
+  \lineiii{col2}{int}{secondary color}
+  \lineiii{align}{int}{alignment}
+  \lineiii{lcol}{int}{label color}
+  \lineiii{lsize}{float}{label font size}
+  \lineiii{label}{string}{label string}
+  \lineiii{lstyle}{int}{label style}
+  \lineiii{pushed}{int (read-only)}{(see FORMS docs)}
+  \lineiii{focus}{int (read-only)}{(see FORMS docs)}
+  \lineiii{belowmouse}{int (read-only)}{(see FORMS docs)}
+  \lineiii{frozen}{int (read-only)}{(see FORMS docs)}
+  \lineiii{active}{int (read-only)}{(see FORMS docs)}
+  \lineiii{input}{int (read-only)}{(see FORMS docs)}
+  \lineiii{visible}{int (read-only)}{(see FORMS docs)}
+  \lineiii{radio}{int (read-only)}{(see FORMS docs)}
+  \lineiii{automatic}{int (read-only)}{(see FORMS docs)}
+\end{tableiii}
+
+\section{Standard Module \sectcode{FL}}
+\nodename{FL (uppercase)}
+\stmodindex{FL}
+
+This module defines symbolic constants needed to use the built-in
+module \code{fl} (see above); they are equivalent to those defined in
+the C header file \file{<forms.h>} except that the name prefix
+\samp{FL_} is omitted.  Read the module source for a complete list of
+the defined names.  Suggested use:
+
+\bcode\begin{verbatim}
+import fl
+from FL import *
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{flp}}
+\stmodindex{flp}
+
+This module defines functions that can read form definitions created
+by the `form designer' (\code{fdesign}) program that comes with the
+FORMS library (see module \code{fl} above).
+
+For now, see the file \file{flp.doc} in the Python library source
+directory for a description.
+
+XXX A complete description should be inserted here!
diff --git a/Doc/libfm.tex b/Doc/libfm.tex
new file mode 100644
index 0000000..acbc05d
--- /dev/null
+++ b/Doc/libfm.tex
@@ -0,0 +1,86 @@
+\section{Built-in Module \sectcode{fm}}
+\bimodindex{fm}
+
+This module provides access to the IRIS {\em Font Manager} library.
+It is available only on Silicon Graphics machines.
+See also: 4Sight User's Guide, Section 1, Chapter 5: Using the IRIS
+Font Manager.
+
+This is not yet a full interface to the IRIS Font Manager.
+Among the unsupported features are: matrix operations; cache
+operations; character operations (use string operations instead); some
+details of font info; individual glyph metrics; and printer matching.
+
+It supports the following operations:
+
+\renewcommand{\indexsubitem}{(in module fm)}
+\begin{funcdesc}{init}{}
+Initialization function.
+Calls \code{fminit()}.
+It is normally not necessary to call this function, since it is called
+automatically the first time the \code{fm} module is imported.
+\end{funcdesc}
+
+\begin{funcdesc}{findfont}{fontname}
+Return a font handle object.
+Calls \code{fmfindfont(\var{fontname})}.
+\end{funcdesc}
+
+\begin{funcdesc}{enumerate}{}
+Returns a list of available font names.
+This is an interface to \code{fmenumerate()}.
+\end{funcdesc}
+
+\begin{funcdesc}{prstr}{string}
+Render a string using the current font (see the \code{setfont()} font
+handle method below).
+Calls \code{fmprstr(\var{string})}.
+\end{funcdesc}
+
+\begin{funcdesc}{setpath}{string}
+Sets the font search path.
+Calls \code{fmsetpath(string)}.
+(XXX Does not work!?!)
+\end{funcdesc}
+
+\begin{funcdesc}{fontpath}{}
+Returns the current font search path.
+\end{funcdesc}
+
+Font handle objects support the following operations:
+
+\renewcommand{\indexsubitem}{(font handle method)}
+\begin{funcdesc}{scalefont}{factor}
+Returns a handle for a scaled version of this font.
+Calls \code{fmscalefont(\var{fh}, \var{factor})}.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{}
+Makes this font the current font.
+Note: the effect is undone silently when the font handle object is
+deleted.
+Calls \code{fmsetfont(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfontname}{}
+Returns this font's name.
+Calls \code{fmgetfontname(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getcomment}{}
+Returns the comment string associated with this font.
+Raises an exception if there is none.
+Calls \code{fmgetcomment(\var{fh})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfontinfo}{}
+Returns a tuple giving some pertinent data about this font.
+This is an interface to \code{fmgetfontinfo()}.
+The returned tuple contains the following numbers:
+\code{(\var{printermatched}, \var{fixed_width}, \var{xorig}, \var{yorig}, \var{xsize}, \var{ysize}, \var{height}, \var{nglyphs})}.
+\end{funcdesc}
+
+\begin{funcdesc}{getstrwidth}{string}
+Returns the width, in pixels, of the string when drawn in this font.
+Calls \code{fmgetstrwidth(\var{fh}, \var{string})}.
+\end{funcdesc}
diff --git a/Doc/libfuncs.tex b/Doc/libfuncs.tex
new file mode 100644
index 0000000..e0b36f3
--- /dev/null
+++ b/Doc/libfuncs.tex
@@ -0,0 +1,356 @@
+\section{Built-in Functions}
+
+The Python interpreter has a number of functions built into it that
+are always available.  They are listed here in alphabetical order.
+
+
+\renewcommand{\indexsubitem}{(built-in function)}
+\begin{funcdesc}{abs}{x}
+  Return the absolute value of a number.  The argument may be a plain
+  or long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{apply}{function\, args}
+The \var{function} argument must be a callable object (a user-defined or
+built-in function or method, or a class object) and the \var{args}
+argument must be a tuple.  The \var{function} is called with
+\var{args} as argument list; the number of arguments is the the length
+of the tuple.  (This is different from just calling
+\code{\var{func}(\var{args})}, since in that case there is always
+exactly one argument.)
+\end{funcdesc}
+
+\begin{funcdesc}{chr}{i}
+  Return a string of one character whose \ASCII{} code is the integer
+  \var{i}, e.g., \code{chr(97)} returns the string \code{'a'}.  This is the
+  inverse of \code{ord()}.  The argument must be in the range [0..255],
+  inclusive.
+\end{funcdesc}
+
+\begin{funcdesc}{cmp}{x\, y}
+  Compare the two objects \var{x} and \var{y} and return an integer
+  according to the outcome.  The return value is negative if \code{\var{x}
+  < \var{y}}, zero if \code{\var{x} == \var{y}} and strictly positive if
+  \code{\var{x} > \var{y}}.
+\end{funcdesc}
+
+\begin{funcdesc}{coerce}{x\, y}
+  Return a tuple consisting of the two numeric arguments converted to
+  a common type, using the same rules as used by arithmetic
+  operations.
+\end{funcdesc}
+
+\begin{funcdesc}{compile}{string\, filename\, kind}
+  Compile the \var{string} into a code object.  Code objects can be
+  executed by a \code{exec()} statement or evaluated by a call to
+  \code{eval()}.  The \var{filename} argument should
+  give the file from which the code was read; pass e.g. \code{'<string>'}
+  if it wasn't read from a file.  The \var{kind} argument specifies
+  what kind of code must be compiled; it can be \code{'exec'} if
+  \var{string} consists of a sequence of statements, or \code{'eval'}
+  if it consists of a single expression.
+\end{funcdesc}
+
+\begin{funcdesc}{dir}{}
+  Without arguments, return the list of names in the current local
+  symbol table.  With a module, class or class instance object as
+  argument (or anything else that has a \code{__dict__} attribute),
+  returns the list of names in that object's attribute dictionary.
+  The resulting list is sorted.  For example:
+
+\bcode\begin{verbatim}
+>>> import sys
+>>> dir()
+['sys']
+>>> dir(sys)
+['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout']
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{divmod}{a\, b}
+  Take two numbers as arguments and return a pair of integers
+  consisting of their integer quotient and remainder.  With mixed
+  operand types, the rules for binary arithmetic operators apply.  For
+  plain and long integers, the result is the same as
+  \code{(\var{a} / \var{b}, \var{a} \%{} \var{b})}.
+  For floating point numbers the result is the same as
+  \code{(math.floor(\var{a} / \var{b}), \var{a} \%{} \var{b})}.
+\end{funcdesc}
+
+\begin{funcdesc}{eval}{s\, globals\, locals}
+  The arguments are a string and two optional dictionaries.  The
+  string argument is parsed and evaluated as a Python expression
+  (technically speaking, a condition list) using the dictionaries as
+  global and local name space.  The string must not contain null bytes
+  or newline characters.  The return value is the
+  result of the expression.  If the third argument is omitted it
+  defaults to the second.  If both dictionaries are omitted, the
+  expression is executed in the environment where \code{eval} is
+  called.  Syntax errors are reported as exceptions.  Example:
+
+\bcode\begin{verbatim}
+>>> x = 1
+>>> print eval('x+1')
+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
+  passing \code{'eval'} to the \var{kind} argument.
+
+  Note: dynamic execution of statements is supported by the
+  \code{exec} statement.
+
+\end{funcdesc}
+
+\begin{funcdesc}{filter}{function\, list}
+Construct a list from those elements of \var{list} for which
+\var{function} returns true.  If \var{list} is a string or a tuple,
+the result also has that type; otherwise it is always a list.  If
+\var{function} is \code{None}, the identity function is assumed,
+i.e. all elements of \var{list} that are false (zero or empty) are
+removed.
+\end{funcdesc}
+
+\begin{funcdesc}{float}{x}
+  Convert a number to floating point.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{getattr}{object\, name}
+  The arguments are an object and a string.  The string must be the
+  name
+  of one of the object's attributes.  The result is the value of that
+  attribute.  For example, \code{getattr(\var{x}, '\var{foobar}')} is equivalent to
+  \code{\var{x}.\var{foobar}}.
+\end{funcdesc}
+
+\begin{funcdesc}{hasattr}{object\, name}
+  The arguments are an object and a string.  The result is 1 if the
+  string is the name of one of the object's attributes, 0 if not.
+  (This is implemented by calling \code{getattr(object, name)} and
+  seeing whether it raises an exception or not.)
+\end{funcdesc}
+
+\begin{funcdesc}{hash}{object}
+  Return the hash value of the object (if it has one).  Hash values
+  are 32-bit integers.  They are used to quickly compare dictionary
+  keys during a dictionary lookup.  Numeric values that compare equal
+  have the same hash value (even if they are of different types, e.g.
+  1 and 1.0).
+\end{funcdesc}
+
+\begin{funcdesc}{hex}{x}
+  Convert a number to a hexadecimal string.  The result is a valid
+  Python expression.
+\end{funcdesc}
+
+\begin{funcdesc}{id}{object}
+  Return the `identity' of an object.  This is an integer which is
+  guaranteed to be unique and constant for this object during its
+  lifetime.  (Two objects whose lifetimes are disjunct may have the
+  same id() value.)  (Implementation note: this is the address of the
+  object.)
+\end{funcdesc}
+
+\begin{funcdesc}{input}{prompt}
+  Almost equivalent to \code{eval(raw_input(\var{prompt}))}.  As for
+  \code{raw_input()}, the prompt argument is optional.  The difference is
+  that a long input expression may be broken over multiple lines using the
+  backslash convention.
+\end{funcdesc}
+
+\begin{funcdesc}{int}{x}
+  Convert a number to a plain integer.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{len}{s}
+  Return the length (the number of items) of an object.  The argument
+  may be a sequence (string, tuple or list) or a mapping (dictionary).
+\end{funcdesc}
+
+\begin{funcdesc}{long}{x}
+  Convert a number to a long integer.  The argument may be a plain or
+  long integer or a floating point number.
+\end{funcdesc}
+
+\begin{funcdesc}{map}{function\, list\, ...}
+Apply \var{function} to every item of \var{list} and return a list
+of the results.  If additional \var{list} arguments are passed, 
+\var{function} must take that many arguments and is applied to
+the items of all lists in parallel; if a list is shorter than another
+it is assumed to be extended with \code{None} items.  If
+\var{function} is \code{None}, the identity function is assumed; if
+there are multiple list arguments, \code{map} returns a list
+consisting of tuples containing the corresponding items from all lists
+(i.e. a kind of transpose operation).  The \var{list} arguments may be
+any kind of sequence; the result is always a list.
+\end{funcdesc}
+
+\begin{funcdesc}{max}{s}
+  Return the largest item of a non-empty sequence (string, tuple or
+  list).
+\end{funcdesc}
+
+\begin{funcdesc}{min}{s}
+  Return the smallest item of a non-empty sequence (string, tuple or
+  list).
+\end{funcdesc}
+
+\begin{funcdesc}{oct}{x}
+  Convert a number to an octal string.  The result is a valid Python
+  expression.
+\end{funcdesc}
+
+\begin{funcdesc}{open}{filename\, mode}
+  % XXXJH xrefs here to Built-in types?
+  Return a new file object (described earlier under Built-in Types).
+  The string arguments are the same as for \code{stdio}'s
+  \code{fopen()}: \var{filename} is the file name to be opened,
+  \var{mode} indicates how the file is to be opened: \code{'r'} for
+  reading, \code{'w'} for writing (truncating an existing file), and
+  \code{'a'} opens it for appending.  Modes \code{'r+'}, \code{'w+'} and
+  \code{'a+'} open the file for updating, provided the underlying
+  \code{stdio} library understands this.  On systems that differentiate
+  between binary and text files, \code{'b'} appended to the mode opens
+  the file in binary mode.  If the file cannot be opened, \code{IOError}
+  is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{ord}{c}
+  Return the \ASCII{} value of a string of one character.  E.g.,
+  \code{ord('a')} returns the integer \code{97}.  This is the inverse of
+  \code{chr()}.
+\end{funcdesc}
+
+\begin{funcdesc}{pow}{x\, y}
+  Return \var{x} to the power \var{y}.  The arguments must have
+  numeric types.  With mixed operand types, the rules for binary
+  arithmetic operators apply.  The effective operand type is also the
+  type of the result; if the result is not expressible in this type, the
+  function raises an exception; e.g., \code{pow(2, -1)} is not allowed.
+\end{funcdesc}
+
+\begin{funcdesc}{range}{start\, end\, step}
+  This is a versatile function to create lists containing arithmetic
+  progressions.  It is most often used in \code{for} loops.  The
+  arguments must be plain integers.  If the \var{step} argument is
+  omitted, it defaults to \code{1}.  If the \var{start} argument is
+  omitted, it defaults to \code{0}.  The full form returns a list of
+  plain integers \code{[\var{start}, \var{start} + \var{step},
+  \var{start} + 2 * \var{step}, \ldots]}.  If \var{step} is positive,
+  the last element is the largest \code{\var{start} + \var{i} *
+  \var{step}} less than \var{end}; if \var{step} is negative, the last
+  element is the largest \code{\var{start} + \var{i} * \var{step}}
+  greater than \var{end}.  \var{step} must not be zero.  Example:
+
+\bcode\begin{verbatim}
+>>> range(10)
+[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+>>> range(1, 11)
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+>>> range(0, 30, 5)
+[0, 5, 10, 15, 20, 25]
+>>> range(0, 10, 3)
+[0, 3, 6, 9]
+>>> range(0, -10, -1)
+[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+>>> range(0)
+[]
+>>> range(1, 0)
+[]
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{raw_input}{prompt}
+  The string argument is optional; if present, it is written to
+  standard
+  output without a trailing newline.  The function then reads a line
+  from input, converts it to a string (stripping a trailing newline),
+  and returns that.  When \EOF{} is read, \code{EOFError} is raised.
+  Example:
+
+\bcode\begin{verbatim}
+>>> s = raw_input('--> ')
+--> Monty Python's Flying Circus
+>>> s
+'Monty Python\'s Flying Circus'
+>>> 
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{reduce}{function\, list\, initializer}
+Apply the binary \var{function} to the items of \var{list} so as to
+reduce the list to a single value.  E.g.,
+\code{reduce(lambda x, y: x*y, \var{list}, 1)} returns the product of
+the elements of \var{list}.  The optional \var{initializer} can be
+thought of as being prepended to \var{list} so as to allow reduction
+of an empty \var{list}.  The \var{list} arguments may be any kind of
+sequence.
+\end{funcdesc}
+
+\begin{funcdesc}{reload}{module}
+  Re-parse and re-initialize an already imported \var{module}.  The
+  argument must be a module object, so it must have been successfully
+  imported before.  This is useful if you have edited the module source
+  file using an external editor and want to try out the new version
+  without leaving the Python interpreter.  Note that if a module is
+  syntactically correct but its initialization fails, the first
+  \code{import} statement for it does not import the name, but does
+  create a (partially initialized) module object; to reload the module
+  you must first \code{import} it again (this will just make the
+  partially initialized module object available) before you can
+  \code{reload()} it.
+\end{funcdesc}
+
+\begin{funcdesc}{repr}{object}
+Return a string containing a printable representation of an object.
+This is the same value yielded by conversions (reverse quotes).
+It is sometimes useful to be able to access this operation as an
+ordinary function.  For many types, this function makes an attempt
+to return a string that would yield an object with the same value
+when passed to \code{eval()}.
+\end{funcdesc}
+
+\begin{funcdesc}{round}{x\, n}
+  Return the floating point value \var{x} rounded to \var{n} digits
+  after the decimal point.  If \var{n} is omitted, it defaults to zero.
+  The result is a floating point number.  Values are rounded to the
+  closest multiple of 10 to the power minus \var{n}; if two multiples
+  are equally close, rounding is done away from 0 (so e.g.
+  \code{round(0.5)} is \code{1.0} and \code{round(-0.5)} is \code{-1.0}).
+\end{funcdesc}
+
+\begin{funcdesc}{setattr}{object\, name\, value}
+  This is the counterpart of \code{getattr}.  The arguments are an
+  object, a string and an arbitrary value.  The string must be the name
+  of one of the object's attributes.  The function assigns the value to
+  the attribute, provided the object allows it.  For example,
+  \code{setattr(\var{x}, '\var{foobar}', 123)} is equivalent to
+  \code{\var{x}.\var{foobar} = 123}.
+\end{funcdesc}
+
+\begin{funcdesc}{str}{object}
+Return a string containing a nicely printable representation of an
+object.  For strings, this returns the string itself.  The difference
+with \code{repr(\var{object}} is that \code{str(\var{object}} does not
+always attempt to return a string that is acceptable to \code{eval()};
+its goal is to return a printable string.
+\end{funcdesc}
+
+\begin{funcdesc}{type}{object}
+% XXXJH xref to buil-in objects here?
+  Return the type of an \var{object}.  The return value is a type
+  object.  There is not much you can do with type objects except compare
+  them to other type objects; e.g., the following checks if a variable
+  is a string:
+
+\bcode\begin{verbatim}
+>>> if type(x) == type(''): print 'It is a string'
+\end{verbatim}\ecode
+\end{funcdesc}
diff --git a/Doc/libgetopt.tex b/Doc/libgetopt.tex
new file mode 100644
index 0000000..250d31f
--- /dev/null
+++ b/Doc/libgetopt.tex
@@ -0,0 +1,55 @@
+\section{Standard Module \sectcode{getopt}}
+
+\stmodindex{getopt}
+This module helps scripts to parse the command line arguments in
+\code{sys.argv}.
+It uses the same conventions as the \UNIX{}
+\code{getopt()}
+function.
+It defines the function
+\code{getopt.getopt(args, options)}
+and the exception
+\code{getopt.error}.
+
+The first argument to
+\code{getopt()}
+is the argument list passed to the script with its first element
+chopped off (i.e.,
+\code{sys.argv[1:]}).
+The second argument is the string of option letters that the
+script wants to recognize, with options that require an argument
+followed by a colon (i.e., the same format that \UNIX{}
+\code{getopt()}
+uses).
+The return value consists of two elements: the first is a list of
+option-and-value pairs; the second is the list of program arguments
+left after the option list was stripped (this is a trailing slice of the
+first argument).
+Each option-and-value pair returned has the option as its first element,
+prefixed with a hyphen (e.g.,
+\code{'-x'}),
+and the option argument as its second element, or an empty string if the
+option has no argument.
+The options occur in the list in the same order in which they were
+found, thus allowing multiple occurrences.
+Example:
+
+\bcode\begin{verbatim}
+>>> import getopt, string
+>>> args = string.split('-a -b -cfoo -d bar a1 a2')
+>>> args
+['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
+>>> optlist, args = getopt.getopt(args, 'abc:d:')
+>>> optlist
+[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
+>>> args
+['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
+when an option requiring an argument is given none.
+The argument to the exception is a string indicating the cause of the
+error.
diff --git a/Doc/libgl.tex b/Doc/libgl.tex
new file mode 100644
index 0000000..e86c04b
--- /dev/null
+++ b/Doc/libgl.tex
@@ -0,0 +1,197 @@
+\section{Built-in Module \sectcode{gl}}
+\bimodindex{gl}
+
+This module provides access to the Silicon Graphics
+{\em Graphics Library}.
+It is available only on Silicon Graphics machines.
+
+\strong{Warning:}
+Some illegal calls to the GL library cause the Python interpreter to dump
+core.
+In particular, the use of most GL calls is unsafe before the first
+window is opened.
+
+The module is too large to document here in its entirety, but the
+following should help you to get started.
+The parameter conventions for the C functions are translated to Python as
+follows:
+
+\begin{itemize}
+\item
+All (short, long, unsigned) int values are represented by Python
+integers.
+\item
+All float and double values are represented by Python floating point
+numbers.
+In most cases, Python integers are also allowed.
+\item
+All arrays are represented by one-dimensional Python lists.
+In most cases, tuples are also allowed.
+\item
+\begin{sloppypar}
+All string and character arguments are represented by Python strings,
+for instance,
+\code{winopen('Hi There!')}
+and
+\code{rotate(900, 'z')}.
+\end{sloppypar}
+\item
+All (short, long, unsigned) integer arguments or return values that are
+only used to specify the length of an array argument are omitted.
+For example, the C call
+
+\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.
+If more than one value must be returned, the return value is a tuple.
+If the C function has both a regular return value (that is not omitted
+because of the previous rule) and an output argument, the return value
+comes first in the tuple.
+Examples: the C call
+
+\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
+conventions:
+
+\renewcommand{\indexsubitem}{(in module gl)}
+\begin{funcdesc}{varray}{argument}
+%JHXXX the argument-argument added
+Equivalent to but faster than a number of
+\code{v3d()}
+calls.
+The \var{argument} is a list (or tuple) of points.
+Each point must be a tuple of coordinates
+\code{(\var{x}, \var{y}, \var{z})} or \code{(\var{x}, \var{y})}.
+The points may be 2- or 3-dimensional but must all have the
+same dimension.
+Float and int values may be mixed however.
+The points are always converted to 3D double precision points
+by assuming \code{\var{z} = 0.0} if necessary (as indicated in the man page),
+and for each point
+\code{v3d()}
+is called.
+\end{funcdesc}
+
+\begin{funcdesc}{nvarray}{}
+Equivalent to but faster than a number of
+\code{n3f}
+and
+\code{v3f}
+calls.
+The argument is an array (list or tuple) of pairs of normals and points.
+Each pair is a tuple of a point and a normal for that point.
+Each point or normal must be a tuple of coordinates
+\code{(\var{x}, \var{y}, \var{z})}.
+Three coordinates must be given.
+Float and int values may be mixed.
+For each pair,
+\code{n3f()}
+is called for the normal, and then
+\code{v3f()}
+is called for the point.
+\end{funcdesc}
+
+\begin{funcdesc}{vnarray}{}
+Similar to 
+\code{nvarray()}
+but the pairs have the point first and the normal second.
+\end{funcdesc}
+
+\begin{funcdesc}{nurbssurface}{s_k\, t_k\, ctl\, s_ord\, t_ord\, type}
+% XXX s_k[], t_k[], ctl[][]
+%\itembreak
+Defines a nurbs surface.
+The dimensions of
+\code{\var{ctl}[][]}
+are computed as follows:
+\code{[len(\var{s_k}) - \var{s_ord}]},
+\code{[len(\var{t_k}) - \var{t_ord}]}.
+\end{funcdesc}
+
+\begin{funcdesc}{nurbscurve}{knots\, ctlpoints\, order\, type}
+Defines a nurbs curve.
+The length of ctlpoints is
+\code{len(\var{knots}) - \var{order}}.
+\end{funcdesc}
+
+\begin{funcdesc}{pwlcurve}{points\, type}
+Defines a piecewise-linear curve.
+\var{points}
+is a list of points.
+\var{type}
+must be
+\code{N_ST}.
+\end{funcdesc}
+
+\begin{funcdesc}{pick}{n}
+\funcline{select}{n}
+The only argument to these functions specifies the desired size of the
+pick or select buffer.
+\end{funcdesc}
+
+\begin{funcdesc}{endpick}{}
+\funcline{endselect}{}
+These functions have no arguments.
+They return a list of integers representing the used part of the
+pick/select buffer.
+No method is provided to detect buffer overrun.
+\end{funcdesc}
+
+Here is a tiny but complete example GL program in Python:
+
+\bcode\begin{verbatim}
+import gl, GL, time
+
+def main():
+    gl.foreground()
+    gl.prefposition(500, 900, 500, 900)
+    w = gl.winopen('CrissCross')
+    gl.ortho2(0.0, 400.0, 0.0, 400.0)
+    gl.color(GL.WHITE)
+    gl.clear()
+    gl.color(GL.RED)
+    gl.bgnline()
+    gl.v2f(0.0, 0.0)
+    gl.v2f(400.0, 400.0)
+    gl.endline()
+    gl.bgnline()
+    gl.v2f(400.0, 0.0)
+    gl.v2f(0.0, 400.0)
+    gl.endline()
+    time.sleep(5)
+
+main()
+\end{verbatim}\ecode
+
+\section{Standard Modules \sectcode{GL} and \sectcode{DEVICE}}
+\stmodindex{GL}
+\stmodindex{DEVICE}
+
+These modules define the constants used by the Silicon Graphics
+{\em Graphics Library}
+that C programmers find in the header files
+\file{<gl/gl.h>}
+and
+\file{<gl/device.h>}.
+Read the module source files for details.
diff --git a/Doc/libgrp.tex b/Doc/libgrp.tex
new file mode 100644
index 0000000..1c4dd15
--- /dev/null
+++ b/Doc/libgrp.tex
@@ -0,0 +1,32 @@
+\section{Built-in Module \sectcode{grp}}
+
+\bimodindex{grp}
+This module provides access to the \UNIX{} group database.
+It is available on all \UNIX{} versions.
+
+Group database entries are reported as 4-tuples containing the
+following items from the group database (see \file{<grp.h>}), in order:
+\code{gr_name},
+\code{gr_passwd},
+\code{gr_gid},
+\code{gr_mem}.
+The gid is an integer, name and password are strings, and the member
+list is a list of strings.
+(Note that most users are not explicitly listed as members of the
+group(s) they are in.)
+An exception is raised if the entry asked for cannot be found.
+
+It defines the following items:
+
+\renewcommand{\indexsubitem}{(in module grp)}
+\begin{funcdesc}{getgrgid}{gid}
+Return the group database entry for the given numeric group ID.
+\end{funcdesc}
+
+\begin{funcdesc}{getgrnam}{name}
+Return the group database entry for the given group name.
+\end{funcdesc}
+
+\begin{funcdesc}{getgrall}{}
+Return a list of all available group entries entries, in arbitrary order.
+\end{funcdesc}
diff --git a/Doc/libimageop.tex b/Doc/libimageop.tex
new file mode 100644
index 0000000..c1cdac4
--- /dev/null
+++ b/Doc/libimageop.tex
@@ -0,0 +1,87 @@
+\section{Built-in module \sectcode{imageop}}
+\bimodindex{imageop}
+
+The imageop module contains some useful operations on images.
+It operates on images consisting of 8 or 32 bit pixels
+stored in python strings. This is the same format as used
+by \code{gl.lrectwrite} and the \code{imgfile} module.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module imageop)}
+
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unknown number of bits
+per pixel, etc.
+\end{excdesc}
+
+
+\begin{funcdesc}{crop}{image\, psize\, width\, height\, x0\, y0\, x1\, y1}
+This function takes the image in \code{image}, which should by
+\code{width} by \code{height} in size and consist of pixels of
+\code{psize} bytes, and returns the selected part of that image. \code{X0},
+\code{y0}, \code{x1} and \code{y1} are like the \code{lrectread}
+parameters, i.e. the boundary is included in the new image.
+The new boundaries need not be inside the picture. Pixels that fall
+outside the old image will have their value set to zero.
+If \code{x0} is bigger than \code{x1} the new image is mirrored. The
+same holds for the y coordinates.
+\end{funcdesc}
+
+\begin{funcdesc}{scale}{image\, psize\, width\, height\, newwidth\, newheight}
+This function returns a \code{image} scaled to size \code{newwidth} by
+\code{newheight}. No interpolation is done, scaling is done by
+simple-minded pixel duplication or removal. Therefore, computer-generated
+images or dithered images will not look nice after scaling.
+\end{funcdesc}
+
+\begin{funcdesc}{tovideo}{image\, psize\, width\, height}
+This function runs a vertical low-pass filter over an image. It does
+so by computing each destination pixel as the average of two
+vertically-aligned source pixels. The main use of this routine is to
+forestall excessive flicker if the image is displayed on a video
+device that uses interlacing, hence the name.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2mono}{image\, width\, height\, threshold}
+This function converts a 8-bit deep greyscale image to a 1-bit deep
+image by tresholding all the pixels. The resulting image is tightly
+packed and is probably only useful as an argument to \code{mono2grey}.
+\end{funcdesc}
+
+\begin{funcdesc}{dither2mono}{image\, width\, height}
+This function also converts an 8-bit greyscale image to a 1-bit
+monochrome image but it uses a (simple-minded) dithering algorithm.
+\end{funcdesc}
+
+\begin{funcdesc}{mono2grey}{image\, width\, height\, p0\, p1}
+This function converts a 1-bit monochrome image to an 8 bit greyscale
+or color image. All pixels that are zero-valued on input get value
+\code{p0} on output and all one-value input pixels get value \code{p1}
+on output. To convert a monochrome black-and-white image to greyscale
+pass the values \code{0} and \code{255} respectively.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2grey4}{image\, width\, height}
+Convert an 8-bit greyscale image to a 4-bit greyscale image without
+dithering.
+\end{funcdesc}
+
+\begin{funcdesc}{grey2grey2}{image\, width\, height}
+Convert an 8-bit greyscale image to a 2-bit greyscale image without
+dithering.
+\end{funcdesc}
+
+\begin{funcdesc}{dither2grey2}{image\, width\, height}
+Convert an 8-bit greyscale image to a 2-bit greyscale image with
+dithering. As for \code{dither2mono}, the dithering algorithm is
+currently very simple.
+\end{funcdesc}
+
+\begin{funcdesc}{grey42grey}{image\, width\, height}
+Convert a 4-bit greyscale image to an 8-bit greyscale image.
+\end{funcdesc}
+
+\begin{funcdesc}{grey22grey}{image\, width\, height}
+Convert a 2-bit greyscale image to an 8-bit greyscale image.
+\end{funcdesc}
diff --git a/Doc/libimgfile.tex b/Doc/libimgfile.tex
new file mode 100644
index 0000000..99efaf4
--- /dev/null
+++ b/Doc/libimgfile.tex
@@ -0,0 +1,63 @@
+\section{Built-in module \sectcode{imgfile}}
+\bimodindex{imgfile}
+
+The imgfile module allows python programs to access SGI imglib image
+files (also known as \file{.rgb} files).  The module is far from
+complete, but is provided anyway since the functionality that there is
+is enough in some cases.  Currently, colormap files are not supported.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module imgfile)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unsupported file type, etc.
+\end{excdesc}
+
+\begin{funcdesc}{getsizes}{file}
+This function returns a tuple \code{(\var{x}, \var{y}, \var{z})} where
+\var{x} and \var{y} are the size of the image in pixels and
+\var{z} is the number of
+bytes per pixel. Only 3 byte RGB pixels and 1 byte greyscale pixels
+are currently supported.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{file}
+This function reads and decodes the image on the specified file, and
+returns it as a python string. The string has either 1 byte greyscale
+pixels or 4 byte RGBA pixels. The bottom left pixel is the first in
+the string. This format is suitable to pass to \code{gl.lrectwrite},
+for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{readscaled}{file\, x\, y\, filter\, blur}
+This function is identical to read but it returns an image that is
+scaled to the given \var{x} and \var{y} sizes. If the \var{filter} and
+\var{blur} parameters are omitted scaling is done by
+simply dropping or duplicating pixels, so the result will be less than
+perfect, especially for computer-generated images.
+
+Alternatively, you can specify a filter to use to smoothen the image
+after scaling. The filter forms supported are \code{'impulse'},
+\code{'box'}, \code{'triangle'}, \code{'quadratic'} and
+\code{'gaussian'}. If a filter is specified \var{blur} is an optional
+parameter specifying the blurriness of the filter. It defaults to \code{1.0}.
+
+Readscaled makes no
+attempt to keep the aspect ratio correct, so that is the users'
+responsibility.
+\end{funcdesc}
+
+\begin{funcdesc}{ttob}{flag}
+This function sets a global flag which defines whether the scan lines
+of the image are read or written from bottom to top (flag is zero,
+compatible with SGI GL) or from top to bottom(flag is one,
+compatible with X).  The default is zero.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{file\, data\, x\, y\, z}
+This function writes the RGB or greyscale data in \var{data} to image
+file \var{file}. \var{x} and \var{y} give the size of the image,
+\var{z} is 1 for 1 byte greyscale images or 3 for RGB images (which are
+stored as 4 byte values of which only the lower three bytes are used).
+These are the formats returned by \code{gl.lrectread}.
+\end{funcdesc}
diff --git a/Doc/libintro.tex b/Doc/libintro.tex
new file mode 100644
index 0000000..fa591ec
--- /dev/null
+++ b/Doc/libintro.tex
@@ -0,0 +1,17 @@
+\chapter{Introduction}
+
+The Python library consists of three parts, with different levels of
+integration with the interpreter.
+Closest to the interpreter are built-in types, exceptions and functions.
+Next are built-in modules, which are written in \C{} and linked statically
+with the interpreter.
+Finally there are standard modules that are implemented entirely in
+Python, but are always available.
+For efficiency, some standard modules may become built-in modules in
+future versions of the interpreter.
+\indexii{built-in}{types}
+\indexii{built-in}{exceptions}
+\indexii{built-in}{functions}
+\indexii{built-in}{modules}
+\indexii{standard}{modules}
+\indexii{\C{}}{language}
diff --git a/Doc/libjpeg.tex b/Doc/libjpeg.tex
new file mode 100644
index 0000000..d0c1604
--- /dev/null
+++ b/Doc/libjpeg.tex
@@ -0,0 +1,51 @@
+\section{Built-in Module \sectcode{jpeg}}
+\bimodindex{jpeg}
+
+The module jpeg provides access to the jpeg compressor and
+decompressor written by the Independent JPEG Group. JPEG is a (draft?)
+standard for compressing pictures.  For details on jpeg or the
+Indepent JPEG Group software refer to the JPEG standard or the
+documentation provided with the software.
+
+The jpeg module defines these functions:
+
+\renewcommand{\indexsubitem}{(in module jpeg)}
+\begin{funcdesc}{compress}{data\, w\, h\, b}
+Treat data as a pixmap of width w and height h, with b bytes per
+pixel.  The data is in sgi gl order, so the first pixel is in the
+lower-left corner. This means that lrectread return data can
+immedeately be passed to compress.  Currently only 1 byte and 4 byte
+pixels are allowed, the former being treaded as greyscale and the
+latter as RGB color.  Compress returns a string that contains the
+compressed picture, in JFIF format.
+\end{funcdesc}
+
+\begin{funcdesc}{decompress}{data}
+Data is a string containing a picture in JFIF format. It returns a
+tuple
+\code{(\var{data}, \var{width}, \var{height}, \var{bytesperpixel})}.
+Again, the data is suitable to pass to lrectwrite.
+\end{funcdesc}
+
+\begin{funcdesc}{setoption}{name\, value}
+Set various options.  Subsequent compress and decompress calls
+will use these options.  The following options are available:
+\begin{description}
+\item[\code{'forcegray'}]
+Force output to be grayscale, even if input is RGB.
+
+\item[\code{'quality'}]
+Set the quality of the compressed image to a
+value between \code{0} and \code{100} (default is \code{75}).  Compress only.
+
+\item[\code{'optimize'}]
+Perform huffman table optimization.  Takes longer, but results in
+smaller compressed image.  Compress only.
+
+\item[\code{'smooth'}]
+Perform inter-block smoothing on uncompressed image.  Only useful for
+low-quality images.  Decompress only.
+\end{description}
+\end{funcdesc}
+
+Compress and uncompress raise the error jpeg.error in case of errors.
diff --git a/Doc/libmac.tex b/Doc/libmac.tex
new file mode 100644
index 0000000..77c8956
--- /dev/null
+++ b/Doc/libmac.tex
@@ -0,0 +1,40 @@
+\chapter{MACINTOSH ONLY}
+
+The following modules are available on the Apple Macintosh only.
+
+\section{Built-in module \sectcode{mac}}
+
+\bimodindex{mac}
+This module provides a subset of the operating system dependent
+functionality provided by the optional built-in module \code{posix}.
+It is best accessed through the more portable standard module
+\code{os}.
+
+The following functions are available in this module:
+\code{chdir},
+\code{getcwd},
+\code{listdir},
+\code{mkdir},
+\code{rename},
+\code{rmdir},
+\code{stat},
+\code{sync},
+\code{unlink},
+as well as the exception \code{error}.
+
+\section{Standard module \sectcode{macpath}}
+
+\stmodindex{macpath}
+This module provides a subset of the pathname manipulation functions
+available from the optional standard module \code{posixpath}.  It is
+best accessed through the more portable standard module \code{os}, as
+\code{os.path}.
+
+The following functions are available in this module:
+\code{normcase},
+\code{isabs},
+\code{join},
+\code{split},
+\code{isdir},
+\code{isfile},
+\code{exists}.
diff --git a/Doc/libmain.tex b/Doc/libmain.tex
new file mode 100644
index 0000000..c730a03
--- /dev/null
+++ b/Doc/libmain.tex
@@ -0,0 +1,6 @@
+\section{Built-in Module \sectcode{__main__}}
+
+\bimodindex{__main__}
+This module represents the (otherwise anonymous) scope in which the
+interpreter's main program executes --- commands read either from
+standard input or from a script file.
diff --git a/Doc/libmarshal.tex b/Doc/libmarshal.tex
new file mode 100644
index 0000000..2b0a400
--- /dev/null
+++ b/Doc/libmarshal.tex
@@ -0,0 +1,59 @@
+\section{Built-in Module \sectcode{marshal}}
+
+\bimodindex{marshal}
+This module contains functions that can read and write Python
+values in a binary format.  The format is specific to Python, but
+independent of machine architecture issues (e.g., you can write a
+Python value to a file on a VAX, transport the file to a Mac, and read
+it back there).  Details of the format not explained here; read the
+source if you're interested.%
+\footnote{The name of this module stems from a bit of terminology used
+by the designers of Modula-3 (amongst others), who use the term
+``marshalling'' for shipping of data around in a self-contained form.
+Strictly speaking, ``to marshal'' means to convert some data from
+internal to external form (in an RPC buffer for instance) and
+``unmarshalling'' for the reverse process.}
+
+
+Not all Python object types are supported; in general, only objects
+whose value is independent from a particular invocation of Python can
+be written and read by this module.  The following types are supported:
+\code{None}, integers, long integers, floating point numbers,
+strings, tuples, lists, dictionaries, and code objects, where it
+should be understood that tuples, lists and dictionaries are only
+supported as long as the values contained therein are themselves
+supported; and recursive lists and dictionaries should not be written
+(they will cause an infinite loop).
+
+There are functions that read/write files as well as functions
+operating on strings.
+
+The module defines these functions:
+
+\renewcommand{\indexsubitem}{(in module marshal)}
+\begin{funcdesc}{dump}{value\, file}
+  Write the value on the open file.  The value must be a supported
+  type.  The file must be an open file object such as
+  \code{sys.stdout} or returned by \code{open()} or
+  \code{posix.popen()}.
+  
+  If the value has an unsupported type, garbage is written which cannot
+  be read back by \code{load()}.
+\end{funcdesc}
+
+\begin{funcdesc}{load}{file}
+  Read one value from the open file and return it.  If no valid value
+  is read, raise \code{EOFError}, \code{ValueError} or
+  \code{TypeError}.  The file must be an open file object.
+\end{funcdesc}
+
+\begin{funcdesc}{dumps}{value}
+  Return the string that would be written to a file by
+  \code{dump(value, file)}.  The value must be a supported type.
+\end{funcdesc}
+
+\begin{funcdesc}{loads}{string}
+  Convert the string to a value.  If no valid value is found, raise
+  \code{EOFError}, \code{ValueError} or \code{TypeError}.  Extra
+  characters in the string are ignored.
+\end{funcdesc}
diff --git a/Doc/libmath.tex b/Doc/libmath.tex
new file mode 100644
index 0000000..62da689
--- /dev/null
+++ b/Doc/libmath.tex
@@ -0,0 +1,70 @@
+\section{Built-in Module \sectcode{math}}
+
+\bimodindex{math}
+\renewcommand{\indexsubitem}{(in module math)}
+This module is always available.
+It provides access to the mathematical functions defined by the C
+standard.
+They are:
+\iftexi
+\begin{funcdesc}{acos}{x}
+\funcline{asin}{x}
+\funcline{atan}{x}
+\funcline{atan2}{x, y}
+\funcline{ceil}{x}
+\funcline{cos}{x}
+\funcline{cosh}{x}
+\funcline{exp}{x}
+\funcline{fabs}{x}
+\funcline{floor}{x}
+\funcline{fmod}{x, y}
+\funcline{frexp}{x}
+\funcline{ldexp}{x, y}
+\funcline{log}{x}
+\funcline{log10}{x}
+\funcline{modf}{x}
+\funcline{pow}{x, y}
+\funcline{sin}{x}
+\funcline{sinh}{x}
+\funcline{sqrt}{x}
+\funcline{tan}{x}
+\funcline{tanh}{x}
+\end{funcdesc}
+\else
+\code{acos(\varvars{x})},
+\code{asin(\varvars{x})},
+\code{atan(\varvars{x})},
+\code{atan2(\varvars{x\, y})},
+\code{ceil(\varvars{x})},
+\code{cos(\varvars{x})},
+\code{cosh(\varvars{x})},
+\code{exp(\varvars{x})},
+\code{fabs(\varvars{x})},
+\code{floor(\varvars{x})},
+\code{fmod(\varvars{x\, y})},
+\code{frexp(\varvars{x})},
+\code{ldexp(\varvars{x\, y})},
+\code{log(\varvars{x})},
+\code{log10(\varvars{x})},
+\code{modf(\varvars{x})},
+\code{pow(\varvars{x\, y})},
+\code{sin(\varvars{x})},
+\code{sinh(\varvars{x})},
+\code{sqrt(\varvars{x})},
+\code{tan(\varvars{x})},
+\code{tanh(\varvars{x})}.
+\fi
+
+Note that \code{frexp} and \code{modf} have a different call/return
+pattern than their C equivalents: they take a single argument and
+return a pair of values, rather than returning their second return
+value through an `output parameter' (there is no such thing in Python).
+
+The module also defines two mathematical constants:
+\iftexi
+\begin{datadesc}{pi}
+\dataline{e}
+\end{datadesc}
+\else
+\code{pi} and \code{e}.
+\fi
diff --git a/Doc/libmd5.tex b/Doc/libmd5.tex
new file mode 100644
index 0000000..29e4b31
--- /dev/null
+++ b/Doc/libmd5.tex
@@ -0,0 +1,53 @@
+\section{Built-in module \sectcode{md5}}
+\bimodindex{md5}
+
+This module implements the interface to RSA's MD5 message digest
+algorithm (see also the file \file{md5.doc}). It's use is very
+straightforward: use the function \code{md5} to create an
+\dfn{md5}-object. You can now ``feed'' this object with arbitrary
+strings.
+
+At any time you can ask the ``final'' digest of the object. Internally,
+a temorary copy of the object is made and the digest is computed and
+returned. Because of the copy, the digest operation is not desctructive
+for the object. Before a more exact description of the use, a small
+example: to obtain the digest of the string \code{'abc'}, use \ldots
+
+\bcode\begin{verbatim}
+>>> from md5 import md5
+>>> m = md5()
+>>> m.update('abc')
+>>> m.digest()
+'\220\001P\230<\322O\260\326\226?}(\341\177r'
+\end{verbatim}\ecode
+
+More condensed:
+
+\bcode\begin{verbatim}
+>>> md5('abc').digest()
+'\220\001P\230<\322O\260\326\226?}(\341\177r'
+\end{verbatim}\ecode
+
+\renewcommand{\indexsubitem}{(in module md5)}
+\begin{funcdesc}{md5}{arg}
+  Create a new md5-object. \var{arg} is optional: if present, an initial
+  \code{update} method is called with \var{arg} as argument.
+\end{funcdesc}
+
+An md5-object has the following methods:
+
+\renewcommand{\indexsubitem}{(md5 method)}
+\begin{funcdesc}{update}{arg}
+  Update this md5-object with the string \var{arg}.
+\end{funcdesc}
+
+\begin{funcdesc}{digest}{}
+  Return the \dfn{digest} of this md5-object. Internally, a copy is made
+  and the \C-function \code{MD5Final} is called. Finally the digest is
+  returned.
+\end{funcdesc}
+
+\begin{funcdesc}{copy}{}
+  Return a separate copy of this md5-object.  An \code{update} to this
+  copy won't affect the original object.
+\end{funcdesc}
diff --git a/Doc/libmm.tex b/Doc/libmm.tex
new file mode 100644
index 0000000..c17aa55
--- /dev/null
+++ b/Doc/libmm.tex
@@ -0,0 +1,5 @@
+\chapter{MULTIMEDIA EXTENSIONS}
+
+The modules described in this chapter implement various algorithms
+that are mainly useful for multimedia applications.  They are
+available at the discretion of the installation.
diff --git a/Doc/libmods.tex b/Doc/libmods.tex
new file mode 100755
index 0000000..3b902de
--- /dev/null
+++ b/Doc/libmods.tex
@@ -0,0 +1,7 @@
+\chapter{Built-in Modules}
+
+The modules described in this chapter are built into the interpreter
+and considered part of Python's standard environment: they are always
+avaialble.\footnote{at least in theory --- it is possible to specify
+at build time that one or more of these modules should be excluded,
+but it would be antisocial to do so.}
diff --git a/Doc/libmpz.tex b/Doc/libmpz.tex
new file mode 100644
index 0000000..ea0d1b7
--- /dev/null
+++ b/Doc/libmpz.tex
@@ -0,0 +1,74 @@
+\section{Built-in module \sectcode{mpz}}
+\bimodindex{mpz}
+
+This module implements the interface to part of the GNU MP library.
+This library contains arbitrary precision integer and rational number
+arithmetic routines. Only the interfaces to the \emph{integer}
+(\samp{mpz_{\rm \ldots}}) routines are provided. If not stated
+otherwise, the description in the GNU MP documentation can be applied.
+
+In general, \dfn{mpz}-numbers can be used just like other standard
+Python numbers, e.g. you can use the built-in operators like \code{+},
+\code{*}, etc., as well as the standard built-in functions like
+\code{abs}, \code{int}, \ldots, \code{divmod}, \code{pow}.
+\strong{Please note:} the {\it bitwise-xor} operation has been implemented as
+a bunch of {\it and}s, {\it invert}s and {\it or}s, because the library
+lacks an \code{mpz_xor} function, and I didn't need one.
+
+You create an mpz-number, by calling the function called \code{mpz} (see
+below for an excact description). An mpz-number is printed like this:
+\code{mpz(\var{value})}.
+
+\renewcommand{\indexsubitem}{(in module mpz)}
+\begin{funcdesc}{mpz}{value}
+  Create a new mpz-number. \var{value} can be an integer, a long,
+  another mpz-number, or even a string. If it is a string, it is
+  interpreted as an array of radix-256 digits, least significant digit
+  first, resulting in a positive number. See also the \code{binary}
+  method, described below.
+\end{funcdesc}
+
+A number of {\em extra} functions are defined in this module. Non
+mpz-arguments are converted to mpz-values first, and the functions
+return mpz-numbers.
+
+\begin{funcdesc}{powm}{base\, exponent\, modulus}
+  Return \code{pow(\var{base}, \var{exponent}) \%{} \var{modulus}}. If
+  \code{\var{exponent} == 0}, return \code{mpz(1)}. In contrast to the
+  \C-library function, this version can handle negative exponents.
+\end{funcdesc}
+
+\begin{funcdesc}{gcd}{op1\, op2}
+  Return the greatest common divisor of \var{op1} and \var{op2}.
+\end{funcdesc}
+
+\begin{funcdesc}{gcdext}{a\, b}
+  Return a tuple \code{(\var{g}, \var{s}, \var{t})}, such that
+  \code{\var{a}*\var{s} + \var{b}*\var{t} == \var{g} == gcd(\var{a}, \var{b})}.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrt}{op}
+  Return the square root of \var{op}. The result is rounded towards zero.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrtrem}{op}
+  Return a tuple \code{(\var{root}, \var{remainder})}, such that
+  \code{\var{root}*\var{root} + \var{remainder} == \var{op}}.
+\end{funcdesc}
+
+\begin{funcdesc}{divm}{numerator\, denominator\, modulus}
+  Returns a number \var{q}. such that
+  \code{\var{q} * \var{denominator} \%{} \var{modulus} == \var{numerator}}.
+  One could also implement this function in python, using \code{gcdext}.
+\end{funcdesc}
+
+An mpz-number has one method:
+
+\renewcommand{\indexsubitem}{(mpz method)}
+\begin{funcdesc}{binary}{}
+  Convert this mpz-number to a binary string, where the number has been
+  stored as an array of radix-256 digits, least significant digit first.
+
+  The mpz-number must have a value greater than- or equal to zero,
+  otherwise a \code{ValueError}-exception will be raised.
+\end{funcdesc}
diff --git a/Doc/libobjs.tex b/Doc/libobjs.tex
new file mode 100644
index 0000000..49a86fc
--- /dev/null
+++ b/Doc/libobjs.tex
@@ -0,0 +1,19 @@
+\chapter{Built-in Types, Exceptions and Functions}
+
+\nodename{Built-in Objects}
+
+Names for built-in exceptions and functions are found in a separate
+symbol table.  This table is searched last, so local and global
+user-defined names can override built-in names.  Built-in types have
+no names but are created easily by constructing an object of the
+desired type (e.g., using a literal) and applying the built-in
+function \code{type()} to it.  They are described together here for
+easy reference.%
+\footnote{Some descriptions sorely lack explanations of the exceptions
+	that may be raised --- this will be fixed in a future version of
+	this document.}
+\indexii{built-in}{types}
+\indexii{built-in}{exceptions}
+\indexii{built-in}{functions}
+\index{symbol table}
+\bifuncindex{type}
diff --git a/Doc/libos.tex b/Doc/libos.tex
new file mode 100644
index 0000000..6763ed4
--- /dev/null
+++ b/Doc/libos.tex
@@ -0,0 +1,77 @@
+\section{Standard Module \sectcode{os}}
+
+\stmodindex{os}
+This module provides a more portable way of using operating system
+(OS) dependent functionality than importing an OS dependent built-in
+module like \code{posix}.
+
+When the optional built-in module \code{posix} is available, this
+module exports the same functions and data as \code{posix}; otherwise,
+it searches for an OS dependent built-in module like \code{mac} and
+exports the same functions and data as found there.  The design of all
+Python's built-in OS dependen modules is such that as long as the same
+functionality is available, it uses the same interface; e.g., the
+function \code{os.stat(\var{file})} returns stat info about a \var{file} in a
+format compatible with the POSIX interface.
+
+Extensions peculiar to a particular OS are also available through the
+\code{os} module, but using them is of course a threat to portability!
+
+Note that after the first time \code{os} is imported, there is \emph{no}
+performance penalty in using functions from \code{os} instead of
+directly from the OS dependent built-in module, so there should be
+\emph{no} reason not to use \code{os}!
+
+In addition to whatever the correct OS dependent module exports, the
+following variables and functions are always exported by \code{os}:
+
+\renewcommand{\indexsubitem}{(in module os)}
+\begin{datadesc}{name}
+The name of the OS dependent module imported, e.g. \code{'posix'} or
+\code{'mac'}.
+\end{datadesc}
+
+\begin{datadesc}{path}
+The corresponding OS dependent standard module for pathname
+operations, e.g., \code{posixpath} or \code{macpath}.  Thus, (given
+the proper imports), \code{os.path.split(\var{file})} is equivalent to but
+more portable than \code{posixpath.split(\var{file})}.
+\end{datadesc}
+
+\begin{datadesc}{curdir}
+The constant string used by the OS to refer to the current directory,
+e.g. \code{'.'} for POSIX or \code{':'} for the Mac.
+\end{datadesc}
+
+\begin{datadesc}{pardir}
+The constant string used by the OS to refer to the parent directory,
+e.g. \code{'..'} for POSIX or \code{'::'} for the Mac.
+\end{datadesc}
+
+\begin{datadesc}{sep}
+The character used by the OS to separate pathname components, e.g.
+\code{'/'} for POSIX or \code{':'} for the Mac.  Note that knowing this
+is not sufficient to be able to parse or concatenate pathnames---better
+use \code{os.path.split()} and \code{os.path.join()}---but it is
+occasionally useful.
+\end{datadesc}
+
+\begin{funcdesc}{execl}{path\, arg0\, arg1\, ...}
+This is equivalent to a call to \code{os.execv} with an \var{argv}
+of \code{[\var{arg0}, \var{arg1}, ...]}.
+\end{funcdesc}
+
+\begin{funcdesc}{execle}{path\, arg0\, arg1\, ...\, env}
+This is equivalent to a call to \code{os.execve} with an \var{argv}
+of \code{[\var{arg0}, \var{arg1}, ...]}.
+\end{funcdesc}
+
+\begin{funcdesc}{execlp}{path\, arg0\, arg1\, ...}
+This is like \code{execl} but duplicates the shell's actions in
+searching for an executable file in a list of directories.  The
+directory list is obtained from \code{environ['PATH']}.
+\end{funcdesc}
+
+\begin{funcdesc}{execvp}{path\, arg0\, arg1\, ...}
+\code{execvp} is for \code{execv} what \code{execlp} is for \code{execl}.
+\end{funcdesc}
diff --git a/Doc/libpanel.tex b/Doc/libpanel.tex
new file mode 100644
index 0000000..b82bf98
--- /dev/null
+++ b/Doc/libpanel.tex
@@ -0,0 +1,66 @@
+\section{Standard Module \sectcode{panel}}
+\stmodindex{panel}
+
+\strong{Please note:} The FORMS library, to which the \code{fl} module described
+above interfaces, is a simpler and more accessible user interface
+library for use with GL than the Panel Module (besides also being by a
+Dutch author).
+
+This module should be used instead of the built-in module
+\code{pnl}
+to interface with the
+{\em Panel Library}.
+
+The module is too large to document here in its entirety.
+One interesting function:
+
+\renewcommand{\indexsubitem}{(in module panel)}
+\begin{funcdesc}{defpanellist}{filename}
+Parses a panel description file containing S-expressions written by the
+{\em Panel Editor}
+that accompanies the Panel Library and creates the described panels.
+It returns a list of panel objects.
+\end{funcdesc}
+
+\strong{Warning:}
+the Python interpreter will dump core if you don't create a GL window
+before calling
+\code{panel.mkpanel()}
+or
+\code{panel.defpanellist()}.
+
+\section{Standard Module \sectcode{panelparser}}
+\stmodindex{panelparser}
+
+This module defines a self-contained parser for S-expressions as output
+by the Panel Editor (which is written in Scheme so it can't help writing
+S-expressions).
+The relevant function is
+\code{panelparser.parse_file(\var{file})}
+which has a file object (not a filename!) as argument and returns a list
+of parsed S-expressions.
+Each S-expression is converted into a Python list, with atoms converted
+to Python strings and sub-expressions (recursively) to Python lists.
+For more details, read the module file.
+% XXXXJH should be funcdesc, I think
+
+\section{Built-in Module \sectcode{pnl}}
+\bimodindex{pnl}
+
+This module provides access to the
+{\em Panel Library}
+built by NASA Ames (to get it, send e-mail to
+{\tt panel-request@nas.nasa.gov}).
+All access to it should be done through the standard module
+\code{panel},
+which transparantly exports most functions from
+\code{pnl}
+but redefines
+\code{pnl.dopanel()}.
+
+\strong{Warning:}
+the Python interpreter will dump core if you don't create a GL window
+before calling
+\code{pnl.mkpanel()}.
+
+The module is too large to document here in its entirety.
diff --git a/Doc/libposix.tex b/Doc/libposix.tex
new file mode 100644
index 0000000..737ddb1
--- /dev/null
+++ b/Doc/libposix.tex
@@ -0,0 +1,306 @@
+\section{Built-in Module \sectcode{posix}}
+
+\bimodindex{posix}
+
+This module provides access to operating system functionality that is
+standardized by the C Standard and the POSIX standard (a thinly diguised
+\UNIX{} interface).
+It is available in all Python versions except on the Macintosh;
+the MS-DOS version does not support certain functions.
+The descriptions below are very terse; refer to the
+corresponding \UNIX{} manual entry for more information.
+
+Errors are reported as exceptions; the usual exceptions are given
+for type errors, while errors reported by the system calls raise
+\code{posix.error}, described below.
+
+Module \code{posix} defines the following data items:
+
+\renewcommand{\indexsubitem}{(data in module posix)}
+\begin{datadesc}{environ}
+A dictionary representing the string environment at the time
+the interpreter was started.
+(Modifying this dictionary does not affect the string environment of the
+interpreter.)
+For example,
+\code{posix.environ['HOME']}
+is the pathname of your home directory, equivalent to
+\code{getenv("HOME")}
+in C.
+\end{datadesc}
+
+\renewcommand{\indexsubitem}{(exception in module posix)}
+\begin{excdesc}{error}
+This exception is raised when an POSIX function returns a
+POSIX-related error (e.g., not for illegal argument types).  Its
+string value is \code{'posix.error'}.  The accompanying value is a
+pair containing the numeric error code from \code{errno} and the
+corresponding string, as would be printed by the C function
+\code{perror()}.
+\end{excdesc}
+
+It defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module posix)}
+\begin{funcdesc}{chdir}{path}
+Change the current working directory to \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{chmod}{path\, mode}
+Change the mode of \var{path} to the numeric \var{mode}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{fd}
+Close file descriptor \var{fd}.
+\end{funcdesc}
+
+\begin{funcdesc}{dup}{fd}
+Return a duplicate of file descriptor \var{fd}.
+\end{funcdesc}
+
+\begin{funcdesc}{dup2}{fd\, fd2}
+Duplicate file descriptor \var{fd} to \var{fd2}, closing the latter
+first if necessary.  Return \code{None}.
+\end{funcdesc}
+
+\begin{funcdesc}{execv}{path\, args}
+Execute the executable \var{path} with argument list \var{args},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{execve}{path\, args\, env}
+Execute the executable \var{path} with argument list \var{args},
+and environment \var{env},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+The environment must be a dictionary mapping strings to strings.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{_exit}{n}
+Exit to the system with status \var{n}, without calling cleanup
+handlers, flushing stdio buffers, etc.
+(Not on MS-DOS.)
+
+Note: the standard way to exit is \code{sys.exit(\var{n})}.
+\code{posix._exit()} should normally only be used in the child process
+after a \code{fork()}.
+\end{funcdesc}
+
+\begin{funcdesc}{fork}{}
+Fork a child process.  Return 0 in the child, the child's process id
+in the parent.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{fstat}{fd}
+Return status for file descriptor \var{fd}, like \code{stat()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getcwd}{}
+Return a string representing the current working directory.
+\end{funcdesc}
+
+\begin{funcdesc}{getegid}{}
+Return the current process's effective group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{geteuid}{}
+Return the current process's effective user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getgid}{}
+Return the current process's group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getpid}{}
+Return the current process id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getppid}{}
+Return the parent's process id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{getuid}{}
+Return the current process's user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{kill}{pid\, sig}
+Kill the process \var{pid} with signal \var{sig}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{link}{src\, dst}
+Create a hard link pointing to \var{src} named \var{dst}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{listdir}{path}
+Return a list containing the names of the entries in the directory.
+The list is in arbitrary order.  It includes the special entries
+\code{'.'} and \code{'..'} if they are present in the directory.
+\end{funcdesc}
+
+\begin{funcdesc}{lseek}{fd\, pos\, how}
+Set the current position of file descriptor \var{fd} to position
+\var{pos}, modified by \var{how}: 0 to set the position relative to
+the beginning of the file; 1 to set it relative to the current
+position; 2 to set it relative to the end of the file.
+\end{funcdesc}
+
+\begin{funcdesc}{lstat}{path}
+Like \code{stat()}, but do not follow symbolic links.  (On systems
+without symbolic links, this is identical to \code{posix.stat}.)
+\end{funcdesc}
+
+\begin{funcdesc}{mkdir}{path\, mode}
+Create a directory named \var{path} with numeric mode \var{mode}.
+\end{funcdesc}
+
+\begin{funcdesc}{nice}{increment}
+Add \var{incr} to the process' ``niceness''.  Return the new niceness.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{open}{file\, flags\, mode}
+Open the file \var{file} and set various flags according to
+\var{flags} and possibly its mode according to \var{mode}.
+Return the file descriptor for the newly opened file.
+\end{funcdesc}
+
+\begin{funcdesc}{pipe}{}
+Create a pipe.  Return a pair of file descriptors \code{(r, w)}
+usable for reading and writing, respectively.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{popen}{command\, mode}
+Open a pipe to or from \var{command}.  The return value is an open
+file object connected to the pipe, which can be read or written
+depending on whether \var{mode} is \code{'r'} or \code{'w'}.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{read}{fd\, n}
+Read at most \var{n} bytes from file descriptor \var{fd}.
+Return a string containing the bytes read.
+\end{funcdesc}
+
+\begin{funcdesc}{readlink}{path}
+Return a string representing the path to which the symbolic link
+points.  (On systems without symbolic links, this always raises
+\code{posix.error}.)
+\end{funcdesc}
+
+\begin{funcdesc}{rename}{src\, dst}
+Rename the file or directory \var{src} to \var{dst}.
+\end{funcdesc}
+
+\begin{funcdesc}{rmdir}{path}
+Remove the directory \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{setgid}{gid}
+Set the current process's group id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{setuid}{uid}
+Set the current process's user id.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{stat}{path}
+Perform a {\em stat} system call on the given path.  The return value
+is a tuple of at least 10 integers giving the most important (and
+portable) members of the {\em stat} structure, in the order
+\code{st_mode},
+\code{st_ino},
+\code{st_dev},
+\code{st_nlink},
+\code{st_uid},
+\code{st_gid},
+\code{st_size},
+\code{st_atime},
+\code{st_mtime},
+\code{st_ctime}.
+More items may be added at the end by some implementations.
+(On MS-DOS, some items are filled with dummy values.)
+
+Note: The standard module \code{stat} defines functions and constants
+that are useful for extracting information from a stat structure.
+\end{funcdesc}
+
+\begin{funcdesc}{symlink}{src\, dst}
+Create a symbolic link pointing to \var{src} named \var{dst}.  (On
+systems without symbolic links, this always raises
+\code{posix.error}.)
+\end{funcdesc}
+
+\begin{funcdesc}{system}{command}
+Execute the command (a string) in a subshell.  This is implemented by
+calling the Standard C function \code{system()}, and has the same
+limitations.  Changes to \code{posix.environ}, \code{sys.stdin} etc. are
+not reflected in the environment of the executed command.  The return
+value is the exit status of the process as returned by Standard C
+\code{system()}.
+\end{funcdesc}
+
+\begin{funcdesc}{times}{}
+Return a 4-tuple of floating point numbers indicating accumulated CPU
+times, in seconds.  The items are: user time, system time, children's
+user time, and children's system time, in that order.  See the \UNIX{}
+manual page {\it times}(2).  (Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{umask}{mask}
+Set the current numeric umask and returns the previous umask.
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{uname}{}
+Return a 5-tuple containing information identifying the current
+operating system.  The tuple contains 5 strings:
+\code{(\var{sysname}, \var{nodename}, \var{release}, \var{version}, \var{machine})}.
+Some systems truncate the nodename to 8
+characters or to the leading component; an better way to get the
+hostname is \code{socket.gethostname()}.  (Not on MS-DOS, nor on older
+\UNIX{} systems.)
+\end{funcdesc}
+
+\begin{funcdesc}{unlink}{path}
+Unlink \var{path}.
+\end{funcdesc}
+
+\begin{funcdesc}{utime}{path\, \(atime\, mtime\)}
+Set the access and modified time of the file to the given values.
+(The second argument is a tuple of two items.)
+\end{funcdesc}
+
+\begin{funcdesc}{wait}{}
+Wait for completion of a child process, and return a tuple containing
+its pid and exit status indication (encoded as by \UNIX{}).
+(Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{waitpid}{pid\, options}
+Wait for completion of a child process given by proces id, and return
+a tuple containing its pid and exit status indication (encoded as by
+\UNIX{}).  The semantics of the call are affected by the value of
+the integer options, which should be 0 for normal operation.  (If the
+system does not support waitpid(), this always raises
+\code{posix.error}.  Not on MS-DOS.)
+\end{funcdesc}
+
+\begin{funcdesc}{write}{fd\, str}
+Write the string \var{str} to file descriptor \var{fd}.
+Return the number of bytes actually written.
+\end{funcdesc}
diff --git a/Doc/libppath.tex b/Doc/libppath.tex
new file mode 100644
index 0000000..e6430be
--- /dev/null
+++ b/Doc/libppath.tex
@@ -0,0 +1,128 @@
+\section{Standard Module \sectcode{posixpath}}
+
+\stmodindex{posixpath}
+This module implements some useful functions on POSIX pathnames.
+
+\renewcommand{\indexsubitem}{(in module posixpath)}
+\begin{funcdesc}{basename}{p}
+Return the base name of pathname
+\var{p}.
+This is the second half of the pair returned by
+\code{posixpath.split(\var{p})}.
+\end{funcdesc}
+
+\begin{funcdesc}{commonprefix}{list}
+Return the longest string that is a prefix of all strings in
+\var{list}.
+If
+\var{list}
+is empty, return the empty string (\code{''}).
+\end{funcdesc}
+
+\begin{funcdesc}{exists}{p}
+Return true if
+\var{p}
+refers to an existing path.
+\end{funcdesc}
+
+\begin{funcdesc}{expanduser}{p}
+Return the argument with an initial component of \samp{\~} or
+\samp{\~\var{user}} replaced by that \var{user}'s home directory.  An
+initial \samp{\~{}} is replaced by the environment variable \code{\${}HOME};
+an initial \samp{\~\var{user}} is looked up in the password directory through
+the built-in module \code{pwd}.  If the expansion fails, or if the
+path does not begin with a tilde, the path is returned unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{isabs}{p}
+Return true if \var{p} is an absolute pathname (begins with a slash).
+\end{funcdesc}
+
+\begin{funcdesc}{isfile}{p}
+Return true if \var{p} is an existing regular file.  This follows
+symbolic links, so both islink() and isfile() can be true for the same
+path.
+\end{funcdesc}
+
+\begin{funcdesc}{isdir}{p}
+Return true if \var{p} is an existing directory.  This follows
+symbolic links, so both islink() and isdir() can be true for the same
+path.
+\end{funcdesc}
+
+\begin{funcdesc}{islink}{p}
+Return true if
+\var{p}
+refers to a directory entry that is a symbolic link.
+Always false if symbolic links are not supported.
+\end{funcdesc}
+
+\begin{funcdesc}{ismount}{p}
+Return true if \var{p} is a mount point.  (This currently checks whether
+\code{\var{p}/..} is on a different device from \var{p} or whether
+\code{\var{p}/..} and \var{p} point to the same i-node on the same
+device --- is this test correct for all \UNIX{} and POSIX variants?)
+\end{funcdesc}
+
+\begin{funcdesc}{join}{p\, q}
+Join the paths
+\var{p}
+and
+\var{q} intelligently:
+If
+\var{q}
+is an absolute path, the return value is
+\var{q}.
+Otherwise, the concatenation of
+\var{p}
+and
+\var{q}
+is returned, with a slash (\code{'/'}) inserted unless
+\var{p}
+is empty or ends in a slash.
+\end{funcdesc}
+
+\begin{funcdesc}{normcase}{p}
+Normalize the case of a pathname.  This returns the path unchanged;
+however, a similar function in \code{macpath} converts upper case to
+lower case.
+\end{funcdesc}
+
+\begin{funcdesc}{samefile}{p\, q}
+Return true if both pathname arguments refer to the same file or directory
+(as indicated by device number and i-node number).
+Raise an exception if a stat call on either pathname fails.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{p}
+Split the pathname \var{p} in a pair \code{(\var{head}, \var{tail})}, where
+\var{tail} is the last pathname component and \var{head} is
+everything leading up to that.  If \var{p} ends in a slash (except if
+it is the root), the trailing slash is removed and the operation
+applied to the result; otherwise, \code{join(\var{head}, \var{tail})} equals
+\var{p}.  The \var{tail} part never contains a slash.  Some boundary
+cases: if \var{p} is the root, \var{head} equals \var{p} and
+\var{tail} is empty; if \var{p} is empty, both \var{head} and
+\var{tail} are empty; if \var{p} contains no slash, \var{head} is
+empty and \var{tail} equals \var{p}.
+\end{funcdesc}
+
+\begin{funcdesc}{splitext}{p}
+Split the pathname \var{p} in a pair \code{(\var{root}, \var{ext})}
+such that \code{\var{root} + \var{ext} == \var{p}},
+the last component of \var{root} contains no periods,
+and \var{ext} is empty or begins with a period.
+\end{funcdesc}
+
+\begin{funcdesc}{walk}{p\, visit\, arg}
+Calls the function \var{visit} with arguments
+\code{(\var{arg}, \var{dirname}, \var{names})} for each directory in the
+directory tree rooted at \var{p} (including \var{p} itself, if it is a
+directory).  The argument \var{dirname} specifies the visited directory,
+the argument \var{names} lists the files in the directory (gotten from
+\code{posix.listdir(\var{dirname})}).  The \var{visit} function may
+modify \var{names} to influence the set of directories visited below
+\var{dirname}, e.g., to avoid visiting certain parts of the tree.  (The
+object referred to by \var{names} must be modified in place, using
+\code{del} or slice assignment.)
+\end{funcdesc}
diff --git a/Doc/libpwd.tex b/Doc/libpwd.tex
new file mode 100644
index 0000000..7bb30d8
--- /dev/null
+++ b/Doc/libpwd.tex
@@ -0,0 +1,32 @@
+\section{Built-in Module \sectcode{pwd}}
+
+\bimodindex{pwd}
+This module provides access to the \UNIX{} password database.
+It is available on all \UNIX{} versions.
+
+Password database entries are reported as 7-tuples containing the
+following items from the password database (see \file{<pwd.h>}), in order:
+\code{pw_name},
+\code{pw_passwd},
+\code{pw_uid},
+\code{pw_gid},
+\code{pw_gecos},
+\code{pw_dir},
+\code{pw_shell}.
+The uid and gid items are integers, all others are strings.
+An exception is raised if the entry asked for cannot be found.
+
+It defines the following items:
+
+\renewcommand{\indexsubitem}{(in module pwd)}
+\begin{funcdesc}{getpwuid}{uid}
+Return the password database entry for the given numeric user ID.
+\end{funcdesc}
+
+\begin{funcdesc}{getpwnam}{name}
+Return the password database entry for the given user name.
+\end{funcdesc}
+
+\begin{funcdesc}{getpwall}{}
+Return a list of all available password database entries, in arbitrary order.
+\end{funcdesc}
diff --git a/Doc/librand.tex b/Doc/librand.tex
new file mode 100644
index 0000000..b03ac41
--- /dev/null
+++ b/Doc/librand.tex
@@ -0,0 +1,21 @@
+\section{Standard Module \sectcode{rand}}
+
+\stmodindex{rand} This module implements a pseudo-random number
+generator with an interface similar to \code{rand()} in C.  It defines
+the following functions:
+
+\renewcommand{\indexsubitem}{(in module rand)}
+\begin{funcdesc}{rand}{}
+Returns an integer random number in the range [0 ... 32768).
+\end{funcdesc}
+
+\begin{funcdesc}{choice}{s}
+Returns a random element from the sequence (string, tuple or list)
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{srand}{seed}
+Initializes the random number generator with the given integral seed.
+When the module is first imported, the random number is initialized with
+the current time.
+\end{funcdesc}
diff --git a/Doc/libregex.tex b/Doc/libregex.tex
new file mode 100644
index 0000000..544c204
--- /dev/null
+++ b/Doc/libregex.tex
@@ -0,0 +1,162 @@
+\section{Built-in Module \sectcode{regex}}
+
+\bimodindex{regex}
+This module provides regular expression matching operations similar to
+those found in Emacs.  It is always available.
+
+By default the patterns are Emacs-style regular expressions; there is
+a way to change the syntax to match that of several well-known
+\UNIX{} utilities.
+
+This module is 8-bit clean: both patterns and strings may contain null
+bytes and characters whose high bit is set.
+
+\strong{Please note:} There is a little-known fact about Python string literals
+which means that you don't usually have to worry about doubling
+backslashes, even though they are used to escape special characters in
+string literals as well as in regular expressions.  This is because
+Python doesn't remove backslashes from string literals if they are
+followed by an unrecognized escape character.  \emph{However}, if you
+want to include a literal \dfn{backslash} in a regular expression
+represented as a string literal, you have to \emph{quadruple} it.  E.g.
+to extract LaTeX \samp{\e section\{{\rm \ldots}\}} headers from a document, you can
+use this pattern: \code{'\e \e \e\e section\{\e (.*\e )\}'}.
+
+The module defines these functions, and an exception:
+
+\renewcommand{\indexsubitem}{(in module regex)}
+\begin{funcdesc}{match}{pattern\, string}
+  Return how many characters at the beginning of \var{string} match
+  the regular expression \var{pattern}.  Return \code{-1} if the
+  string does not match the pattern (this is different from a
+  zero-length match!).
+\end{funcdesc}
+
+\begin{funcdesc}{search}{pattern\, string}
+  Return the first position in \var{string} that matches the regular
+  expression \var{pattern}.  Return -1 if no position in the string
+  matches the pattern (this is different from a zero-length match
+  anywhere!).
+\end{funcdesc}
+
+\begin{funcdesc}{compile}{pattern\, translate}
+  Compile a regular expression pattern into a regular expression
+  object, which can be used for matching using its \code{match} and
+  \code{search} methods, described below.  The optional
+  \var{translate}, if present, must be a 256-character string
+  indicating how characters (both of the pattern and of the strings to
+  be matched) are translated before comparing them; the \code{i}-th
+  element of the string gives the translation for the character with
+  ASCII code \code{i}.
+
+  The sequence
+
+\bcode\begin{verbatim}
+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
+\code{regex.search()} is cached, so programs that use only a single
+regular expression at a time needn't worry about compiling regular
+expressions.)
+\end{funcdesc}
+
+\begin{funcdesc}{set_syntax}{flags}
+  Set the syntax to be used by future calls to \code{compile},
+  \code{match} and \code{search}.  (Already compiled expression objects
+  are not affected.)  The argument is an integer which is the OR of
+  several flag bits.  The return value is the previous value of
+  the syntax flags.  Names for the flags are defined in the standard
+  module \code{regex_syntax}; read the file \file{regex_syntax.py} for
+  more information.
+\end{funcdesc}
+
+\begin{excdesc}{error}
+  Exception raised when a string passed to one of the functions here
+  is not a valid regular expression (e.g., unmatched parentheses) or
+  when some other error occurs during compilation or matching.  (It is
+  never an error if a string contains no match for a pattern.)
+\end{excdesc}
+
+\begin{datadesc}{casefold}
+A string suitable to pass as \var{translate} argument to
+\code{compile} to map all upper case characters to their lowercase
+equivalents.
+\end{datadesc}
+
+\noindent
+Compiled regular expression objects support these methods:
+
+\renewcommand{\indexsubitem}{(regex method)}
+\begin{funcdesc}{match}{string\, pos}
+  Return how many characters at the beginning of \var{string} match
+  the compiled regular expression.  Return \code{-1} if the string
+  does not match the pattern (this is different from a zero-length
+  match!).
+  
+  The optional second parameter \var{pos} gives an index in the string
+  where the search is to start; it defaults to \code{0}.  This is not
+  completely equivalent to slicing the string; the \code{'\^'} pattern
+  character matches at the real begin of the string and at positions
+  just after a newline, not necessarily at the index where the search
+  is to start.
+\end{funcdesc}
+
+\begin{funcdesc}{search}{string\, pos}
+  Return the first position in \var{string} that matches the regular
+  expression \code{pattern}.  Return \code{-1} if no position in the
+  string matches the pattern (this is different from a zero-length
+  match anywhere!).
+  
+  The optional second parameter has the same meaning as for the
+  \code{match} method.
+\end{funcdesc}
+
+\begin{funcdesc}{group}{index\, index\, ...}
+This method is only valid when the last call to the \code{match}
+or \code{search} method found a match.  It returns one or more
+groups of the match.  If there is a single \var{index} argument,
+the result is a single string; if there are multiple arguments, the
+result is a tuple with one item per argument.  If the \var{index} is
+zero, the corresponding return value is the entire matching string; if
+it is in the inclusive range [1..9], it is the string matching the
+the corresponding parenthesized group (using the default syntax,
+groups are parenthesized using \code{\\(} and \code{\\)}).  If no
+such group exists, the corresponding result is \code{None}.
+\end{funcdesc}
+
+\noindent
+Compiled regular expressions support these data attributes:
+
+\renewcommand{\indexsubitem}{(regex attribute)}
+\begin{datadesc}{regs}
+When the last call to the \code{match} or \code{search} method found a
+match, this is a tuple of pairs of indices corresponding to the
+beginning and end of all parenthesized groups in the pattern.  Indices
+are relative to the string argument passed to \code{match} or
+\code{search}.  The 0-th tuple gives the beginning and end or the
+whole pattern.  When the last match or search failed, this is
+\code{None}.
+\end{datadesc}
+
+\begin{datadesc}{last}
+When the last call to the \code{match} or \code{search} method found a
+match, this is the string argument passed to that method.  When the
+last match or search failed, this is \code{None}.
+\end{datadesc}
+
+\begin{datadesc}{translate}
+This is the value of the \var{translate} argument to
+\code{regex.compile} that created this regular expression object.  If
+the \var{translate} argument was omitted in the \code{regex.compile}
+call, this is \code{None}.
+\end{datadesc}
diff --git a/Doc/libregsub.tex b/Doc/libregsub.tex
new file mode 100644
index 0000000..5747e4f
--- /dev/null
+++ b/Doc/libregsub.tex
@@ -0,0 +1,30 @@
+\section{Standard Module \sectcode{regsub}}
+
+\stmodindex{regsub}
+This module defines a number of functions useful for working with
+regular expressions (see built-in module \code{regex}).
+
+\renewcommand{\indexsubitem}{(in module regsub)}
+\begin{funcdesc}{sub}{pat\, repl\, str}
+Replace the first occurrence of pattern \var{pat} in string
+\var{str} by replacement \var{repl}.  If the pattern isn't found,
+the string is returned unchanged.  The pattern may be a string or an
+already compiled pattern.  The replacement may contain references
+\samp{\e \var{digit}} to subpatterns and escaped backslashes.
+\end{funcdesc}
+
+\begin{funcdesc}{gsub}{pat\, repl\, str}
+Replace all (non-overlapping) occurrences of pattern \var{pat} in
+string \var{str} by replacement \var{repl}.  The same rules as for
+\code{sub()} apply.  Empty matches for the pattern are replaced only
+when not adjacent to a previous match, so e.g.
+\code{gsub('', '-', 'abc')} returns \code{'-a-b-c-'}.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{str\, pat}
+Split the string \var{str} in fields separated by delimiters matching
+the pattern \var{pat}, and return a list containing the fields.  Only
+non-empty matches for the pattern are considered, so e.g.
+\code{split('a:b', ':*')} returns \code{['a', 'b']} and
+\code{split('abc', '')} returns \code{['abc']}.
+\end{funcdesc}
diff --git a/Doc/librgbimg.tex b/Doc/librgbimg.tex
new file mode 100644
index 0000000..367851b
--- /dev/null
+++ b/Doc/librgbimg.tex
@@ -0,0 +1,45 @@
+\section{Built-in module \sectcode{rgbimg}}
+\bimodindex{rgbimg}
+
+The rgbimg module allows python programs to access SGI imglib image
+files (also known as \file{.rgb} files).  The module is far from
+complete, but is provided anyway since the functionality that there is
+is enough in some cases.  Currently, colormap files are not supported.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module rgbimg)}
+\begin{excdesc}{error}
+This exception is raised on all errors, such as unsupported file type, etc.
+\end{excdesc}
+
+\begin{funcdesc}{sizeofimage}{file}
+This function returns a tuple \code{(\var{x}, \var{y})} where
+\var{x} and \var{y} are the size of the image in pixels.
+Only 4 byte RGBA pixels, 3 byte RGB pixels, and 1 byte greyscale pixels
+are currently supported.
+\end{funcdesc}
+
+\begin{funcdesc}{longimagedata}{file}
+This function reads and decodes the image on the specified file, and
+returns it as a python string. The string has 4 byte RGBA pixels.
+The bottom left pixel is the first in
+the string. This format is suitable to pass to \code{gl.lrectwrite},
+for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{longstoimage}{data\, x\, y\, z\, file}
+This function writes the RGBA data in \var{data} to image
+file \var{file}. \var{x} and \var{y} give the size of the image.
+\var{z} is 1 if the saved image should be 1 byte greyscale, 3 if the
+saved image should be 3 byte RGB data, or 4 if the saved images should
+be 4 byte RGBA data.  The input data always contains 4 bytes per pixel.
+These are the formats returned by \code{gl.lrectread}.
+\end{funcdesc}
+
+\begin{funcdesc}{ttob}{flag}
+This function sets a global flag which defines whether the scan lines
+of the image are read or written from bottom to top (flag is zero,
+compatible with SGI GL) or from top to bottom(flag is one,
+compatible with X).  The default is zero.
+\end{funcdesc}
diff --git a/Doc/librotor.tex b/Doc/librotor.tex
new file mode 100644
index 0000000..657d2ac
--- /dev/null
+++ b/Doc/librotor.tex
@@ -0,0 +1,6 @@
+\section{Built-in module \sectcode{rotor}}
+\bimodindex{rotor}
+
+This module implements a rotor-based encryption algorithm, contributed
+by Lance Ellinghouse.  Currently no further documentation is available
+--- you are kindly advised to read the source...
diff --git a/Doc/libselect.tex b/Doc/libselect.tex
new file mode 100644
index 0000000..d47face
--- /dev/null
+++ b/Doc/libselect.tex
@@ -0,0 +1,42 @@
+\section{Built-in module \sectcode{select}}
+\bimodindex{select}
+
+This module provides access to the function \code{select} available in
+most \UNIX{} versions.  It defines the following:
+
+\renewcommand{\indexsubitem}{(in module select)}
+\begin{excdesc}{error}
+The exception raised when an error occurs.  The accompanying value is
+a pair containing the numeric error code from \code{errno} and the
+corresponding string, as would be printed by the C function
+\code{perror()}.
+\end{excdesc}
+
+\begin{funcdesc}{select}{iwtd\, owtd\, ewtd\, timeout}
+This is a straightforward interface to the \UNIX{} \code{select()}
+system call.  The first three arguments are lists of `waitable
+objects': either integers representing \UNIX{} file descriptors or
+objects with a parameterless method named \code{fileno()} returning
+such an integer.  The three lists of waitable objects are for input,
+output and `exceptional conditions', respectively.  Empty lists are
+allowed.  The optional last argument is a time-out specified as a
+floating point number in seconds.  When the \var{timeout} argument
+is omitted the function blocks until at least one file descriptor is
+ready.  A time-out value of zero specifies a poll and never blocks.
+
+The return value is a triple of lists of objects that are ready:
+subsets of the first three arguments.  When the time-out is reached
+without a file descriptor becoming ready, three empty lists are
+returned.
+
+Amongst the acceptable object types in the lists are Python file
+objects (e.g. \code{sys.stdin}, or objects returned by \code{open()}
+or \code{posix.popen()}), socket objects returned by
+\code{socket.socket()}, and the module \code{stdwin} which happens to
+define a function \code{fileno()} for just this purpose.  You may
+also define a \dfn{wrapper} class yourself, as long as it has an
+appropriate \code{fileno()} method (that really returns a \UNIX{} file
+descriptor, not just a random integer).
+\end{funcdesc}
+\ttindex{socket}
+\ttindex{stdwin}
diff --git a/Doc/libsgi.tex b/Doc/libsgi.tex
new file mode 100644
index 0000000..f8c87b0
--- /dev/null
+++ b/Doc/libsgi.tex
@@ -0,0 +1,4 @@
+\chapter{SGI IRIX ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to SGI's IRIX operating system (versions 4 and 5).
diff --git a/Doc/libsocket.tex b/Doc/libsocket.tex
new file mode 100644
index 0000000..a5d5a17
--- /dev/null
+++ b/Doc/libsocket.tex
@@ -0,0 +1,265 @@
+\section{Built-in Module \sectcode{socket}}
+
+\bimodindex{socket}
+This module provides access to the BSD {\em socket} interface.
+It is available on \UNIX{} systems that support this interface.
+
+For an introduction to socket programming (in C), see the following
+papers: \emph{An Introductory 4.3BSD Interprocess Communication
+Tutorial}, by Stuart Sechrest and \emph{An Advanced 4.3BSD Interprocess
+Communication Tutorial}, by Samuel J.  Leffler et al, both in the
+\UNIX{} Programmer's Manual, Supplementary Documents 1 (sections PS1:7
+and PS1:8).  The \UNIX{} manual pages for the various socket-related
+system calls also a valuable source of information on the details of
+socket semantics.
+
+The Python interface is a straightforward transliteration of the
+\UNIX{} system call and library interface for sockets to Python's
+object-oriented style: the \code{socket()} function returns a
+\dfn{socket object} whose methods implement the various socket system
+calls.  Parameter types are somewhat higer-level than in the C
+interface: as with \code{read()} and \code{write()} operations on Python
+files, buffer allocation on receive operations is automatic, and
+buffer length is implicit on send operations.
+
+Socket addresses are represented as a single string for the
+\code{AF_UNIX} address family and as a pair
+\code{(\var{host}, \var{port})} for the \code{AF_INET} address family,
+where \var{host} is a string representing
+either a hostname in Internet domain notation like
+\code{'daring.cwi.nl'} or an IP address like \code{'100.50.200.5'},
+and \var{port} is an integral port number.  Other address families are
+currently not supported.  The address format required by a particular
+socket object is automatically selected based on the address family
+specified when the socket object was created.
+
+All errors raise exceptions.  The normal exceptions for invalid
+argument types and out-of-memory conditions can be raised; errors
+related to socket or address semantics raise the error \code{socket.error}.
+
+Non-blocking and asynchronous mode are not supported; see module
+\code{select} for a way to do non-blocking socket I/O.
+
+The module \code{socket} exports the following constants and functions:
+
+\renewcommand{\indexsubitem}{(in module socket)}
+\begin{excdesc}{error}
+This exception is raised for socket- or address-related errors.
+The accompanying value is either a string telling what went wrong or a
+pair \code{(\var{errno}, \var{string})}
+representing an error returned by a system
+call, similar to the value accompanying \code{posix.error}.
+\end{excdesc}
+
+\begin{datadesc}{AF_UNIX}
+\dataline{AF_INET}
+These constants represent the address (and protocol) families,
+used for the first argument to \code{socket()}.
+\end{datadesc}
+
+\begin{datadesc}{SOCK_STREAM}
+\dataline{SOCK_DGRAM}
+These constants represent the socket types,
+used for the second argument to \code{socket()}.
+(There are other types, but only \code{SOCK_STREAM} and
+\code{SOCK_DGRAM} appear to be generally useful.)
+\end{datadesc}
+
+\begin{funcdesc}{gethostbyname}{hostname}
+Translate a host name to IP address format.  The IP address is
+returned as a string, e.g.,  \code{'100.50.200.5'}.  If the host name
+is an IP address itself it is returned unchanged.
+\end{funcdesc}
+
+\begin{funcdesc}{getservbyname}{servicename\, protocolname}
+Translate an Internet service name and protocol name to a port number
+for that service.  The protocol name should be \code{'tcp'} or
+\code{'udp'}.
+\end{funcdesc}
+
+\begin{funcdesc}{socket}{family\, type\, proto}
+Create a new socket using the given address family, socket type and
+protocol number.  The address family should be \code{AF_INET} or
+\code{AF_UNIX}.  The socket type should be \code{SOCK_STREAM},
+\code{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
+The protocol number is usually zero and may be omitted in that case.
+\end{funcdesc}
+
+\begin{funcdesc}{fromfd}{fd\, family\, type\, proto}
+Build a socket object from an existing file descriptor (an integer as
+returned by a file object's \code{fileno} method).  Address family,
+socket type and protocol number are as for the \code{socket} function
+above.  The file descriptor should refer to a socket, but this is not
+checked --- subsequent operations on the object may fail if the file
+descriptor is invalid.  This function is rarely needed, but can be
+used to get or set socket options on a socket passed to a program as
+standard input or output (e.g. a server started by the \UNIX{} inet
+daemon).
+\end{funcdesc}
+
+\subsection{Socket Object Methods}
+
+\noindent
+Socket objects have the following methods.  Except for
+\code{makefile()} these correspond to \UNIX{} system calls applicable to
+sockets.
+
+\renewcommand{\indexsubitem}{(socket method)}
+\begin{funcdesc}{accept}{}
+Accept a connection.
+The socket must be bound to an address and listening for connections.
+The return value is a pair \code{(\var{conn}, \var{address})}
+where \var{conn} is a \emph{new} socket object usable to send and
+receive data on the connection, and \var{address} is the address bound
+to the socket on the other end of the connection.
+\end{funcdesc}
+
+\begin{funcdesc}{avail}{}
+Return true (nonzero) if at least one byte of data can be received
+from the socket without blocking, false (zero) if not.  There is no
+indication of how many bytes are available.  (\strong{This function is
+obsolete --- see module \code{select} for a more general solution.})
+\end{funcdesc}
+
+\begin{funcdesc}{bind}{address}
+Bind the socket to an address.  The socket must not already be bound.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Close the socket.  All future operations on the socket object will fail.
+The remote end will receive no more data (after queued data is flushed).
+Sockets are automatically closed when they are garbage-collected.
+\end{funcdesc}
+
+\begin{funcdesc}{connect}{address}
+Connect to a remote socket.
+\end{funcdesc}
+
+\begin{funcdesc}{fileno}{}
+Return the socket's file descriptor (a small integer).  This is useful
+with \code{select}.
+\end{funcdesc}
+
+\begin{funcdesc}{getpeername}{}
+Return the remote address to which the socket is connected.  This is
+useful to find out the port number of a remote IP socket, for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{getsockname}{}
+Return the socket's own address.  This is useful to find out the port
+number of an IP socket, for instance.
+\end{funcdesc}
+
+\begin{funcdesc}{getsockopt}{level\, optname\, buflen}
+Return the value of the given socket option (see the \UNIX{} man page
+{\it getsockopt}(2)).  The needed symbolic constants are defined in module
+SOCKET.  If the optional third argument is absent, an integer option
+is assumed and its integer value is returned by the function.  If
+\var{buflen} is present, it specifies the maximum length of the buffer used
+to receive the option in, and this buffer is returned as a string.
+It's up to the caller to decode the contents of the buffer (see the
+optional built-in module \code{struct} for a way to decode C structures
+encoded as strings).
+\end{funcdesc}
+
+\begin{funcdesc}{listen}{backlog}
+Listen for connections made to the socket.
+The argument (in the range 0-5) specifies the maximum number of
+queued connections.
+\end{funcdesc}
+
+\begin{funcdesc}{makefile}{mode}
+Return a \dfn{file object} associated with the socket.
+(File objects were described earlier under Built-in Types.)
+The file object references a \code{dup}ped version of the socket file
+descriptor, so the file object and socket object may be closed or
+garbage-collected independently.
+\end{funcdesc}
+
+\begin{funcdesc}{recv}{bufsize\, flags}
+Receive data from the socket.  The return value is a string representing
+the data received.  The maximum amount of data to be received
+at once is specified by \var{bufsize}.  See the \UNIX{} manual page
+for the meaning of the optional argument \var{flags}; it defaults to
+zero.
+\end{funcdesc}
+
+\begin{funcdesc}{recvfrom}{bufsize}
+Receive data from the socket.  The return value is a pair
+\code{(\var{string}, \var{address})} where \var{string} is a string
+representing the data received and \var{address} is the address of the
+socket sending the data.
+\end{funcdesc}
+
+\begin{funcdesc}{send}{string}
+Send data to the socket.  The socket must be connected to a remote
+socket.
+\end{funcdesc}
+
+\begin{funcdesc}{sendto}{string\, address}
+Send data to the socket.  The socket should not be connected to a
+remote socket, since the destination socket is specified by
+\code{address}.
+\end{funcdesc}
+
+\begin{funcdesc}{setsockopt}{level\, optname\, value}
+Set the value of the given socket option (see the \UNIX{} man page
+{\it setsockopt}(2)).  The needed symbolic constants are defined in module
+\code{SOCKET}.  The value can be an integer or a string representing a
+buffer.  In the latter case it is up to the caller to ensure that the
+string contains the proper bits (see the optional built-in module
+\code{struct} for a way to encode C structures as strings).
+\end{funcdesc}
+
+\begin{funcdesc}{shutdown}{how}
+Shut down one or both halves of the connection.  If \var{how} is \code{0},
+further receives are disallowed.  If \var{how} is \code{1}, further sends are
+disallowed.  If \var{how} is \code{2}, further sends and receives are
+disallowed.
+\end{funcdesc}
+
+Note that there are no methods \code{read()} or \code{write()}; use
+\code{recv()} and \code{send()} without \var{flags} argument instead.
+
+\subsection{Example}
+\nodename{Socket Example}
+
+Here are two minimal example programs using the TCP/IP protocol: a
+server that echoes all data that it receives back (servicing only one
+client), and a client using it.  Note that a server must perform the
+sequence \code{socket}, \code{bind}, \code{listen}, \code{accept}
+(possibly repeating the \code{accept} to service more than one client),
+while a client only needs the sequence \code{socket}, \code{connect}.
+Also note that the server does not \code{send}/\code{receive} on the
+socket it is listening on but on the new socket returned by
+\code{accept}.
+
+\bcode\begin{verbatim}
+# Echo server program
+from socket import *
+HOST = ''                 # Symbolic name meaning the local host
+PORT = 50007              # Arbitrary non-privileged server
+s = socket(AF_INET, SOCK_STREAM)
+s.bind(HOST, PORT)
+s.listen(0)
+conn, addr = s.accept()
+print 'Connected by', addr
+while 1:
+    data = conn.recv(1024)
+    if not data: break
+    conn.send(data)
+conn.close()
+\end{verbatim}\ecode
+
+\bcode\begin{verbatim}
+# Echo client program
+from socket import *
+HOST = 'daring.cwi.nl'    # The remote host
+PORT = 50007              # The same port as used by the server
+s = socket(AF_INET, SOCK_STREAM)
+s.connect(HOST, PORT)
+s.send('Hello, world')
+data = s.recv(1024)
+s.close()
+print 'Received', `data`
+\end{verbatim}\ecode
diff --git a/Doc/libstd.tex b/Doc/libstd.tex
new file mode 100755
index 0000000..e642a8d
--- /dev/null
+++ b/Doc/libstd.tex
@@ -0,0 +1,7 @@
+\chapter{Standard Modules}
+
+The modules described in this chapter are implemented in Python, but
+are considered to be a part of Python's standard environment: they are
+always available.\footnote{at least in theory --- it is possible to
+botch the library installation or to sabotage the module search path
+so that these modules cannot be found.}
diff --git a/Doc/libstdwin.tex b/Doc/libstdwin.tex
new file mode 100644
index 0000000..12771c9
--- /dev/null
+++ b/Doc/libstdwin.tex
@@ -0,0 +1,893 @@
+\chapter{STDWIN ONLY}
+
+\section{Built-in Module \sectcode{stdwin}}
+\bimodindex{stdwin}
+
+This module defines several new object types and functions that
+provide access to the functionality of the Standard Window System
+Interface, STDWIN [CWI report CR-R8817].
+It is available on systems to which STDWIN has been ported (which is
+most systems).
+It is only available if the \code{DISPLAY} environment variable is set
+or an explicit \samp{-display \var{displayname}} argument is passed to
+the interpreter.
+
+Functions have names that usually resemble their C STDWIN counterparts
+with the initial `w' dropped.
+Points are represented by pairs of integers; rectangles
+by pairs of points.
+For a complete description of STDWIN please refer to the documentation
+of STDWIN for C programmers (aforementioned CWI report).
+
+\subsection{Functions Defined in Module \sectcode{stdwin}}
+
+The following functions are defined in the \code{stdwin} module:
+
+\renewcommand{\indexsubitem}{(in module stdwin)}
+\begin{funcdesc}{open}{title}
+Open a new window whose initial title is given by the string argument.
+Return a window object; window object methods are described below.%
+\footnote{The Python version of STDWIN does not support draw procedures; all
+	drawing requests are reported as draw events.}
+\end{funcdesc}
+
+\begin{funcdesc}{getevent}{}
+Wait for and return the next event.
+An event is returned as a triple: the first element is the event
+type, a small integer; the second element is the window object to which
+the event applies, or
+\code{None}
+if it applies to no window in particular;
+the third element is type-dependent.
+Names for event types and command codes are defined in the standard
+module
+\code{stdwinevent}.
+\end{funcdesc}
+
+\begin{funcdesc}{pollevent}{}
+Return the next event, if one is immediately available.
+If no event is available, return \code{()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getactive}{}
+Return the window that is currently active, or \code{None} if no
+window is currently active.  (This can be emulated by monitoring
+WE_ACTIVATE and WE_DEACTIVATE events.)
+\end{funcdesc}
+
+\begin{funcdesc}{listfontnames}{pattern}
+Return the list of font names in the system that match the pattern (a
+string).  The pattern should normally be \code{'*'}; returns all
+available fonts.  If the underlying window system is X11, other
+patterns follow the standard X11 font selection syntax (as used e.g.
+in resource definitions), i.e. the wildcard character \code{'*'}
+matches any sequence of characters (including none) and \code{'?'}
+matches any single character.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefscrollbars}{hflag\, vflag}
+Set the flags controlling whether subsequently opened windows will
+have horizontal and/or vertical scroll bars.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefwinpos}{h\, v}
+Set the default window position for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{setdefwinsize}{width\, height}
+Set the default window size for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefscrollbars}{}
+Return the flags controlling whether subsequently opened windows will
+have horizontal and/or vertical scroll bars.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefwinpos}{}
+Return the default window position for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getdefwinsize}{}
+Return the default window size for windows opened subsequently.
+\end{funcdesc}
+
+\begin{funcdesc}{getscrsize}{}
+Return the screen size in pixels.
+\end{funcdesc}
+
+\begin{funcdesc}{getscrmm}{}
+Return the screen size in millimeters.
+\end{funcdesc}
+
+\begin{funcdesc}{fetchcolor}{colorname}
+Return the pixel value corresponding to the given color name.
+Return the default foreground color for unknown color names.
+Hint: the following code tests wheter you are on a machine that
+supports more than two colors:
+\bcode\begin{verbatim}
+if stdwin.fetchcolor('black') <> \
+          stdwin.fetchcolor('red') <> \
+          stdwin.fetchcolor('white'):
+    print 'color machine'
+else:
+    print 'monochrome machine'
+\end{verbatim}\ecode
+\end{funcdesc}
+
+\begin{funcdesc}{setfgcolor}{pixel}
+Set the default foreground color.
+This will become the default foreground color of windows opened
+subsequently, including dialogs.
+\end{funcdesc}
+
+\begin{funcdesc}{setbgcolor}{pixel}
+Set the default background color.
+This will become the default background color of windows opened
+subsequently, including dialogs.
+\end{funcdesc}
+
+\begin{funcdesc}{getfgcolor}{}
+Return the pixel value of the current default foreground color.
+\end{funcdesc}
+
+\begin{funcdesc}{getbgcolor}{}
+Return the pixel value of the current default background color.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{fontname}
+Set the current default font.
+This will become the default font for windows opened subsequently,
+and is also used by the text measuring functions \code{textwidth},
+\code{textbreak}, \code{lineheight} and \code{baseline} below.
+This accepts two more optional parameters, size and style:
+Size is the font size (in `points').
+Style is a single character specifying the style, as follows:
+\code{'b'} = bold,
+\code{'i'} = italic,
+\code{'o'} = bold + italic,
+\code{'u'} = underline;
+default style is roman.
+Size and style are ignored under X11 but used on the Macintosh.
+(Sorry for all this complexity --- a more uniform interface is being designed.)
+\end{funcdesc}
+
+\begin{funcdesc}{menucreate}{title}
+Create a menu object referring to a global menu (a menu that appears in
+all windows).
+Methods of menu objects are described below.
+Note: normally, menus are created locally; see the window method
+\code{menucreate} below.
+\strong{Warning:} the menu only appears in a window as long as the object
+returned by this call exists.
+\end{funcdesc}
+
+\begin{funcdesc}{newbitmap}{width\, height}
+Create a new bitmap object of the given dimensions.
+Methods of bitmap objects are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{fleep}{}
+Cause a beep or bell (or perhaps a `visual bell' or flash, hence the
+name).
+\end{funcdesc}
+
+\begin{funcdesc}{message}{string}
+Display a dialog box containing the string.
+The user must click OK before the function returns.
+\end{funcdesc}
+
+\begin{funcdesc}{askync}{prompt\, default}
+Display a dialog that prompts the user to answer a question with yes or
+no.
+Return 0 for no, 1 for yes.
+If the user hits the Return key, the default (which must be 0 or 1) is
+returned.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{askstr}{prompt\, default}
+Display a dialog that prompts the user for a string.
+If the user hits the Return key, the default string is returned.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{askfile}{prompt\, default\, new}
+Ask the user to specify a filename.
+If
+\var{new}
+is zero it must be an existing file; otherwise, it must be a new file.
+If the user cancels the dialog, the
+\code{KeyboardInterrupt}
+exception is raised.
+\end{funcdesc}
+
+\begin{funcdesc}{setcutbuffer}{i\, string}
+Store the string in the system's cut buffer number
+\var{i},
+where it can be found (for pasting) by other applications.
+On X11, there are 8 cut buffers (numbered 0..7).
+Cut buffer number 0 is the `clipboard' on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{getcutbuffer}{i}
+Return the contents of the system's cut buffer number
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{rotatecutbuffers}{n}
+On X11, rotate the 8 cut buffers by
+\var{n}.
+Ignored on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{getselection}{i}
+Return X11 selection number
+\var{i.}
+Selections are not cut buffers.
+Selection numbers are defined in module
+\code{stdwinevents}.
+Selection \code{WS_PRIMARY} is the
+\dfn{primary}
+selection (used by
+xterm,
+for instance);
+selection \code{WS_SECONDARY} is the
+\dfn{secondary}
+selection; selection \code{WS_CLIPBOARD} is the
+\dfn{clipboard}
+selection (used by
+xclipboard).
+On the Macintosh, this always returns an empty string.
+\end{funcdesc}
+
+\begin{funcdesc}{resetselection}{i}
+Reset selection number
+\var{i},
+if this process owns it.
+(See window method
+\code{setselection()}).
+\end{funcdesc}
+
+\begin{funcdesc}{baseline}{}
+Return the baseline of the current font (defined by STDWIN as the
+vertical distance between the baseline and the top of the
+characters).
+\end{funcdesc}
+
+\begin{funcdesc}{lineheight}{}
+Return the total line height of the current font.
+\end{funcdesc}
+
+\begin{funcdesc}{textbreak}{str\, width}
+Return the number of characters of the string that fit into a space of
+\var{width}
+bits wide when drawn in the curent font.
+\end{funcdesc}
+
+\begin{funcdesc}{textwidth}{str}
+Return the width in bits of the string when drawn in the current font.
+\end{funcdesc}
+
+\begin{funcdesc}{connectionnumber}{}
+\funcline{fileno}{}
+(X11 under \UNIX{} only) Return the ``connection number'' used by the
+underlying X11 implementation.  (This is normally the file number of
+the socket.)  Both functions return the same value;
+\code{connectionnumber()} is named after the corresponding function in
+X11 and STDWIN, while \code{fileno()} makes it possible to use the
+\code{stdwin} module as a ``file'' object parameter to
+\code{select.select()}.  Note that if \code{select()} implies that
+input is possible on \code{stdwin}, this does not guarantee that an
+event is ready --- it may be some internal communication going on
+between the X server and the client library.  Thus, you should call
+\code{stdwin.pollevent()} until it returns \code{None} to check for
+events if you don't want your program to block.  Because of internal
+buffering in X11, it is also possible that \code{stdwin.pollevent()}
+returns an event while \code{select()} does not find \code{stdwin} to
+be ready, so you should read any pending events with
+\code{stdwin.pollevent()} until it returns \code{None} before entering
+a blocking \code{select()} call.
+\ttindex{select}
+\end{funcdesc}
+
+\subsection{Window Object Methods}
+
+Window objects are created by \code{stdwin.open()}.  They are closed
+by their \code{close()} method or when they are garbage-collected.
+Window objects have the following methods:
+
+\renewcommand{\indexsubitem}{(window method)}
+
+\begin{funcdesc}{begindrawing}{}
+Return a drawing object, whose methods (described below) allow drawing
+in the window.
+\end{funcdesc}
+
+\begin{funcdesc}{change}{rect}
+Invalidate the given rectangle; this may cause a draw event.
+\end{funcdesc}
+
+\begin{funcdesc}{gettitle}{}
+Returns the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{getdocsize}{}
+\begin{sloppypar}
+Return a pair of integers giving the size of the document as set by
+\code{setdocsize()}.
+\end{sloppypar}
+\end{funcdesc}
+
+\begin{funcdesc}{getorigin}{}
+Return a pair of integers giving the origin of the window with respect
+to the document.
+\end{funcdesc}
+
+\begin{funcdesc}{gettitle}{}
+Return the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{getwinsize}{}
+Return a pair of integers giving the size of the window.
+\end{funcdesc}
+
+\begin{funcdesc}{getwinpos}{}
+Return a pair of integers giving the position of the window's upper
+left corner (relative to the upper left corner of the screen).
+\end{funcdesc}
+
+\begin{funcdesc}{menucreate}{title}
+Create a menu object referring to a local menu (a menu that appears
+only in this window).
+Methods of menu objects are described below.
+{\bf Warning:} the menu only appears as long as the object
+returned by this call exists.
+\end{funcdesc}
+
+\begin{funcdesc}{scroll}{rect\, point}
+Scroll the given rectangle by the vector given by the point.
+\end{funcdesc}
+
+\begin{funcdesc}{setdocsize}{point}
+Set the size of the drawing document.
+\end{funcdesc}
+
+\begin{funcdesc}{setorigin}{point}
+Move the origin of the window (its upper left corner)
+to the given point in the document.
+\end{funcdesc}
+
+\begin{funcdesc}{setselection}{i\, str}
+Attempt to set X11 selection number
+\var{i}
+to the string
+\var{str}.
+(See stdwin method
+\code{getselection()}
+for the meaning of
+\var{i}.)
+Return true if it succeeds.
+If  succeeds, the window ``owns'' the selection until
+(a) another applications takes ownership of the selection; or
+(b) the window is deleted; or
+(c) the application clears ownership by calling
+\code{stdwin.resetselection(\var{i})}.
+When another application takes ownership of the selection, a
+\code{WE_LOST_SEL}
+event is received for no particular window and with the selection number
+as detail.
+Ignored on the Macintosh.
+\end{funcdesc}
+
+\begin{funcdesc}{settimer}{dsecs}
+Schedule a timer event for the window in
+\code{\var{dsecs}/10}
+seconds.
+\end{funcdesc}
+
+\begin{funcdesc}{settitle}{title}
+Set the window's title string.
+\end{funcdesc}
+
+\begin{funcdesc}{setwincursor}{name}
+\begin{sloppypar}
+Set the window cursor to a cursor of the given name.
+It raises the
+\code{RuntimeError}
+exception if no cursor of the given name exists.
+Suitable names include
+\code{'ibeam'},
+\code{'arrow'},
+\code{'cross'},
+\code{'watch'}
+and
+\code{'plus'}.
+On X11, there are many more (see
+\file{<X11/cursorfont.h>}).
+\end{sloppypar}
+\end{funcdesc}
+
+\begin{funcdesc}{setwinpos}{h\, v}
+Set the the position of the window's upper left corner (relative to
+the upper left corner of the screen).
+\end{funcdesc}
+
+\begin{funcdesc}{setwinsize}{width\, height}
+Set the window's size.
+\end{funcdesc}
+
+\begin{funcdesc}{show}{rect}
+Try to ensure that the given rectangle of the document is visible in
+the window.
+\end{funcdesc}
+
+\begin{funcdesc}{textcreate}{rect}
+Create a text-edit object in the document at the given rectangle.
+Methods of text-edit objects are described below.
+\end{funcdesc}
+
+\begin{funcdesc}{setactive}{}
+Attempt to make this window the active window.  If successful, this
+will generate a WE_ACTIVATE event (and a WE_DEACTIVATE event in case
+another window in this application became inactive).
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the window object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Drawing Object Methods}
+
+Drawing objects are created exclusively by the window method
+\code{begindrawing()}.
+Only one drawing object can exist at any given time; the drawing object
+must be deleted to finish drawing.
+No drawing object may exist when
+\code{stdwin.getevent()}
+is called.
+Drawing objects have the following methods:
+
+\renewcommand{\indexsubitem}{(drawing method)}
+
+\begin{funcdesc}{box}{rect}
+Draw a box just inside a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{circle}{center\, radius}
+Draw a circle with given center point and radius.
+\end{funcdesc}
+
+\begin{funcdesc}{elarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+Draw an elliptical arc with given center point.
+\code{(\var{rh}, \var{rv})}
+gives the half sizes of the horizontal and vertical radii.
+\code{(\var{a1}, \var{a2})}
+gives the angles (in degrees) of the begin and end points.
+0 degrees is at 3 o'clock, 90 degrees is at 12 o'clock.
+\end{funcdesc}
+
+\begin{funcdesc}{erase}{rect}
+Erase a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{fillcircle}{center\, radius}
+Draw a filled circle with given center point and radius.
+\end{funcdesc}
+
+\begin{funcdesc}{fillelarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+Draw a filled elliptical arc; arguments as for \code{elarc}.
+\end{funcdesc}
+
+\begin{funcdesc}{fillpoly}{points}
+Draw a filled polygon given by a list (or tuple) of points.
+\end{funcdesc}
+
+\begin{funcdesc}{invert}{rect}
+Invert a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{line}{p1\, p2}
+Draw a line from point
+\var{p1}
+to
+\var{p2}.
+\end{funcdesc}
+
+\begin{funcdesc}{paint}{rect}
+Fill a rectangle.
+\end{funcdesc}
+
+\begin{funcdesc}{poly}{points}
+Draw the lines connecting the given list (or tuple) of points.
+\end{funcdesc}
+
+\begin{funcdesc}{shade}{rect\, percent}
+Fill a rectangle with a shading pattern that is about
+\var{percent}
+percent filled.
+\end{funcdesc}
+
+\begin{funcdesc}{text}{p\, str}
+Draw a string starting at point p (the point specifies the
+top left coordinate of the string).
+\end{funcdesc}
+
+\begin{funcdesc}{xorcircle}{center\, radius}
+\funcline{xorelarc}{center\, \(rh\, rv\)\, \(a1\, a2\)}
+\funcline{xorline}{p1\, p2}
+\funcline{xorpoly}{points}
+Draw a circle, an elliptical arc, a line or a polygon, respectively,
+in XOR mode.
+\end{funcdesc}
+
+\begin{funcdesc}{setfgcolor}{}
+\funcline{setbgcolor}{}
+\funcline{getfgcolor}{}
+\funcline{getbgcolor}{}
+These functions are similar to the corresponding functions described
+above for the
+\code{stdwin}
+module, but affect or return the colors currently used for drawing
+instead of the global default colors.
+When a drawing object is created, its colors are set to the window's
+default colors, which are in turn initialized from the global default
+colors when the window is created.
+\end{funcdesc}
+
+\begin{funcdesc}{setfont}{}
+\funcline{baseline}{}
+\funcline{lineheight}{}
+\funcline{textbreak}{}
+\funcline{textwidth}{}
+These functions are similar to the corresponding functions described
+above for the
+\code{stdwin}
+module, but affect or use the current drawing font instead of
+the global default font.
+When a drawing object is created, its font is set to the window's
+default font, which is in turn initialized from the global default
+font when the window is created.
+\end{funcdesc}
+
+\begin{funcdesc}{bitmap}{point\, bitmap\, mask}
+Draw the \var{bitmap} with its top left corner at \var{point}.
+If the optional \var{mask} argument is present, it should be either
+the same object as \var{bitmap}, to draw only those bits that are set
+in the bitmap, in the foreground color, or \code{None}, to draw all
+bits (ones are drawn in the foreground color, zeros in the background
+color).
+\end{funcdesc}
+
+\begin{funcdesc}{cliprect}{rect}
+Set the ``clipping region'' to a rectangle.
+The clipping region limits the effect of all drawing operations, until
+it is changed again or until the drawing object is closed.  When a
+drawing object is created the clipping region is set to the entire
+window.  When an object to be drawn falls partly outside the clipping
+region, the set of pixels drawn is the intersection of the clipping
+region and the set of pixels that would be drawn by the same operation
+in the absence of a clipping region.
+clipping region 
+\end{funcdesc}
+
+\begin{funcdesc}{noclip}{}
+Reset the clipping region to the entire window.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+\funcline{enddrawing}{}
+Discard the drawing object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Menu Object Methods}
+
+A menu object represents a menu.
+The menu is destroyed when the menu object is deleted.
+The following methods are defined:
+
+\renewcommand{\indexsubitem}{(menu method)}
+
+\begin{funcdesc}{additem}{text\, shortcut}
+Add a menu item with given text.
+The shortcut must be a string of length 1, or omitted (to specify no
+shortcut).
+\end{funcdesc}
+
+\begin{funcdesc}{setitem}{i\, text}
+Set the text of item number
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{enable}{i\, flag}
+Enable or disables item
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{check}{i\, flag}
+Set or clear the
+\dfn{check mark}
+for item
+\var{i}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the menu object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Bitmap Object Methods}
+
+A bitmap represents a rectangular array of bits.
+The top left bit has coordinate (0, 0).
+A bitmap can be drawn with the \code{bitmap} method of a drawing object.
+The following methods are defined:
+
+\renewcommand{\indexsubitem}{(bitmap method)}
+
+\begin{funcdesc}{getsize}{}
+Return a tuple representing the width and height of the bitmap.
+(This returns the values that have been passed to the \code{newbitmap}
+function.)
+\end{funcdesc}
+
+\begin{funcdesc}{setbit}{point\, bit}
+Set the value of the bit indicated by \var{point} to \var{bit}.
+\end{funcdesc}
+
+\begin{funcdesc}{getbit}{point}
+Return the value of the bit indicated by \var{point}.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the bitmap object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Text-edit Object Methods}
+
+A text-edit object represents a text-edit block.
+For semantics, see the STDWIN documentation for C programmers.
+The following methods exist:
+
+\renewcommand{\indexsubitem}{(text-edit method)}
+
+\begin{funcdesc}{arrow}{code}
+Pass an arrow event to the text-edit block.
+The
+\var{code}
+must be one of
+\code{WC_LEFT},
+\code{WC_RIGHT},
+\code{WC_UP}
+or
+\code{WC_DOWN}
+(see module
+\code{stdwinevents}).
+\end{funcdesc}
+
+\begin{funcdesc}{draw}{rect}
+Pass a draw event to the text-edit block.
+The rectangle specifies the redraw area.
+\end{funcdesc}
+
+\begin{funcdesc}{event}{type\, window\, detail}
+Pass an event gotten from
+\code{stdwin.getevent()}
+to the text-edit block.
+Return true if the event was handled.
+\end{funcdesc}
+
+\begin{funcdesc}{getfocus}{}
+Return 2 integers representing the start and end positions of the
+focus, usable as slice indices on the string returned by
+\code{gettext()}.
+\end{funcdesc}
+
+\begin{funcdesc}{getfocustext}{}
+Return the text in the focus.
+\end{funcdesc}
+
+\begin{funcdesc}{getrect}{}
+Return a rectangle giving the actual position of the text-edit block.
+(The bottom coordinate may differ from the initial position because
+the block automatically shrinks or grows to fit.)
+\end{funcdesc}
+
+\begin{funcdesc}{gettext}{}
+Return the entire text buffer.
+\end{funcdesc}
+
+\begin{funcdesc}{move}{rect}
+Specify a new position for the text-edit block in the document.
+\end{funcdesc}
+
+\begin{funcdesc}{replace}{str}
+Replace the text in the focus by the given string.
+The new focus is an insert point at the end of the string.
+\end{funcdesc}
+
+\begin{funcdesc}{setfocus}{i\, j}
+Specify the new focus.
+Out-of-bounds values are silently clipped.
+\end{funcdesc}
+
+\begin{funcdesc}{settext}{str}
+Replace the entire text buffer by the given string and set the focus
+to \code{(0, 0)}.
+\end{funcdesc}
+
+\begin{funcdesc}{setview}{rect}
+Set the view rectangle to \var{rect}.  If \var{rect} is \code{None},
+viewing mode is reset.  In viewing mode, all output from the text-edit
+object is clipped to the viewing rectangle.  This may be useful to
+implement your own scrolling text subwindow.
+\end{funcdesc}
+
+\begin{funcdesc}{close}{}
+Discard the text-edit object.  It should not be used again.
+\end{funcdesc}
+
+\subsection{Example}
+\nodename{Stdwin Example}
+
+Here is a minimal example of using STDWIN in Python.
+It creates a window and draws the string ``Hello world'' in the top
+left corner of the window.
+The window will be correctly redrawn when covered and re-exposed.
+The program quits when the close icon or menu item is requested.
+
+\bcode\begin{verbatim}
+import stdwin
+from stdwinevents import *
+
+def main():
+    mywin = stdwin.open('Hello')
+    #
+    while 1:
+        (type, win, detail) = stdwin.getevent()
+        if type == WE_DRAW:
+            draw = win.begindrawing()
+            draw.text((0, 0), 'Hello, world')
+            del draw
+        elif type == WE_CLOSE:
+            break
+
+main()
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{stdwinevents}}
+\stmodindex{stdwinevents}
+
+This module defines constants used by STDWIN for event types
+(\code{WE_ACTIVATE} etc.), command codes (\code{WC_LEFT} etc.)
+and selection types (\code{WS_PRIMARY} etc.).
+Read the file for details.
+Suggested usage is
+
+\bcode\begin{verbatim}
+>>> from stdwinevents import *
+>>> 
+\end{verbatim}\ecode
+
+\section{Standard Module \sectcode{rect}}
+\stmodindex{rect}
+
+This module contains useful operations on rectangles.
+A rectangle is defined as in module
+\code{stdwin}:
+a pair of points, where a point is a pair of integers.
+For example, the rectangle
+
+\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
+\code{stdwin}).
+
+The module defines the following objects:
+
+\renewcommand{\indexsubitem}{(in module rect)}
+\begin{excdesc}{error}
+The exception raised by functions in this module when they detect an
+error.
+The exception argument is a string describing the problem in more
+detail.
+\end{excdesc}
+
+\begin{datadesc}{empty}
+The rectangle returned when some operations return an empty result.
+This makes it possible to quickly check whether a result is empty:
+
+\bcode\begin{verbatim}
+>>> import rect
+>>> r1 = (10, 20), (90, 80)
+>>> r2 = (0, 0), (10, 20)
+>>> r3 = rect.intersect([r1, r2])
+>>> if r3 is rect.empty: print 'Empty intersection'
+Empty intersection
+>>> 
+\end{verbatim}\ecode
+\end{datadesc}
+
+\begin{funcdesc}{is_empty}{r}
+Returns true if the given rectangle is empty.
+A rectangle
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})}
+is empty if
+\iftexi
+\code{\var{left} >= \var{right}} or \code{\var{top} => \var{bottom}}.
+\else
+$\var{left} \geq \var{right}$ or $\var{top} \geq \var{bottom}$.
+%%JHXXX{\em left~$\geq$~right} or {\em top~$\leq$~bottom}.
+\fi
+\end{funcdesc}
+
+\begin{funcdesc}{intersect}{list}
+Returns the intersection of all rectangles in the list argument.
+It may also be called with a tuple argument.
+Raises
+\code{rect.error}
+if the list is empty.
+Returns
+\code{rect.empty}
+if the intersection of the rectangles is empty.
+\end{funcdesc}
+
+\begin{funcdesc}{union}{list}
+Returns the smallest rectangle that contains all non-empty rectangles in
+the list argument.
+It may also be called with a tuple argument or with two or more
+rectangles as arguments.
+Returns
+\code{rect.empty}
+if the list is empty or all its rectangles are empty.
+\end{funcdesc}
+
+\begin{funcdesc}{pointinrect}{point\, rect}
+Returns true if the point is inside the rectangle.
+By definition, a point
+\code{(\var{h}, \var{v})}
+is inside a rectangle
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})} if
+\iftexi
+\code{\var{left} <= \var{h} < \var{right}} and
+\code{\var{top} <= \var{v} < \var{bottom}}.
+\else
+$\var{left} \leq \var{h} < \var{right}$ and
+$\var{top} \leq \var{v} < \var{bottom}$.
+\fi
+\end{funcdesc}
+
+\begin{funcdesc}{inset}{rect\, \(dh\, dv\)}
+Returns a rectangle that lies inside the
+\code{rect}
+argument by
+\var{dh}
+pixels horizontally
+and
+\var{dv}
+pixels
+vertically.
+If
+\var{dh}
+or
+\var{dv}
+is negative, the result lies outside
+\var{rect}.
+\end{funcdesc}
+
+\begin{funcdesc}{rect2geom}{rect}
+Converts a rectangle to geometry representation:
+\code{(\var{left}, \var{top}), (\var{width}, \var{height})}.
+\end{funcdesc}
+
+\begin{funcdesc}{geom2rect}{geom}
+Converts a rectangle given in geometry representation back to the
+standard rectangle representation
+\code{(\var{left}, \var{top}), (\var{right}, \var{bottom})}.
+\end{funcdesc}
diff --git a/Doc/libstring.tex b/Doc/libstring.tex
new file mode 100644
index 0000000..2bcbdfc
--- /dev/null
+++ b/Doc/libstring.tex
@@ -0,0 +1,193 @@
+\section{Standard Module \sectcode{string}}
+
+\stmodindex{string}
+
+This module defines some constants useful for checking character
+classes, some exceptions, and some useful string functions.
+The constants are:
+
+\renewcommand{\indexsubitem}{(data in module string)}
+\begin{datadesc}{digits}
+  The string \code{'0123456789'}.
+\end{datadesc}
+
+\begin{datadesc}{hexdigits}
+  The string \code{'0123456789abcdefABCDEF'}.
+\end{datadesc}
+
+\begin{datadesc}{letters}
+  The concatenation of the strings \code{lowercase} and
+  \code{uppercase} described below.
+\end{datadesc}
+
+\begin{datadesc}{lowercase}
+  A string containing all the characters that are considered lowercase
+  letters.  On most systems this is the string
+  \code{'abcdefghijklmnopqrstuvwxyz'}.  Do not change its definition --
+  the effect on the routines \code{upper} and \code{swapcase} is
+  undefined.
+\end{datadesc}
+
+\begin{datadesc}{octdigits}
+  The string \code{'01234567'}.
+\end{datadesc}
+
+\begin{datadesc}{uppercase}
+  A string containing all the characters that are considered uppercase
+  letters.  On most systems this is the string
+  \code{'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}.  Do not change its definition --
+  the effect on the routines \code{lower} and \code{swapcase} is
+  undefined.
+\end{datadesc}
+
+\begin{datadesc}{whitespace}
+  A string containing all characters that are considered whitespace.
+  On most systems this includes the characters space, tab, linefeed,
+  return, formfeed, and vertical tab.  Do not change its definition --
+  the effect on the routines \code{strip} and \code{split} is
+  undefined.
+\end{datadesc}
+
+The exceptions are:
+
+\renewcommand{\indexsubitem}{(exception in module string)}
+
+\begin{excdesc}{atof_error}
+Exception raised by
+\code{atof}
+when a non-float string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{atoi_error}
+Exception raised by
+\code{atoi}
+when a non-integer string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{atol_error}
+Exception raised by
+\code{atol}
+when a non-integer string argument is detected.
+The exception argument is the offending string.
+\end{excdesc}
+
+\begin{excdesc}{index_error}
+Exception raised by \code{index} when \var{sub} is not found.
+The exception argument is undefined (it may be a tuple containing the
+offending arguments to \code{index} or it may be the constant string
+\code{'substring not found'}).
+\end{excdesc}
+
+The functions are:
+
+\renewcommand{\indexsubitem}{(in module string)}
+
+\begin{funcdesc}{atof}{s}
+Convert a string to a floating point number.  The string must have
+the standard syntax for a floating point literal in Python, optionally
+preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{atoi}{s}
+Convert a string to an integer.  The string must consist of one or more
+digits, optionally preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{atol}{s}
+Convert a string to a long integer.  The string must consist of one
+or more digits, optionally preceded by a sign (\samp{+} or \samp{-}).
+\end{funcdesc}
+
+\begin{funcdesc}{expandtabs}{s\, tabsize}
+Expand tabs in a string, i.e. replace them by one or more spaces,
+depending on the current column and the given tab size.  The column
+number is reset to zero after each newline occurring in the string.
+This doesn't understand other non-printing characters or escape
+sequences.
+\end{funcdesc}
+
+\begin{funcdesc}{find}{s\, sub\, i}
+Return the lowest index in \var{s} not smaller than \var{i} where the
+substring \var{sub} is found.  Return \code{-1} when \var{sub}
+does not occur as a substring of \var{s} with index at least \var{i}.
+If \var{i} is omitted, it defaults to \code{0}.  If \var{i} is
+negative, \code{len(\var{s})} is added.
+\end{funcdesc}
+
+\begin{funcdesc}{rfind}{s\, sub\, i}
+Like \code{find} but finds the highest index.
+\end{funcdesc}
+
+\begin{funcdesc}{index}{s\, sub\, i}
+Like \code{find} but raise \code{index_error} when the substring is
+not found.
+\end{funcdesc}
+
+\begin{funcdesc}{rindex}{s\, sub\, i}
+Like \code{rfind} but raise \code{index_error} when the substring is
+not found.
+\end{funcdesc}
+
+\begin{funcdesc}{lower}{s}
+Convert letters to lower case.
+\end{funcdesc}
+
+\begin{funcdesc}{split}{s}
+Returns a list of the whitespace-delimited words of the string
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{splitfields}{s\, sep}
+  Returns a list containing the fields of the string \var{s}, using
+  the string \var{sep} as a separator.  The list will have one more
+  items than the number of non-overlapping occurrences of the
+  separator in the string.  Thus, \code{string.splitfields(\var{s}, '
+  ')} is not the same as \code{string.split(\var{s})}, as the latter
+  only returns non-empty words.  As a special case,
+  \code{splitfields(\var{s}, '')} returns \code{[\var{s}]}, for any string
+  \var{s}.  (See also \code{regsub.split()}.)
+\end{funcdesc}
+
+\begin{funcdesc}{join}{words}
+Concatenate a list or tuple of words with intervening spaces.
+\end{funcdesc}
+
+\begin{funcdesc}{joinfields}{words\, sep}
+Concatenate a list or tuple of words with intervening separators.
+It is always true that
+\code{string.joinfields(string.splitfields(\var{t}, \var{sep}), \var{sep})}
+equals \var{t}.
+\end{funcdesc}
+
+\begin{funcdesc}{strip}{s}
+Removes leading and trailing whitespace from the string
+\var{s}.
+\end{funcdesc}
+
+\begin{funcdesc}{swapcase}{s}
+Converts lower case letters to upper case and vice versa.
+\end{funcdesc}
+
+\begin{funcdesc}{upper}{s}
+Convert letters to upper case.
+\end{funcdesc}
+
+\begin{funcdesc}{ljust}{s\, width}
+\funcline{rjust}{s\, width}
+\funcline{center}{s\, width}
+These functions respectively left-justify, right-justify and center a
+string in a field of given width.
+They return a string that is at least
+\var{width}
+characters wide, created by padding the string
+\var{s}
+with spaces until the given width on the right, left or both sides.
+The string is never truncated.
+\end{funcdesc}
+
+\begin{funcdesc}{zfill}{s\, width}
+Pad a numeric string on the left with zero digits until the given
+width is reached.  Strings starting with a sign are handled correctly.
+\end{funcdesc}
diff --git a/Doc/libstruct.tex b/Doc/libstruct.tex
new file mode 100644
index 0000000..5b4a9aa
--- /dev/null
+++ b/Doc/libstruct.tex
@@ -0,0 +1,75 @@
+\section{Built-in module \sectcode{struct}}
+\bimodindex{struct}
+\indexii{C}{structures}
+
+This module performs conversions between Python values and C
+structs represented as Python strings.  It uses \dfn{format strings}
+(explained below) as compact descriptions of the lay-out of the C
+structs and the intended conversion to/from Python values.
+
+The module defines the following exception and functions:
+
+\renewcommand{\indexsubitem}{(in module struct)}
+\begin{excdesc}{error}
+  Exception raised on various occasions; argument is a string
+  describing what is wrong.
+\end{excdesc}
+
+\begin{funcdesc}{pack}{fmt\, v1\, v2\, {\rm \ldots}}
+  Return a string containing the values
+  \code{\var{v1}, \var{v2}, {\rm \ldots}} packed according to the given
+  format.  The arguments must match the values required by the format
+  exactly.
+\end{funcdesc}
+
+\begin{funcdesc}{unpack}{fmt\, string}
+  Unpack the string (presumably packed by \code{pack(\var{fmt}, {\rm \ldots})})
+  according to the given format.  The result is a tuple even if it
+  contains exactly one item.  The string must contain exactly the
+  amount of data required by the format (i.e.  \code{len(\var{string})} must
+  equal \code{calcsize(\var{fmt})}).
+\end{funcdesc}
+
+\begin{funcdesc}{calcsize}{fmt}
+  Return the size of the struct (and hence of the string)
+  corresponding to the given format.
+\end{funcdesc}
+
+Format characters have the following meaning; the conversion between C
+and Python values should be obvious given their types:
+
+\begin{tableiii}{|c|l|l|}{samp}{Format}{C}{Python}
+  \lineiii{x}{pad byte}{no value}
+  \lineiii{c}{char}{string of length 1}
+  \lineiii{b}{signed char}{integer}
+  \lineiii{h}{short}{integer}
+  \lineiii{i}{int}{integer}
+  \lineiii{l}{long}{integer}
+  \lineiii{f}{float}{float}
+  \lineiii{d}{double}{float}
+\end{tableiii}
+
+A format character may be preceded by an integral repeat count; e.g.
+the format string \code{'4h'} means exactly the same as \code{'hhhh'}.
+
+C numbers are represented in the machine's native format and byte
+order, and properly aligned by skipping pad bytes if necessary
+(according to the rules used by the C compiler).
+
+Examples (all on a big-endian machine):
+
+\bcode\begin{verbatim}
+pack('hhl', 1, 2, 3) == '\000\001\000\002\000\000\000\003'
+unpack('hhl', '\000\001\000\002\000\000\000\003') == (1, 2, 3)
+calcsize('hhl') == 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
+pad bytes at the end, assuming longs are aligned on 4-byte boundaries.
+
+(More format characters are planned, e.g. \code{'s'} for character
+arrays, upper case for unsigned variants, and a way to specify the
+byte order, which is useful for [de]constructing network packets and
+reading/writing portable binary file formats like TIFF and AIFF.)
diff --git a/Doc/libsun.tex b/Doc/libsun.tex
new file mode 100644
index 0000000..9624b9c
--- /dev/null
+++ b/Doc/libsun.tex
@@ -0,0 +1,113 @@
+\chapter{SUNOS ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to the SunOS operating system (versions 4 and 5; the
+latter is also known as SOLARIS version 2).
+
+\section{Built-in module \sectcode{sunaudiodev}}
+\bimodindex{sunaudiodev}
+
+This module allows you to access the sun audio interface. The sun
+audio hardware is capable of recording and playing back audio data
+in U-LAW format with a sample rate of 8K per second. A full
+description can be gotten with \samp{man audio}.
+
+The module defines the following variables and functions:
+
+\renewcommand{\indexsubitem}{(in module sunaudiodev)}
+\begin{excdesc}{error}
+This exception is raised on all errors. The argument is a string
+describing what went wrong.
+\end{excdesc}
+
+\begin{funcdesc}{open}{mode}
+This function opens the audio device and returns a sun audio device
+object. This object can then be used to do I/O on. The \var{mode} parameter
+is one of \code{'r'} for record-only access, \code{'w'} for play-only
+access, \code{'rw'} for both and \code{'control'} for access to the
+control device. Since only one process is allowed to have the recorder
+or player open at the same time it is a good idea to open the device
+only for the activity needed. See the audio manpage for details.
+\end{funcdesc}
+
+\subsection{Audio device object methods}
+
+The audio device objects are returned by \code{open} define the
+following methods (except \code{control} objects which only provide
+getinfo, setinfo and drain):
+
+\renewcommand{\indexsubitem}{(audio device method)}
+
+\begin{funcdesc}{close}{}
+This method explicitly closes the device. It is useful in situations
+where deleting the object does not immediately close it since there
+are other references to it. A closed device should not be used again.
+\end{funcdesc}
+
+\begin{funcdesc}{drain}{}
+This method waits until all pending output is processed and then returns.
+Calling this method is often not necessary: destroying the object will
+automatically close the audio device and this will do an implicit drain.
+\end{funcdesc}
+
+\begin{funcdesc}{flush}{}
+This method discards all pending output. It can be used avoid the
+slow response to a user's stop request (due to buffering of up to one
+second of sound).
+\end{funcdesc}
+
+\begin{funcdesc}{getinfo}{}
+This method retrieves status information like input and output volume,
+etc. and returns it in the form of
+an audio status object. This object has no methods but it contains a
+number of attributes describing the current device status. The names
+and meanings of the attributes are described in
+\file{/usr/include/sun/audioio.h} and in the audio man page. Member names
+are slightly different from their C counterparts: a status object is
+only a single structure. Members of the \code{play} substructure have
+\samp{o_} prepended to their name and members of the \code{record}
+structure have \samp{i_}. So, the C member \code{play.sample_rate} is
+accessed as \code{o_sample_rate}, \code{record.gain} as \code{i_gain}
+and \code{monitor_gain} plainly as \code{monitor_gain}.
+\end{funcdesc}
+
+\begin{funcdesc}{ibufcount}{}
+This method returns the number of samples that are buffered on the
+recording side, i.e.
+the program will not block on a \code{read} call of so many samples.
+\end{funcdesc}
+
+\begin{funcdesc}{obufcount}{}
+This method returns the number of samples buffered on the playback
+side. Unfortunately, this number cannot be used to determine a number
+of samples that can be written without blocking since the kernel
+output queue length seems to be variable.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{size}
+This method reads \var{size} samples from the audio input and returns
+them as a python string. The function blocks until enough data is available.
+\end{funcdesc}
+
+\begin{funcdesc}{setinfo}{status}
+This method sets the audio device status parameters. The \var{status}
+parameter is an device status object as returned by \code{getinfo} and
+possibly modified by the program.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{samples}
+Write is passed a python string containing audio samples to be played.
+If there is enough buffer space free it will immedeately return,
+otherwise it will block.
+\end{funcdesc}
+
+There is a companion module, \code{SUNAUDIODEV}, which defines useful
+symbolic constants like \code{MIN_GAIN}, \code{MAX_GAIN},
+\code{SPEAKER}, etc. The names of
+the constants are the same names as used in the C include file
+\file{<sun/audioio.h>}, with the leading string \samp{AUDIO_} stripped.
+
+Useability of the control device is limited at the moment, since there
+is no way to use the 'wait for something to happen' feature the device
+provides. This is because that feature makes heavy use of signals, and
+these do not map too well onto Python.
diff --git a/Doc/libsys.tex b/Doc/libsys.tex
new file mode 100644
index 0000000..ba6b896
--- /dev/null
+++ b/Doc/libsys.tex
@@ -0,0 +1,129 @@
+\section{Built-in Module \sectcode{sys}}
+
+\bimodindex{sys}
+This module provides access to some variables used or maintained by the
+interpreter and to functions that interact strongly with the interpreter.
+It is always available.
+
+\renewcommand{\indexsubitem}{(in module sys)}
+\begin{datadesc}{argv}
+  The list of command line arguments passed to a Python script.
+  \code{sys.argv[0]} is the script name.
+  If no script name was passed to the Python interpreter,
+  \code{sys.argv} is empty.
+\end{datadesc}
+
+\begin{datadesc}{builtin_module_names}
+  A list of strings giving the names of all modules that are compiled
+  into this Python interpreter.  (This information is not available in
+  any other way --- \code{sys.modules.keys()} only lists the imported
+  modules.)
+\end{datadesc}
+
+\begin{datadesc}{exc_type}
+\dataline{exc_value}
+\dataline{exc_traceback}
+  These three variables are not always defined; they are set when an
+  exception handler (an \code{except} clause of a \code{try} statement) is
+  invoked.  Their meaning is: \code{exc_type} gets the exception type of
+  the exception being handled; \code{exc_value} gets the exception
+  parameter (its \dfn{associated value} or the second argument to
+  \code{raise}); \code{exc_traceback} gets a traceback object which
+  encapsulates the call stack at the point where the exception
+  originally occurred.
+\end{datadesc}
+
+\begin{funcdesc}{exit}{n}
+  Exit from Python with numeric exit status \var{n}.  This is
+  implemented by raising the \code{SystemExit} exception, so cleanup
+  actions specified by \code{finally} clauses of \code{try} statements
+  are honored, and it is possible to catch the exit attempt at an outer
+  level.
+\end{funcdesc}
+
+\begin{datadesc}{exitfunc}
+  This value is not actually defined by the module, but can be set by
+  the user (or by a program) to specify a clean-up action at program
+  exit.  When set, it should be a parameterless function.  This function
+  will be called when the interpreter exits in any way (but not when a
+  fatal error occurs: in that case the interpreter's internal state
+  cannot be trusted).
+\end{datadesc}
+
+\begin{datadesc}{last_type}
+\dataline{last_value}
+\dataline{last_traceback}
+  These three variables are not always defined; they are set when an
+  exception is not handled and the interpreter prints an error message
+  and a stack traceback.  Their intended use is to allow an interactive
+  user to import a debugger module and engage in post-mortem debugging
+  without having to re-execute the command that cause the error (which
+  may be hard to reproduce).  The meaning of the variables is the same
+  as that of \code{exc_type}, \code{exc_value} and \code{exc_tracaback},
+  respectively.
+\end{datadesc}
+
+\begin{datadesc}{modules}
+  Gives the list of modules that have already been loaded.
+  This can be manipulated to force reloading of modules and other tricks.
+\end{datadesc}
+
+\begin{datadesc}{path}
+  A list of strings that specifies the search path for modules.
+  Initialized from the environment variable \code{PYTHONPATH}, or an
+  installation-dependent default.
+\end{datadesc}
+
+\begin{datadesc}{ps1}
+\dataline{ps2}
+  Strings specifying the primary and secondary prompt of the
+  interpreter.  These are only defined if the interpreter is in
+  interactive mode.  Their initial values in this case are
+  \code{'>>> '} and \code{'... '}.
+\end{datadesc}
+
+\begin{funcdesc}{settrace}{tracefunc}
+  Set the system's trace function, which allows you to implement a
+  Python source code debugger in Python.  The standard modules
+  \code{pdb} and \code{wdb} are such debuggers; the difference is that
+  \code{wdb} uses windows and needs STDWIN, while \code{pdb} has a
+  line-oriented interface not unlike dbx.  See the file \file{pdb.doc}
+  in the Python library source directory for more documentation (both
+  about \code{pdb} and \code{sys.trace}).
+\end{funcdesc}
+\ttindex{pdb}
+\ttindex{wdb}
+\index{trace function}
+
+\begin{funcdesc}{setprofile}{profilefunc}
+  Set the system's profile function, which allows you to implement a
+  Python source code profiler in Python.  The system's profile function
+  is called similarly to the system's trace function (see
+  \code{sys.settrace}), but it isn't called for each executed line of
+  code (only on call and return and when an exception occurs).  Also,
+  its return value is not used, so it can just return \code{None}.
+\end{funcdesc}
+\index{profile function}
+
+\begin{datadesc}{stdin}
+\dataline{stdout}
+\dataline{stderr}
+  File objects corresponding to the interpreter's standard input,
+  output and error streams.  \code{sys.stdin} is used for all
+  interpreter input except for scripts but including calls to
+  \code{input()} and \code{raw_input()}.  \code{sys.stdout} is used
+  for the output of \code{print} and expression statements and for the
+  prompts of \code{input()} and \code{raw_input()}.  The interpreter's
+  own prompts and (almost all of) its error messages go to
+  \code{sys.stderr}.  \code{sys.stdout} and \code{sys.stderr} needn't
+  be built-in file objects: any object is acceptable as long as it has
+  a \code{write} method that takes a string argument.
+\end{datadesc}
+
+\begin{datadesc}{tracebacklimit}
+When this variable is set to an integer value, it determines the
+maximum number of levels of traceback information printed when an
+unhandled exception occurs.  The default is 1000.  When set to 0 or
+less, all traceback information is suppressed and only the exception
+type and value are printed.
+\end{datadesc}
diff --git a/Doc/libthread.tex b/Doc/libthread.tex
new file mode 100644
index 0000000..c836615
--- /dev/null
+++ b/Doc/libthread.tex
@@ -0,0 +1,89 @@
+\section{Built-in Module \sectcode{thread}}
+\bimodindex{thread}
+
+This module provides low-level primitives for working with multiple
+threads (a.k.a. \dfn{light-weight processes} or \dfn{tasks}) --- multiple
+threads of control sharing their global data space.  For
+synchronization, simple locks (a.k.a. \dfn{mutexes} or \dfn{binary
+semaphores}) are provided.
+
+The module is optional and supported on SGI and Sun Sparc systems only.
+
+It defines the following constant and functions:
+
+\renewcommand{\indexsubitem}{(in module thread)}
+\begin{excdesc}{error}
+Raised on thread-specific errors.
+\end{excdesc}
+
+\begin{funcdesc}{start_new_thread}{func\, arg}
+Start a new thread.  The thread executes the function \var{func}
+with the argument list \var{arg} (which must be a tuple).  When the
+function returns, the thread silently exits.  When the function raises
+terminates with an unhandled exception, a stack trace is printed and
+then the thread exits (but other threads continue to run).
+\end{funcdesc}
+
+\begin{funcdesc}{exit_thread}{}
+Exit the current thread silently.  Other threads continue to run.
+\strong{Caveat:} code in pending \code{finally} clauses is not executed.
+\end{funcdesc}
+
+\begin{funcdesc}{exit_prog}{status}
+Exit all threads and report the value of the integer argument
+\var{status} as the exit status of the entire program.
+\strong{Caveat:} code in pending \code{finally} clauses, in this thread
+or in other threads, is not executed.
+\end{funcdesc}
+
+\begin{funcdesc}{allocate_lock}{}
+Return a new lock object.  Methods of locks are described below.  The
+lock is initially unlocked.
+\end{funcdesc}
+
+Lock objects have the following methods:
+
+\renewcommand{\indexsubitem}{(lock method)}
+\begin{funcdesc}{acquire}{waitflag}
+Without the optional argument, this method acquires the lock
+unconditionally, if necessary waiting until it is released by another
+thread (only one thread at a time can acquire a lock --- that's their
+reason for existence), and returns \code{None}.  If the integer
+\var{waitflag} argument is present, the action depends on its value:
+if it is zero, the lock is only acquired if it can be acquired
+immediately without waiting, while if it is nonzero, the lock is
+acquired unconditionally as before.  If an argument is present, the
+return value is 1 if the lock is acquired successfully, 0 if not.
+\end{funcdesc}
+
+\begin{funcdesc}{release}{}
+Releases the lock.  The lock must have been acquired earlier, but not
+necessarily by the same thread.
+\end{funcdesc}
+
+\begin{funcdesc}{locked}{}
+Return the status of the lock: 1 if it has been acquired by some
+thread, 0 if not.
+\end{funcdesc}
+
+{\bf Caveats:}
+
+\begin{itemize}
+\item
+Threads interact strangely with interrupts: the
+\code{KeyboardInterrupt} exception will be received by an arbitrary
+thread.
+
+\item
+Calling \code{sys.exit(\var{status})} or executing
+\code{raise SystemExit, \var{status}} is almost equivalent to calling
+\code{thread.exit_prog(\var{status})}, except that the former ways of
+exiting the entire program do honor \code{finally} clauses in the
+current thread (but not in other threads).
+
+\item
+Not all built-in functions that may block waiting for I/O allow other
+threads to run, although the most popular ones (\code{sleep},
+\code{read}, \code{select}) work as expected.
+
+\end{itemize}
diff --git a/Doc/libtime.tex b/Doc/libtime.tex
new file mode 100644
index 0000000..fe8b7dc
--- /dev/null
+++ b/Doc/libtime.tex
@@ -0,0 +1,121 @@
+\section{Built-in Module \sectcode{time}}
+
+\bimodindex{time}
+This module provides various time-related functions.
+It is always available.  (On some systems, not all functions may
+exist; e.g. the ``milli'' variants can't always be implemented.)
+
+An explanation of some terminology and conventions is in order.
+
+\begin{itemize}
+
+\item
+The ``epoch'' is the point where the time starts.  On January 1st that
+year, at 0 hours, the ``time since the epoch'' is zero.  For UNIX, the
+epoch is 1970.  To find out what the epoch is, look at the first
+element of \code{gmtime(0)}.
+
+\item
+UTC is Coordinated Universal Time (formerly known as Greenwich Mean
+Time).  The acronym UTC is not a mistake but a compromise between
+English and French.
+
+\item
+DST is Daylight Saving Time, an adjustment of the timezone by
+(usually) one hour during part of the year.  DST rules are magic
+(determined by local law) and can change from year to year.  The C
+library has a table containing the local rules (often it is read from
+a system file for flexibility) and is the only source of True Wisdom
+in this respect.
+
+\item
+The precision of the various real-time functions may be less than
+suggested by the units in which their value or argument is expressed.
+E.g. on most UNIX systems, the clock ``ticks'' only every 1/50th or
+1/100th of a second, and on the Mac, it ticks 60 times a second.
+
+\end{itemize}
+
+Functions and data items are:
+
+\renewcommand{\indexsubitem}{(in module time)}
+
+\begin{datadesc}{altzone}
+The offset of the local DST timezone, in seconds west of the 0th
+meridian, if one is defined.  Only use this if \code{daylight} is
+nonzero.
+\end{datadesc}
+
+
+\begin{funcdesc}{asctime}{tuple}
+Convert a tuple representing a time as returned by \code{gmtime()} or
+\code{localtime()} to a 24-character string of the following form:
+\code{'Sun Jun 20 23:21:05 1993'}.  Note: unlike the C function of
+the same name, there is no trailing newline.
+\end{funcdesc}
+
+
+\begin{funcdesc}{ctime}{secs}
+Convert a time expressed in seconds since the epoch to a string
+representing local time.  \code{ctime(t)} is equivalent to
+\code{asctime(localtime(t))}.
+\end{funcdesc}
+
+\begin{datadesc}{daylight}
+Nonzero if a DST timezone is defined.
+\end{datadesc}
+
+\begin{funcdesc}{gmtime}{secs}
+Convert a time expressed in seconds since the epoch to a tuple of 9
+integers, in UTC: year (e.g. 1993), month (1-12), day (1-31), hour
+(0-23), minute (0-59), second (0-59), weekday (0-6, monday is 0),
+julian day (1-366), dst flag (always zero).  Fractions of a second are
+ignored.  Note subtle differences with the C function of this name.
+\end{funcdesc}
+
+\begin{funcdesc}{localtime}{secs}
+Like \code{gmtime} but converts to local time.  The dst flag is set
+to 1 when DST applies to the given time.
+\end{funcdesc}
+
+\begin{funcdesc}{millisleep}{msecs}
+Suspend execution for the given number of milliseconds.  (Obsolete,
+you can now use use \code{sleep} with a floating point argument.)
+\end{funcdesc}
+
+\begin{funcdesc}{millitimer}{}
+Return the number of milliseconds of real time elapsed since some
+point in the past that is fixed per execution of the python
+interpreter (but may change in each following run).  The return value
+may be negative, and it may wrap around.
+\end{funcdesc}
+
+\begin{funcdesc}{mktime}{tuple}
+This is the inverse function of \code{localtime}.  Its argument is the
+full 9-tuple (since the dst flag is needed).  It returns an integer.
+\end{funcdesc}
+
+\begin{funcdesc}{sleep}{secs}
+Suspend execution for the given number of seconds.  The argument may
+be a floating point number to indicate a more precise sleep time.
+\end{funcdesc}
+
+\begin{funcdesc}{time}{}
+Return the time as a floating point number expressed in seconds since
+the epoch, in UTC.  Note that even though the time is always returned
+as a floating point number, not all systems provide time with a better
+precision than 1 second.  An alternative for measuring precise
+intervals is \code{millitimer}.
+\end{funcdesc}
+
+\begin{datadesc}{timezone}
+The offset of the local (non-DST) timezone, in seconds west of the 0th
+meridian (i.e. negative in most of Western Europe, positive in the US,
+zero in the UK).
+\end{datadesc}
+
+\begin{datadesc}{tzname}
+A tuple of two strings: the first is the name of the local non-DST
+timezone, the second is the name of the local DST timezone.  If no DST
+timezone is defined, the second string should not be used.
+\end{datadesc}
diff --git a/Doc/libtypes.tex b/Doc/libtypes.tex
new file mode 100644
index 0000000..be8d990
--- /dev/null
+++ b/Doc/libtypes.tex
@@ -0,0 +1,618 @@
+\section{Built-in Types}
+
+The following sections describe the standard types that are built into
+the interpreter.  These are the numeric types, sequence types, and
+several others, including types themselves.  There is no explicit
+Boolean type; use integers instead.
+\indexii{built-in}{types}
+\indexii{Boolean}{type}
+
+Some operations are supported by several object types; in particular,
+all objects can be compared, tested for truth value, and converted to
+a string (with the \code{`{\rm \ldots}`} notation).  The latter conversion is
+implicitly used when an object is written by the \code{print} statement.
+\stindex{print}
+
+\subsection{Truth Value Testing}
+
+Any object can be tested for truth value, for use in an \code{if} or
+\code{while} condition or as operand of the Boolean operations below.
+The following values are false:
+\stindex{if}
+\stindex{while}
+\indexii{truth}{value}
+\indexii{Boolean}{operations}
+\index{false}
+
+\begin{itemize}
+\renewcommand{\indexsubitem}{(Built-in object)}
+
+\item	\code{None}
+	\ttindex{None}
+
+\item	zero of any numeric type, e.g., \code{0}, \code{0L}, \code{0.0}.
+
+\item	any empty sequence, e.g., \code{''}, \code{()}, \code{[]}.
+
+\item	any empty mapping, e.g., \code{\{\}}.
+
+\end{itemize}
+
+\emph{All} other values are true --- so objects of many types are
+always true.
+\index{true}
+
+\subsection{Boolean Operations}
+
+These are the Boolean operations:
+\indexii{Boolean}{operations}
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\var{x} or \var{y}}{if \var{x} is false, then \var{y}, else \var{x}}{(1)}
+  \lineiii{\var{x} and \var{y}}{if \var{x} is false, then \var{x}, else \var{y}}{(1)}
+  \lineiii{not \var{x}}{if \var{x} is false, then \code{1}, else \code{0}}{}
+\end{tableiii}
+\opindex{and}
+\opindex{or}
+\opindex{not}
+
+\noindent
+Notes:
+
+\begin{description}
+
+\item[(1)]
+These only evaluate their second argument if needed for their outcome.
+
+\end{description}
+
+\subsection{Comparisons}
+
+Comparison operations are supported by all objects:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Meaning}{Notes}
+  \lineiii{<}{strictly less than}{}
+  \lineiii{<=}{less than or equal}{}
+  \lineiii{>}{strictly greater than}{}
+  \lineiii{>=}{greater than or equal}{}
+  \lineiii{==}{equal}{}
+  \lineiii{<>}{not equal}{(1)}
+  \lineiii{!=}{not equal}{(1)}
+  \lineiii{is}{object identity}{}
+  \lineiii{is not}{negated object identity}{}
+\end{tableiii}
+\indexii{operator}{comparison}
+\opindex{==} % XXX *All* others have funny characters < ! >
+\opindex{is}
+\opindex{is not}
+
+\noindent
+Notes:
+
+\begin{description}
+
+\item[(1)]
+\code{<>} and \code{!=} are alternate spellings for the same operator.
+(I couldn't choose between \ABC{} and \C{}! :-)
+\indexii{\ABC{}}{language}
+\indexii{\C{}}{language}
+
+\end{description}
+
+Objects of different types, except different numeric types, never
+compare equal; such objects are ordered consistently but arbitrarily
+(so that sorting a heterogeneous array yields a consistent result).
+Furthermore, some types (e.g., windows) support only a degenerate
+notion of comparison where any two objects of that type are unequal.
+Again, such objects are ordered arbitrarily but consistently.
+\indexii{types}{numeric}
+\indexii{objects}{comparing}
+
+(Implementation note: objects of different types except numbers are
+ordered by their type names; objects of the same types that don't
+support proper comparison are ordered by their address.)
+
+Two more operations with the same syntactic priority, \code{in} and
+\code{not in}, are supported only by sequence types (below).
+\opindex{in}
+\opindex{not in}
+
+\subsection{Numeric Types}
+
+There are three numeric types: \dfn{plain integers}, \dfn{long integers}, and
+\dfn{floating point numbers}.  Plain integers (also just called \dfn{integers})
+are implemented using \code{long} in \C{}, which gives them at least 32
+bits of precision.  Long integers have unlimited precision.  Floating
+point numbers are implemented using \code{double} in \C{}.  All bets on
+their precision are off unless you happen to know the machine you are
+working with.
+\indexii{numeric}{types}
+\indexii{integer}{types}
+\indexii{integer}{type}
+\indexiii{long}{integer}{type}
+\indexii{floating point}{type}
+\indexii{\C{}}{language}
+
+Numbers are created by numeric literals or as the result of built-in
+functions and operators.  Unadorned integer literals (including hex
+and octal numbers) yield plain integers.  Integer literals with an \samp{L}
+or \samp{l} suffix yield long integers
+(\samp{L} is preferred because \code{1l} looks too much like eleven!).
+Numeric literals containing a decimal point or an exponent sign yield
+floating point numbers.
+\indexii{numeric}{literals}
+\indexii{integer}{literals}
+\indexiii{long}{integer}{literals}
+\indexii{floating point}{literals}
+\indexii{hexadecimal}{literals}
+\indexii{octal}{literals}
+
+Python fully supports mixed arithmetic: when a binary arithmetic
+operator has operands of different numeric types, the operand with the
+``smaller'' type is converted to that of the other, where plain
+integer is smaller than long integer is smaller than floating point.
+Comparisons between numbers of mixed type use the same rule.%
+\footnote{As a consequence, the list \code{[1, 2]} is considered equal
+	to \code{[1.0, 2.0]}, and similar for tuples.}
+The functions \code{int()}, \code{long()} and \code{float()} can be used
+to coerce numbers to a specific type.
+\index{arithmetic}
+\bifuncindex{int}
+\bifuncindex{long}
+\bifuncindex{float}
+
+All numeric types support the following operations:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{abs(\var{x})}{absolute value of \var{x}}{}
+  \lineiii{int(\var{x})}{\var{x} converted to integer}{(1)}
+  \lineiii{long(\var{x})}{\var{x} converted to long integer}{(1)}
+  \lineiii{float(\var{x})}{\var{x} converted to floating point}{}
+  \lineiii{-\var{x}}{\var{x} negated}{}
+  \lineiii{+\var{x}}{\var{x} unchanged}{}
+  \lineiii{\var{x} + \var{y}}{sum of \var{x} and \var{y}}{}
+  \lineiii{\var{x} - \var{y}}{difference of \var{x} and \var{y}}{}
+  \lineiii{\var{x} * \var{y}}{product of \var{x} and \var{y}}{}
+  \lineiii{\var{x} / \var{y}}{quotient of \var{x} and \var{y}}{(2)}
+  \lineiii{\var{x} \%{} \var{y}}{remainder of \code{\var{x} / \var{y}}}{}
+  \lineiii{divmod(\var{x}, \var{y})}{the pair \code{(\var{x} / \var{y}, \var{x} \%{} \var{y})}}{(3)}
+  \lineiii{pow(\var{x}, \var{y})}{\var{x} to the power \var{y}}{}
+\end{tableiii}
+\indexiii{operations on}{numeric}{types}
+
+\noindent
+Notes:
+\begin{description}
+\item[(1)]
+Conversion from floating point to (long or plain) integer may round or
+% XXXJH xref here
+truncate as in \C{}; see functions \code{floor} and \code{ceil} in module
+\code{math} for well-defined conversions.
+\indexii{numeric}{conversions}
+\ttindex{math}
+\indexii{\C{}}{language}
+
+\item[(2)]
+For (plain or long) integer division, the result is an integer; it
+always truncates towards zero.
+% XXXJH integer division is better defined nowadays
+\indexii{integer}{division}
+\indexiii{long}{integer}{division}
+
+\item[(3)]
+See the section on built-in functions for an exact definition.
+
+\end{description}
+% XXXJH exceptions: overflow (when? what operations?) zerodivision
+
+\subsubsection{Bit-string Operations on Integer Types.}
+
+Plain and long integer types support additional operations that make
+sense only for bit-strings.  Negative numbers are treated as their 2's
+complement value:
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\~\var{x}}{the bits of \var{x} inverted}{}
+  \lineiii{\var{x} \^{} \var{y}}{bitwise \dfn{exclusive or} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} \&{} \var{y}}{bitwise \dfn{and} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} | \var{y}}{bitwise \dfn{or} of \var{x} and \var{y}}{}
+  \lineiii{\var{x} << \var{n}}{\var{x} shifted left by \var{n} bits}{}
+  \lineiii{\var{x} >> \var{n}}{\var{x} shifted right by \var{n} bits}{}
+\end{tableiii}
+% XXXJH what's `left'? `right'? maybe better use lsb or msb or something
+\indexiii{operations on}{integer}{types}
+\indexii{bit-string}{operations}
+\indexii{shifting}{operations}
+\indexii{masking}{operations}
+
+\subsection{Sequence Types}
+
+There are three sequence types: strings, lists and tuples.
+Strings literals are written in single quotes: \code{'xyzzy'}.
+Lists are constructed with square brackets,
+separating items with commas:
+\code{[a, b, c]}.
+Tuples are constructed by the comma operator
+(not within square brackets), with or without enclosing parentheses,
+but an empty tuple must have the enclosing parentheses, e.g.,
+\code{a, b, c} or \code{()}.  A single item tuple must have a trailing comma,
+e.g., \code{(d,)}.
+\indexii{sequence}{types}
+\indexii{string}{type}
+\indexii{tuple}{type}
+\indexii{list}{type}
+
+Sequence types support the following operations (\var{s} and \var{t} are
+sequences of the same type; \var{n}, \var{i} and \var{j} are integers):
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{len(\var{s})}{length of \var{s}}{}
+  \lineiii{min(\var{s})}{smallest item of \var{s}}{}
+  \lineiii{max(\var{s})}{largest item of \var{s}}{}
+  \lineiii{\var{x} in \var{s}}{\code{1} if an item of \var{s} is equal to \var{x}, else \code{0}}{}
+  \lineiii{\var{x} not in \var{s}}{\code{0} if an item of \var{s} is equal to \var{x}, else \code{1}}{}
+  \lineiii{\var{s} + \var{t}}{the concatenation of \var{s} and \var{t}}{}
+  \lineiii{\var{s} * \var{n}{\rm ,} \var{n} * \var{s}}{\var{n} copies of \var{s} concatenated}{}
+  \lineiii{\var{s}[\var{i}]}{\var{i}'th item of \var{s}, origin 0}{(1)}
+  \lineiii{\var{s}[\var{i}:\var{j}]}{slice of \var{s} from \var{i} to \var{j}}{(1), (2)}
+\end{tableiii}
+\indexiii{operations on}{sequence}{types}
+\bifuncindex{len}
+\bifuncindex{min}
+\bifuncindex{max}
+\indexii{concatenation}{operation}
+\indexii{repetition}{operation}
+\indexii{subscript}{operation}
+\indexii{slice}{operation}
+\opindex{in}
+\opindex{not in}
+
+\noindent
+Notes:
+
+% XXXJH all TeX-math expressions replaced by python-syntax expressions
+\begin{description}
+  
+\item[(1)] If \var{i} or \var{j} is negative, the index is relative to
+  the end of the string, i.e., \code{len(\var{s}) + \var{i}} or
+  \code{len(\var{s}) + \var{j}} is substituted.  But note that \code{-0} is
+  still \code{0}.
+  
+\item[(2)] The slice of \var{s} from \var{i} to \var{j} is defined as
+  the sequence of items with index \var{k} such that \code{\var{i} <=
+  \var{k} < \var{j}}.  If \var{i} or \var{j} is greater than
+  \code{len(\var{s})}, use \code{len(\var{s})}.  If \var{i} is omitted,
+  use \code{0}.  If \var{j} is omitted, use \code{len(\var{s})}.  If
+  \var{i} is greater than or equal to \var{j}, the slice is empty.
+
+\end{description}
+
+\subsubsection{More String Operations.}
+
+String objects have one unique built-in operation: the \code{\%}
+operator (modulo) with a string left argument interprets this string
+as a C sprintf format string to be applied to the right argument, and
+returns the string resulting from this formatting operation.
+
+Unless the format string requires exactly one argument, the right
+argument should be a tuple of the correct size.  The following format
+characters are understood: \%, c, s, i, d, u, o, x, X, e, E, f, g, G.
+Width and precision may be a * to specify that an integer argument
+specifies the actual width or precision.  The flag characters -, +,
+blank, \# and 0 are understood.  The size specifiers h, l or L may be
+present but are ignored.  The ANSI features \code{\%p} and \code{\%n}
+are not supported.  Since Python strings have an explicit length,
+\code{\%s} conversions don't assume that \code{'\\0'} is the end of
+the string.
+
+For safety reasons, huge floating point precisions are truncated;
+\code{\%f} conversions for huge numbers are replaced by
+\code{\%g} conversions.  All other errors raise exceptions.
+
+Additional string operations are defined in standard module
+\code{string} and in built-in module \code{regex}.
+\index{string}
+\index{regex}
+
+\subsubsection{Mutable Sequence Types.}
+
+List objects support additional operations that allow in-place
+modification of the object.
+These operations would be supported by other mutable sequence types
+(when added to the language) as well.
+Strings and tuples are immutable sequence types and such objects cannot
+be modified once created.
+The following operations are defined on mutable sequence types (where
+\var{x} is an arbitrary object):
+\indexiii{mutable}{sequence}{types}
+\indexii{list}{type}
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{\var{s}[\var{i}] = \var{x}}
+	{item \var{i} of \var{s} is replaced by \var{x}}{}
+  \lineiii{\var{s}[\var{i}:\var{j}] = \var{t}}
+  	{slice of \var{s} from \var{i} to \var{j} is replaced by \var{t}}{}
+  \lineiii{del \var{s}[\var{i}:\var{j}]}
+	{same as \code{\var{s}[\var{i}:\var{j}] = []}}{}
+  \lineiii{\var{s}.append(\var{x})}
+	{same as \code{\var{s}[len(\var{x}):len(\var{x})] = [\var{x}]}}{}
+  \lineiii{\var{s}.count(\var{x})}
+	{return number of \var{i}'s for which \code{\var{s}[\var{i}] == \var{x}}}{}
+  \lineiii{\var{s}.index(\var{x})}
+	{return smallest \var{i} such that \code{\var{s}[\var{i}] == \var{x}}}{(1)}
+  \lineiii{\var{s}.insert(\var{i}, \var{x})}
+	{same as \code{\var{s}[\var{i}:\var{i}] = [\var{x}]}}{}
+  \lineiii{\var{s}.remove(\var{x})}
+	{same as \code{del \var{s}[\var{s}.index(\var{x})]}}{(1)}
+  \lineiii{\var{s}.reverse()}
+	{reverses the items of \var{s} in place}{}
+  \lineiii{\var{s}.sort()}
+	{permutes the items of \var{s} to satisfy
+        \code{\var{s}[\var{i}] <= \var{s}[\var{j}]},
+        for \code{\var{i} < \var{j}}}{(2)}
+\end{tableiii}
+\indexiv{operations on}{mutable}{sequence}{types}
+\indexiii{operations on}{sequence}{types}
+\indexiii{operations on}{list}{type}
+\indexii{subscript}{assignment}
+\indexii{slice}{assignment}
+\stindex{del}
+\renewcommand{\indexsubitem}{(list method)}
+\ttindex{append}
+\ttindex{count}
+\ttindex{index}
+\ttindex{insert}
+\ttindex{remove}
+\ttindex{reverse}
+\ttindex{sort}
+
+\noindent
+Notes:
+\begin{description}
+\item[(1)] Raises an exception when \var{x} is not found in \var{s}.
+  
+\item[(2)] The \code{sort()} method takes an optional argument
+  specifying a comparison function of two arguments (list items) which
+  should return \code{-1}, \code{0} or \code{1} depending on whether the
+  first argument is considered smaller than, equal to, or larger than the
+  second argument.  Note that this slows the sorting process down
+  considerably; e.g. to sort an array in reverse order it is much faster
+  to use calls to \code{sort()} and \code{reverse()} than to use
+  \code{sort()} with a comparison function that reverses the ordering of
+  the elements.
+\end{description}
+
+\subsection{Mapping Types}
+
+A \dfn{mapping} object maps values of one type (the key type) to
+arbitrary objects.  Mappings are mutable objects.  There is currently
+only one mapping type, the \dfn{dictionary}.  A dictionary's keys are
+almost arbitrary values.  The only types of values not acceptable as
+keys are values containing lists or dictionaries or other mutable
+types that are compared by value rather than by object identity.
+Numeric types used for keys obey the normal rules for numeric
+comparison: if two numbers compare equal (e.g. 1 and 1.0) then they
+can be used interchangeably to index the same dictionary entry.
+
+\indexii{mapping}{types}
+\indexii{dictionary}{type}
+
+Dictionaries are created by placing a comma-separated list of
+\code{\var{key}: \var{value}} pairs within braces, for example:
+\code{\{'jack': 4098, 'sjoerd: 4127\}} or
+\code{\{4098: 'jack', 4127: 'sjoerd\}}.
+
+The following operations are defined on mappings (where \var{a} is a
+mapping, \var{k} is a key and \var{x} is an arbitrary object):
+
+\begin{tableiii}{|c|l|c|}{code}{Operation}{Result}{Notes}
+  \lineiii{len(\var{a})}{the number of items in \var{a}}{}
+  \lineiii{\var{a}[\var{k}]}{the item of \var{a} with key \var{k}}{(1)}
+  \lineiii{\var{a}[\var{k}] = \var{x}}{set \code{\var{a}[\var{k}]} to \var{x}}{}
+  \lineiii{del \var{a}[\var{k}]}{remove \code{\var{a}[\var{k}]} from \var{a}}{(1)}
+  \lineiii{\var{a}.items()}{a copy of \var{a}'s list of (key, item) pairs}{(2)}
+  \lineiii{\var{a}.keys()}{a copy of \var{a}'s list of keys}{(2)}
+  \lineiii{\var{a}.values()}{a copy of \var{a}'s list of values}{(2)}
+  \lineiii{\var{a}.has_key(\var{k})}{\code{1} if \var{a} has a key \var{k}, else \code{0}}{}
+\end{tableiii}
+\indexiii{operations on}{mapping}{types}
+\indexiii{operations on}{dictionary}{type}
+\stindex{del}
+\bifuncindex{len}
+\renewcommand{\indexsubitem}{(dictionary method)}
+\ttindex{keys}
+\ttindex{has_key}
+
+% XXXJH some lines above, you talk about `true', elsewhere you
+% explicitely states \code{0} or \code{1}.
+\noindent
+Notes:
+\begin{description}
+\item[(1)] Raises an exception if \var{k} is not in the map.
+
+\item[(2)] Keys and values are listed in random order, but at any
+moment the ordering of the \code{keys()}, \code{values()} and
+\code{items()} lists is the consistent with each other.
+\end{description}
+
+\subsection{Other Built-in Types}
+
+The interpreter supports several other kinds of objects.
+Most of these support only one or two operations.
+
+\subsubsection{Modules.}
+
+The only special operation on a module is attribute access:
+\code{\var{m}.\var{name}}, where \var{m} is a module and \var{name} accesses
+a name defined in \var{m}'s symbol table.  Module attributes can be
+assigned to.  (Note that the \code{import} statement is not, strictly
+spoken, an operation on a module object; \code{import \var{foo}} does not
+require a module object named \var{foo} to exist, rather it requires
+an (external) \emph{definition} for a module named \var{foo}
+somewhere.)
+
+A special member of every module is \code{__dict__}.
+This is the dictionary containing the module's symbol table.
+Modifying this dictionary will actually change the module's symbol
+table, but direct assignment to the \code{__dict__} attribute is not
+possible (i.e., you can write \code{\var{m}.__dict__['a'] = 1}, which
+defines \code{\var{m}.a} to be \code{1}, but you can't write \code{\var{m}.__dict__ = \{\}}.
+
+Modules are written like this: \code{<module 'sys'>}.
+
+\subsubsection{Classes and Class Instances.}
+% XXXJH cross ref here
+(See the Python Reference Manual for these.)
+
+\subsubsection{Functions.}
+
+Function objects are created by function definitions.  The only
+operation on a function object is to call it:
+\code{\var{func}(\var{argument-list})}.
+
+There are really two flavors of function objects: built-in functions
+and user-defined functions.  Both support the same operation (to call
+the function), but the implementation is different, hence the
+different object types.
+
+The implementation adds two special read-only attributes:
+\code{\var{f}.func_code} is a function's \dfn{code object} (see below) and
+\code{\var{f}.func_globals} is the dictionary used as the function's
+global name space (this is the same as \code{\var{m}.__dict__} where
+\var{m} is the module in which the function \var{f} was defined).
+
+\subsubsection{Methods.}
+
+Methods are functions that are called using the attribute notation.
+There are two flavors: built-in methods (such as \code{append()} on
+lists) and class instance methods.  Built-in methods are described
+with the types that support them.
+
+The implementation adds two special read-only attributes to class
+instance methods: \code{\var{m}.im_self} is the object whose method this
+is, and \code{\var{m}.im_func} is the function implementing the method.
+Calling \code{\var{m}(\var{arg-1}, \var{arg-2}, {\rm \ldots},
+\var{arg-n})} is completely equivalent to calling
+\code{\var{m}.im_func(\var{m}.im_self, \var{arg-1}, \var{arg-2}, {\rm
+\ldots}, \var{arg-n})}.
+
+(See the Python Reference Manual for more info.)
+
+\subsubsection{Type Objects.}
+
+Type objects represent the various object types.  An object's type is
+% XXXJH xref here
+accessed by the built-in function \code{type()}.  There are no special
+operations on types.
+
+Types are written like this: \code{<type 'int'>}.
+
+\subsubsection{The Null Object.}
+
+This object is returned by functions that don't explicitly return a
+value.  It supports no special operations.  There is exactly one null
+object, named \code{None} (a built-in name).
+
+It is written as \code{None}.
+
+\subsubsection{File Objects.}
+
+File objects are implemented using \C{}'s \code{stdio} package and can be
+% XXXJH xref here
+created with the built-in function \code{open()} described under
+Built-in Functions below.
+
+When a file operation fails for an I/O-related reason, the exception
+\code{IOError} is raised.  This includes situations where the
+operation is not defined for some reason, like \code{seek()} on a tty
+device or writing a file opened for reading.
+
+Files have the following methods:
+
+
+\renewcommand{\indexsubitem}{(file method)}
+
+\begin{funcdesc}{close}{}
+  Close the file.  A closed file cannot be read or written anymore.
+\end{funcdesc}
+
+\begin{funcdesc}{flush}{}
+  Flush the internal buffer, like \code{stdio}'s \code{fflush()}.
+\end{funcdesc}
+
+\begin{funcdesc}{isatty}{}
+  Return \code{1} if the file is connected to a tty(-like) device, else
+  \code{0}.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{size}
+  Read at most \var{size} bytes from the file (less if the read hits
+  \EOF{} or no more data is immediately available on a pipe, tty or
+  similar device).  If the \var{size} argument is omitted, read all
+  data until \EOF{} is reached.  The bytes are returned as a string
+  object.  An empty string is returned when \EOF{} is encountered
+  immediately.  (For certain files, like ttys, it makes sense to
+  continue reading after an \EOF{} is hit.)
+\end{funcdesc}
+
+\begin{funcdesc}{readline}{}
+  Read one entire line from the file.  A trailing newline character is
+  kept in the string (but may be absent when a file ends with an
+  incomplete line).  An empty string is returned when \EOF{} is hit
+  immediately.  Note: unlike \code{stdio}'s \code{fgets()}, the returned
+  string contains null characters (\code{'\e 0'}) if they occurred in the
+  input.
+\end{funcdesc}
+
+\begin{funcdesc}{readlines}{}
+  Read until \EOF{} using \code{readline()} and return a list containing
+  the lines thus read.
+\end{funcdesc}
+
+\begin{funcdesc}{seek}{offset\, whence}
+  Set the file's current position, like \code{stdio}'s \code{fseek()}.
+  The \var{whence} argument is optional and defaults to \code{0}
+  (absolute file positioning); other values are \code{1} (seek
+  relative to the current position) and \code{2} (seek relative to the
+  file's end).  There is no return value.
+\end{funcdesc}
+
+\begin{funcdesc}{tell}{}
+  Return the file's current position, like \code{stdio}'s \code{ftell()}.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{str}
+  Write a string to the file.  There is no return value.
+\end{funcdesc}
+
+\subsubsection{Internal Objects.}
+
+(See the Python Reference Manual for these.)
+
+\subsection{Special Attributes}
+
+The implementation adds a few special read-only attributes to several
+object types, where they are relevant:
+
+\begin{itemize}
+
+\item
+\code{\var{x}.__dict__} is a dictionary of some sort used to store an
+object's (writable) attributes;
+
+\item
+\code{\var{x}.__methods__} lists the methods of many built-in object types,
+e.g., \code{[].__methods__} is
+% XXXJH results in?, yields?, written down as an example
+\code{['append', 'count', 'index', 'insert', 'remove', 'reverse', 'sort']};
+
+\item
+\code{\var{x}.__members__} lists data attributes;
+
+\item
+\code{\var{x}.__class__} is the class to which a class instance belongs;
+
+\item
+\code{\var{x}.__bases__} is the tuple of base classes of a class object.
+
+\end{itemize}
diff --git a/Doc/libunix.tex b/Doc/libunix.tex
new file mode 100644
index 0000000..ca4ec97
--- /dev/null
+++ b/Doc/libunix.tex
@@ -0,0 +1,5 @@
+\chapter{UNIX ONLY}
+
+The modules described in this chapter provide interfaces to features
+that are unique to the UNIX operating system, or in some cases to
+some or many variants of it.
diff --git a/Doc/libwhrandom.tex b/Doc/libwhrandom.tex
new file mode 100644
index 0000000..8ad2339
--- /dev/null
+++ b/Doc/libwhrandom.tex
@@ -0,0 +1,20 @@
+\section{Standard Module \sectcode{whrandom}}
+
+\stmodindex{whrandom}
+This module implements a Wichmann-Hill pseudo-random number generator.
+It defines the following functions:
+
+\renewcommand{\indexsubitem}{(in module whrandom)}
+\begin{funcdesc}{random}{}
+Returns the next random floating point number in the range [0.0 ... 1.0).
+\end{funcdesc}
+
+\begin{funcdesc}{seed}{x\, y\, z}
+Initializes the random number generator from the integers
+\var{x},
+\var{y}
+and
+\var{z}.
+When the module is first imported, the random number is initialized
+using values derived from the current time.
+\end{funcdesc}
diff --git a/Doc/mac/libmac.tex b/Doc/mac/libmac.tex
new file mode 100644
index 0000000..77c8956
--- /dev/null
+++ b/Doc/mac/libmac.tex
@@ -0,0 +1,40 @@
+\chapter{MACINTOSH ONLY}
+
+The following modules are available on the Apple Macintosh only.
+
+\section{Built-in module \sectcode{mac}}
+
+\bimodindex{mac}
+This module provides a subset of the operating system dependent
+functionality provided by the optional built-in module \code{posix}.
+It is best accessed through the more portable standard module
+\code{os}.
+
+The following functions are available in this module:
+\code{chdir},
+\code{getcwd},
+\code{listdir},
+\code{mkdir},
+\code{rename},
+\code{rmdir},
+\code{stat},
+\code{sync},
+\code{unlink},
+as well as the exception \code{error}.
+
+\section{Standard module \sectcode{macpath}}
+
+\stmodindex{macpath}
+This module provides a subset of the pathname manipulation functions
+available from the optional standard module \code{posixpath}.  It is
+best accessed through the more portable standard module \code{os}, as
+\code{os.path}.
+
+The following functions are available in this module:
+\code{normcase},
+\code{isabs},
+\code{join},
+\code{split},
+\code{isdir},
+\code{isfile},
+\code{exists}.