diff --git a/Doc/ext.tex b/Doc/ext.tex
index af745f1..57223d4 100644
--- a/Doc/ext.tex
+++ b/Doc/ext.tex
@@ -74,9 +74,9 @@
 
 Let's create an extension module called \samp{spam} (the favorite food
 of Monty Python fans...) and let's say we want to create a Python
-interface to the \C{} library function \code{system()}.\footnote{An
+interface to the \C{} library function \cfunction{system()}.\footnote{An
 interface for this function already exists in the standard module
-\code{os} --- it was chosen as a simple and straightfoward example.}
+\module{os} --- it was chosen as a simple and straightfoward example.}
 This function takes a null-terminated character string as argument and
 returns an integer.  We want this function to be callable from Python
 as follows:
@@ -106,8 +106,8 @@
 interpreter, \code{"Python.h"} includes a few standard header files:
 \code{<stdio.h>}, \code{<string.h>}, \code{<errno.h>}, and
 \code{<stdlib.h>}.  If the latter header file does not exist on your
-system, it declares the functions \code{malloc()}, \code{free()} and
-\code{realloc()} directly.
+system, it declares the functions \cfunction{malloc()},
+\cfunction{free()} and \cfunction{realloc()} directly.
 
 The next thing we add to our module file is the \C{} function that will
 be called when the Python expression \samp{spam.system(\var{string})}
@@ -166,42 +166,43 @@
 are stored in a static global variable inside the interpreter; if this
 variable is \NULL{} no exception has occurred.  A second global
 variable stores the ``associated value'' of the exception (the second
-argument to \code{raise}).  A third variable contains the stack
+argument to \keyword{raise}).  A third variable contains the stack
 traceback in case the error originated in Python code.  These three
 variables are the \C{} equivalents of the Python variables
 \code{sys.exc_type}, \code{sys.exc_value} and \code{sys.exc_traceback}
-(see the section on module \code{sys} in the Library Reference
-Manual).  It is important to know about them to understand how errors
-are passed around.
+(see the section on module \module{sys} in the \emph{Python Library
+Reference}).  It is important to know about them to understand how
+errors are passed around.
 
 The Python API defines a number of functions to set various types of
 exceptions.
 
-The most common one is \code{PyErr_SetString()}.  Its arguments are an
-exception object and a \C{} string.  The exception object is usually a
-predefined object like \code{PyExc_ZeroDivisionError}.  The \C{} string
-indicates the cause of the error and is converted to a Python string
-object and stored as the ``associated value'' of the exception.
+The most common one is \cfunction{PyErr_SetString()}.  Its arguments
+are an exception object and a \C{} string.  The exception object is
+usually a predefined object like \cdata{PyExc_ZeroDivisionError}.  The
+\C{} string indicates the cause of the error and is converted to a
+Python string object and stored as the ``associated value'' of the
+exception.
 
-Another useful function is \code{PyErr_SetFromErrno()}, which only
+Another useful function is \cfunction{PyErr_SetFromErrno()}, which only
 takes an exception argument and constructs the associated value by
-inspection of the (\UNIX{}) global variable \code{errno}.  The most
-general function is \code{PyErr_SetObject()}, which takes two object
+inspection of the (\UNIX{}) global variable \cdata{errno}.  The most
+general function is \cfunction{PyErr_SetObject()}, which takes two object
 arguments, the exception and its associated value.  You don't need to
-\code{Py_INCREF()} the objects passed to any of these functions.
+\cfunction{Py_INCREF()} the objects passed to any of these functions.
 
 You can test non-destructively whether an exception has been set with
-\code{PyErr_Occurred()}.  This returns the current exception object,
+\cfunction{PyErr_Occurred()}.  This returns the current exception object,
 or \NULL{} if no exception has occurred.  You normally don't need
-to call \code{PyErr_Occurred()} to see whether an error occurred in a
+to call \cfunction{PyErr_Occurred()} to see whether an error occurred in a
 function call, since you should be able to tell from the return value.
 
 When a function \var{f} that calls another function \var{g} detects
 that the latter fails, \var{f} should itself return an error value
 (e.g. \NULL{} or \code{-1}).  It should \emph{not} call one of the
-\code{PyErr_*()} functions --- one has already been called by \var{g}.
+\cfunction{PyErr_*()} functions --- one has already been called by \var{g}.
 \var{f}'s caller is then supposed to also return an error indication
-to \emph{its} caller, again \emph{without} calling \code{PyErr_*()},
+to \emph{its} caller, again \emph{without} calling \cfunction{PyErr_*()},
 and so on --- the most detailed cause of the error was already
 reported by the function that first detected it.  Once the error
 reaches the Python interpreter's main loop, this aborts the currently
@@ -209,44 +210,44 @@
 by the Python programmer.
 
 (There are situations where a module can actually give a more detailed
-error message by calling another \code{PyErr_*()} function, and in
+error message by calling another \cfunction{PyErr_*()} function, and in
 such cases it is fine to do so.  As a general rule, however, this is
 not necessary, and can cause information about the cause of the error
 to be lost: most operations can fail for a variety of reasons.)
 
 To ignore an exception set by a function call that failed, the exception
-condition must be cleared explicitly by calling \code{PyErr_Clear()}. 
-The only time \C{} code should call \code{PyErr_Clear()} is if it doesn't
+condition must be cleared explicitly by calling \cfunction{PyErr_Clear()}. 
+The only time \C{} code should call \cfunction{PyErr_Clear()} is if it doesn't
 want to pass the error on to the interpreter but wants to handle it
 completely by itself (e.g. by trying something else or pretending
 nothing happened).
 
-Note that a failing \code{malloc()} call must be turned into an
-exception --- the direct caller of \code{malloc()} (or
-\code{realloc()}) must call \code{PyErr_NoMemory()} and return a
-failure indicator itself.  All the object-creating functions
-(\code{PyInt_FromLong()} etc.) already do this, so only if you call
-\code{malloc()} directly this note is of importance.
+Note that a failing \cfunction{malloc()} call must be turned into an
+exception --- the direct caller of \cfunction{malloc()} (or
+\cfunction{realloc()}) must call \cfunction{PyErr_NoMemory()} and
+return a failure indicator itself.  All the object-creating functions
+(\cfunction{PyInt_FromLong()} etc.) already do this, so only if you
+call \cfunction{malloc()} directly this note is of importance.
 
 Also note that, with the important exception of
 \cfunction{PyArg_ParseTuple()} and friends, functions that return an
 integer status usually return a positive value or zero for success and
 \code{-1} for failure, like \UNIX{} system calls.
 
-Finally, be careful to clean up garbage (by making \code{Py_XDECREF()}
-or \code{Py_DECREF()} calls for objects you have already created) when
-you return an error indicator!
+Finally, be careful to clean up garbage (by making
+\cfunction{Py_XDECREF()} or \cfunction{Py_DECREF()} calls for objects
+you have already created) when you return an error indicator!
 
 The choice of which exception to raise is entirely yours.  There are
 predeclared \C{} objects corresponding to all built-in Python exceptions,
-e.g. \code{PyExc_ZeroDevisionError} which you can use directly.  Of
+e.g. \cdata{PyExc_ZeroDevisionError} which you can use directly.  Of
 course, you should choose exceptions wisely --- don't use
-\code{PyExc_TypeError} to mean that a file couldn't be opened (that
-should probably be \code{PyExc_IOError}).  If something's wrong with
+\cdata{PyExc_TypeError} to mean that a file couldn't be opened (that
+should probably be \cdata{PyExc_IOError}).  If something's wrong with
 the argument list, the \cfunction{PyArg_ParseTuple()} function usually
-raises \code{PyExc_TypeError}.  If you have an argument whose value
+raises \cdata{PyExc_TypeError}.  If you have an argument whose value
 which must be in a particular range or must satisfy other conditions,
-\code{PyExc_ValueError} is appropriate.
+\cdata{PyExc_ValueError} is appropriate.
 
 You can also define a new exception that is unique to your module.
 For this, you usually declare a static object variable at the
@@ -257,8 +258,8 @@
 \end{verbatim}
 
 and initialize it in your module's initialization function
-(\code{initspam()}) with a string object, e.g. (leaving out the error
-checking for now):
+(\cfunction{initspam()}) with an exception object, e.g. (leaving out
+the error checking for now):
 
 \begin{verbatim}
 void
@@ -267,16 +268,19 @@
     PyObject *m, *d;
     m = Py_InitModule("spam", SpamMethods);
     d = PyModule_GetDict(m);
-    SpamError = PyString_FromString("spam.error");
+    SpamError = PyErr_NewException("spam.error", NULL, NULL);
     PyDict_SetItemString(d, "error", SpamError);
 }
 \end{verbatim}
 
 Note that the Python name for the exception object is
-\code{spam.error}.  It is conventional for module and exception names
-to be spelled in lower case.  It is also conventional that the
-\emph{value} of the exception object is the same as its name, e.g.\
-the string \code{"spam.error"}.
+\exception{spam.error}.  The \cfunction{PyErr_NewException()} function
+may create either a string or class, depending on whether the
+\samp{-X} flag was passed to the interpreter.  If \samp{-X} was used,
+\cdata{SpamError} will be a string object, otherwise it will be a
+class object with the base class being \exception{Exception},
+described in the \emph{Python Library Reference} under ``Built-in
+Exceptions.''
 
 
 \section{Back to the Example}
@@ -294,24 +298,25 @@
 object pointers) if an error is detected in the argument list, relying
 on the exception set by \cfunction{PyArg_ParseTuple()}.  Otherwise the
 string value of the argument has been copied to the local variable
-\code{command}.  This is a pointer assignment and you are not supposed
+\cdata{command}.  This is a pointer assignment and you are not supposed
 to modify the string to which it points (so in Standard \C{}, the variable
-\code{command} should properly be declared as \samp{const char
+\cdata{command} should properly be declared as \samp{const char
 *command}).
 
-The next statement is a call to the \UNIX{} function \code{system()},
-passing it the string we just got from \cfunction{PyArg_ParseTuple()}:
+The next statement is a call to the \UNIX{} function
+\cfunction{system()}, passing it the string we just got from
+\cfunction{PyArg_ParseTuple()}:
 
 \begin{verbatim}
     sts = system(command);
 \end{verbatim}
 
-Our \code{spam.system()} function must return the value of \code{sts}
-as a Python object.  This is done using the function
-\code{Py_BuildValue()}, which is something like the inverse of
-\cfunction{PyArg_ParseTuple()}: it takes a format string and an arbitrary
-number of \C{} values, and returns a new Python object.  More info on
-\code{Py_BuildValue()} is given later.
+Our \function{spam.system()} function must return the value of
+\cdata{sts} as a Python object.  This is done using the function
+\cfunction{Py_BuildValue()}, which is something like the inverse of
+\cfunction{PyArg_ParseTuple()}: it takes a format string and an
+arbitrary number of \C{} values, and returns a new Python object.
+More info on \cfunction{Py_BuildValue()} is given later.
 
 \begin{verbatim}
     return Py_BuildValue("i", sts);
@@ -321,7 +326,7 @@
 are objects on the heap in Python!)
 
 If you have a \C{} function that returns no useful argument (a function
-returning \code{void}), the corresponding Python function must return
+returning \ctype{void}), the corresponding Python function must return
 \code{None}.   You need this idiom to do so:
 
 \begin{verbatim}
