diff --git a/Doc/api.tex b/Doc/api.tex
index 780034a..b13a097 100644
--- a/Doc/api.tex
+++ b/Doc/api.tex
@@ -523,34 +523,40 @@
 a later chapter.
 
 
-\chapter{Basic Utilities}
+\chapter{The Very High Level Layer}
 
-XXX These utilities should be moved to some other section...
+The functions in this chapter will let you execute Python source code
+given in a file or a buffer, but they will not let you interact in a
+more detailed way with the interpreter.
 
-\begin{cfuncdesc}{void}{Py_FatalError}{char *message}
-Print a fatal error message and kill the process.  No cleanup is
-performed.  This function should only be invoked when a condition is
-detected that would make it dangerous to continue using the Python
-interpreter; e.g., when the object administration appears to be
-corrupted.  On \UNIX{}, the standard \C{} library function \code{abort()} is 
-called which will attempt to produce a \file{core} file.
+\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{void}{Py_Exit}{int status}
-Exit the current process.  This calls \code{Py_Finalize()} and then
-calls the standard \C{} library function \code{exit(\var{status})}.
+\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()}
-Register a cleanup function to be called by \cfunction{Py_Finalize()}.
-The cleanup function will be called with no arguments and should
-return no value.  At most 32 cleanup functions can be registered.
-When the registration is successful, \cfunction{Py_AtExit()} returns
-\code{0}; on failure, it returns \code{-1}.  The cleanup function
-registered last is called first.  Each cleanup function will be called
-at most once.  Since Python's internal finallization will have
-completed before the cleanup function, no Python APIs should be called
-by \var{func}.
+\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
 \end{cfuncdesc}
 
 
@@ -849,7 +855,36 @@
 \end{cfuncdesc}
 
 
-\section{Importing modules}
+\section{Process Control}
+
+\begin{cfuncdesc}{void}{Py_FatalError}{char *message}
+Print a fatal error message and kill the process.  No cleanup is
+performed.  This function should only be invoked when a condition is
+detected that would make it dangerous to continue using the Python
+interpreter; e.g., when the object administration appears to be
+corrupted.  On \UNIX{}, the standard \C{} library function \code{abort()} is 
+called which will attempt to produce a \file{core} file.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{Py_Exit}{int status}
+Exit the current process.  This calls \code{Py_Finalize()} and then
+calls the standard \C{} library function \code{exit(\var{status})}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()}
+Register a cleanup function to be called by \cfunction{Py_Finalize()}.
+The cleanup function will be called with no arguments and should
+return no value.  At most 32 cleanup functions can be registered.
+When the registration is successful, \cfunction{Py_AtExit()} returns
+\code{0}; on failure, it returns \code{-1}.  The cleanup function
+registered last is called first.  Each cleanup function will be called
+at most once.  Since Python's internal finallization will have
+completed before the cleanup function, no Python APIs should be called
+by \var{func}.
+\end{cfuncdesc}
+
+
+\section{Importing Modules}
 
 \begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name}
 This is a simplified interface to \code{PyImport_ImportModuleEx}
@@ -978,48 +1013,6 @@
 \end{cvardesc}
 
 
-\chapter{Debugging}
-
-XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG.
-
-
-\chapter{The Very High Level Layer}
-
-The functions in this chapter will let you execute Python source code
-given in a file or a buffer, but they will not let you interact in a
-more detailed way with the interpreter.
-
-\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
-\end{cfuncdesc}
-
-
 \chapter{Abstract Objects Layer}
 
 The functions in this chapter interact with Python objects regardless
@@ -1609,23 +1602,569 @@
 if you receive an object from a Python program and you are not sure
 that it has the right type, you must perform a type check first;
 e.g. to check that an object is a dictionary, use
-\code{PyDict_Check()}.
+\cfunction{PyDict_Check()}.  The chapter is structured like the
+``family tree'' of Python object types.
 
 
-\chapter{Defining New Object Types}
+\section{Fundamental Objects}
 
