diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex
index 406a734..8e36427 100644
--- a/Doc/lib/lib.tex
+++ b/Doc/lib/lib.tex
@@ -1,6 +1,6 @@
 % Format this file with latex.
 
-%\documentstyle[palatino,11pt,myformat]{article}
+%\documentstyle[garamond,11pt,myformat]{article}
 \documentstyle[11pt,myformat]{article}
 
 % A command to force the text after an item to start on a new line
@@ -8,6 +8,15 @@
 	\mbox{}\\*[0mm]
 }
 
+% A command to define a function item
+\newcommand{\funcitem}[2]{\item[#1(#2)]}
+
+% A command to define an exception item
+\newcommand{\excitem}[2]{
+\item[#1 = {\tt '#2'}]
+\itembreak
+}
+
 \title{\bf
 	Python Library Reference \\
 	(DRAFT)
@@ -313,7 +322,8 @@
 This object is returned by functions that don't explicitly return a
 value.
 It supports no operations.
-There is exactly one null object.
+There is exactly one null object, named {\tt None}
+(a built-in name).
 
 \paragraph{File Objects.}
 
@@ -323,10 +333,10 @@
 {\tt open()}.
 They have the following methods:
 \begin{description}
-\item[{\tt close()}]
+\funcitem{close}{}
 Closes the file.
 A closed file cannot be read or written anymore.
-\item[{\tt read(size)}]
+\funcitem{read}{size}
 Reads at most
 {\tt size}
 bytes from the file (less if the read hits EOF).
@@ -334,7 +344,7 @@
 An empty string is returned when EOF is hit immediately.
 (For certain files, like ttys, it makes sense to continue reading after
 an EOF is hit.)
-\item[{\tt readline(size)}]
+\funcitem{readline}{size}
 Reads a line of at most
 {\tt size}
 bytes from the file.
@@ -342,7 +352,7 @@
 The size is optional and defaults to a large number (but not infinity).
 EOF is reported as by
 {\tt read().}
-\item[{\tt write(str)}]
+\funcitem{write}{str}
 Writes a string to the file.
 Returns no value.
 \end{description}
@@ -357,37 +367,37 @@
 The strings listed with the exception names are their values when used
 in an expression or printed.
 \begin{description}
-\item[{\tt EOFError = 'end-of-file read'} (no argument)]
-%.br
+\excitem{EOFError}{end-of-file read}
+(No argument.)
 Raised when a built-in function ({\tt input()} or {\tt raw\_input()})
 hits an end-of-file condition (EOF) without reading any data.
 (N.B.: the {\tt read()} and {\tt readline()} methods of file objects
 return an empty string when they hit EOF.)
-\item[{\tt KeyboardInterrupt = 'end-of-file read'} (no argument)]
-%.br
+\excitem{KeyboardInterrupt}{end-of-file read}
+(No argument.)
 Raised when the user hits the interrupt key (normally Control-C or DEL).
 During execution, a check for interrupts is made regularly.
 Interrupts typed when a built-in function ({\tt input()} or
 {\tt raw\_input()}) is waiting for input also raise this exception.
-\item[{\tt MemoryError = 'out of memory'}]
+\excitem{MemoryError}{out of memory}
 %.br
 Raised when an operation runs out of memory but the situation
 may still be rescued (by deleting some objects).
-\item[{\tt NameError = 'undefined name'}]
+\excitem{NameError}{undefined name}
 %.br
 Raised when a name is not found.
 This applies to unqualified names, module names (on {\tt import}),
 module members and object methods.
 The string argument is the name that could not be found.
-\item[{\tt RuntimeError = 'run-time error'}]
+\excitem{RuntimeError}{run-time error}
 %.br
 Raised for a variety of reasons, e.g., division by zero or index out of
 range.
-\item[{\tt SystemError = 'system error'}]
+\excitem{SystemError}{system error}
 %.br
 Raised when the interpreter finds an internal error, but the situation
 does not look so serious to cause it to abandon all hope.
-\item[{\tt TypeError = 'type error'}]
+\excitem{TypeError}{type error}
 %.br
 Raised when an operation or built-in function is applied to an object of
 inappropriate type.
@@ -399,10 +409,15 @@
 are always available.
 They are listed here in alphabetical order.
 \begin{description}
-\item[{\tt abs(x)}]
+\funcitem{abs}{x}
 Returns the absolute value of a number.
 The argument may be an integer or floating point number.
-\item[{\tt dir()}]
+\funcitem{chr}{i}
+Returns a string of one character
+whose ASCII code is the integer {\tt i},
+e.g., {\tt chr(97)} returns the string {\tt 'a'}.
+This is the inverse of {\tt ord()}.
+\funcitem{dir}{}
 Without arguments, this function returns the list of names in the
 current local symbol table, sorted alphabetically.
 With a module object as argument, it returns the sorted list of names in
@@ -416,7 +431,7 @@
 ['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout']
 >>> 
 \end{verbatim}\ecode
-\item[{\tt divmod(a, b)}]
+\funcitem{divmod}{a, b}
 %.br
 Takes two integers as arguments and returns a pair of integers
 consisting of their quotient and remainder.
@@ -442,7 +457,7 @@
 (14, -2)
 >>> 
 \end{verbatim}\ecode
-\item[{\tt eval(s)}]
+\funcitem{eval}{s}
 Takes a string as argument and parses and evaluates it as a {\Python}
 expression.
 The expression is executed using the current local and global symbol
@@ -455,7 +470,7 @@
 2
 >>> 
 \end{verbatim}\ecode
-\item[{\tt exec(s)}]
+\funcitem{exec}{s}
 Takes a string as argument and parses and evaluates it as a sequence of
 {\Python} statements.
 The string should end with a newline (\verb"'\n'").
@@ -470,24 +485,27 @@
 2
 >>> 
 \end{verbatim}\ecode
-\item[{\tt float(x)}]
+\funcitem{float}{x}
 Converts a number to floating point.
 The argument may be an integer or floating point number.
-\item[{\tt input(s)}]
+\funcitem{input}{s}
 Equivalent to
 {\tt eval(raw\_input(s))}.
 As for
 {\tt raw\_input()},
 the argument is optional.
-\item[{\tt len(s)}]
+\funcitem{int}{x}
+Converts a number to integer.
+The argument may be an integer or floating point number.
+\funcitem{len}{s}
 Returns the length (the number of items) of an object.
 The argument may be a sequence (string, tuple or list) or a mapping
 (dictionary).
-\item[{\tt max(s)}]
+\funcitem{max}{s}
 Returns the largest item of a non-empty sequence (string, tuple or list).
-\item[{\tt min(s)}]
+\funcitem{min}{s}
 Returns the smallest item of a non-empty sequence (string, tuple or list).
-\item[{\tt open(name, mode)}]
+\funcitem{open}{name, mode}
 %.br
 Returns a file object (described earlier under Built-in Types).
 The string arguments are the same as for stdio's
@@ -502,7 +520,11 @@
 This function should go into a built-in module
 {\tt io}.
 }
-\item[{\tt range()}]
+\funcitem{ord}{c}
+Takes a string of one character and returns its
+ASCII value, e.g., {\tt ord('a')} returns the integer {\tt 97}.
+This is the inverse of {\tt chr()}.
+\funcitem{range}{}
 This is a versatile function to create lists containing arithmetic
 progressions of integers.
 With two integer arguments, it returns the ascending sequence of
@@ -531,7 +553,7 @@
 []
 >>> 
 \end{verbatim}\ecode
-\item[{\tt raw\_input(s)}]
+\funcitem{raw\_input}{s}
 %.br
 The argument is optional; if present, it is written to standard output
 without a trailing newline.
@@ -541,11 +563,15 @@
 For example:
 \bcode\begin{verbatim}
 >>> raw_input('Type anything: ')
-Type anything: Teenage Mutant Ninja Turtles
-'Teenage Mutant Ninja Turtles'
+Type anything: Mutant Teenage Ninja Turtles
+'Mutant Teenage Ninja Turtles'
 >>> 
 \end{verbatim}\ecode
-\item[{\tt type(x)}]
+\funcitem{reload}{module}
+Causes an already imported module to be re-parsed and re-initialized.
+This is useful if you have edited the module source file and want to
+try out the new version without leaving {\Python}.
+\funcitem{type}{x}
 Returns the type of an object.
 Types are objects themselves:
 the type of a type object is its own type.
@@ -568,14 +594,14 @@
 interpreter and to functions that interact strongly with the interpreter.
 It is always available.
 \begin{description}
-\item[{\tt argv}]
+\funcitem{argv}
 The list of command line arguments passed to a {\Python} script.
 {\tt sys.argv[0]}
 is the script name.
 If no script name was passed to the {\Python} interpreter,
 {\tt sys.argv}
 is empty.
-\item[{\tt exit(n)}]
+\funcitem{exit}{n}
 Exits from {\Python} with numeric exit status
 {\tt n}.
 This closes all open files and performs other cleanup-actions required by
@@ -584,21 +610,21 @@
 of
 {\tt try}
 statements are not executed!).
-\item[{\tt modules}]
+\funcitem{modules}
 Gives the list of modules that have already been loaded.
 This can be manipulated to force reloading of modules and other tricks.
-\item[{\tt path}]
+\funcitem{path}
 A list of strings that specifies the search path for modules.
 Initialized from the environment variable {\tt PYTHONPATH}, or an
 installation-dependent default.
-\item[{\tt ps1,~ps2}]
+\funcitem{ps1,~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
 {\tt '>>> '}
 and
 {\tt '... '}.
-\item[{\tt stdin, stdout, stderr}]
+\funcitem{stdin, stdout, stderr}
 %.br
 File objects corresponding to the interpreter's standard input, output
 and error streams.
@@ -664,9 +690,9 @@
 It is always available.
 Functions are:
 \begin{description}
-\item[{\tt sleep(secs)}]
+\funcitem{sleep}{secs}
 Suspends execution for the given number of seconds.
-\item[{\tt time()}]
+\funcitem{time}{}
 Returns the time in seconds since the Epoch (Thursday January 1,
 00:00:00, 1970 UCT on \UNIX\ machines).
 \end{description}
@@ -674,9 +700,9 @@
 \noindent
 In some versions (Amoeba, Mac) the following functions also exist:
 \begin{description}
-\item[{\tt millisleep(msecs)}]
+\funcitem{millisleep}{msecs}
 Suspends execution for the given number of milliseconds.
-\item[{\tt millitimer()}]
+\funcitem{millitimer}{}
 Returns 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).
@@ -686,6 +712,68 @@
 The granularity of the milliseconds functions may be more than a
 millisecond (100 msecs on Amoeba, 1/60 sec on the Mac).
 
+\subsection{Built-in Module {\tt regexp}}
+
+This module provides a regular expression matching operation.
+It is always available.
+
+The module defines a function and an exception:
+
+\begin{description}
+
+\funcitem{compile}{pattern}
+
+Compile a regular expression given as a string into a regular
+expression object.
+The string must be an egrep-style regular expression;
+this means that the characters {\tt '(' ')' '*' '+' '?' '|' '^' '$'}
+are special.
+(It is implemented using Henry Spencer's regular expression matching
+functions.)
+
+excitem{error}{regexp.error}
+
+Exception raised when a string passed to {\tt compile()} is not a
+valid regular expression (e.g., unmatched parentheses) or when some other
+error occurs during compilation or matching
+(``no match found'' is not an error).
+
+\end{description}
+
+Compiled regular expression objects support a single method:
+
+\begin{description}
+
+\funcitem{exec}{str}
+
+Find the first occurrence of the compiled regular expression in the
+string {\tt str}.
+The return value is a tuple of pairs specifying where a match was
+found and where matches were found for subpatterns specified with
+{\tt '('} and {\tt ')'} in the pattern.
+If no match is found, an empty tuple is returned; otherwise the first
+item of the tuple is a pair of slice indices into the search string
+giving the match found.
+If there were any subpatterns in the pattern, the returned tuple has an
+additional item for each subpattern, giving the slice indices into the
+search string where that subpattern was found.
+
+\end{description}
+
+For example:
+\bcode\begin{verbatim}
+>>> import regexp
+>>> r = regexp.compile('--(.*)--')
+>>> s = 'a--b--c'
+>>> r.exec(s)
+((1, 6), (3, 4))
+>>> s[1:6] # The entire match
+'--b--'
+>>> s[3:4] # The subpattern
+'b'
+>>> 
+\end{verbatim}\ecode
+
 \subsection{Built-in Module {\tt posix}}
 
 This module provides access to operating system functionality that is
@@ -695,15 +783,15 @@
 Errors are reported exceptions.
 It defines the following items:
 \begin{description}
-\item[{\tt chdir(path)}]
+\funcitem{chdir}{path}
 Changes the current directory to
 {\tt path}.
-\item[{\tt chmod(path, mode)}]
+\funcitem{chmod}{path, mode}
 Change the mode of
 {\tt path}
 to the numeric
 {\tt mode}.
-\item[{\tt environ}]
+\funcitem{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
@@ -713,7 +801,7 @@
 is the pathname of your home directory, equivalent to
 {\tt getenv("HOME")}
 in C.
-\item[{\tt error = 'posix.error'}]
+\excitem{error}{posix.error}
 %.br
 The exception raised when an POSIX function returns an error.
 The value accompanying this exception is a pair containing the numeric
@@ -721,14 +809,14 @@
 {\tt errno}
 and the corresponding string, as would be printed by the C function
 {\tt perror()}.
-\item[{\tt getcwd()}]
+\funcitem{getcwd}{}
 Returns a string representing the current working directory.
-\item[{\tt link(src, dst)}]
+\funcitem{link}{src, dst}
 Creates a hard link pointing to
 {\tt src}
 named
 {\tt dst}.
-\item[{\tt listdir(path)}]
+\funcitem{listdir}{path}
 Returns a list containing the names of the entries in the
 directory.
 The list is in arbitrary order.
@@ -737,20 +825,20 @@
 and
 {\tt '..'}
 if they are present in the directory.
-\item[{\tt mkdir(path, mode)}]
+\funcitem{mkdir}{path, mode}
 Creates a directory named
 {\tt path}
 with numeric mode
 {\tt mode}.
-\item[{\tt rename(src, dst)}]
+\funcitem{rename}{src, dst}
 Renames the file or directory
 {\tt src}
 to
 {\tt dst}.
-\item[{\tt rmdir(path)}]
+\funcitem{rmdir}{path}
 Removes the directory
 {\tt path}.
-\item[{\tt stat(path)}]
+\funcitem{stat}{path}
 Performs a
 {\em stat}
 system call on the given path.
@@ -769,7 +857,7 @@
 {\tt st\_mtime},
 {\tt st\_ctime}.
 More items may be added at the end by some implementations.
-\item[{\tt system(command)}]
+\funcitem{system}{command}
 Executes the command (a string) in a subshell.
 This is implemented by calling the Standard C function
 {\tt system()},
@@ -781,12 +869,12 @@
 The return value is the exit status of the process as returned by
 Standard C
 {\tt system()}.
-\item[{\tt umask(mask)}]
+\funcitem{umask}{mask}
 Sets the current numeric umask and returns the previous umask.
-\item[{\tt unlink(path)}]
+\funcitem{unlink}{path}
 Unlinks the file
 {\tt path}.
-\item[{\tt utimes(path, (atime, mtime))}]
+\funcitem{utimes(path, }{atime, mtime)}
 %.br
 Sets the access and modified time of the file to the given values.
 (The second argument is a tuple of two items.)
@@ -795,14 +883,14 @@
 The following functions are only available on systems that support
 symbolic links:
 \begin{description}
-\item[{\tt lstat(path)}]
+\funcitem{lstat}{path}
 Like
 {\tt stat()},
 but does not follow symbolic links.
-\item[{\tt readlink(path)}]
+\funcitem{readlink}{path}
 Returns a string representing the path to which the symbolic link
 points.
-\item[{\tt symlink(src, dst)}]
+\funcitem{symlink}{src, dst}
 Creates a symbolic link pointing to
 {\tt src}
 named
@@ -830,7 +918,7 @@
 
 The following functions are defined in the {\tt stdwin} module:
 \begin{description}
-\item[{\tt open(title)}]
+\funcitem{open}{title}
 %.br
 Opens a new window whose initial title is given by the string argument.
 Returns a window object; window object methods are described below.%
@@ -838,7 +926,7 @@
 The {\Python} version of STDWIN does not support draw procedures; all
 drawing requests are reported as draw events.
 }
-\item[{\tt getevent()}]
+\funcitem{getevent}{}
 %.br
 Waits for and returns the next event.
 An event is returned as a triple: the first element is the event
@@ -850,26 +938,26 @@
 Names for event types and command codes are defined in the standard
 module
 {\tt stdwinevent}.
-\item[{\tt setdefwinpos(h, v)}]
+\funcitem{setdefwinpos}{h, v}
 %.br
 Sets the default window position.
-\item[{\tt setdefwinsize(width, height)}]
+\funcitem{setdefwinsize}{width, height}
 %.br
 Sets the default window size.
-\item[{\tt menucreate(title)}]
+\funcitem{menucreate}{title}
 %.br
 Creates a menu object referring to a global menu (a menu that appears in
 all windows).
 Methods of menu objects are described below.
-\item[{\tt fleep()}]
+\funcitem{fleep}{}
 %.br
 Causes a beep or bell (or perhaps a `visual bell' or flash, hence the
 name).
-\item[{\tt message(string)}]
+\funcitem{message}{string}
 %.br
 Displays a dialog box containing the string.
 The user must click OK before the function returns.
-\item[{\tt askync(prompt, default)}]
+\funcitem{askync}{prompt, default}
 %.br
 Displays a dialog that prompts the user to answer a question with yes or
 no.
@@ -879,14 +967,14 @@
 If the user cancels the dialog, the
 {\tt KeyboardInterrupt}
 exception is raised.
-\item[{\tt askstr(prompt, default)}]
+\funcitem{askstr}{prompt, default}
 %.br
 Displays 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
 {\tt KeyboardInterrupt}
 exception is raised.
-\item[{\tt askfile(prompt, default, new)}]
+\funcitem{askfile}{prompt, default, new}
 %.br
 Asks the user to specify a filename.
 If
@@ -895,23 +983,23 @@
 If the user cancels the dialog, the
 {\tt KeyboardInterrupt}
 exception is raised.
-\item[{\tt setcutbuffer(i, string)}]
+\funcitem{setcutbuffer}{i, string}
 %.br
 Stores the string in the system's cut buffer number
 {\tt 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.
-\item[{\tt getcutbuffer(i)}]
+\funcitem{getcutbuffer}{i}
 %.br
 Returns the contents of the system's cut buffer number
 {\tt i}.
-\item[{\tt rotatebutbuffers(n)}]
+\funcitem{rotatebutbuffers}{n}
 %.br
 On X11, this rotates the 8 cut buffers by
 {\tt n}.
 Ignored on the Macintosh.
-\item[{\tt getselection(i)}]
+\funcitem{getselection}{i}
 %.br
 Returns X11 selection number
 {\tt i.}
@@ -930,14 +1018,14 @@
 selection (used by
 xclipboard).
 On the Macintosh, this always returns an empty string.
-\item[{\tt resetselection(i)}]
+\funcitem{resetselection}{i}
 %.br
 Resets selection number
 {\tt i},
 if this process owns it.
 (See window method
 {\tt setselection()}).
-\item[{\tt baseline()}]
+\funcitem{baseline}{}
 %.br
 Return the baseline of the current font (defined by STDWIN as the
 vertical distance between the baseline and the top of the
@@ -946,15 +1034,15 @@
 There is no way yet to set the current font.
 This will change in a future version.
 }
-\item[{\tt lineheight()}]
+\funcitem{lineheight}{}
 %.br
 Return the total line height of the current font.
-\item[{\tt textbreak(str, width)}]
+\funcitem{textbreak}{str, width}
 %.br
 Return the number of characters of the string that fit into a space of
 {\tt width}
 bits wide when drawn in the curent font.
-\item[{\tt textwidth(str)}]
+\funcitem{textwidth}{str}
 %.br
 Return the width in bits of the string when drawn in the current font.
 \end{description}
@@ -967,30 +1055,30 @@
 they are garbage-collected.
 Window objects have the following methods:
 \begin{description}
-\item[{\tt begindrawing()}]
+\funcitem{begindrawing}{}
 Returns a drawing object, whose methods (described below) allow drawing
 in the window.
-\item[{\tt change(rect)}]
+\funcitem{change}{rect}
 Invalidates the given rectangle; this may cause a draw event.
-\item[{\tt gettitle()}]
+\funcitem{gettitle}{}
 Returns the window's title string.
-\item[{\tt getdocsize()}]
+\funcitem{getdocsize}{}
 \begin{sloppypar}
 Returns a pair of integers giving the size of the document as set by
 {\tt setdocsize()}.
 \end{sloppypar}
-\item[{\tt getorigin()}]
+\funcitem{getorigin}{}
 Returns a pair of integers giving the origin of the window with respect
 to the document.
-\item[{\tt getwinsize()}]
+\funcitem{getwinsize}{}
 Returns a pair of integers giving the size of the window.
-\item[{\tt menucreate(title)}]
+\funcitem{menucreate}{title}
 Creates a menu object referring to a local menu (a menu that appears
 only in this window).
 Methods menu objects are described below.
-\item[{\tt scroll(rect,~point)}]
+\funcitem{scroll}{rect,~point}
 Scrolls the given rectangle by the vector given by the point.
-\item[{\tt setwincursor(name)}]
+\funcitem{setwincursor}{name}
 \begin{sloppypar}
 Sets the window cursor to a cursor of the given name.
 It raises the
@@ -1006,11 +1094,11 @@
 On X11, there are many more (see
 {\tt <X11/cursorfont.h>}).
 \end{sloppypar}
-\item[{\tt setdocsize(point)}]
+\funcitem{setdocsize}{point}
 Sets the size of the drawing document.
-\item[{\tt setorigin(point)}]
+\funcitem{setorigin}{point}
 Moves the origin of the window to the given point in the document.
-\item[{\tt setselection(i, str)}]
+\funcitem{setselection}{i, str}
 Attempts to set X11 selection number
 {\tt i}
 to the string
@@ -1030,16 +1118,16 @@
 event is received for no particular window and with the selection number
 as detail.
 Ignored on the Macintosh.
-\item[{\tt settitle(title)}]
+\funcitem{settitle}{title}
 Sets the window's title string.
-\item[{\tt settimer(dsecs)}]
+\funcitem{settimer}{dsecs}
 Schedules a timer event for the window in
 {\tt dsecs/10}
 seconds.
-\item[{\tt show(rect)}]
+\funcitem{show}{rect}
 Tries to ensure that the given rectangle of the document is visible in
 the window.
-\item[{\tt textcreate(rect)}]
+\funcitem{textcreate}{rect}
 Creates a text-edit object in the document at the given rectangle.
 Methods of text-edit objects are described below.
 \end{description}
@@ -1055,12 +1143,12 @@
 is called.
 Drawing objects have the following methods:
 \begin{description}
-\item[{\tt box(rect)}]
+\funcitem{box}{rect}
 Draws a box around a rectangle.
-\item[{\tt circle(center, radius)}]
+\funcitem{circle}{center, radius}
 %.br
 Draws a circle with given center point and radius.
-\item[{\tt elarc(center, (rh, rv), (a1, a2))}]
+\funcitem{elarc(center, (rh, rv), }{a1, a2)}
 %.br
 Draws an elliptical arc with given center point.
 {\tt (rh, rv)}
@@ -1068,28 +1156,28 @@
 {\tt (a1, 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.
-\item[{\tt erase(rect)}]
+\funcitem{erase}{rect}
 Erases a rectangle.
-\item[{\tt invert(rect)}]
+\funcitem{invert}{rect}
 Inverts a rectangle.
-\item[{\tt line(p1, p2)}]
+\funcitem{line}{p1, p2}
 Draws a line from point
 {\tt p1}
 to
 {\tt p2}.
-\item[{\tt paint(rect)}]
+\funcitem{paint}{rect}
 Fills a rectangle.
-\item[{\tt text(p, str)}]
+\funcitem{text}{p, str}
 Draws a string starting at point p (the point specifies the
 top left coordinate of the string).
-\item[{\tt shade(rect, percent)}]
+\funcitem{shade}{rect, percent}
 %.br
 Fills a rectangle with a shading pattern that is about
 {\tt percent}
 percent filled.
-\item[{\tt xorline(p1, p2)}]
+\funcitem{xorline}{p1, p2}
 Draws a line in XOR mode.
-\item[{\tt baseline(), lineheight(), textbreak(), textwidth()}]
+\funcitem{baseline(), lineheight(), textbreak(), textwidth}{}
 %.br
 These functions are similar to the corresponding functions described
 above for the
@@ -1104,18 +1192,18 @@
 The menu is destroyed when the menu object is deleted.
 The following methods are defined:
 \begin{description}
-\item[{\tt additem(text, shortcut)}]
+\funcitem{additem}{text, shortcut}
 %.br
 Adds a menu item with given text.
 The shortcut must be a string of length 1, or omitted (to specify no
 shortcut).
-\item[{\tt setitem(i, text)}]
+\funcitem{setitem}{i, text}
 Sets the text of item number
 {\tt i}.
-\item[{\tt enable(i, flag)}]
+\funcitem{enable}{i, flag}
 Enables or disables item
 {\tt i}.
-\item[{\tt check(i, flag)}]
+\funcitem{check}{i, flag}
 Sets or clears the
 {\em check mark}
 for item
@@ -1128,7 +1216,7 @@
 For semantics, see the STDWIN documentation for C programmers.
 The following methods exist:
 \begin{description}
-\item[{\tt arrow(code)}]
+\funcitem{arrow}{code}
 Passes an arrow event to the text-edit block.
 The
 {\tt code}
@@ -1140,37 +1228,63 @@
 {\tt WC\_DOWN}
 (see module
 {\tt stdwinevents}).
-\item[{\tt draw(rect)}]
+\funcitem{draw}{rect}
 Passes a draw event to the text-edit block.
 The rectangle specifies the redraw area.
-\item[{\tt event(type, window, detail)}]
+\funcitem{event}{type, window, detail}
 %.br
 Passes an event gotten from
 {\tt stdwin.getevent()}
 to the text-edit block.
 Returns true if the event was handled.
-\item[{\tt getfocus()}]
+\funcitem{getfocus}{}
 Returns 2 integers representing the start and end positions of the
 focus, usable as slice indices on the string returned by
 {\tt getfocustext()}.
-\item[{\tt getfocustext()}]
+\funcitem{getfocustext}{}
 Returns the text in the focus.
-\item[{\tt getrect()}]
+\funcitem{getrect}{}
 Returns 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.)
-\item[{\tt gettext()}]
+\funcitem{gettext}{}
 Returns the entire text buffer.
-\item[{\tt move(rect)}]
+\funcitem{move}{rect}
 Specifies a new position for the text-edit block in the document.
-\item[{\tt replace(str)}]
+\funcitem{replace}{str}
 Replaces the focus by the given string.
 The new focus is an insert point at the end of the string.
-\item[{\tt setfocus(i,~j)}]
+\funcitem{setfocus}{i,~j}
 Specifies the new focus.
 Out-of-bounds values are silently clipped.
 \end{description}
 
+\subsubsection{Example}
+
+Here is a simple 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
+
 \subsection{Built-in Module {\tt amoeba}}
 
 This module provides some object types and operations useful for
@@ -1182,24 +1296,24 @@
 {\tt amoeba}
 defines the following items:
 \begin{description}
-\item[{\tt name\_append(path,~cap)}]
+\funcitem{name\_append}{path,~cap}
 %.br
 Stores a capability in the Amoeba directory tree.
 Arguments are the pathname (a string) and the capability (a capability
 object as returned by
 {\tt name\_lookup()}).
-\item[{\tt name\_delete(path)}]
+\funcitem{name\_delete}{path}
 %.br
 Deletes a capability from the Amoeba directory tree.
 Argument is the pathname.
-\item[{\tt name\_lookup(path)}]
+\funcitem{name\_lookup}{path}
 %.br
 Looks up a capability.
 Argument is the pathname.
 Returns a
 {\em capability}
 object, to which various interesting operations apply, described below.
-\item[{\tt name\_replace(path,~cap)}]
+\funcitem{name\_replace}{path,~cap}
 %.br
 Replaces a capability in the Amoeba directory tree.
 Arguments are the pathname and the new capability.
@@ -1210,7 +1324,7 @@
 finds this an error while
 {\tt name\_replace()}
 allows it, as its name suggests.)
-\item[{\tt capv}]
+\funcitem{capv}
 A table representing the capability environment at the time the
 interpreter was started.
 (Alas, modifying this table does not affect the capability environment
@@ -1220,13 +1334,13 @@
 is the capability of your root directory, similar to
 {\tt getcap("ROOT")}
 in C.
-\item[{\tt error = 'amoeba.error'}]
+\excitem{error}{amoeba.error}
 %.br
 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
 {\tt err\_why()}.
-\item[{\tt timeout(msecs)}]
+\funcitem{timeout}{msecs}
 %.br
 Sets the transaction timeout, in milliseconds.
 Returns the previous timeout.
@@ -1248,9 +1362,9 @@
 \end{verbatim}\ecode
 The following methods are defined for capability objects.
 \begin{description}
-\item[{\tt dir\_list()}]
+\funcitem{dir\_list}{}
 Returns a list of the names of the entries in an Amoeba directory.
-\item[{\tt b\_read(offset, maxsize)}]
+\funcitem{b\_read}{offset, maxsize}
 %.br
 Reads (at most)
 {\tt maxsize}
@@ -1258,9 +1372,9 @@
 {\tt offset.}
 The data is returned as a string.
 EOF is reported as an empty string.
-\item[{\tt b\_size()}]
+\funcitem{b\_size}{}
 Returns the size of a bullet file.
-\item[{\tt dir\_append(), dir\_delete(), dir\_lookup(), dir\_replace()}]
+\funcitem{dir\_append(), dir\_delete(), dir\_lookup(), dir\_replace}{}
 %.br
 \itembreak
 Like the corresponding
@@ -1268,12 +1382,12 @@
 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.)
-\item[{\tt std\_info()}]
+\funcitem{std\_info}{}
 Returns the standard info string of the object.
-\item[{\tt tod\_gettime()}]
+\funcitem{tod\_gettime}{}
 Returns the time (in seconds since the Epoch, in UCT, as for POSIX) from
 a time server.
-\item[{\tt tod\_settime(t)}]
+\funcitem{tod\_settime}{t}
 Sets the time kept by a time server.
 \end{description}
 
@@ -1284,15 +1398,15 @@
 on the Silicon Graphics Personal IRIS; see audio(7).
 It supports the following operations:
 \begin{description}
-\item[{\tt setoutgain(n)}]
+\funcitem{setoutgain}{n}
 Sets the output gain (0-255).
-\item[{\tt getoutgain()}]
+\funcitem{getoutgain}{}
 Returns the output gain.
-\item[{\tt setrate(n)}]
+\funcitem{setrate}{n}
 Sets the sampling rate: 1=32K/sec, 2=16K/sec, 3=8K/sec.
-\item[{\tt setduration(n)}]
+\funcitem{setduration}{n}
 Sets the `sound duration' in units of 1/100 seconds.
-\item[{\tt read(n)}]
+\funcitem{read}{n}
 Reads a chunk of
 {\tt n}
 sampled bytes from the audio input (line in or microphone).
@@ -1301,26 +1415,26 @@
 encoding.
 This string can be converted to numbers using {\tt chr2num()} described
 below.
-\item[{\tt write(buf)}]
+\funcitem{write}{buf}
 Writes a chunk of samples to the audio output (speaker).
 \end{description}
 
 These operations support asynchronous audio I/O:
 \begin{description}
-\item[{\tt start\_recording(n)}]
+\funcitem{start\_recording}{n}
 %.br
 Starts a second thread (a process with shared memory) that begins reading
 {\tt n}
 bytes from the audio device.
 The main thread immediately continues.
-\item[{\tt wait\_recording()}]
+\funcitem{wait\_recording}{}
 %.br
 Waits for the second thread to finish and returns the data read.
-\item[{\tt stop\_recording()}]
+\funcitem{stop\_recording}{}
 %.br
 Makes the second thread stop reading as soon as possible.
 Returns the data read so far.
-\item[{\tt poll\_recording()}]
+\funcitem{poll\_recording}{}
 %.br
 Returns true if the second thread has finished reading (so
 {\tt wait\_recording()} would return the data without delay).
@@ -1338,25 +1452,25 @@
 The following operations do not affect the audio device but are
 implemented in C for efficiency:
 \begin{description}
-\item[{\tt amplify(buf, f1, f2)}]
+\funcitem{amplify}{buf, f1, f2}
 %.br
 Amplifies a chunk of samples by a variable factor changing from
 {\tt f1}/256 to {\tt f2}/256.
 Negative factors are allowed.
 Resulting values that are to large to fit in a byte are clipped.         
-\item[{\tt reverse(buf)}]
+\funcitem{reverse}{buf}
 %.br
 Returns a chunk of samples backwards.
-\item[{\tt add(buf1, buf2)}]
+\funcitem{add}{buf1, buf2}
 %.br
 Bytewise adds two chunks of samples.
 Bytes that exceed the range are clipped.
 If one buffer shorter, it is assumed to be padded with zeros.
-\item[{\tt chr2num(buf)}]
+\funcitem{chr2num}{buf}
 %.br
 Converts a string of sampled bytes as returned by {\tt read()} into
 a list containing the numeric values of the samples.
-\item[{\tt num2chr(list)}]
+\funcitem{num2chr}{list}
 %.br
 \begin{sloppypar}
 Converts a list as returned by
@@ -1433,7 +1547,7 @@
 The following functions are non-standard or have special argument
 conventions:
 \begin{description}
-\item[{\tt varray()}]
+\funcitem{varray}{}
 Equivalent to but faster than a number of
 {\tt v3d()}
 calls.
@@ -1447,7 +1561,7 @@
 and for each point
 {\tt v3d()}
 is called.
-\item[{\tt nvarray()}]
+\funcitem{nvarray}{}
 Equivalent to but faster than a number of
 {\tt n3f}
 and
@@ -1463,11 +1577,11 @@
 is called for the normal, and then
 {\tt v3f()}
 is called for the point.
-\item[{\tt vnarray()}]
+\funcitem{vnarray}{}
 Similar to 
 {\tt nvarray()}
 but the pairs have the point first and the normal second.
-\item[{\tt nurbssurface(s\_k[], t\_k[], ctl[][], s\_ord, t\_ord, type)}]
+\funcitem{nurbssurface}{s\_k[], t\_k[], ctl[][], s\_ord, t\_ord, type}
 %.br
 \itembreak
 Defines a nurbs surface.
@@ -1476,12 +1590,12 @@
 are computed as follows:
 {\tt [len(s\_k)~-~s\_ord]},
 {\tt [len(t\_k)~-~t\_ord]}.
-\item[{\tt nurbscurve(knots, ctlpoints, order, type)}]
+\funcitem{nurbscurve}{knots, ctlpoints, order, type}
 %.br
 Defines a nurbs curve.
 The length of ctlpoints is
 {\tt len(knots)~-~order}.
-\item[{\tt pwlcurve(points, type)}]
+\funcitem{pwlcurve}{points, type}
 %.br
 Defines a piecewise-linear curve.
 {\tt points}
@@ -1489,11 +1603,11 @@
 {\tt type}
 must be
 {\tt N\_ST}.
-\item[{\tt pick(n), select(n)}]
+\funcitem{pick(n), select}{n}
 %.br
 The only argument to these functions specifies the desired size of the
 pick or select buffer.
-\item[{\tt endpick(), endselect()}]
+\funcitem{endpick(), endselect}{}
 %.br
 These functions have no arguments.
 They return a list of integers representing the used part of the
@@ -1560,28 +1674,28 @@
 classes, some exceptions, and some useful string functions.
 The constants are:
 \begin{description}
-\item[{\tt digits}]
+\funcitem{digits}
 The string
 {\tt '0123456789'}.
-\item[{\tt hexdigits}]
+\funcitem{hexdigits}
 The string
 {\tt '0123456789abcdefABCDEF'}.
-\item[{\tt letters}]
+\funcitem{letters}
 The concatenation of the strings
 {\tt lowercase}
 and
 {\tt uppercase}
 described below.
-\item[{\tt lowercase}]
+\funcitem{lowercase}
 The string
 {\tt 'abcdefghijklmnopqrstuvwxyz'}.
-\item[{\tt octdigits}]
+\funcitem{octdigits}
 The string
 {\tt '01234567'}.
-\item[{\tt uppercase}]
+\funcitem{uppercase}
 The string
 {\tt 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}.
-\item[{\tt whitespace}]
+\funcitem{whitespace}
 A string containing all characters that are considered whitespace,
 i.e.,
 space, tab and newline.
@@ -1593,13 +1707,13 @@
 
 The exceptions are:
 \begin{description}
-\item[{\tt atoi\_error = 'non-numeric argument to string.atoi'}]
+\excitem{atoi\_error}{non-numeric argument to string.atoi}
 %.br
 Exception raised by
 {\tt atoi}
 when a non-numeric string argument is detected.
 The exception argument is the offending string.
-\item[{\tt index\_error = 'substring not found in string.index'}]
+\excitem{index\_error}{substring not found in string.index}
 %.br
 Exception raised by
 {\tt index}
@@ -1611,22 +1725,22 @@
 
 The functions are:
 \begin{description}
-\item[{\tt atoi(s)}]
+\funcitem{atoi}{s}
 Converts a string to a number.
 The string must consist of one or more digits, optionally preceded by a
 sign ({\tt '+'} or {\tt '-'}).
-\item[{\tt index(s, sub)}]
+\funcitem{index}{s, sub}
 Returns the lowest index in
 {\tt s}
 where the substring
 {\tt sub}
 is found.
-\item[{\tt lower(s)}]
+\funcitem{lower}{s}
 Convert letters to lower case.
-\item[{\tt split(s)}]
+\funcitem{split}{s}
 Returns a list of the whitespace-delimited words of the string
 {\tt s}.
-\item[{\tt splitfields(s, sep)}]
+\funcitem{splitfields}{s, sep}
 %.br
 Returns a list containing the fields of the string
 {\tt s},
@@ -1640,14 +1754,14 @@
 is not the same as
 {\tt string.split(s)},
 as the latter only returns non-empty words.
-\item[{\tt strip(s)}]
+\funcitem{strip}{s}
 Removes leading and trailing whitespace from the string
 {\tt s}.
-\item[{\tt swapcase(s)}]
+\funcitem{swapcase}{s}
 Converts lower case letters to upper case and vice versa.
-\item[{\tt upper(s)}]
+\funcitem{upper}{s}
 Convert letters to upper case.
-\item[{\tt ljust(s, width), rjust(s, width),  center(s, width)}]
+\funcitem{ljust(s, width), rjust(s, width),  center}{s, width}
 %.br
 These functions respectively left-justify, right-justify and center a
 string in a field of given width.
@@ -1663,12 +1777,12 @@
 
 This module implements some useful functions on POSIX pathnames.
 \begin{description}
-\item[{\tt basename(p)}]
+\funcitem{basename}{p}
 Returns the base name of pathname
 {\tt p}.
 This is the second half of the pair returned by
 {\tt path.split(p)}.
-\item[{\tt cat(p, q)}]
+\funcitem{cat}{p, q}
 Performs intelligent pathname concatenation on paths
 {\tt p}
 and
@@ -1684,27 +1798,27 @@
 is returned, with a slash ({\tt '/'}) inserted unless
 {\tt p}
 is empty or ends in a slash.
-\item[{\tt commonprefix(list)}]
+\funcitem{commonprefix}{list}
 %.br
 Returns the longest string that is a prefix of all strings in
 {\tt list}.
 If
 {\tt list}
 is empty, the empty string ({\tt ''}) is returned.
-\item[{\tt exists(p)}]
+\funcitem{exists}{p}
 Returns true if
 {\tt p}
 refers to an existing path.
-\item[{\tt isdir(p)}]
+\funcitem{isdir}{p}
 Returns true if
 {\tt p}
 refers to an existing directory.
-\item[{\tt islink(p)}]
+\funcitem{islink}{p}
 Returns true if
 {\tt p}
 refers to a directory entry that is a symbolic link.
 Always false if symbolic links are not supported.
-\item[{\tt ismount(p)}]
+\funcitem{ismount}{p}
 Returns true if
 {\tt p}
 is an absolute path that occurs in the mount table as output by the
@@ -1715,7 +1829,7 @@
 \footnote{
 Is there a better way to check for mount points?
 }
-\item[{\tt split(p)}]
+\funcitem{split}{p}
 Returns a pair
 {\tt (head,~tail)}
 such that
@@ -1724,7 +1838,7 @@
 {\tt path.cat(head, tail)}
 is equal to
 {\tt p}.
-\item[{\tt walk(p, visit, arg)}]
+\funcitem{walk}{p, visit, arg}
 %.br
 Calls the function
 {\tt visit}
@@ -1816,12 +1930,12 @@
 in C.
 It defines the following functions:
 \begin{description}
-\item[{\tt rand()}]
+\funcitem{rand}{}
 Returns an integer random number in the range [0 ... 32768).
-\item[{\tt choice(s)}]
+\funcitem{choice}{s}
 Returns a random element from the sequence (string, tuple or list)
 {\tt s.}
-\item[{\tt srand(seed)}]
+\funcitem{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.
@@ -1832,9 +1946,9 @@
 This module implements a Wichmann-Hill pseudo-random number generator.
 It defines the following functions:
 \begin{description}
-\item[{\tt random()}]
+\funcitem{random}{}
 Returns the next random floating point number in the range [0.0 ... 1.0).
-\item[{\tt seed(x, y, z)}]
+\funcitem{seed}{x, y, z}
 Initializes the random number generator from the integers
 {\tt x},
 {\tt y}
@@ -1873,13 +1987,13 @@
 
 The module defines the following objects:
 \begin{description}
-\item[{\tt error = 'rect.error'}]
+\excitem{error}{rect.error}
 %.br
 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.
-\item[{\tt empty}]
+\funcitem{empty}
 %.br
 The rectangle returned when some operations return an empty result.
 This makes it possible to quickly check whether a result is empty:
@@ -1892,7 +2006,7 @@
 Empty intersection
 >>> 
 \end{verbatim}\ecode
-\item[{\tt is\_empty(r)}]
+\funcitem{is\_empty}{r}
 %.br
 Returns true if the given rectangle is empty.
 A rectangle
@@ -1901,7 +2015,7 @@
 {\em left~$\geq$~right}
 or
 {\em top~$\leq$~bottom}.
-\item[{\tt intersect(list)}]
+\funcitem{intersect}{list}
 %.br
 Returns the intersection of all rectangles in the list argument.
 It may also be called with a tuple argument or with two or more
@@ -1912,7 +2026,7 @@
 Returns
 {\tt rect.empty}
 if the intersection of the rectangles is empty.
-\item[{\tt union(list)}]
+\funcitem{union}{list}
 %.br
 Returns the smallest rectangle that contains all non-empty rectangles in
 the list argument.
@@ -1921,7 +2035,7 @@
 Returns
 {\tt rect.empty}
 if the list is empty or all its rectangles are empty.
-\item[{\tt pointinrect(point, rect)}]
+\funcitem{pointinrect}{point, rect}
 %.br
 Returns true if the point is inside the rectangle.
 By definition, a point
@@ -1933,7 +2047,7 @@
 {\em left~$\leq$~h~$<$~right}
 and
 {\em top~$\leq$~v~$<$~bottom}.
-\item[{\tt inset(rect, (dh, dv))}]
+\funcitem{inset(rect, }{dh, dv)}
 %.br
 Returns a rectangle that lies inside the
 {\tt rect}
@@ -1950,12 +2064,12 @@
 {\tt dv}
 is negative, the result lies outside
 {\tt rect}.
-\item[{\tt rect2geom(rect)}]
+\funcitem{rect2geom}{rect}
 %.br
 Converts a rectangle to geometry representation:
 {\em (left,~top),}
 {\em (width,~height)}.
-\item[{\tt geom2rect(geom)}]
+\funcitem{geom2rect}{geom}
 %.br
 Converts a rectangle given in geometry representation back to the
 standard rectangle representation
@@ -1983,7 +2097,7 @@
 The module is too large to document here in its entirety.
 One interesting function:
 \begin{description}
-\item[{\tt defpanellist(filename)}]
+\funcitem{defpanellist}{filename}
 %.br
 Parses a panel description file containing S-expressions written by the
 {\em Panel Editor}
@@ -2011,9 +2125,10 @@
 to {\Python} strings and sub-expressions (recursively) to {\Python} lists.
 For more details, read the module file.
 
-\subsection{P.M.}
+\section{P.M.}
 
 \begin{verse}
+
 commands
 
 cmp?
@@ -2025,6 +2140,9 @@
 calendar?
 
 \_\_dict?
+
+mac?
+
 \end{verse}
 
 \end{document}