@@ -329,7 +334,7 @@
     return Py_None;
 \end{verbatim}
 
-\code{Py_None} is the \C{} name for the special Python object
+\cdata{Py_None} is the \C{} name for the special Python object
 \code{None}.  It is a genuine Python object (not a \NULL{}
 pointer, which means ``error'' in most contexts, as we have seen).
 
@@ -337,7 +342,7 @@
 \section{The Module's Method Table and Initialization Function}
 \label{methodTable}
 
-I promised to show how \code{spam_system()} is called from Python
+I promised to show how \cfunction{spam_system()} is called from Python
 programs.  First, we need to list its name and address in a ``method
 table'':
 
@@ -361,7 +366,7 @@
 parsing via \cfunction{PyArg_ParseTuple()}; more information on this
 function is provided below.
 
-The \code{METH_KEYWORDS} bit may be set in the third field if keyword
+The \constant{METH_KEYWORDS} bit may be set in the third field if keyword
 arguments should be passed to the function.  In this case, the \C{}
 function should accept a third \samp{PyObject *} parameter which will
 be a dictionary of keywords.  Use \cfunction{PyArg_ParseTupleAndKeywords()}
@@ -379,16 +384,17 @@
 }
 \end{verbatim}
 
-When the Python program imports module \code{spam} for the first time,
-\code{initspam()} is called.  It calls \code{Py_InitModule()}, which
-creates a ``module object'' (which is inserted in the dictionary
-\code{sys.modules} under the key \code{"spam"}), and inserts built-in
-function objects into the newly created module based upon the table
-(an array of \code{PyMethodDef} structures) that was passed as its
-second argument.  \code{Py_InitModule()} returns a pointer to the
-module object that it creates (which is unused here).  It aborts with
-a fatal error if the module could not be initialized satisfactorily,
-so the caller doesn't need to check for errors.
+When the Python program imports module \module{spam} for the first
+time, \cfunction{initspam()} is called.  It calls
+\cfunction{Py_InitModule()}, which creates a ``module object'' (which
+is inserted in the dictionary \code{sys.modules} under the key
+\code{"spam"}), and inserts built-in function objects into the newly
+created module based upon the table (an array of \ctype{PyMethodDef}
+structures) that was passed as its second argument.
+\cfunction{Py_InitModule()} returns a pointer to the module object
+that it creates (which is unused here).  It aborts with a fatal error
+if the module could not be initialized satisfactorily, so the caller
+doesn't need to check for errors.
 
 
 \section{Compilation and Linkage}
@@ -411,11 +417,11 @@
 spam spammodule.o
 \end{verbatim}
 
-and rebuild the interpreter by running \code{make} in the toplevel
-directory.  You can also run \code{make} in the \file{Modules}
+and rebuild the interpreter by running \program{make} in the toplevel
+directory.  You can also run \program{make} in the \file{Modules}
 subdirectory, but then you must first rebuilt the \file{Makefile}