-\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
+This section describes Python type objects and the singleton object 
+\code{None}.
+
+
+\subsection{Type Objects}
+
+\begin{ctypedesc}{PyTypeObject}
+
+\end{ctypedesc}
+
+\begin{cvardesc}{PyObject *}{PyType_Type}
+
+\end{cvardesc}
+
+
+\subsection{The None Object}
+
+\begin{cvardesc}{PyObject *}{Py_None}
+XXX macro
+\end{cvardesc}
+
+
+\section{Sequence Objects}
+
+Generic operations on sequence objects were discussed in the previous 
+chapter; this section deals with the specific kinds of sequence 
+objects that are intrinsic to the Python language.
+
+
+\subsection{String Objects}
+
+\begin{ctypedesc}{PyStringObject}
+This subtype of \code{PyObject} represents a Python string object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyString_Type}
+This instance of \code{PyTypeObject} represents the Python string type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
+\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}
+\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size}
+\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
+
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
+
+\end{cfuncdesc}
+
+
+\subsection{Tuple Objects}
+
+\begin{ctypedesc}{PyTupleObject}
+This subtype of \code{PyObject} represents a Python tuple object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyTuple_Type}
+This instance of \code{PyTypeObject} represents the Python tuple type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p}
+Return true if the argument is a tuple object.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
+Return a new tuple object of size \code{s}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p}
+akes a pointer to a tuple object, and returns the size
+of that tuple.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
+returns the object at position \code{pos} in the tuple pointed
+to by \code{p}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
+does the same, but does no checking of it's
+arguments.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
+            int low,
+            int high}
+takes a slice of the tuple pointed to by \code{p} from
+\code{low} to \code{high} and returns it as a new tuple.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p,
+            int pos,
+            PyObject *o}
+inserts a reference to object \code{o} at position \code{pos} of
+the tuple pointed to by \code{p}. It returns 0 on success.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p,
+            int pos,
+            PyObject *o}
+
+does the same, but does no error checking, and
+should \emph{only} be used to fill in brand new tuples.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
+            int new,
+            int last_is_sticky}
+can be used to resize a tuple. Because tuples are
+\emph{supposed} to be immutable, this should only be used if there is only
+one module referencing the object. Do \emph{not} use this if the tuple may
+already be known to some other part of the code. \code{last_is_sticky} is
+a flag - if set, the tuple will grow or shrink at the front, otherwise
+it will grow or shrink at the end. Think of this as destroying the old
+tuple and creating a new one, only more efficiently.
+\end{cfuncdesc}
+
+
+\subsection{List Objects}
+
+\begin{ctypedesc}{PyListObject}
+This subtype of \code{PyObject} represents a Python list object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyList_Type}
+This instance of \code{PyTypeObject} represents the Python list type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p}
+returns true if it's argument is a \code{PyListObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
+
+\end{cfuncdesc}
+
+
+\section{Mapping Objects}
+
+\subsection{Dictionary Objects}
+
+\begin{ctypedesc}{PyDictObject}
+This subtype of \code{PyObject} represents a Python dictionary object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyDict_Type}
+This instance of \code{PyTypeObject} represents the Python dictionary type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p}
+returns true if it's argument is a PyDictObject
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
+returns a new empty dictionary.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p}
+empties an existing dictionary and deletes it.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p,
+            PyObject *key,
+            PyObject *val}
+inserts \code{value} into the dictionary with a key of
+\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should
+be hashable.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p,
+            char *key,
+            PyObject *val}
+inserts \code{value} into the dictionary using \code{key}
+as a key. \code{key} should be a char *
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key}
+removes the entry in dictionary \code{p} with key \code{key}.
+\code{key} is a PyObject.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key}
+removes the entry in dictionary \code{p} which has a key
+specified by the \code{char *}\code{key}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
+returns the object from dictionary \code{p} which has a key
+\code{key}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
+does the same, but \code{key} is specified as a
+\code{char *}, rather than a \code{PyObject *}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
+returns a PyListObject containing all the items 
+from the dictionary, as in the mapping method \code{items()} (see the Reference
+Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
+returns a PyListObject containing all the keys 
+from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
+returns a PyListObject containing all the values 
+from the dictionary, as in the mapping method \code{values()} (see the Reference Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p}
+returns the number of items in the dictionary.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p,
+            int ppos,
+            PyObject **pkey,
+            PyObject **pvalue}
+
+\end{cfuncdesc}
+
+
+\section{Numeric Objects}
+
+\subsection{Plain Integer Objects}
+
+\begin{ctypedesc}{PyIntObject}
+This subtype of \code{PyObject} represents a Python integer object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyInt_Type}
+This instance of \code{PyTypeObject} represents the Python plain 
+integer type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
+creates a new integer object with a value of \code{ival}.
+
+The current implementation keeps an array of integer objects for all
+integers between -1 and 100, when you create an int in that range you
+actually just get back a reference to the existing object. So it should
+be possible to change the value of 1. I suspect the behaviour of python
+in this case is undefined. :-)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io}
+returns the value of the object \code{io}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io}
+will first attempt to cast the object to a PyIntObject, if
+it is not already one, and the return it's value.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_GetMax}{}
+returns the systems idea of the largest int it can handle
+(LONG_MAX, as defined in the system header files)
+\end{cfuncdesc}
+
+
+\subsection{Long Integer Objects}
+
+\begin{ctypedesc}{PyLongObject}
+This subtype of \code{PyObject} represents a Python long integer object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyLong_Type}
+This instance of \code{PyTypeObject} represents the Python long integer type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p}
+returns true if it's argument is a \code{PyLongObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
+
+\end{cfuncdesc}
+
+
+\subsection{Floating Point Objects}
+
+\begin{ctypedesc}{PyFloatObject}
+This subtype of \code{PyObject} represents a Python floating point object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyFloat_Type}
+This instance of \code{PyTypeObject} represents the Python floating 
+point type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p}
+returns true if it's argument is a \code{PyFloatObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
+
+\end{cfuncdesc}
+
+
+\subsection{Complex Number Objects}
+
+\begin{ctypedesc}{Py_complex}
+typedef struct {
+   double real;
+   double imag;
+} 
+\end{ctypedesc}
+
+\begin{ctypedesc}{PyComplexObject}
+This subtype of \code{PyObject} represents a Python complex number object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyComplex_Type}
+This instance of \code{PyTypeObject} represents the Python complex 
+number type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p}
+returns true if it's argument is a \code{PyComplexObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
+
+\end{cfuncdesc}
+
+
+
+\section{Other Objects}
+
+\subsection{File Objects}
+
+\begin{ctypedesc}{PyFileObject}
+This subtype of \code{PyObject} represents a Python file object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyFile_Type}
+This instance of \code{PyTypeObject} represents the Python file type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p}
+returns true if it's argument is a \code{PyFileObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
+creates a new PyFileObject pointing to the file
+specified in \code{name} with the mode specified in \code{mode}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
+              char *name, char *mode, int (*close})
+creates a new PyFileObject from the already-open \code{fp}.
+The function \code{close} will be called when the file should be closed.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p}
+returns the file object associated with \code{p} as a \code{FILE *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
+undocumented as yet
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
+returns the name of the file specified by \code{p} as a 
+PyStringObject
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n}
+on systems with \code{setvbuf} only
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
+same as the file object method \code{softspace}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
+writes object \code{obj} to file object \code{p}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
+writes string \code{s} to file object \code{p}
+\end{cfuncdesc}
+
+
+\subsection{CObjects}
+
+XXX
+
+
 \chapter{Initialization, Finalization, and Threads}
 
 \begin{cfuncdesc}{void}{Py_Initialize}{}