-there by running \code{make Makefile}.  (This is necessary each time
-you change the \file{Setup} file.)
+there by running `\program{make} Makefile'.  (This is necessary each
+time you change the \file{Setup} file.)
 
 If your module requires additional libraries to link with, these can
 be listed on the line in the \file{Setup} file as well, for instance:
@@ -445,8 +451,8 @@
 somehow pass you the Python function object.  You should provide a
 function (or some other interface) to do this.  When this function is
 called, save a pointer to the Python function object (be careful to
-\code{Py_INCREF()} it!) in a global variable --- or whereever you see fit.
-For example, the following function might be part of a module
+\cfunction{Py_INCREF()} it!) in a global variable --- or whereever you
+see fit. For example, the following function might be part of a module
 definition:
 
 \begin{verbatim}
@@ -465,18 +471,18 @@
 }
 \end{verbatim}
 
-The macros \code{Py_XINCREF()} and \code{Py_XDECREF()} increment/decrement
-the reference count of an object and are safe in the presence of
-\NULL{} pointers.  More info on them in the section on Reference
-Counts below.
+The macros \cfunction{Py_XINCREF()} and \cfunction{Py_XDECREF()}
+increment/decrement the reference count of an object and are safe in
+the presence of \NULL{} pointers.  More info on them in the section on
+Reference Counts below.
 
 Later, when it is time to call the function, you call the \C{} function
-\code{PyEval_CallObject()}.  This function has two arguments, both
+\cfunction{PyEval_CallObject()}.  This function has two arguments, both
 pointers to arbitrary Python objects: the Python function, and the
 argument list.  The argument list must always be a tuple object, whose
 length is the number of arguments.  To call the Python function with
 no arguments, pass an empty tuple; to call it with one argument, pass
-a singleton tuple.  \code{Py_BuildValue()} returns a tuple when its
+a singleton tuple.  \cfunction{Py_BuildValue()} returns a tuple when its
 format string consists of zero or more format codes between
 parentheses.  For example:
 
@@ -493,26 +499,26 @@
     Py_DECREF(arglist);
 \end{verbatim}
 
-\code{PyEval_CallObject()} returns a Python object pointer: this is
-the return value of the Python function.  \code{PyEval_CallObject()} is
+\cfunction{PyEval_CallObject()} returns a Python object pointer: this is
+the return value of the Python function.  \cfunction{PyEval_CallObject()} is
 ``reference-count-neutral'' with respect to its arguments.  In the
 example a new tuple was created to serve as the argument list, which
-is \code{Py_DECREF()}-ed immediately after the call.
+is \cfunction{Py_DECREF()}-ed immediately after the call.
 
-The return value of \code{PyEval_CallObject()} is ``new'': either it
+The return value of \cfunction{PyEval_CallObject()} is ``new'': either it
 is a brand new object, or it is an existing object whose reference
 count has been incremented.  So, unless you want to save it in a
-global variable, you should somehow \code{Py_DECREF()} the result,
+global variable, you should somehow \cfunction{Py_DECREF()} the result,
 even (especially!) if you are not interested in its value.
 
 Before you do this, however, it is important to check that the return
-value isn't \NULL{}.  If it is, the Python function terminated by raising
-an exception.  If the \C{} code that called \code{PyEval_CallObject()} is
-called from Python, it should now return an error indication to its
-Python caller, so the interpreter can print a stack trace, or the
-calling Python code can handle the exception.  If this is not possible
-or desirable, the exception should be cleared by calling
-\code{PyErr_Clear()}.  For example:
+value isn't \NULL{}.  If it is, the Python function terminated by
+raising an exception.  If the \C{} code that called
+\cfunction{PyEval_CallObject()} is called from Python, it should now
+return an error indication to its Python caller, so the interpreter
+can print a stack trace, or the calling Python code can handle the
+exception.  If this is not possible or desirable, the exception should
+be cleared by calling \cfunction{PyErr_Clear()}.  For example:
 
 \begin{verbatim}
     if (result == NULL)
@@ -522,14 +528,15 @@
 \end{verbatim}
 
 Depending on the desired interface to the Python callback function,
-you may also have to provide an argument list to \code{PyEval_CallObject()}.
-In some cases the argument list is also provided by the Python
-program, through the same interface that specified the callback
-function.  It can then be saved and used in the same manner as the
-function object.  In other cases, you may have to construct a new
-tuple to pass as the argument list.  The simplest way to do this is to
-call \code{Py_BuildValue()}.  For example, if you want to pass an integral
-event code, you might use the following code:
+you may also have to provide an argument list to
+\cfunction{PyEval_CallObject()}.  In some cases the argument list is
+also provided by the Python program, through the same interface that
+specified the callback function.  It can then be saved and used in the
+same manner as the function object.  In other cases, you may have to
+construct a new tuple to pass as the argument list.  The simplest way
+to do this is to call \cfunction{Py_BuildValue()}.  For example, if
+you want to pass an integral event code, you might use the following
+code:
 
 \begin{verbatim}
     PyObject *arglist;
@@ -543,10 +550,10 @@
     Py_DECREF(result);
 \end{verbatim}
 
-Note the placement of \code{Py_DECREF(argument)} immediately after the call,
-before the error check!  Also note that strictly spoken this code is
-not complete: \code{Py_BuildValue()} may run out of memory, and this should
-be checked.
+Note the placement of \samp{Py_DECREF(arglist)} immediately after the
+call, before the error check!  Also note that strictly spoken this
+code is not complete: \cfunction{Py_BuildValue()} may run out of
+memory, and this should be checked.
 
 
 \section{Format Strings for \sectcode{PyArg_ParseTuple()}}
@@ -594,7 +601,7 @@
 exception is raised.
 
 \item[\samp{s\#} (string) {[char *, int]}]
-This variant on \code{'s'} stores into two \C{} variables, the first one
+This variant on \samp{s} stores into two \C{} variables, the first one
 a pointer to a character string, the second one its length.  In this
 case the Python string may contain embedded null bytes.
 
@@ -603,32 +610,32 @@
 case the \C{} pointer is set to \NULL{}.
 
 \item[\samp{z\#} (string or \code{None}) {[char *, int]}]
-This is to \code{'s\#'} as \code{'z'} is to \code{'s'}.
+This is to \samp{s\#} as \samp{z} is to \samp{s}.
 
 \item[\samp{b} (integer) {[char]}]
-Convert a Python integer to a tiny int, stored in a \C{} \code{char}.
+Convert a Python integer to a tiny int, stored in a \C{} \ctype{char}.
 
 \item[\samp{h} (integer) {[short int]}]
-Convert a Python integer to a \C{} \code{short int}.
+Convert a Python integer to a \C{} \ctype{short int}.
 
 \item[\samp{i} (integer) {[int]}]
-Convert a Python integer to a plain \C{} \code{int}.
+Convert a Python integer to a plain \C{} \ctype{int}.
 
 \item[\samp{l} (integer) {[long int]}]
-Convert a Python integer to a \C{} \code{long int}.
+Convert a Python integer to a \C{} \ctype{long int}.
 
 \item[\samp{c} (string of length 1) {[char]}]
 Convert a Python character, represented as a string of length 1, to a
-\C{} \code{char}.
+\C{} \ctype{char}.
 
 \item[\samp{f} (float) {[float]}]
-Convert a Python floating point number to a \C{} \code{float}.
+Convert a Python floating point number to a \C{} \ctype{float}.
 
 \item[\samp{d} (float) {[double]}]
-Convert a Python floating point number to a \C{} \code{double}.
+Convert a Python floating point number to a \C{} \ctype{double}.
 
 \item[\samp{D} (complex) {[Py_complex]}]
-Convert a Python complex number to a \C{} \code{Py_complex} structure.
+Convert a Python complex number to a \C{} \ctype{Py_complex} structure.
 
 \item[\samp{O} (object) {[PyObject *]}]
 Store a Python object (without any conversion) in a \C{} object pointer.
@@ -636,36 +643,36 @@
 object's reference count is not increased.  The pointer stored is not
 \NULL{}.
 
-\item[\samp{O!} (object) {[\var{typeobject}, PyObject *]}]
+\item[\samp{O!} (object) {[\var{typeobject}, PyObject *{]}}]
 Store a Python object in a \C{} object pointer.  This is similar to
 \samp{O}, but takes two \C{} arguments: the first is the address of a
 Python type object, the second is the address of the \C{} variable (of
-type \code{PyObject *}) into which the object pointer is stored.
+type \ctype{PyObject *}) into which the object pointer is stored.
 If the Python object does not have the required type, a
-\code{TypeError} exception is raised.
+\exception{TypeError} exception is raised.
 
-\item[\samp{O\&} (object) {[\var{converter}, \var{anything}]}]
+\item[\samp{O\&} (object) {[\var{converter}, \var{anything}{]}}]
 Convert a Python object to a \C{} variable through a \var{converter}
 function.  This takes two arguments: the first is a function, the
 second is the address of a \C{} variable (of arbitrary type), converted
-to \code{void *}.  The \var{converter} function in turn is called as
+to \ctype{void *}.  The \var{converter} function in turn is called as
 follows:
 
 \code{\var{status} = \var{converter}(\var{object}, \var{address});}
 
 where \var{object} is the Python object to be converted and
-\var{address} is the \code{void *} argument that was passed to
-\code{PyArg_ConvertTuple()}.  The returned \var{status} should be
+\var{address} is the \ctype{void *} argument that was passed to
+\cfunction{PyArg_ConvertTuple()}.  The returned \var{status} should be
 \code{1} for a successful conversion and \code{0} if the conversion
 has failed.  When the conversion fails, the \var{converter} function
 should raise an exception.
 
 \item[\samp{S} (string) {[PyStringObject *]}]
 Like \samp{O} but requires that the Python object is a string object.
-Raises a \code{TypeError} exception if the object is not a string
-object.  The \C{} variable may also be declared as \code{PyObject *}.
+Raises a \exception{TypeError} exception if the object is not a string
+object.  The \C{} variable may also be declared as \ctype{PyObject *}.
 
-\item[\samp{(\var{items})} (tuple) {[\var{matching-items}]}]
+\item[\samp{(\var{items})} (tuple) {[\var{matching-items}{]}}]
 The object must be a Python tuple whose length is the number of format
 units in \var{items}.  The \C{} arguments must correspond to the
 individual format units in \var{items}.  Format units for tuples may
@@ -688,13 +695,13 @@
 Indicates that the remaining arguments in the Python argument list are
 optional.  The \C{} variables corresponding to optional arguments should
 be initialized to their default value --- when an optional argument is
-not specified, the \code{PyArg_ParseTuple} does not touch the contents
+not specified, \cfuntion{PyArg_ParseTuple()} does not touch the contents
 of the corresponding \C{} variable(s).
 
 \item[\samp{:}]
 The list of format units ends here; the string after the colon is used
 as the function name in error messages (the ``associated value'' of
-the exceptions that \code{PyArg_ParseTuple} raises).
+the exceptions that \cfunction{PyArg_ParseTuple()} raises).
 
 \item[\samp{;}]
 The list of format units ends here; the string after the colon is used
@@ -828,7 +835,7 @@
 \section{The \sectcode{Py_BuildValue()} Function}
 \label{buildValue}
 
-This function is the counterpart to \code{PyArg_ParseTuple()}.  It is
+This function is the counterpart to \cfunction{PyArg_ParseTuple()}.  It is
 declared as follows:
 
 \begin{verbatim}
@@ -836,19 +843,20 @@
 \end{verbatim}
 
 It recognizes a set of format units similar to the ones recognized by
-\code{PyArg_ParseTuple()}, but the arguments (which are input to the
+\cfunction{PyArg_ParseTuple()}, but the arguments (which are input to the
 function, not output) must not be pointers, just values.  It returns a
 new Python object, suitable for returning from a \C{} function called
 from Python.
 
-One difference with \code{PyArg_ParseTuple()}: while the latter
+One difference with \cfunction{PyArg_ParseTuple()}: while the latter
 requires its first argument to be a tuple (since Python argument lists
-are always represented as tuples internally), \code{BuildValue()} does
-not always build a tuple.  It builds a tuple only if its format string
-contains two or more format units.  If the format string is empty, it
-returns \code{None}; if it contains exactly one format unit, it
-returns whatever object is described by that format unit.  To force it
-to return a tuple of size 0 or one, parenthesize the format string.
+are always represented as tuples internally),
+\cfunction{Py_BuildValue()} does not always build a tuple.  It builds
+a tuple only if its format string contains two or more format units.
+If the format string is empty, it returns \code{None}; if it contains
+exactly one format unit, it returns whatever object is described by
+that format unit.  To force it to return a tuple of size 0 or one,
+parenthesize the format string.
 
 In the following description, the quoted form is the format unit; the
 entry in (round) parentheses is the Python object type that the format
@@ -877,7 +885,7 @@
 Same as \samp{s\#}.
 
 \item[\samp{i} (integer) {[int]}]
-Convert a plain \C{} \code{int} to a Python integer object.
+Convert a plain \C{} \ctype{int} to a Python integer object.
 
 \item[\samp{b} (integer) {[char]}]
 Same as \samp{i}.
@@ -886,14 +894,14 @@
 Same as \samp{i}.
 
 \item[\samp{l} (integer) {[long int]}]
-Convert a \C{} \code{long int} to a Python integer object.
+Convert a \C{} \ctype{long int} to a Python integer object.
 
 \item[\samp{c} (string of length 1) {[char]}]
-Convert a \C{} \code{int} representing a character to a Python string of
+Convert a \C{} \ctype{int} representing a character to a Python string of
 length 1.
 
 \item[\samp{d} (float) {[double]}]
-Convert a \C{} \code{double} to a Python floating point number.
+Convert a \C{} \ctype{double} to a Python floating point number.
 
 \item[\samp{f} (float) {[float]}]
 Same as \samp{d}.
@@ -903,9 +911,9 @@
 is incremented by one).  If the object passed in is a \NULL{}
 pointer, it is assumed that this was caused because the call producing
 the argument found an error and set an exception.  Therefore,
-\code{Py_BuildValue()} will return \NULL{} but won't raise an
+\cfunction{Py_BuildValue()} will return \NULL{} but won't raise an
 exception.  If no exception has been raised yet,
-\code{PyExc_SystemError} is set.
+\cdata{PyExc_SystemError} is set.
 
 \item[\samp{S} (object) {[PyObject *]}]
 Same as \samp{O}.
@@ -913,7 +921,7 @@
 \item[\samp{O\&} (object) {[\var{converter}, \var{anything}]}]
 Convert \var{anything} to a Python object through a \var{converter}
 function.  The function is called with \var{anything} (which should be
-compatible with \code{void *}) as its argument and should return a
+compatible with \ctype{void *}) as its argument and should return a
 ``new'' Python object, or \NULL{} if an error occurred.
 
 \item[\samp{(\var{items})} (tuple) {[\var{matching-items}]}]
@@ -932,7 +940,7 @@
 \end{description}
 
 If there is an error in the format string, the
-\code{PyExc_SystemError} exception is raised and \NULL{} returned.
+\cdata{PyExc_SystemError} exception is raised and \NULL{} returned.
 
 Examples (to the left the call, to the right the resulting Python value):
 
@@ -960,24 +968,26 @@
 %\subsection{Introduction}
 
 In languages like \C{} or \Cpp{}, the programmer is responsible for
-dynamic allocation and deallocation of memory on the heap.  In \C{}, this
-is done using the functions \code{malloc()} and \code{free()}.  In
-\Cpp{}, the operators \code{new} and \code{delete} are used with
-essentially the same meaning; they are actually implemented using
-\code{malloc()} and \code{free()}, so we'll restrict the following
-discussion to the latter.
+dynamic allocation and deallocation of memory on the heap.  In \C{},
+this is done using the functions \cfunction{malloc()} and
+\cfunction{free()}.  In \Cpp{}, the operators \keyword{new} and
+\keyword{delete} are used with essentially the same meaning; they are
+actually implemented using \cfunction{malloc()} and
+\cfunction{free()}, so we'll restrict the following discussion to the
+latter.
 
-Every block of memory allocated with \code{malloc()} should eventually
-be returned to the pool of available memory by exactly one call to
-\code{free()}.  It is important to call \code{free()} at the right
-time.  If a block's address is forgotten but \code{free()} is not
-called for it, the memory it occupies cannot be reused until the
-program terminates.  This is called a \dfn{memory leak}.  On the other
-hand, if a program calls \code{free()} for a block and then continues
-to use the block, it creates a conflict with re-use of the block
-through another \code{malloc()} call.  This is called \dfn{using freed
-memory}.  It has the same bad consequences as referencing uninitialized
-data --- core dumps, wrong results, mysterious crashes.
+Every block of memory allocated with \cfunction{malloc()} should
+eventually be returned to the pool of available memory by exactly one
+call to \cfunction{free()}.  It is important to call
+\cfunction{free()} at the right time.  If a block's address is
+forgotten but \cfunction{free()} is not called for it, the memory it
+occupies cannot be reused until the program terminates.  This is
+called a \dfn{memory leak}.  On the other hand, if a program calls
+\cfunction{free()} for a block and then continues to use the block, it
+creates a conflict with re-use of the block through another
+\cfunction{malloc()} call.  This is called \dfn{using freed memory}.
+It has the same bad consequences as referencing uninitialized data ---
+core dumps, wrong results, mysterious crashes.
 
 Common causes of memory leaks are unusual paths through the code.  For
 instance, a function may allocate a block of memory, do some
@@ -994,25 +1004,25 @@
 happening by having a coding convention or strategy that minimizes
 this kind of errors.
 
-Since Python makes heavy use of \code{malloc()} and \code{free()}, it
-needs a strategy to avoid memory leaks as well as the use of freed
-memory.  The chosen method is called \dfn{reference counting}.  The
-principle is simple: every object contains a counter, which is
-incremented when a reference to the object is stored somewhere, and
-which is decremented when a reference to it is deleted.  When the
-counter reaches zero, the last reference to the object has been
-deleted and the object is freed.
+Since Python makes heavy use of \cfunction{malloc()} and
+\cfunction{free()}, it needs a strategy to avoid memory leaks as well
+as the use of freed memory.  The chosen method is called
+\dfn{reference counting}.  The principle is simple: every object
+contains a counter, which is incremented when a reference to the
+object is stored somewhere, and which is decremented when a reference
+to it is deleted.  When the counter reaches zero, the last reference
+to the object has been deleted and the object is freed.
 
 An alternative strategy is called \dfn{automatic garbage collection}.
 (Sometimes, reference counting is also referred to as a garbage
 collection strategy, hence my use of ``automatic'' to distinguish the
 two.)  The big advantage of automatic garbage collection is that the
-user doesn't need to call \code{free()} explicitly.  (Another claimed
+user doesn't need to call \cfunction{free()} explicitly.  (Another claimed
 advantage is an improvement in speed or memory usage --- this is no
 hard fact however.)  The disadvantage is that for \C{}, there is no
 truly portable automatic garbage collector, while reference counting
-can be implemented portably (as long as the functions \code{malloc()}
-and \code{free()} are available --- which the \C{} Standard guarantees).
+can be implemented portably (as long as the functions \cfunction{malloc()}
+and \cfunction{free()} are available --- which the \C{} Standard guarantees).
 Maybe some day a sufficiently portable automatic garbage collector
 will be available for \C{}.  Until then, we'll have to live with
 reference counts.
@@ -1022,8 +1032,8 @@
 
 There are two macros, \code{Py_INCREF(x)} and \code{Py_DECREF(x)},
 which handle the incrementing and decrementing of the reference count.
-\code{Py_DECREF()} also frees the object when the count reaches zero.
-For flexibility, it doesn't call \code{free()} directly --- rather, it
+\cfunction{Py_DECREF()} also frees the object when the count reaches zero.
+For flexibility, it doesn't call \cfunction{free()} directly --- rather, it
 makes a call through a function pointer in the object's \dfn{type
 object}.  For this purpose (and others), every object also contains a
 pointer to its type object.
@@ -1033,16 +1043,16 @@
 ``owns'' an object; however, you can \dfn{own a reference} to an
 object.  An object's reference count is now defined as the number of
 owned references to it.  The owner of a reference is responsible for
-calling \code{Py_DECREF()} when the reference is no longer needed.
-Ownership of a reference can be transferred.  There are three ways to
-dispose of an owned reference: pass it on, store it, or call
-\code{Py_DECREF()}.  Forgetting to dispose of an owned reference creates
-a memory leak.
+calling \cfunction{Py_DECREF()} when the reference is no longer
+needed.  Ownership of a reference can be transferred.  There are three
+ways to dispose of an owned reference: pass it on, store it, or call
+\cfunction{Py_DECREF()}.  Forgetting to dispose of an owned reference
+creates a memory leak.
 
 It is also possible to \dfn{borrow}\footnote{The metaphor of
 ``borrowing'' a reference is not completely correct: the owner still
 has a copy of the reference.} a reference to an object.  The borrower
-of a reference should not call \code{Py_DECREF()}.  The borrower must
+of a reference should not call \cfunction{Py_DECREF()}.  The borrower must
 not hold on to the object longer than the owner from which it was
 borrowed.  Using a borrowed reference after the owner has disposed of
 it risks using freed memory and should be avoided
@@ -1060,7 +1070,7 @@
 of it.
 
 A borrowed reference can be changed into an owned reference by calling
-\code{Py_INCREF()}.  This does not affect the status of the owner from
+\cfunction{Py_INCREF()}.  This does not affect the status of the owner from
 which the reference was borrowed --- it creates a new owned reference,
 and gives full owner responsibilities (i.e., the new owner must
 dispose of the reference properly, as well as the previous owner).
@@ -1074,41 +1084,42 @@
 
 Most functions that return a reference to an object pass on ownership
 with the reference.  In particular, all functions whose function it is
-to create a new object, e.g.\ \code{PyInt_FromLong()} and
-\code{Py_BuildValue()}, pass ownership to the receiver.  Even if in
+to create a new object, e.g.\ \cfunction{PyInt_FromLong()} and
+\cfunction{Py_BuildValue()}, pass ownership to the receiver.  Even if in
 fact, in some cases, you don't receive a reference to a brand new
 object, you still receive ownership of the reference.  For instance,
-\code{PyInt_FromLong()} maintains a cache of popular values and can
+\cfunction{PyInt_FromLong()} maintains a cache of popular values and can
 return a reference to a cached item.
 
 Many functions that extract objects from other objects also transfer
 ownership with the reference, for instance
-\code{PyObject_GetAttrString()}.  The picture is less clear, here,
+\cfunction{PyObject_GetAttrString()}.  The picture is less clear, here,
 however, since a few common routines are exceptions:
-\code{PyTuple_GetItem()}, \code{PyList_GetItem()} and
-\code{PyDict_GetItem()} (and \code{PyDict_GetItemString()}) all return
-references that you borrow from the tuple, list or dictionary.
+\cfunction{PyTuple_GetItem()}, \cfunction{PyList_GetItem()},
+\cfunction{PyDict_GetItem()}, and \cfunction{PyDict_GetItemString()}
+all return references that you borrow from the tuple, list or
+dictionary.
 
-The function \code{PyImport_AddModule()} also returns a borrowed
+The function \cfunction{PyImport_AddModule()} also returns a borrowed
 reference, even though it may actually create the object it returns:
 this is possible because an owned reference to the object is stored in
 \code{sys.modules}.
 
 When you pass an object reference into another function, in general,
 the function borrows the reference from you --- if it needs to store
-it, it will use \code{Py_INCREF()} to become an independent owner.
-There are exactly two important exceptions to this rule:
-\code{PyTuple_SetItem()} and \code{PyList_SetItem()}.  These functions
-take over ownership of the item passed to them --- even if they fail!
-(Note that \code{PyDict_SetItem()} and friends don't take over
-ownership --- they are ``normal''.)
+it, it will use \cfunction{Py_INCREF()} to become an independent
+owner.  There are exactly two important exceptions to this rule:
+\cfunction{PyTuple_SetItem()} and \cfunction{PyList_SetItem()}.  These
+functions take over ownership of the item passed to them --- even if
+they fail!  (Note that \cfunction{PyDict_SetItem()} and friends don't
+take over ownership --- they are ``normal''.)
 
 When a \C{} function is called from Python, it borrows references to its
 arguments from the caller.  The caller owns a reference to the object,
 so the borrowed reference's lifetime is guaranteed until the function
 returns.  Only when such a borrowed reference must be stored or passed
 on, it must be turned into an owned reference by calling
-\code{Py_INCREF()}.
+\cfunction{Py_INCREF()}.
 
 The object reference returned from a \C{} function that is called from
 Python must be an owned reference --- ownership is tranferred from the
@@ -1123,8 +1134,8 @@
 reference to dispose of it.
 
 The first and most important case to know about is using
-\code{Py_DECREF()} on an unrelated object while borrowing a reference
-to a list item.  For instance:
+\cfunction{Py_DECREF()} on an unrelated object while borrowing a
+reference to a list item.  For instance:
 
 \begin{verbatim}
 bug(PyObject *list) {
@@ -1138,20 +1149,20 @@
 replaces \code{list[1]} with the value \code{0}, and finally prints
 the borrowed reference.  Looks harmless, right?  But it's not!
 
-Let's follow the control flow into \code{PyList_SetItem()}.  The list
+Let's follow the control flow into \cfunction{PyList_SetItem()}.  The list
 owns references to all its items, so when item 1 is replaced, it has
 to dispose of the original item 1.  Now let's suppose the original
 item 1 was an instance of a user-defined class, and let's further
-suppose that the class defined a \code{__del__()} method.  If this
+suppose that the class defined a \method{__del__()} method.  If this
 class instance has a reference count of 1, disposing of it will call
-its \code{__del__()} method.
+its \method{__del__()} method.
 
-Since it is written in Python, the \code{__del__()} method can execute
+Since it is written in Python, the \method{__del__()} method can execute
 arbitrary Python code.  Could it perhaps do something to invalidate
-the reference to \code{item} in \code{bug()}?  You bet!  Assuming that
-the list passed into \code{bug()} is accessible to the
-\code{__del__()} method, it could execute a statement to the effect of
-\code{del list[0]}, and assuming this was the last reference to that
+the reference to \code{item} in \cfunction{bug()}?  You bet!  Assuming
+that the list passed into \cfunction{bug()} is accessible to the
+\method{__del__()} method, it could execute a statement to the effect of
+\samp{del list[0]}, and assuming this was the last reference to that
 object, it would free the memory associated with it, thereby
 invalidating \code{item}.
 
@@ -1171,7 +1182,7 @@
 
 This is a true story.  An older version of Python contained variants
 of this bug and someone spent a considerable amount of time in a \C{}
-debugger to figure out why his \code{__del__()} methods would fail...
+debugger to figure out why his \method{__del__()} methods would fail...
 
 The second case of problems with a borrowed reference is a variant
 involving threads.  Normally, multiple threads in the Python
@@ -1208,11 +1219,11 @@
 
 It is better to test for \NULL{} only at the ``source'', i.e.\
 when a pointer that may be \NULL{} is received, e.g.\ from
-\code{malloc()} or from a function that may raise an exception.
+\cfunction{malloc()} or from a function that may raise an exception.
 
-The macros \code{Py_INCREF()} and \code{Py_DECREF()}
+The macros \cfunction{Py_INCREF()} and \cfunction{Py_DECREF()}
 don't check for \NULL{} pointers --- however, their variants
-\code{Py_XINCREF()} and \code{Py_XDECREF()} do.
+\cfunction{Py_XINCREF()} and \cfunction{Py_XDECREF()} do.
 
 The macros for checking for a particular object type
 (\code{Py\var{type}_Check()}) don't check for \NULL{} pointers ---
@@ -1259,16 +1270,17 @@
 So if you are embedding Python, you are providing your own main
 program.  One of the things this main program has to do is initialize
 the Python interpreter.  At the very least, you have to call the
-function \code{Py_Initialize()}.  There are optional calls to pass command
-line arguments to Python.  Then later you can call the interpreter
-from any part of the application.
+function \cfunction{Py_Initialize()}.  There are optional calls to
+pass command line arguments to Python.  Then later you can call the
+interpreter from any part of the application.
 
 There are several different ways to call the interpreter: you can pass
-a string containing Python statements to \code{PyRun_SimpleString()},
-or you can pass a stdio file pointer and a file name (for
-identification in error messages only) to \code{PyRun_SimpleFile()}.  You
-can also call the lower-level operations described in the previous
-chapters to construct and use Python objects.
+a string containing Python statements to
+\cfunction{PyRun_SimpleString()}, or you can pass a stdio file pointer
+and a file name (for identification in error messages only) to
+\cfunction{PyRun_SimpleFile()}.  You can also call the lower-level
+operations described in the previous chapters to construct and use
+Python objects.
 
 A simple demo of embedding Python can be found in the directory
 \file{Demo/embed}.
@@ -1336,9 +1348,9 @@
 using shared libraries so there is no reason to; a small test didn't
 work right away so I gave up trying to support it.)
 
-Before you build Python, you first need to fetch and build the \code{dl}
-package written by Jack Jansen.  This is available by anonymous ftp
-from \url{ftp://ftp.cwi.nl/pub/dynload}, file
+Before you build Python, you first need to fetch and build the
+\code{dl} package written by Jack Jansen.  This is available by
+anonymous ftp from \url{ftp://ftp.cwi.nl/pub/dynload}, file
 \file{dl-1.6.tar.Z}.  (The version number may change.)  Follow the
 instructions in the package's \file{README} file to build it.
 
@@ -1387,7 +1399,7 @@
 Since there are three styles of dynamic loading, there are also three
 groups of instructions for building a dynamically loadable module.
 Instructions common for all three styles are given first.  Assuming
-your module is called \code{spam}, the source filename must be
+your module is called \module{spam}, the source filename must be
 \file{spammodule.c}, so the object name is \file{spammodule.o}.  The
 module must be written as a normal Python extension module (as
 described earlier).
@@ -1425,12 +1437,12 @@
 ld -shared spammodule.o -o spammodule.so
 \end{verbatim}
 
-On other systems, consult the manual page for \code{ld}(1) to find what
-flags, if any, must be used.
+On other systems, consult the manual page for \manpage{ld}{1} to find
+what flags, if any, must be used.
 
 If your extension module uses system libraries that haven't already
 been linked with Python (e.g. a windowing system), these must be
-passed to the \code{ld} command as \samp{-l} options after the
+passed to the \program{ld} command as \samp{-l} options after the
 \samp{.o} file.
 
 The resulting file \file{spammodule.so} must be copied into a directory
diff --git a/Doc/ext/ext.tex b/Doc/ext/ext.tex
index af745f1..57223d4 100644
--- a/Doc/ext/ext.tex
+++ b/Doc/ext/ext.tex
@@ -74,9 +74,9 @@
 
 Let's create an extension module called \samp{spam} (the favorite food
 of Monty Python fans...) and let's say we want to create a Python
-interface to the \C{} library function \code{system()}.\footnote{An
+interface to the \C{} library function \cfunction{system()}.\footnote{An
 interface for this function already exists in the standard module
-\code{os} --- it was chosen as a simple and straightfoward example.}
+\module{os} --- it was chosen as a simple and straightfoward example.}
 This function takes a null-terminated character string as argument and
 returns an integer.  We want this function to be callable from Python
 as follows:
@@ -106,8 +106,8 @@
 interpreter, \code{"Python.h"} includes a few standard header files:
 \code{<stdio.h>}, \code{<string.h>}, \code{<errno.h>}, and
 \code{<stdlib.h>}.  If the latter header file does not exist on your
-system, it declares the functions \code{malloc()}, \code{free()} and
-\code{realloc()} directly.
+system, it declares the functions \cfunction{malloc()},
+\cfunction{free()} and \cfunction{realloc()} directly.
 
 The next thing we add to our module file is the \C{} function that will
 be called when the Python expression \samp{spam.system(\var{string})}
@@ -166,42 +166,43 @@
 are stored in a static global variable inside the interpreter; if this
 variable is \NULL{} no exception has occurred.  A second global
 variable stores the ``associated value'' of the exception (the second
-argument to \code{raise}).  A third variable contains the stack
+argument to \keyword{raise}).  A third variable contains the stack
 traceback in case the error originated in Python code.  These three
 variables are the \C{} equivalents of the Python variables
 \code{sys.exc_type}, \code{sys.exc_value} and \code{sys.exc_traceback}
-(see the section on module \code{sys} in the Library Reference
-Manual).  It is important to know about them to understand how errors
-are passed around.
+(see the section on module \module{sys} in the \emph{Python Library
+Reference}).  It is important to know about them to understand how
+errors are passed around.
 
 The Python API defines a number of functions to set various types of
 exceptions.
 
-The most common one is \code{PyErr_SetString()}.  Its arguments are an
-exception object and a \C{} string.  The exception object is usually a
-predefined object like \code{PyExc_ZeroDivisionError}.  The \C{} string
-indicates the cause of the error and is converted to a Python string
-object and stored as the ``associated value'' of the exception.
+The most common one is \cfunction{PyErr_SetString()}.  Its arguments
+are an exception object and a \C{} string.  The exception object is
+usually a predefined object like \cdata{PyExc_ZeroDivisionError}.  The
+\C{} string indicates the cause of the error and is converted to a
+Python string object and stored as the ``associated value'' of the
+exception.
 
-Another useful function is \code{PyErr_SetFromErrno()}, which only
+Another useful function is \cfunction{PyErr_SetFromErrno()}, which only
 takes an exception argument and constructs the associated value by
-inspection of the (\UNIX{}) global variable \code{errno}.  The most
-general function is \code{PyErr_SetObject()}, which takes two object
+inspection of the (\UNIX{}) global variable \cdata{errno}.  The most
+general function is \cfunction{PyErr_SetObject()}, which takes two object
 arguments, the exception and its associated value.  You don't need to
-\code{Py_INCREF()} the objects passed to any of these functions.
+\cfunction{Py_INCREF()} the objects passed to any of these functions.
 
 You can test non-destructively whether an exception has been set with
-\code{PyErr_Occurred()}.  This returns the current exception object,
+\cfunction{PyErr_Occurred()}.  This returns the current exception object,
 or \NULL{} if no exception has occurred.  You normally don't need
-to call \code{PyErr_Occurred()} to see whether an error occurred in a
+to call \cfunction{PyErr_Occurred()} to see whether an error occurred in a
 function call, since you should be able to tell from the return value.
 
 When a function \var{f} that calls another function \var{g} detects
 that the latter fails, \var{f} should itself return an error value
 (e.g. \NULL{} or \code{-1}).  It should \emph{not} call one of the
-\code{PyErr_*()} functions --- one has already been called by \var{g}.
+\cfunction{PyErr_*()} functions --- one has already been called by \var{g}.
 \var{f}'s caller is then supposed to also return an error indication
-to \emph{its} caller, again \emph{without} calling \code{PyErr_*()},
+to \emph{its} caller, again \emph{without} calling \cfunction{PyErr_*()},
 and so on --- the most detailed cause of the error was already
 reported by the function that first detected it.  Once the error
 reaches the Python interpreter's main loop, this aborts the currently
@@ -209,44 +210,44 @@
 by the Python programmer.
 
 (There are situations where a module can actually give a more detailed
-error message by calling another \code{PyErr_*()} function, and in
+error message by calling another \cfunction{PyErr_*()} function, and in
 such cases it is fine to do so.  As a general rule, however, this is
 not necessary, and can cause information about the cause of the error
 to be lost: most operations can fail for a variety of reasons.)
 
 To ignore an exception set by a function call that failed, the exception
-condition must be cleared explicitly by calling \code{PyErr_Clear()}. 
-The only time \C{} code should call \code{PyErr_Clear()} is if it doesn't
+condition must be cleared explicitly by calling \cfunction{PyErr_Clear()}. 
+The only time \C{} code should call \cfunction{PyErr_Clear()} is if it doesn't
 want to pass the error on to the interpreter but wants to handle it
 completely by itself (e.g. by trying something else or pretending
 nothing happened).
 
-Note that a failing \code{malloc()} call must be turned into an
-exception --- the direct caller of \code{malloc()} (or
-\code{realloc()}) must call \code{PyErr_NoMemory()} and return a
-failure indicator itself.  All the object-creating functions
-(\code{PyInt_FromLong()} etc.) already do this, so only if you call
-\code{malloc()} directly this note is of importance.
+Note that a failing \cfunction{malloc()} call must be turned into an
+exception --- the direct caller of \cfunction{malloc()} (or
+\cfunction{realloc()}) must call \cfunction{PyErr_NoMemory()} and
+return a failure indicator itself.  All the object-creating functions
+(\cfunction{PyInt_FromLong()} etc.) already do this, so only if you
+call \cfunction{malloc()} directly this note is of importance.
 
 Also note that, with the important exception of
 \cfunction{PyArg_ParseTuple()} and friends, functions that return an
 integer status usually return a positive value or zero for success and
 \code{-1} for failure, like \UNIX{} system calls.
 
-Finally, be careful to clean up garbage (by making \code{Py_XDECREF()}
-or \code{Py_DECREF()} calls for objects you have already created) when
-you return an error indicator!
+Finally, be careful to clean up garbage (by making
+\cfunction{Py_XDECREF()} or \cfunction{Py_DECREF()} calls for objects
+you have already created) when you return an error indicator!
 
 The choice of which exception to raise is entirely yours.  There are
 predeclared \C{} objects corresponding to all built-in Python exceptions,
-e.g. \code{PyExc_ZeroDevisionError} which you can use directly.  Of
+e.g. \cdata{PyExc_ZeroDevisionError} which you can use directly.  Of
 course, you should choose exceptions wisely --- don't use
-\code{PyExc_TypeError} to mean that a file couldn't be opened (that
-should probably be \code{PyExc_IOError}).  If something's wrong with
+\cdata{PyExc_TypeError} to mean that a file couldn't be opened (that
+should probably be \cdata{PyExc_IOError}).  If something's wrong with
 the argument list, the \cfunction{PyArg_ParseTuple()} function usually
-raises \code{PyExc_TypeError}.  If you have an argument whose value
+raises \cdata{PyExc_TypeError}.  If you have an argument whose value
 which must be in a particular range or must satisfy other conditions,
-\code{PyExc_ValueError} is appropriate.
+\cdata{PyExc_ValueError} is appropriate.
 
 You can also define a new exception that is unique to your module.
 For this, you usually declare a static object variable at the
@@ -257,8 +258,8 @@
 \end{verbatim}
 
 and initialize it in your module's initialization function
-(\code{initspam()}) with a string object, e.g. (leaving out the error
-checking for now):
+(\cfunction{initspam()}) with an exception object, e.g. (leaving out
+the error checking for now):
 
 \begin{verbatim}
 void
@@ -267,16 +268,19 @@
     PyObject *m, *d;
     m = Py_InitModule("spam", SpamMethods);
     d = PyModule_GetDict(m);
-    SpamError = PyString_FromString("spam.error");
+    SpamError = PyErr_NewException("spam.error", NULL, NULL);
     PyDict_SetItemString(d, "error", SpamError);
 }
 \end{verbatim}
 
 Note that the Python name for the exception object is
-\code{spam.error}.  It is conventional for module and exception names
-to be spelled in lower case.  It is also conventional that the
-\emph{value} of the exception object is the same as its name, e.g.\
-the string \code{"spam.error"}.
+\exception{spam.error}.  The \cfunction{PyErr_NewException()} function
+may create either a string or class, depending on whether the
+\samp{-X} flag was passed to the interpreter.  If \samp{-X} was used,
+\cdata{SpamError} will be a string object, otherwise it will be a
+class object with the base class being \exception{Exception},
+described in the \emph{Python Library Reference} under ``Built-in
+Exceptions.''
 
 
 \section{Back to the Example}
@@ -294,24 +298,25 @@
 object pointers) if an error is detected in the argument list, relying
 on the exception set by \cfunction{PyArg_ParseTuple()}.  Otherwise the
 string value of the argument has been copied to the local variable
-\code{command}.  This is a pointer assignment and you are not supposed
+\cdata{command}.  This is a pointer assignment and you are not supposed
 to modify the string to which it points (so in Standard \C{}, the variable
-\code{command} should properly be declared as \samp{const char
+\cdata{command} should properly be declared as \samp{const char
 *command}).
 
-The next statement is a call to the \UNIX{} function \code{system()},
-passing it the string we just got from \cfunction{PyArg_ParseTuple()}:
+The next statement is a call to the \UNIX{} function
+\cfunction{system()}, passing it the string we just got from
+\cfunction{PyArg_ParseTuple()}:
 
 \begin{verbatim}
     sts = system(command);
 \end{verbatim}
 
-Our \code{spam.system()} function must return the value of \code{sts}
-as a Python object.  This is done using the function
-\code{Py_BuildValue()}, which is something like the inverse of
-\cfunction{PyArg_ParseTuple()}: it takes a format string and an arbitrary
-number of \C{} values, and returns a new Python object.  More info on
-\code{Py_BuildValue()} is given later.
+Our \function{spam.system()} function must return the value of
+\cdata{sts} as a Python object.  This is done using the function
+\cfunction{Py_BuildValue()}, which is something like the inverse of
+\cfunction{PyArg_ParseTuple()}: it takes a format string and an
+arbitrary number of \C{} values, and returns a new Python object.
+More info on \cfunction{Py_BuildValue()} is given later.
 
 \begin{verbatim}
     return Py_BuildValue("i", sts);
@@ -321,7 +326,7 @@
 are objects on the heap in Python!)
 
 If you have a \C{} function that returns no useful argument (a function
-returning \code{void}), the corresponding Python function must return
+returning \ctype{void}), the corresponding Python function must return
 \code{None}.   You need this idiom to do so:
 
 \begin{verbatim}
@@ -329,7 +334,7 @@
     return Py_None;
 \end{verbatim}
 
-\code{Py_None} is the \C{} name for the special Python object
+\cdata{Py_None} is the \C{} name for the special Python object
 \code{None}.  It is a genuine Python object (not a \NULL{}
 pointer, which means ``error'' in most contexts, as we have seen).
 
@@ -337,7 +342,7 @@
 \section{The Module's Method Table and Initialization Function}
 \label{methodTable}
 
-I promised to show how \code{spam_system()} is called from Python
+I promised to show how \cfunction{spam_system()} is called from Python
 programs.  First, we need to list its name and address in a ``method
 table'':
 
@@ -361,7 +366,7 @@
 parsing via \cfunction{PyArg_ParseTuple()}; more information on this
 function is provided below.
 
-The \code{METH_KEYWORDS} bit may be set in the third field if keyword
+The \constant{METH_KEYWORDS} bit may be set in the third field if keyword
 arguments should be passed to the function.  In this case, the \C{}
 function should accept a third \samp{PyObject *} parameter which will
 be a dictionary of keywords.  Use \cfunction{PyArg_ParseTupleAndKeywords()}
@@ -379,16 +384,17 @@
 }
 \end{verbatim}
 
-When the Python program imports module \code{spam} for the first time,
-\code{initspam()} is called.  It calls \code{Py_InitModule()}, which
-creates a ``module object'' (which is inserted in the dictionary
-\code{sys.modules} under the key \code{"spam"}), and inserts built-in
-function objects into the newly created module based upon the table
-(an array of \code{PyMethodDef} structures) that was passed as its
-second argument.  \code{Py_InitModule()} returns a pointer to the
-module object that it creates (which is unused here).  It aborts with
-a fatal error if the module could not be initialized satisfactorily,
-so the caller doesn't need to check for errors.
+When the Python program imports module \module{spam} for the first
+time, \cfunction{initspam()} is called.  It calls
+\cfunction{Py_InitModule()}, which creates a ``module object'' (which
+is inserted in the dictionary \code{sys.modules} under the key
+\code{"spam"}), and inserts built-in function objects into the newly
+created module based upon the table (an array of \ctype{PyMethodDef}
+structures) that was passed as its second argument.
+\cfunction{Py_InitModule()} returns a pointer to the module object
+that it creates (which is unused here).  It aborts with a fatal error
+if the module could not be initialized satisfactorily, so the caller
+doesn't need to check for errors.
 
 
 \section{Compilation and Linkage}
@@ -411,11 +417,11 @@
 spam spammodule.o
 \end{verbatim}
 
-and rebuild the interpreter by running \code{make} in the toplevel
-directory.  You can also run \code{make} in the \file{Modules}
+and rebuild the interpreter by running \program{make} in the toplevel
+directory.  You can also run \program{make} in the \file{Modules}
 subdirectory, but then you must first rebuilt the \file{Makefile}
-there by running \code{make Makefile}.  (This is necessary each time
-you change the \file{Setup} file.)
+there by running `\program{make} Makefile'.  (This is necessary each
+time you change the \file{Setup} file.)
 
 If your module requires additional libraries to link with, these can
 be listed on the line in the \file{Setup} file as well, for instance:
@@ -445,8 +451,8 @@
 somehow pass you the Python function object.  You should provide a
 function (or some other interface) to do this.  When this function is
 called, save a pointer to the Python function object (be careful to
-\code{Py_INCREF()} it!) in a global variable --- or whereever you see fit.
-For example, the following function might be part of a module
+\cfunction{Py_INCREF()} it!) in a global variable --- or whereever you
+see fit. For example, the following function might be part of a module
 definition:
 
 \begin{verbatim}
@@ -465,18 +471,18 @@
 }
 \end{verbatim}
 
-The macros \code{Py_XINCREF()} and \code{Py_XDECREF()} increment/decrement
-the reference count of an object and are safe in the presence of
-\NULL{} pointers.  More info on them in the section on Reference
-Counts below.
+The macros \cfunction{Py_XINCREF()} and \cfunction{Py_XDECREF()}
+increment/decrement the reference count of an object and are safe in
+the presence of \NULL{} pointers.  More info on them in the section on
+Reference Counts below.
 
 Later, when it is time to call the function, you call the \C{} function
-\code{PyEval_CallObject()}.  This function has two arguments, both
+\cfunction{PyEval_CallObject()}.  This function has two arguments, both
 pointers to arbitrary Python objects: the Python function, and the
 argument list.  The argument list must always be a tuple object, whose
 length is the number of arguments.  To call the Python function with
 no arguments, pass an empty tuple; to call it with one argument, pass