@@ -2265,570 +2804,24 @@
 PyObject_NEW, PyObject_NEW_VAR
 
 
-\chapter{Specific Data Types}
+\chapter{Defining New Object Types}
 
-This chapter describes the functions that deal with specific types of 
-Python objects.  It is structured like the ``family tree'' of Python 
-object types.
-
-
-\section{Fundamental Objects}
-
-This section describes Python type objects and the singleton object 
-\code{None}.
-
-
-\subsection{Type Objects}
-
-\begin{ctypedesc}{PyTypeObject}
-
-\end{ctypedesc}
-
-\begin{cvardesc}{PyObject *}{PyType_Type}
-
-\end{cvardesc}
-
-
-\subsection{The None Object}
-
-\begin{cvardesc}{PyObject *}{Py_None}
-XXX macro
-\end{cvardesc}
-
-
-\section{Sequence Objects}
-
-Generic operations on sequence objects were discussed in the previous 
-chapter; this section deals with the specific kinds of sequence 
-objects that are intrinsic to the Python language.
-
-
-\subsection{String Objects}
-
-\begin{ctypedesc}{PyStringObject}
-This subtype of \code{PyObject} represents a Python string object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyString_Type}
-This instance of \code{PyTypeObject} represents the Python string type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o}
-
+\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
-
+\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
-
+\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
-
+\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
 
-\end{cfuncdesc}
+\chapter{Debugging}
 
-\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
-
-\end{cfuncdesc}
-
-
-\subsection{Tuple Objects}
-
-\begin{ctypedesc}{PyTupleObject}
-This subtype of \code{PyObject} represents a Python tuple object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyTuple_Type}
-This instance of \code{PyTypeObject} represents the Python tuple type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p}
-Return true if the argument is a tuple object.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
-Return a new tuple object of size \code{s}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p}
-akes a pointer to a tuple object, and returns the size
-of that tuple.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
-returns the object at position \code{pos} in the tuple pointed
-to by \code{p}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
-does the same, but does no checking of it's
-arguments.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
-            int low,
-            int high}
-takes a slice of the tuple pointed to by \code{p} from
-\code{low} to \code{high} and returns it as a new tuple.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p,
-            int pos,
-            PyObject *o}
-inserts a reference to object \code{o} at position \code{pos} of
-the tuple pointed to by \code{p}. It returns 0 on success.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p,
-            int pos,
-            PyObject *o}
-
-does the same, but does no error checking, and
-should \emph{only} be used to fill in brand new tuples.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
-            int new,
-            int last_is_sticky}
-can be used to resize a tuple. Because tuples are
-\emph{supposed} to be immutable, this should only be used if there is only
-one module referencing the object. Do \emph{not} use this if the tuple may
-already be known to some other part of the code. \code{last_is_sticky} is
-a flag - if set, the tuple will grow or shrink at the front, otherwise
-it will grow or shrink at the end. Think of this as destroying the old
-tuple and creating a new one, only more efficiently.
-\end{cfuncdesc}
-
-
-\subsection{List Objects}
-
-\begin{ctypedesc}{PyListObject}
-This subtype of \code{PyObject} represents a Python list object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyList_Type}
-This instance of \code{PyTypeObject} represents the Python list type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p}
-returns true if it's argument is a \code{PyListObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
-
-\end{cfuncdesc}
-
-
-\section{Mapping Objects}
-
-\subsection{Dictionary Objects}
-
-\begin{ctypedesc}{PyDictObject}
-This subtype of \code{PyObject} represents a Python dictionary object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyDict_Type}
-This instance of \code{PyTypeObject} represents the Python dictionary type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p}
-returns true if it's argument is a PyDictObject
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
-returns a new empty dictionary.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p}
-empties an existing dictionary and deletes it.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p,
-            PyObject *key,
-            PyObject *val}
-inserts \code{value} into the dictionary with a key of
-\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should
-be hashable.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p,
-            char *key,
-            PyObject *val}
-inserts \code{value} into the dictionary using \code{key}
-as a key. \code{key} should be a char *
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key}
-removes the entry in dictionary \code{p} with key \code{key}.
-\code{key} is a PyObject.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key}
-removes the entry in dictionary \code{p} which has a key
-specified by the \code{char *}\code{key}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
-returns the object from dictionary \code{p} which has a key
-\code{key}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
-does the same, but \code{key} is specified as a
-\code{char *}, rather than a \code{PyObject *}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
-returns a PyListObject containing all the items 
-from the dictionary, as in the mapping method \code{items()} (see the Reference
-Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
-returns a PyListObject containing all the keys 
-from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
-returns a PyListObject containing all the values 
-from the dictionary, as in the mapping method \code{values()} (see the Reference Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p}
-returns the number of items in the dictionary.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p,
-            int ppos,
-            PyObject **pkey,
-            PyObject **pvalue}
-
-\end{cfuncdesc}
-
-
-\section{Numeric Objects}
-
-\subsection{Plain Integer Objects}
-
-\begin{ctypedesc}{PyIntObject}
-This subtype of \code{PyObject} represents a Python integer object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyInt_Type}
-This instance of \code{PyTypeObject} represents the Python plain 
-integer type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
-creates a new integer object with a value of \code{ival}.
-
-The current implementation keeps an array of integer objects for all
-integers between -1 and 100, when you create an int in that range you
-actually just get back a reference to the existing object. So it should
-be possible to change the value of 1. I suspect the behaviour of python
-in this case is undefined. :-)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io}
-returns the value of the object \code{io}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io}
-will first attempt to cast the object to a PyIntObject, if
-it is not already one, and the return it's value.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_GetMax}{}
-returns the systems idea of the largest int it can handle
-(LONG_MAX, as defined in the system header files)
-\end{cfuncdesc}
-
-
-\subsection{Long Integer Objects}
-
-\begin{ctypedesc}{PyLongObject}
-This subtype of \code{PyObject} represents a Python long integer object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyLong_Type}
-This instance of \code{PyTypeObject} represents the Python long integer type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p}
-returns true if it's argument is a \code{PyLongObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
-
-\end{cfuncdesc}
-
-
-\subsection{Floating Point Objects}
-
-\begin{ctypedesc}{PyFloatObject}
-This subtype of \code{PyObject} represents a Python floating point object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyFloat_Type}
-This instance of \code{PyTypeObject} represents the Python floating 
-point type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p}
-returns true if it's argument is a \code{PyFloatObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
-
-\end{cfuncdesc}
-
-
-\subsection{Complex Number Objects}
-
-\begin{ctypedesc}{Py_complex}
-typedef struct {
-   double real;
-   double imag;
-} 
-\end{ctypedesc}
-
-\begin{ctypedesc}{PyComplexObject}
-This subtype of \code{PyObject} represents a Python complex number object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyComplex_Type}
-This instance of \code{PyTypeObject} represents the Python complex 
-number type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p}
-returns true if it's argument is a \code{PyComplexObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
-
-\end{cfuncdesc}
-
-
-
-\section{Other Objects}
-
-\subsection{File Objects}
-
-\begin{ctypedesc}{PyFileObject}
-This subtype of \code{PyObject} represents a Python file object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyFile_Type}
-This instance of \code{PyTypeObject} represents the Python file type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p}
-returns true if it's argument is a \code{PyFileObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
-creates a new PyFileObject pointing to the file
-specified in \code{name} with the mode specified in \code{mode}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
-              char *name, char *mode, int (*close})
-creates a new PyFileObject from the already-open \code{fp}.
-The function \code{close} will be called when the file should be closed.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p}
-returns the file object associated with \code{p} as a \code{FILE *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
-undocumented as yet
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
-returns the name of the file specified by \code{p} as a 
-PyStringObject
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n}
-on systems with \code{setvbuf} only
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
-same as the file object method \code{softspace}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
-writes object \code{obj} to file object \code{p}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
-writes string \code{s} to file object \code{p}
-\end{cfuncdesc}
-
-
-\subsection{CObjects}
-
-XXX
+XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG.
 
 
 \input{api.ind}			% Index -- must be last
diff --git a/Doc/api/api.tex b/Doc/api/api.tex
index 780034a..b13a097 100644
--- a/Doc/api/api.tex
+++ b/Doc/api/api.tex
@@ -523,34 +523,40 @@
 a later chapter.
 
 
-\chapter{Basic Utilities}
+\chapter{The Very High Level Layer}
 
-XXX These utilities should be moved to some other section...
+The functions in this chapter will let you execute Python source code
+given in a file or a buffer, but they will not let you interact in a
+more detailed way with the interpreter.
 
-\begin{cfuncdesc}{void}{Py_FatalError}{char *message}
-Print a fatal error message and kill the process.  No cleanup is
-performed.  This function should only be invoked when a condition is
-detected that would make it dangerous to continue using the Python
-interpreter; e.g., when the object administration appears to be
-corrupted.  On \UNIX{}, the standard \C{} library function \code{abort()} is 
-called which will attempt to produce a \file{core} file.
+\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{void}{Py_Exit}{int status}
-Exit the current process.  This calls \code{Py_Finalize()} and then
-calls the standard \C{} library function \code{exit(\var{status})}.
+\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()}
-Register a cleanup function to be called by \cfunction{Py_Finalize()}.
-The cleanup function will be called with no arguments and should
-return no value.  At most 32 cleanup functions can be registered.
-When the registration is successful, \cfunction{Py_AtExit()} returns
-\code{0}; on failure, it returns \code{-1}.  The cleanup function
-registered last is called first.  Each cleanup function will be called
-at most once.  Since Python's internal finallization will have
-completed before the cleanup function, no Python APIs should be called
-by \var{func}.
+\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
 \end{cfuncdesc}
 
 
@@ -849,7 +855,36 @@
 \end{cfuncdesc}
 
 