-a singleton tuple.  \code{Py_BuildValue()} returns a tuple when its
+a singleton tuple.  \cfunction{Py_BuildValue()} returns a tuple when its
 format string consists of zero or more format codes between
 parentheses.  For example:
 
@@ -493,26 +499,26 @@
     Py_DECREF(arglist);
 \end{verbatim}
 
-\code{PyEval_CallObject()} returns a Python object pointer: this is
-the return value of the Python function.  \code{PyEval_CallObject()} is
+\cfunction{PyEval_CallObject()} returns a Python object pointer: this is
+the return value of the Python function.  \cfunction{PyEval_CallObject()} is
 ``reference-count-neutral'' with respect to its arguments.  In the
 example a new tuple was created to serve as the argument list, which
-is \code{Py_DECREF()}-ed immediately after the call.
+is \cfunction{Py_DECREF()}-ed immediately after the call.
 
-The return value of \code{PyEval_CallObject()} is ``new'': either it
+The return value of \cfunction{PyEval_CallObject()} is ``new'': either it
 is a brand new object, or it is an existing object whose reference
 count has been incremented.  So, unless you want to save it in a
-global variable, you should somehow \code{Py_DECREF()} the result,
+global variable, you should somehow \cfunction{Py_DECREF()} the result,
 even (especially!) if you are not interested in its value.
 
 Before you do this, however, it is important to check that the return
-value isn't \NULL{}.  If it is, the Python function terminated by raising
-an exception.  If the \C{} code that called \code{PyEval_CallObject()} is
-called from Python, it should now return an error indication to its
-Python caller, so the interpreter can print a stack trace, or the
-calling Python code can handle the exception.  If this is not possible
-or desirable, the exception should be cleared by calling
-\code{PyErr_Clear()}.  For example:
+value isn't \NULL{}.  If it is, the Python function terminated by
+raising an exception.  If the \C{} code that called
+\cfunction{PyEval_CallObject()} is called from Python, it should now
+return an error indication to its Python caller, so the interpreter
+can print a stack trace, or the calling Python code can handle the
+exception.  If this is not possible or desirable, the exception should
+be cleared by calling \cfunction{PyErr_Clear()}.  For example:
 
 \begin{verbatim}
     if (result == NULL)
@@ -522,14 +528,15 @@
 \end{verbatim}
 
 Depending on the desired interface to the Python callback function,
-you may also have to provide an argument list to \code{PyEval_CallObject()}.
-In some cases the argument list is also provided by the Python
-program, through the same interface that specified the callback
-function.  It can then be saved and used in the same manner as the
-function object.  In other cases, you may have to construct a new
-tuple to pass as the argument list.  The simplest way to do this is to
-call \code{Py_BuildValue()}.  For example, if you want to pass an integral
-event code, you might use the following code:
+you may also have to provide an argument list to
+\cfunction{PyEval_CallObject()}.  In some cases the argument list is
+also provided by the Python program, through the same interface that
+specified the callback function.  It can then be saved and used in the
+same manner as the function object.  In other cases, you may have to
+construct a new tuple to pass as the argument list.  The simplest way
+to do this is to call \cfunction{Py_BuildValue()}.  For example, if
+you want to pass an integral event code, you might use the following
+code:
 
 \begin{verbatim}
     PyObject *arglist;
@@ -543,10 +550,10 @@
     Py_DECREF(result);
 \end{verbatim}
 
-Note the placement of \code{Py_DECREF(argument)} immediately after the call,
-before the error check!  Also note that strictly spoken this code is
-not complete: \code{Py_BuildValue()} may run out of memory, and this should
-be checked.
+Note the placement of \samp{Py_DECREF(arglist)} immediately after the
+call, before the error check!  Also note that strictly spoken this
+code is not complete: \cfunction{Py_BuildValue()} may run out of
+memory, and this should be checked.
 
 
 \section{Format Strings for \sectcode{PyArg_ParseTuple()}}