-\section{Importing modules}
+\section{Process Control}
+
+\begin{cfuncdesc}{void}{Py_FatalError}{char *message}
+Print a fatal error message and kill the process.  No cleanup is
+performed.  This function should only be invoked when a condition is
+detected that would make it dangerous to continue using the Python
+interpreter; e.g., when the object administration appears to be
+corrupted.  On \UNIX{}, the standard \C{} library function \code{abort()} is 
+called which will attempt to produce a \file{core} file.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{Py_Exit}{int status}
+Exit the current process.  This calls \code{Py_Finalize()} and then
+calls the standard \C{} library function \code{exit(\var{status})}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()}
+Register a cleanup function to be called by \cfunction{Py_Finalize()}.
+The cleanup function will be called with no arguments and should
+return no value.  At most 32 cleanup functions can be registered.
+When the registration is successful, \cfunction{Py_AtExit()} returns
+\code{0}; on failure, it returns \code{-1}.  The cleanup function
+registered last is called first.  Each cleanup function will be called
+at most once.  Since Python's internal finallization will have
+completed before the cleanup function, no Python APIs should be called
+by \var{func}.
+\end{cfuncdesc}
+
+
+\section{Importing Modules}
 
 \begin{cfuncdesc}{PyObject *}{PyImport_ImportModule}{char *name}
 This is a simplified interface to \code{PyImport_ImportModuleEx}
@@ -978,48 +1013,6 @@
 \end{cvardesc}
 
 
-\chapter{Debugging}
-
-XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG.
-
-
-\chapter{The Very High Level Layer}
-
-The functions in this chapter will let you execute Python source code
-given in a file or a buffer, but they will not let you interact in a
-more detailed way with the interpreter.
-
-\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_SimpleString}{char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *, char *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseString}{char *, int}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{struct _node *}{PyParser_SimpleParseFile}{FILE *, char *, int}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyRun_String}{char *, int, PyObject *, PyObject *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyRun_File}{FILE *, char *, int, PyObject *, PyObject *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{Py_CompileString}{char *, char *, int}
-\end{cfuncdesc}
-
-
 \chapter{Abstract Objects Layer}
 
 The functions in this chapter interact with Python objects regardless
@@ -1609,23 +1602,569 @@
 if you receive an object from a Python program and you are not sure
 that it has the right type, you must perform a type check first;
 e.g. to check that an object is a dictionary, use
-\code{PyDict_Check()}.
+\cfunction{PyDict_Check()}.  The chapter is structured like the
+``family tree'' of Python object types.
 
 
-\chapter{Defining New Object Types}
+\section{Fundamental Objects}
 
-\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
+This section describes Python type objects and the singleton object 
+\code{None}.
+
+
+\subsection{Type Objects}
+
+\begin{ctypedesc}{PyTypeObject}
+
+\end{ctypedesc}
+
+\begin{cvardesc}{PyObject *}{PyType_Type}
+
+\end{cvardesc}
+
+
+\subsection{The None Object}
+
+\begin{cvardesc}{PyObject *}{Py_None}
+XXX macro
+\end{cvardesc}
+
+
+\section{Sequence Objects}
+
+Generic operations on sequence objects were discussed in the previous 
+chapter; this section deals with the specific kinds of sequence 
+objects that are intrinsic to the Python language.
+
+
+\subsection{String Objects}
+
+\begin{ctypedesc}{PyStringObject}
+This subtype of \code{PyObject} represents a Python string object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyString_Type}
+This instance of \code{PyTypeObject} represents the Python string type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
+\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}
+\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
+
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size}
+\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
+
 \end{cfuncdesc}
 