@@ -594,7 +601,7 @@
 exception is raised.
 
 \item[\samp{s\#} (string) {[char *, int]}]
-This variant on \code{'s'} stores into two \C{} variables, the first one
+This variant on \samp{s} stores into two \C{} variables, the first one
 a pointer to a character string, the second one its length.  In this
 case the Python string may contain embedded null bytes.
 
@@ -603,32 +610,32 @@
 case the \C{} pointer is set to \NULL{}.
 
 \item[\samp{z\#} (string or \code{None}) {[char *, int]}]
-This is to \code{'s\#'} as \code{'z'} is to \code{'s'}.
+This is to \samp{s\#} as \samp{z} is to \samp{s}.
 
 \item[\samp{b} (integer) {[char]}]
-Convert a Python integer to a tiny int, stored in a \C{} \code{char}.
+Convert a Python integer to a tiny int, stored in a \C{} \ctype{char}.
 
 \item[\samp{h} (integer) {[short int]}]
-Convert a Python integer to a \C{} \code{short int}.
+Convert a Python integer to a \C{} \ctype{short int}.
 
 \item[\samp{i} (integer) {[int]}]
-Convert a Python integer to a plain \C{} \code{int}.
+Convert a Python integer to a plain \C{} \ctype{int}.
 
 \item[\samp{l} (integer) {[long int]}]
-Convert a Python integer to a \C{} \code{long int}.
+Convert a Python integer to a \C{} \ctype{long int}.
 
 \item[\samp{c} (string of length 1) {[char]}]
 Convert a Python character, represented as a string of length 1, to a
-\C{} \code{char}.
+\C{} \ctype{char}.
 
 \item[\samp{f} (float) {[float]}]
-Convert a Python floating point number to a \C{} \code{float}.
+Convert a Python floating point number to a \C{} \ctype{float}.
 
 \item[\samp{d} (float) {[double]}]
-Convert a Python floating point number to a \C{} \code{double}.
+Convert a Python floating point number to a \C{} \ctype{double}.
 
 \item[\samp{D} (complex) {[Py_complex]}]
-Convert a Python complex number to a \C{} \code{Py_complex} structure.
+Convert a Python complex number to a \C{} \ctype{Py_complex} structure.
 
 \item[\samp{O} (object) {[PyObject *]}]
 Store a Python object (without any conversion) in a \C{} object pointer.
@@ -636,36 +643,36 @@
 object's reference count is not increased.  The pointer stored is not
 \NULL{}.
 
-\item[\samp{O!} (object) {[\var{typeobject}, PyObject *]}]
+\item[\samp{O!} (object) {[\var{typeobject}, PyObject *{]}}]
 Store a Python object in a \C{} object pointer.  This is similar to
 \samp{O}, but takes two \C{} arguments: the first is the address of a
 Python type object, the second is the address of the \C{} variable (of
-type \code{PyObject *}) into which the object pointer is stored.
+type \ctype{PyObject *}) into which the object pointer is stored.
 If the Python object does not have the required type, a
-\code{TypeError} exception is raised.
+\exception{TypeError} exception is raised.
 
-\item[\samp{O\&} (object) {[\var{converter}, \var{anything}]}]
+\item[\samp{O\&} (object) {[\var{converter}, \var{anything}{]}}]
 Convert a Python object to a \C{} variable through a \var{converter}
 function.  This takes two arguments: the first is a function, the
 second is the address of a \C{} variable (of arbitrary type), converted
-to \code{void *}.  The \var{converter} function in turn is called as
+to \ctype{void *}.  The \var{converter} function in turn is called as
 follows:
 
 \code{\var{status} = \var{converter}(\var{object}, \var{address});}
 
 where \var{object} is the Python object to be converted and
-\var{address} is the \code{void *} argument that was passed to
-\code{PyArg_ConvertTuple()}.  The returned \var{status} should be
+\var{address} is the \ctype{void *} argument that was passed to
+\cfunction{PyArg_ConvertTuple()}.  The returned \var{status} should be
 \code{1} for a successful conversion and \code{0} if the conversion
 has failed.  When the conversion fails, the \var{converter} function
 should raise an exception.
 
 \item[\samp{S} (string) {[PyStringObject *]}]
 Like \samp{O} but requires that the Python object is a string object.
-Raises a \code{TypeError} exception if the object is not a string
-object.  The \C{} variable may also be declared as \code{PyObject *}.
+Raises a \exception{TypeError} exception if the object is not a string
+object.  The \C{} variable may also be declared as \ctype{PyObject *}.
 
-\item[\samp{(\var{items})} (tuple) {[\var{matching-items}]}]
+\item[\samp{(\var{items})} (tuple) {[\var{matching-items}{]}}]
 The object must be a Python tuple whose length is the number of format
 units in \var{items}.  The \C{} arguments must correspond to the
 individual format units in \var{items}.  Format units for tuples may
@@ -688,13 +695,13 @@
 Indicates that the remaining arguments in the Python argument list are
 optional.  The \C{} variables corresponding to optional arguments should
 be initialized to their default value --- when an optional argument is
-not specified, the \code{PyArg_ParseTuple} does not touch the contents
+not specified, \cfuntion{PyArg_ParseTuple()} does not touch the contents
 of the corresponding \C{} variable(s).
 
 \item[\samp{:}]
 The list of format units ends here; the string after the colon is used
 as the function name in error messages (the ``associated value'' of
-the exceptions that \code{PyArg_ParseTuple} raises).
+the exceptions that \cfunction{PyArg_ParseTuple()} raises).
 
 \item[\samp{;}]
 The list of format units ends here; the string after the colon is used
@@ -828,7 +835,7 @@
 \section{The \sectcode{Py_BuildValue()} Function}
 \label{buildValue}
 
-This function is the counterpart to \code{PyArg_ParseTuple()}.  It is
+This function is the counterpart to \cfunction{PyArg_ParseTuple()}.  It is
 declared as follows:
 
 \begin{verbatim}
@@ -836,19 +843,20 @@
 \end{verbatim}
 
 It recognizes a set of format units similar to the ones recognized by
-\code{PyArg_ParseTuple()}, but the arguments (which are input to the
+\cfunction{PyArg_ParseTuple()}, but the arguments (which are input to the
 function, not output) must not be pointers, just values.  It returns a
 new Python object, suitable for returning from a \C{} function called
 from Python.
 
-One difference with \code{PyArg_ParseTuple()}: while the latter
+One difference with \cfunction{PyArg_ParseTuple()}: while the latter
 requires its first argument to be a tuple (since Python argument lists
-are always represented as tuples internally), \code{BuildValue()} does
-not always build a tuple.  It builds a tuple only if its format string
-contains two or more format units.  If the format string is empty, it
-returns \code{None}; if it contains exactly one format unit, it
-returns whatever object is described by that format unit.  To force it
-to return a tuple of size 0 or one, parenthesize the format string.
+are always represented as tuples internally),
+\cfunction{Py_BuildValue()} does not always build a tuple.  It builds
+a tuple only if its format string contains two or more format units.
+If the format string is empty, it returns \code{None}; if it contains
+exactly one format unit, it returns whatever object is described by
+that format unit.  To force it to return a tuple of size 0 or one,
+parenthesize the format string.
 
 In the following description, the quoted form is the format unit; the
 entry in (round) parentheses is the Python object type that the format
@@ -877,7 +885,7 @@
 Same as \samp{s\#}.
 
 \item[\samp{i} (integer) {[int]}]
-Convert a plain \C{} \code{int} to a Python integer object.
+Convert a plain \C{} \ctype{int} to a Python integer object.
 
 \item[\samp{b} (integer) {[char]}]
 Same as \samp{i}.
@@ -886,14 +894,14 @@
 Same as \samp{i}.
 
 \item[\samp{l} (integer) {[long int]}]
-Convert a \C{} \code{long int} to a Python integer object.
+Convert a \C{} \ctype{long int} to a Python integer object.
 
 \item[\samp{c} (string of length 1) {[char]}]
-Convert a \C{} \code{int} representing a character to a Python string of
+Convert a \C{} \ctype{int} representing a character to a Python string of
 length 1.
 
 \item[\samp{d} (float) {[double]}]
-Convert a \C{} \code{double} to a Python floating point number.
+Convert a \C{} \ctype{double} to a Python floating point number.
 
 \item[\samp{f} (float) {[float]}]
 Same as \samp{d}.
@@ -903,9 +911,9 @@
 is incremented by one).  If the object passed in is a \NULL{}
 pointer, it is assumed that this was caused because the call producing
 the argument found an error and set an exception.  Therefore,
-\code{Py_BuildValue()} will return \NULL{} but won't raise an
+\cfunction{Py_BuildValue()} will return \NULL{} but won't raise an
 exception.  If no exception has been raised yet,
-\code{PyExc_SystemError} is set.
+\cdata{PyExc_SystemError} is set.
 
 \item[\samp{S} (object) {[PyObject *]}]
 Same as \samp{O}.
@@ -913,7 +921,7 @@
 \item[\samp{O\&} (object) {[\var{converter}, \var{anything}]}]
 Convert \var{anything} to a Python object through a \var{converter}
 function.  The function is called with \var{anything} (which should be
-compatible with \code{void *}) as its argument and should return a
+compatible with \ctype{void *}) as its argument and should return a
 ``new'' Python object, or \NULL{} if an error occurred.
 
 \item[\samp{(\var{items})} (tuple) {[\var{matching-items}]}]
@@ -932,7 +940,7 @@
 \end{description}
 
 If there is an error in the format string, the
-\code{PyExc_SystemError} exception is raised and \NULL{} returned.
+\cdata{PyExc_SystemError} exception is raised and \NULL{} returned.
 
 Examples (to the left the call, to the right the resulting Python value):
 
@@ -960,24 +968,26 @@
 %\subsection{Introduction}
 
 In languages like \C{} or \Cpp{}, the programmer is responsible for
-dynamic allocation and deallocation of memory on the heap.  In \C{}, this
-is done using the functions \code{malloc()} and \code{free()}.  In
-\Cpp{}, the operators \code{new} and \code{delete} are used with
-essentially the same meaning; they are actually implemented using
-\code{malloc()} and \code{free()}, so we'll restrict the following
-discussion to the latter.
+dynamic allocation and deallocation of memory on the heap.  In \C{},
+this is done using the functions \cfunction{malloc()} and
+\cfunction{free()}.  In \Cpp{}, the operators \keyword{new} and
+\keyword{delete} are used with essentially the same meaning; they are
+actually implemented using \cfunction{malloc()} and
+\cfunction{free()}, so we'll restrict the following discussion to the
+latter.
 
-Every block of memory allocated with \code{malloc()} should eventually
-be returned to the pool of available memory by exactly one call to
-\code{free()}.  It is important to call \code{free()} at the right
-time.  If a block's address is forgotten but \code{free()} is not
-called for it, the memory it occupies cannot be reused until the
-program terminates.  This is called a \dfn{memory leak}.  On the other
-hand, if a program calls \code{free()} for a block and then continues
-to use the block, it creates a conflict with re-use of the block
-through another \code{malloc()} call.  This is called \dfn{using freed
-memory}.  It has the same bad consequences as referencing uninitialized
-data --- core dumps, wrong results, mysterious crashes.
+Every block of memory allocated with \cfunction{malloc()} should
+eventually be returned to the pool of available memory by exactly one
+call to \cfunction{free()}.  It is important to call
+\cfunction{free()} at the right time.  If a block's address is
+forgotten but \cfunction{free()} is not called for it, the memory it
+occupies cannot be reused until the program terminates.  This is
+called a \dfn{memory leak}.  On the other hand, if a program calls
+\cfunction{free()} for a block and then continues to use the block, it
+creates a conflict with re-use of the block through another
+\cfunction{malloc()} call.  This is called \dfn{using freed memory}.
+It has the same bad consequences as referencing uninitialized data ---
+core dumps, wrong results, mysterious crashes.
 
 Common causes of memory leaks are unusual paths through the code.  For
 instance, a function may allocate a block of memory, do some
@@ -994,25 +1004,25 @@
 happening by having a coding convention or strategy that minimizes
 this kind of errors.
 
-Since Python makes heavy use of \code{malloc()} and \code{free()}, it
-needs a strategy to avoid memory leaks as well as the use of freed
-memory.  The chosen method is called \dfn{reference counting}.  The
-principle is simple: every object contains a counter, which is
-incremented when a reference to the object is stored somewhere, and
-which is decremented when a reference to it is deleted.  When the
-counter reaches zero, the last reference to the object has been
-deleted and the object is freed.
+Since Python makes heavy use of \cfunction{malloc()} and
+\cfunction{free()}, it needs a strategy to avoid memory leaks as well
+as the use of freed memory.  The chosen method is called
+\dfn{reference counting}.  The principle is simple: every object
+contains a counter, which is incremented when a reference to the
+object is stored somewhere, and which is decremented when a reference
+to it is deleted.  When the counter reaches zero, the last reference
+to the object has been deleted and the object is freed.
 
 An alternative strategy is called \dfn{automatic garbage collection}.
 (Sometimes, reference counting is also referred to as a garbage
 collection strategy, hence my use of ``automatic'' to distinguish the
 two.)  The big advantage of automatic garbage collection is that the
-user doesn't need to call \code{free()} explicitly.  (Another claimed
+user doesn't need to call \cfunction{free()} explicitly.  (Another claimed
 advantage is an improvement in speed or memory usage --- this is no
 hard fact however.)  The disadvantage is that for \C{}, there is no
 truly portable automatic garbage collector, while reference counting
-can be implemented portably (as long as the functions \code{malloc()}
-and \code{free()} are available --- which the \C{} Standard guarantees).
+can be implemented portably (as long as the functions \cfunction{malloc()}
+and \cfunction{free()} are available --- which the \C{} Standard guarantees).
 Maybe some day a sufficiently portable automatic garbage collector
 will be available for \C{}.  Until then, we'll have to live with
 reference counts.
@@ -1022,8 +1032,8 @@
 
 There are two macros, \code{Py_INCREF(x)} and \code{Py_DECREF(x)},
 which handle the incrementing and decrementing of the reference count.
-\code{Py_DECREF()} also frees the object when the count reaches zero.
-For flexibility, it doesn't call \code{free()} directly --- rather, it
+\cfunction{Py_DECREF()} also frees the object when the count reaches zero.
+For flexibility, it doesn't call \cfunction{free()} directly --- rather, it
 makes a call through a function pointer in the object's \dfn{type
 object}.  For this purpose (and others), every object also contains a
 pointer to its type object.