+\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
+
+\end{cfuncdesc}
+
+
+\subsection{Tuple Objects}
+
+\begin{ctypedesc}{PyTupleObject}
+This subtype of \code{PyObject} represents a Python tuple object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyTuple_Type}
+This instance of \code{PyTypeObject} represents the Python tuple type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p}
+Return true if the argument is a tuple object.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
+Return a new tuple object of size \code{s}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p}
+akes a pointer to a tuple object, and returns the size
+of that tuple.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
+returns the object at position \code{pos} in the tuple pointed
+to by \code{p}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
+does the same, but does no checking of it's
+arguments.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
+            int low,
+            int high}
+takes a slice of the tuple pointed to by \code{p} from
+\code{low} to \code{high} and returns it as a new tuple.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p,
+            int pos,
+            PyObject *o}
+inserts a reference to object \code{o} at position \code{pos} of
+the tuple pointed to by \code{p}. It returns 0 on success.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p,
+            int pos,
+            PyObject *o}
+
+does the same, but does no error checking, and
+should \emph{only} be used to fill in brand new tuples.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
+            int new,
+            int last_is_sticky}
+can be used to resize a tuple. Because tuples are
+\emph{supposed} to be immutable, this should only be used if there is only
+one module referencing the object. Do \emph{not} use this if the tuple may
+already be known to some other part of the code. \code{last_is_sticky} is
+a flag - if set, the tuple will grow or shrink at the front, otherwise
+it will grow or shrink at the end. Think of this as destroying the old
+tuple and creating a new one, only more efficiently.
+\end{cfuncdesc}
+
+
+\subsection{List Objects}
+
+\begin{ctypedesc}{PyListObject}
+This subtype of \code{PyObject} represents a Python list object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyList_Type}
+This instance of \code{PyTypeObject} represents the Python list type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p}
+returns true if it's argument is a \code{PyListObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
+
+\end{cfuncdesc}
+
+
+\section{Mapping Objects}
+
+\subsection{Dictionary Objects}
+
+\begin{ctypedesc}{PyDictObject}
+This subtype of \code{PyObject} represents a Python dictionary object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyDict_Type}
+This instance of \code{PyTypeObject} represents the Python dictionary type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p}
+returns true if it's argument is a PyDictObject
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
+returns a new empty dictionary.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p}
+empties an existing dictionary and deletes it.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p,
+            PyObject *key,
+            PyObject *val}
+inserts \code{value} into the dictionary with a key of
+\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should
+be hashable.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p,
+            char *key,
+            PyObject *val}
+inserts \code{value} into the dictionary using \code{key}
+as a key. \code{key} should be a char *
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key}
+removes the entry in dictionary \code{p} with key \code{key}.
+\code{key} is a PyObject.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key}
+removes the entry in dictionary \code{p} which has a key
+specified by the \code{char *}\code{key}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
+returns the object from dictionary \code{p} which has a key
+\code{key}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
+does the same, but \code{key} is specified as a
+\code{char *}, rather than a \code{PyObject *}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
+returns a PyListObject containing all the items 
+from the dictionary, as in the mapping method \code{items()} (see the Reference
+Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
+returns a PyListObject containing all the keys 
+from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
+returns a PyListObject containing all the values 
+from the dictionary, as in the mapping method \code{values()} (see the Reference Guide)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p}
+returns the number of items in the dictionary.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p,
+            int ppos,
+            PyObject **pkey,
+            PyObject **pvalue}
+
+\end{cfuncdesc}
+
+
+\section{Numeric Objects}
+
+\subsection{Plain Integer Objects}
+
+\begin{ctypedesc}{PyIntObject}
+This subtype of \code{PyObject} represents a Python integer object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyInt_Type}
+This instance of \code{PyTypeObject} represents the Python plain 
+integer type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
+creates a new integer object with a value of \code{ival}.
+
+The current implementation keeps an array of integer objects for all
+integers between -1 and 100, when you create an int in that range you
+actually just get back a reference to the existing object. So it should
+be possible to change the value of 1. I suspect the behaviour of python
+in this case is undefined. :-)
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io}
+returns the value of the object \code{io}.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io}
+will first attempt to cast the object to a PyIntObject, if
+it is not already one, and the return it's value.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyInt_GetMax}{}
+returns the systems idea of the largest int it can handle
+(LONG_MAX, as defined in the system header files)
+\end{cfuncdesc}
+
+
+\subsection{Long Integer Objects}
+
+\begin{ctypedesc}{PyLongObject}
+This subtype of \code{PyObject} represents a Python long integer object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyLong_Type}
+This instance of \code{PyTypeObject} represents the Python long integer type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p}
+returns true if it's argument is a \code{PyLongObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
+
+\end{cfuncdesc}
+
+
+\subsection{Floating Point Objects}
+
+\begin{ctypedesc}{PyFloatObject}
+This subtype of \code{PyObject} represents a Python floating point object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyFloat_Type}
+This instance of \code{PyTypeObject} represents the Python floating 
+point type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p}
+returns true if it's argument is a \code{PyFloatObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
+
+\end{cfuncdesc}
+
+
+\subsection{Complex Number Objects}
+
+\begin{ctypedesc}{Py_complex}
+typedef struct {
+   double real;
+   double imag;
+} 
+\end{ctypedesc}
+
+\begin{ctypedesc}{PyComplexObject}
+This subtype of \code{PyObject} represents a Python complex number object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyComplex_Type}
+This instance of \code{PyTypeObject} represents the Python complex 
+number type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p}
+returns true if it's argument is a \code{PyComplexObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
+
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
+
+\end{cfuncdesc}
+
+
+
+\section{Other Objects}
+
+\subsection{File Objects}
+
+\begin{ctypedesc}{PyFileObject}
+This subtype of \code{PyObject} represents a Python file object.
+\end{ctypedesc}
+
+\begin{cvardesc}{PyTypeObject}{PyFile_Type}
+This instance of \code{PyTypeObject} represents the Python file type.
+\end{cvardesc}
+
+\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p}
+returns true if it's argument is a \code{PyFileObject}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
+creates a new PyFileObject pointing to the file
+specified in \code{name} with the mode specified in \code{mode}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
+              char *name, char *mode, int (*close})
+creates a new PyFileObject from the already-open \code{fp}.
+The function \code{close} will be called when the file should be closed.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p}
+returns the file object associated with \code{p} as a \code{FILE *}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
+undocumented as yet
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
+returns the name of the file specified by \code{p} as a 
+PyStringObject
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n}
+on systems with \code{setvbuf} only
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
+same as the file object method \code{softspace}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
+writes object \code{obj} to file object \code{p}
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
+writes string \code{s} to file object \code{p}
+\end{cfuncdesc}
+
+
+\subsection{CObjects}
+
+XXX
+
+
 \chapter{Initialization, Finalization, and Threads}
 
 \begin{cfuncdesc}{void}{Py_Initialize}{}
@@ -2265,570 +2804,24 @@
 PyObject_NEW, PyObject_NEW_VAR
 
 
-\chapter{Specific Data Types}
+\chapter{Defining New Object Types}
 
-This chapter describes the functions that deal with specific types of 
-Python objects.  It is structured like the ``family tree'' of Python 
-object types.
-
-
-\section{Fundamental Objects}
-
-This section describes Python type objects and the singleton object 
-\code{None}.
-
-
-\subsection{Type Objects}
-
-\begin{ctypedesc}{PyTypeObject}
-
-\end{ctypedesc}
-
-\begin{cvardesc}{PyObject *}{PyType_Type}
-
-\end{cvardesc}
-
-
-\subsection{The None Object}
-
-\begin{cvardesc}{PyObject *}{Py_None}
-XXX macro
-\end{cvardesc}
-
-
-\section{Sequence Objects}
-
-Generic operations on sequence objects were discussed in the previous 
-chapter; this section deals with the specific kinds of sequence 
-objects that are intrinsic to the Python language.
-
-
-\subsection{String Objects}
-
-\begin{ctypedesc}{PyStringObject}
-This subtype of \code{PyObject} represents a Python string object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyString_Type}
-This instance of \code{PyTypeObject} represents the Python string type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyString_Check}{PyObject *o}
-
+\begin{cfuncdesc}{PyObject *}{_PyObject_New}{PyTypeObject *type}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{PyString_FromStringAndSize}{const char *, int}
-
+\begin{cfuncdesc}{PyObject *}{_PyObject_NewVar}{PyTypeObject *type, int size}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{PyObject *}{PyString_FromString}{const char *}
-
+\begin{cfuncdesc}{TYPE}{_PyObject_NEW}{TYPE, PyTypeObject *}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{int}{PyString_Size}{PyObject *}
-
+\begin{cfuncdesc}{TYPE}{_PyObject_NEW_VAR}{TYPE, PyTypeObject *, int size}
 \end{cfuncdesc}
 
-\begin{cfuncdesc}{char *}{PyString_AsString}{PyObject *}
 
-\end{cfuncdesc}
+\chapter{Debugging}
 
-\begin{cfuncdesc}{void}{PyString_Concat}{PyObject **, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyString_Format}{PyObject *, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyString_InternFromString}{const char *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{char *}{PyString_AS_STRING}{PyStringObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyStringObject *}
-
-\end{cfuncdesc}
-
-
-\subsection{Tuple Objects}
-
-\begin{ctypedesc}{PyTupleObject}
-This subtype of \code{PyObject} represents a Python tuple object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyTuple_Type}
-This instance of \code{PyTypeObject} represents the Python tuple type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyTuple_Check}{PyObject *p}
-Return true if the argument is a tuple object.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{PyTuple_New}{int s}
-Return a new tuple object of size \code{s}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyTuple_Size}{PyTupleObject *p}
-akes a pointer to a tuple object, and returns the size
-of that tuple.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyTuple_GetItem}{PyTupleObject *p, int pos}
-returns the object at position \code{pos} in the tuple pointed
-to by \code{p}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
-does the same, but does no checking of it's
-arguments.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{PyTuple_GetSlice}{PyTupleObject *p,
-            int low,
-            int high}
-takes a slice of the tuple pointed to by \code{p} from
-\code{low} to \code{high} and returns it as a new tuple.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyTuple_SetItem}{PyTupleObject *p,
-            int pos,
-            PyObject *o}
-inserts a reference to object \code{o} at position \code{pos} of
-the tuple pointed to by \code{p}. It returns 0 on success.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyTuple_SET_ITEM}{PyTupleObject *p,
-            int pos,
-            PyObject *o}
-
-does the same, but does no error checking, and
-should \emph{only} be used to fill in brand new tuples.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyTupleObject *}{_PyTuple_Resize}{PyTupleObject *p,
-            int new,
-            int last_is_sticky}
-can be used to resize a tuple. Because tuples are
-\emph{supposed} to be immutable, this should only be used if there is only
-one module referencing the object. Do \emph{not} use this if the tuple may
-already be known to some other part of the code. \code{last_is_sticky} is
-a flag - if set, the tuple will grow or shrink at the front, otherwise
-it will grow or shrink at the end. Think of this as destroying the old
-tuple and creating a new one, only more efficiently.
-\end{cfuncdesc}
-
-
-\subsection{List Objects}
-
-\begin{ctypedesc}{PyListObject}
-This subtype of \code{PyObject} represents a Python list object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyList_Type}
-This instance of \code{PyTypeObject} represents the Python list type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyList_Check}{PyObject *p}
-returns true if it's argument is a \code{PyListObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_New}{int size}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Size}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GetItem}{PyObject *, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Insert}{PyObject *, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Append}{PyObject *, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GetSlice}{PyObject *, int, int}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *, int, int, PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Sort}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_AsTuple}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyList_GET_ITEM}{PyObject *list, int i}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
-
-\end{cfuncdesc}
-
-
-\section{Mapping Objects}
-
-\subsection{Dictionary Objects}
-
-\begin{ctypedesc}{PyDictObject}
-This subtype of \code{PyObject} represents a Python dictionary object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyDict_Type}
-This instance of \code{PyTypeObject} represents the Python dictionary type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyDict_Check}{PyObject *p}
-returns true if it's argument is a PyDictObject
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyDictObject *}{PyDict_New}{}
-returns a new empty dictionary.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyDict_Clear}{PyDictObject *p}
-empties an existing dictionary and deletes it.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_SetItem}{PyDictObject *p,
-            PyObject *key,
-            PyObject *val}
-inserts \code{value} into the dictionary with a key of
-\code{key}. Both \code{key} and \code{value} should be PyObjects, and \code{key} should
-be hashable.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_SetItemString}{PyDictObject *p,
-            char *key,
-            PyObject *val}
-inserts \code{value} into the dictionary using \code{key}
-as a key. \code{key} should be a char *
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_DelItem}{PyDictObject *p, PyObject *key}
-removes the entry in dictionary \code{p} with key \code{key}.
-\code{key} is a PyObject.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_DelItemString}{PyDictObject *p, char *key}
-removes the entry in dictionary \code{p} which has a key
-specified by the \code{char *}\code{key}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
-returns the object from dictionary \code{p} which has a key
-\code{key}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyDict_GetItemString}{PyDictObject *p, char *key}
-does the same, but \code{key} is specified as a
-\code{char *}, rather than a \code{PyObject *}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Items}{PyDictObject *p}
-returns a PyListObject containing all the items 
-from the dictionary, as in the mapping method \code{items()} (see the Reference
-Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Keys}{PyDictObject *p}
-returns a PyListObject containing all the keys 
-from the dictionary, as in the mapping method \code{keys()} (see the Reference Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyListObject *}{PyDict_Values}{PyDictObject *p}
-returns a PyListObject containing all the values 
-from the dictionary, as in the mapping method \code{values()} (see the Reference Guide)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_Size}{PyDictObject *p}
-returns the number of items in the dictionary.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p,
-            int ppos,
-            PyObject **pkey,
-            PyObject **pvalue}
-
-\end{cfuncdesc}
-
-
-\section{Numeric Objects}
-
-\subsection{Plain Integer Objects}
-
-\begin{ctypedesc}{PyIntObject}
-This subtype of \code{PyObject} represents a Python integer object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyInt_Type}
-This instance of \code{PyTypeObject} represents the Python plain 
-integer type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyInt_Check}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyIntObject *}{PyInt_FromLong}{long ival}
-creates a new integer object with a value of \code{ival}.
-
-The current implementation keeps an array of integer objects for all
-integers between -1 and 100, when you create an int in that range you
-actually just get back a reference to the existing object. So it should
-be possible to change the value of 1. I suspect the behaviour of python
-in this case is undefined. :-)
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_AS_LONG}{PyIntObject *io}
-returns the value of the object \code{io}.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_AsLong}{PyObject *io}
-will first attempt to cast the object to a PyIntObject, if
-it is not already one, and the return it's value.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyInt_GetMax}{}
-returns the systems idea of the largest int it can handle
-(LONG_MAX, as defined in the system header files)
-\end{cfuncdesc}
-
-
-\subsection{Long Integer Objects}
-
-\begin{ctypedesc}{PyLongObject}
-This subtype of \code{PyObject} represents a Python long integer object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyLong_Type}
-This instance of \code{PyTypeObject} represents the Python long integer type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyLong_Check}{PyObject *p}
-returns true if it's argument is a \code{PyLongObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromLong}{long}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromUnsignedLong}{unsigned long}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromDouble}{double}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject }
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyLong_FromString}{char *, char **, int}
-
-\end{cfuncdesc}
-
-
-\subsection{Floating Point Objects}
-
-\begin{ctypedesc}{PyFloatObject}
-This subtype of \code{PyObject} represents a Python floating point object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyFloat_Type}
-This instance of \code{PyTypeObject} represents the Python floating 
-point type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyFloat_Check}{PyObject *p}
-returns true if it's argument is a \code{PyFloatObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFloat_FromDouble}{double}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyFloat_AsDouble}{PyObject *}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyFloat_AS_DOUBLE}{PyFloatObject *}
-
-\end{cfuncdesc}
-
-
-\subsection{Complex Number Objects}
-
-\begin{ctypedesc}{Py_complex}
-typedef struct {
-   double real;
-   double imag;
-} 
-\end{ctypedesc}
-
-\begin{ctypedesc}{PyComplexObject}
-This subtype of \code{PyObject} represents a Python complex number object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyComplex_Type}
-This instance of \code{PyTypeObject} represents the Python complex 
-number type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyComplex_Check}{PyObject *p}
-returns true if it's argument is a \code{PyComplexObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_sum}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_diff}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_neg}{Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_prod}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_quot}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{_Py_c_pow}{Py_complex, Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyComplex_FromCComplex}{Py_complex}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyComplex_FromDoubles}{double real, double imag}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyComplex_RealAsDouble}{PyObject *op}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{double}{PyComplex_ImagAsDouble}{PyObject *op}
-
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{Py_complex}{PyComplex_AsCComplex}{PyObject *op}
-
-\end{cfuncdesc}
-
-
-
-\section{Other Objects}
-
-\subsection{File Objects}
-
-\begin{ctypedesc}{PyFileObject}
-This subtype of \code{PyObject} represents a Python file object.
-\end{ctypedesc}
-
-\begin{cvardesc}{PyTypeObject}{PyFile_Type}
-This instance of \code{PyTypeObject} represents the Python file type.
-\end{cvardesc}
-
-\begin{cfuncdesc}{int}{PyFile_Check}{PyObject *p}
-returns true if it's argument is a \code{PyFileObject}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFile_FromString}{char *name, char *mode}
-creates a new PyFileObject pointing to the file
-specified in \code{name} with the mode specified in \code{mode}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyObject *}{PyFile_FromFile}{FILE *fp,
-              char *name, char *mode, int (*close})
-creates a new PyFileObject from the already-open \code{fp}.
-The function \code{close} will be called when the file should be closed.
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{FILE *}{PyFile_AsFile}{PyFileObject *p}
-returns the file object associated with \code{p} as a \code{FILE *}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyStringObject *}{PyFile_GetLine}{PyObject *p, int n}
-undocumented as yet
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{PyStringObject *}{PyFile_Name}{PyObject *p}
-returns the name of the file specified by \code{p} as a 
-PyStringObject
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{void}{PyFile_SetBufSize}{PyFileObject *p, int n}
-on systems with \code{setvbuf} only
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_SoftSpace}{PyFileObject *p, int newflag}
-same as the file object method \code{softspace}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_WriteObject}{PyObject *obj, PyFileObject *p}
-writes object \code{obj} to file object \code{p}
-\end{cfuncdesc}
-
-\begin{cfuncdesc}{int}{PyFile_WriteString}{char *s, PyFileObject *p}
-writes string \code{s} to file object \code{p}
-\end{cfuncdesc}
-
-
-\subsection{CObjects}
-
-XXX
+XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG.
 
 
 \input{api.ind}			% Index -- must be last