@@ -1033,16 +1043,16 @@
 ``owns'' an object; however, you can \dfn{own a reference} to an
 object.  An object's reference count is now defined as the number of
 owned references to it.  The owner of a reference is responsible for
-calling \code{Py_DECREF()} when the reference is no longer needed.
-Ownership of a reference can be transferred.  There are three ways to
-dispose of an owned reference: pass it on, store it, or call
-\code{Py_DECREF()}.  Forgetting to dispose of an owned reference creates
-a memory leak.
+calling \cfunction{Py_DECREF()} when the reference is no longer
+needed.  Ownership of a reference can be transferred.  There are three
+ways to dispose of an owned reference: pass it on, store it, or call
+\cfunction{Py_DECREF()}.  Forgetting to dispose of an owned reference
+creates a memory leak.
 
 It is also possible to \dfn{borrow}\footnote{The metaphor of
 ``borrowing'' a reference is not completely correct: the owner still
 has a copy of the reference.} a reference to an object.  The borrower
-of a reference should not call \code{Py_DECREF()}.  The borrower must
+of a reference should not call \cfunction{Py_DECREF()}.  The borrower must
 not hold on to the object longer than the owner from which it was
 borrowed.  Using a borrowed reference after the owner has disposed of
 it risks using freed memory and should be avoided
@@ -1060,7 +1070,7 @@
 of it.
 
 A borrowed reference can be changed into an owned reference by calling
-\code{Py_INCREF()}.  This does not affect the status of the owner from
+\cfunction{Py_INCREF()}.  This does not affect the status of the owner from
 which the reference was borrowed --- it creates a new owned reference,
 and gives full owner responsibilities (i.e., the new owner must
 dispose of the reference properly, as well as the previous owner).
@@ -1074,41 +1084,42 @@
 
 Most functions that return a reference to an object pass on ownership
 with the reference.  In particular, all functions whose function it is
-to create a new object, e.g.\ \code{PyInt_FromLong()} and
-\code{Py_BuildValue()}, pass ownership to the receiver.  Even if in
+to create a new object, e.g.\ \cfunction{PyInt_FromLong()} and
+\cfunction{Py_BuildValue()}, pass ownership to the receiver.  Even if in
 fact, in some cases, you don't receive a reference to a brand new
 object, you still receive ownership of the reference.  For instance,
-\code{PyInt_FromLong()} maintains a cache of popular values and can
+\cfunction{PyInt_FromLong()} maintains a cache of popular values and can
 return a reference to a cached item.
 
 Many functions that extract objects from other objects also transfer
 ownership with the reference, for instance
-\code{PyObject_GetAttrString()}.  The picture is less clear, here,
+\cfunction{PyObject_GetAttrString()}.  The picture is less clear, here,
 however, since a few common routines are exceptions:
-\code{PyTuple_GetItem()}, \code{PyList_GetItem()} and
-\code{PyDict_GetItem()} (and \code{PyDict_GetItemString()}) all return
-references that you borrow from the tuple, list or dictionary.
+\cfunction{PyTuple_GetItem()}, \cfunction{PyList_GetItem()},
+\cfunction{PyDict_GetItem()}, and \cfunction{PyDict_GetItemString()}
+all return references that you borrow from the tuple, list or
+dictionary.
 
-The function \code{PyImport_AddModule()} also returns a borrowed
+The function \cfunction{PyImport_AddModule()} also returns a borrowed
 reference, even though it may actually create the object it returns:
 this is possible because an owned reference to the object is stored in
 \code{sys.modules}.
 
 When you pass an object reference into another function, in general,
 the function borrows the reference from you --- if it needs to store
-it, it will use \code{Py_INCREF()} to become an independent owner.
-There are exactly two important exceptions to this rule:
-\code{PyTuple_SetItem()} and \code{PyList_SetItem()}.  These functions
-take over ownership of the item passed to them --- even if they fail!
-(Note that \code{PyDict_SetItem()} and friends don't take over
-ownership --- they are ``normal''.)
+it, it will use \cfunction{Py_INCREF()} to become an independent
+owner.  There are exactly two important exceptions to this rule:
+\cfunction{PyTuple_SetItem()} and \cfunction{PyList_SetItem()}.  These
+functions take over ownership of the item passed to them --- even if
+they fail!  (Note that \cfunction{PyDict_SetItem()} and friends don't
+take over ownership --- they are ``normal''.)
 
 When a \C{} function is called from Python, it borrows references to its
 arguments from the caller.  The caller owns a reference to the object,
 so the borrowed reference's lifetime is guaranteed until the function
 returns.  Only when such a borrowed reference must be stored or passed
 on, it must be turned into an owned reference by calling
-\code{Py_INCREF()}.
+\cfunction{Py_INCREF()}.
 
 The object reference returned from a \C{} function that is called from
 Python must be an owned reference --- ownership is tranferred from the
@@ -1123,8 +1134,8 @@
 reference to dispose of it.
 
 The first and most important case to know about is using
-\code{Py_DECREF()} on an unrelated object while borrowing a reference
-to a list item.  For instance:
+\cfunction{Py_DECREF()} on an unrelated object while borrowing a
+reference to a list item.  For instance:
 
 \begin{verbatim}
 bug(PyObject *list) {
@@ -1138,20 +1149,20 @@
 replaces \code{list[1]} with the value \code{0}, and finally prints
 the borrowed reference.  Looks harmless, right?  But it's not!
 
-Let's follow the control flow into \code{PyList_SetItem()}.  The list
+Let's follow the control flow into \cfunction{PyList_SetItem()}.  The list
 owns references to all its items, so when item 1 is replaced, it has
 to dispose of the original item 1.  Now let's suppose the original
 item 1 was an instance of a user-defined class, and let's further
-suppose that the class defined a \code{__del__()} method.  If this
+suppose that the class defined a \method{__del__()} method.  If this
 class instance has a reference count of 1, disposing of it will call
-its \code{__del__()} method.
+its \method{__del__()} method.
 
-Since it is written in Python, the \code{__del__()} method can execute
+Since it is written in Python, the \method{__del__()} method can execute
 arbitrary Python code.  Could it perhaps do something to invalidate
-the reference to \code{item} in \code{bug()}?  You bet!  Assuming that
-the list passed into \code{bug()} is accessible to the
-\code{__del__()} method, it could execute a statement to the effect of
-\code{del list[0]}, and assuming this was the last reference to that
+the reference to \code{item} in \cfunction{bug()}?  You bet!  Assuming
+that the list passed into \cfunction{bug()} is accessible to the
+\method{__del__()} method, it could execute a statement to the effect of
+\samp{del list[0]}, and assuming this was the last reference to that
 object, it would free the memory associated with it, thereby
 invalidating \code{item}.
 
@@ -1171,7 +1182,7 @@
 
 This is a true story.  An older version of Python contained variants
 of this bug and someone spent a considerable amount of time in a \C{}
-debugger to figure out why his \code{__del__()} methods would fail...
+debugger to figure out why his \method{__del__()} methods would fail...
 
 The second case of problems with a borrowed reference is a variant
 involving threads.  Normally, multiple threads in the Python
@@ -1208,11 +1219,11 @@
 
 It is better to test for \NULL{} only at the ``source'', i.e.\
 when a pointer that may be \NULL{} is received, e.g.\ from
-\code{malloc()} or from a function that may raise an exception.
+\cfunction{malloc()} or from a function that may raise an exception.
 
-The macros \code{Py_INCREF()} and \code{Py_DECREF()}
+The macros \cfunction{Py_INCREF()} and \cfunction{Py_DECREF()}
 don't check for \NULL{} pointers --- however, their variants
-\code{Py_XINCREF()} and \code{Py_XDECREF()} do.
+\cfunction{Py_XINCREF()} and \cfunction{Py_XDECREF()} do.
 
 The macros for checking for a particular object type
 (\code{Py\var{type}_Check()}) don't check for \NULL{} pointers ---
@@ -1259,16 +1270,17 @@
 So if you are embedding Python, you are providing your own main
 program.  One of the things this main program has to do is initialize
 the Python interpreter.  At the very least, you have to call the
-function \code{Py_Initialize()}.  There are optional calls to pass command
-line arguments to Python.  Then later you can call the interpreter
-from any part of the application.
+function \cfunction{Py_Initialize()}.  There are optional calls to
+pass command line arguments to Python.  Then later you can call the
+interpreter from any part of the application.
 
 There are several different ways to call the interpreter: you can pass
-a string containing Python statements to \code{PyRun_SimpleString()},
-or you can pass a stdio file pointer and a file name (for
-identification in error messages only) to \code{PyRun_SimpleFile()}.  You
-can also call the lower-level operations described in the previous
-chapters to construct and use Python objects.
+a string containing Python statements to
+\cfunction{PyRun_SimpleString()}, or you can pass a stdio file pointer
+and a file name (for identification in error messages only) to
+\cfunction{PyRun_SimpleFile()}.  You can also call the lower-level
+operations described in the previous chapters to construct and use
+Python objects.
 
 A simple demo of embedding Python can be found in the directory
 \file{Demo/embed}.
@@ -1336,9 +1348,9 @@
 using shared libraries so there is no reason to; a small test didn't
 work right away so I gave up trying to support it.)
 
-Before you build Python, you first need to fetch and build the \code{dl}
-package written by Jack Jansen.  This is available by anonymous ftp
-from \url{ftp://ftp.cwi.nl/pub/dynload}, file
+Before you build Python, you first need to fetch and build the
+\code{dl} package written by Jack Jansen.  This is available by
+anonymous ftp from \url{ftp://ftp.cwi.nl/pub/dynload}, file
 \file{dl-1.6.tar.Z}.  (The version number may change.)  Follow the
 instructions in the package's \file{README} file to build it.
 
@@ -1387,7 +1399,7 @@
 Since there are three styles of dynamic loading, there are also three
 groups of instructions for building a dynamically loadable module.
 Instructions common for all three styles are given first.  Assuming
-your module is called \code{spam}, the source filename must be
+your module is called \module{spam}, the source filename must be
 \file{spammodule.c}, so the object name is \file{spammodule.o}.  The
 module must be written as a normal Python extension module (as
 described earlier).
@@ -1425,12 +1437,12 @@
 ld -shared spammodule.o -o spammodule.so
 \end{verbatim}
 
-On other systems, consult the manual page for \code{ld}(1) to find what
-flags, if any, must be used.
+On other systems, consult the manual page for \manpage{ld}{1} to find
+what flags, if any, must be used.
 
 If your extension module uses system libraries that haven't already
 been linked with Python (e.g. a windowing system), these must be
-passed to the \code{ld} command as \samp{-l} options after the
+passed to the \program{ld} command as \samp{-l} options after the
 \samp{.o} file.
 
 The resulting file \file{spammodule.so} must be copied into a directory
