diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex
index 5568d48..2fd41b7 100644
--- a/Doc/lib/libos.tex
+++ b/Doc/lib/libos.tex
@@ -1,5 +1,5 @@
 \section{\module{os} ---
-         Miscellaneous OS interfaces.}
+         Miscellaneous OS interfaces}
 \declaremodule{standard}{os}
 
 \modulesynopsis{Miscellaneous OS interfaces.}
@@ -7,16 +7,16 @@
 
 This module provides a more portable way of using operating system
 (OS) dependent functionality than importing an OS dependent built-in
-module like \module{posix}.
+module like \module{posix} or \module{nt}.
 
-When the optional built-in module \module{posix} is available, this
-module exports the same functions and data as \module{posix}; otherwise,
-it searches for an OS dependent built-in module like \module{mac} and
-exports the same functions and data as found there.  The design of all
-Python's built-in OS dependent modules is such that as long as the same
-functionality is available, it uses the same interface; e.g., the
-function \code{os.stat(\var{file})} returns stat info about \var{file}
-in a format compatible with the \POSIX{} interface.
+This module searches for an OS dependent built-in module like
+\module{mac} or \module{posix} and exports the same functions and data
+as found there.  The design of all Python's built-in OS dependent
+modules is such that as long as the same functionality is available,
+it uses the same interface; e.g., the function
+\code{os.stat(\var{path})} returns stat information about \var{path}
+in the same format (which happens to have originated with the \POSIX{}
+interface).
 
 Extensions peculiar to a particular OS are also available through the
 \module{os} module, but using them is of course a threat to
@@ -27,22 +27,752 @@
 instead of directly from the OS dependent built-in module, so there
 should be \emph{no} reason not to use \module{os}!
 
-In addition to whatever the correct OS dependent module exports, the
-following variables and functions are always exported by \module{os}:
+
+\begin{excdesc}{error}
+This exception is raised when a function returns a
+system-related error (e.g., not for illegal argument types).  This is
+also known as the built-in exception \exception{OSError}.  The
+accompanying value is a pair containing the numeric error code from
+\cdata{errno} and the corresponding string, as would be printed by the
+C function \cfunction{perror()}.  See the module
+\refmodule{errno}\refbimodindex{errno}, which contains names for the
+error codes defined by the underlying operating system.
+
+When exceptions are classes, this exception carries two attributes,
+\member{errno} and \member{strerror}.  The first holds the value of
+the C \cdata{errno} variable, and the latter holds the corresponding
+error message from \cfunction{strerror()}.  For exceptions that
+involve a file system path (e.g. \function{chdir()} or
+\function{unlink()}), the exception instance will contain a third
+attribute, \member{filename}, which is the file name passed to the
+function.
+
+When exceptions are strings, the string for the exception is
+\code{'OSError'}.
+\end{excdesc}
 
 \begin{datadesc}{name}
 The name of the OS dependent module imported.  The following names
 have currently been registered: \code{'posix'}, \code{'nt'},
-\code{'dos'}, \code{'mac'}.
+\code{'dos'}, \code{'mac'}, \code{'os2'}.
 \end{datadesc}
 
 \begin{datadesc}{path}
 The corresponding OS dependent standard module for pathname
-operations, e.g., \module{posixpath} or \module{macpath}.  Thus, (given
-the proper imports), \code{os.path.split(\var{file})} is equivalent to but
-more portable than \code{posixpath.split(\var{file})}.
+operations, e.g., \module{posixpath} or \module{macpath}.  Thus, given
+the proper imports, \code{os.path.split(\var{file})} is equivalent to but
+more portable than \code{posixpath.split(\var{file})}.  Note that this 
+is also a valid module: it may be imported directly as
+\refmodule{os.path}.
 \end{datadesc}
 
+
+
+\subsection{Process Parameters \label{os-procinfo}}
+
+These functions and data items provide information and operate on the
+current process and user.
+
+\begin{funcdesc}{chdir}{path}
+Change the current working directory to \var{path}.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{datadesc}{environ}
+A mapping representing the string environment. For example,
+\code{environ['HOME']} is the pathname of your home directory,
+equivalent to \code{getenv("HOME")} in C.
+
+If the platform supports the \function{putenv()} function, this
+mapping may be used to modify the environment as well as query the
+environment.  \function{putenv()} will be called automatically when
+the mapping is modified.
+
+If \function{putenv()} is not provided, this mapping may be passed to
+the appropriate process-creation functions to cause child processes to 
+use a modified environment.
+\end{datadesc}
+
+\begin{funcdesc}{getcwd}{}
+Return a string representing the current working directory.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{getegid}{}
+Return the current process' effective group id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{geteuid}{}
+Return the current process' effective user id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{getgid}{}
+Return the current process' group id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{getpgrp}{}
+\index{process!group}
+Return the current process group id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{getpid}{}
+\index{process!id}
+Return the current process id.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{getppid}{}
+\index{process!id of parent}
+Return the parent's process id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{getuid}{}
+\index{user id}
+Return the current process' user id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{putenv}{varname, value}
+\index{environment variables!setting}
+Set the environment variable named \var{varname} to the string
+\var{value}.  Such changes to the environment affect subprocesses
+started with \function{os.system()}, \function{popen()} or
+\function{fork()} and \function{execv()}.
+Availability: most flavors of \UNIX{}, Windows.
+
+When \function{putenv()} is
+supported, assignments to items in \code{os.environ} are automatically
+translated into corresponding calls to \function{putenv()}; however,
+calls to \function{putenv()} don't update \code{os.environ}, so it is
+actually preferable to assign to items of \code{os.environ}.  
+\end{funcdesc}
+
+\begin{funcdesc}{setgid}{gid}
+Set the current process' group id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{setpgrp}{}
+Calls the system call \cfunction{setpgrp()} or \cfunction{setpgrp(0,
+0)} depending on which version is implemented (if any).  See the
+\UNIX{} manual for the semantics.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{setpgid}{pid, pgrp}
+Calls the system call \cfunction{setpgid()}.  See the \UNIX{} manual
+for the semantics.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{setsid}{}
+Calls the system call \cfunction{setsid()}.  See the \UNIX{} manual
+for the semantics.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{setuid}{uid}
+Set the current process' user id.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+% placed in this section since it relates to errno.... a little weak ;-(
+\begin{funcdesc}{strerror}{code}
+Return the error message corresponding to the error code in
+\var{code}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{umask}{mask}
+Set the current numeric umask and returns the previous umask.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{uname}{}
+Return a 5-tuple containing information identifying the current
+operating system.  The tuple contains 5 strings:
+\code{(\var{sysname}, \var{nodename}, \var{release}, \var{version},
+\var{machine})}.  Some systems truncate the nodename to 8
+characters or to the leading component; a better way to get the
+hostname is \function{socket.gethostname()}
+\withsubitem{(in module socket)}{\ttindex{gethostname()}}
+or even
+\withsubitem{(in module socket)}{\ttindex{gethostbyaddr()}}
+\code{socket.gethostbyaddr(socket.gethostname())}.
+Availability: recent flavors of \UNIX{}.
+\end{funcdesc}
+
+
+
+\subsection{File Object Creation \label{os-newstreams}}
+
+These functions create new file objects.
+
+
+\begin{funcdesc}{fdopen}{fd\optional{, mode\optional{, bufsize}}}
+Return an open file object connected to the file descriptor \var{fd}.
+The \var{mode} and \var{bufsize} arguments have the same meaning as
+the corresponding arguments to the built-in \function{open()}
+function.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{popen}{command\optional{, mode\optional{, bufsize}}}
+Open a pipe to or from \var{command}.  The return value is an open
+file object connected to the pipe, which can be read or written
+depending on whether \var{mode} is \code{'r'} (default) or \code{'w'}.
+The \var{bufsize} argument has the same meaning as the corresponding
+argument to the built-in \function{open()} function.  The exit status of
+the command (encoded in the format specified for \function{wait()}) is
+available as the return value of the \method{close()} method of the file
+object, except that when the exit status is zero (termination without
+errors), \code{None} is returned.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+
+
+\subsection{File Descriptor Operations \label{os-fd-ops}}
+
+These functions operate on I/O streams referred to
+using file descriptors.
+
+
+\begin{funcdesc}{close}{fd}
+Close file descriptor \var{fd}.
+Availability: Macintosh, \UNIX{}, Windows.
+
+Note: this function is intended for low-level I/O and must be applied
+to a file descriptor as returned by \function{open()} or
+\function{pipe()}.  To close a ``file object'' returned by the
+built-in function \function{open()} or by \function{popen()} or
+\function{fdopen()}, use its \method{close()} method.
+\end{funcdesc}
+
+\begin{funcdesc}{dup}{fd}
+Return a duplicate of file descriptor \var{fd}.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{dup2}{fd, fd2}
+Duplicate file descriptor \var{fd} to \var{fd2}, closing the latter
+first if necessary.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{fstat}{fd}
+Return status for file descriptor \var{fd}, like \function{stat()}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{fstatvfs}{fd}
+Return information about the filesystem containing the file associated
+with file descriptor \var{fd}, like \function{statvfs()}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{ftruncate}{fd, length}
+Truncate the file corresponding to file descriptor \var{fd}, 
+so that it is at most \var{length} bytes in size.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{lseek}{fd, pos, how}
+Set the current position of file descriptor \var{fd} to position
+\var{pos}, modified by \var{how}: \code{0} to set the position
+relative to the beginning of the file; \code{1} to set it relative to
+the current position; \code{2} to set it relative to the end of the
+file.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{open}{file, flags\optional{, mode}}
+Open the file \var{file} and set various flags according to
+\var{flags} and possibly its mode according to \var{mode}.
+The default \var{mode} is \code{0777} (octal), and the current umask
+value is first masked out.  Return the file descriptor for the newly
+opened file.
+Availability: Macintosh, \UNIX{}, Windows.
+
+For a description of the flag and mode values, see the C run-time
+documentation; flag constants (like \constant{O_RDONLY} and
+\constant{O_WRONLY}) are defined in this module too (see below).
+
+Note: this function is intended for low-level I/O.  For normal usage,
+use the built-in function \function{open()}, which returns a ``file
+object'' with \method{read()} and \method{write()} methods (and many
+more).
+\end{funcdesc}
+
+\begin{funcdesc}{pipe}{}
+Create a pipe.  Return a pair of file descriptors \code{(\var{r},
+\var{w})} usable for reading and writing, respectively.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{read}{fd, n}
+Read at most \var{n} bytes from file descriptor \var{fd}.
+Return a string containing the bytes read.
+Availability: Macintosh, \UNIX{}, Windows.
+
+Note: this function is intended for low-level I/O and must be applied
+to a file descriptor as returned by \function{open()} or
+\function{pipe()}.  To read a ``file object'' returned by the
+built-in function \function{open()} or by \function{popen()} or
+\function{fdopen()}, or \code{sys.stdin}, use its
+\method{read()} or \method{readline()} methods.
+\end{funcdesc}
+
+\begin{funcdesc}{tcgetpgrp}{fd}
+Return the process group associated with the terminal given by
+\var{fd} (an open file descriptor as returned by \function{open()}).
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{tcsetpgrp}{fd, pg}
+Set the process group associated with the terminal given by
+\var{fd} (an open file descriptor as returned by \function{open()})
+to \var{pg}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{ttyname}{fd}
+Return a string which specifies the terminal device associated with
+file-descriptor \var{fd}.  If \var{fd} is not associated with a terminal
+device, an exception is raised.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{write}{fd, str}
+Write the string \var{str} to file descriptor \var{fd}.
+Return the number of bytes actually written.
+Availability: Macintosh, \UNIX{}, Windows.
+
+Note: this function is intended for low-level I/O and must be applied
+to a file descriptor as returned by \function{open()} or
+\function{pipe()}.  To write a ``file object'' returned by the
+built-in function \function{open()} or by \function{popen()} or
+\function{fdopen()}, or \code{sys.stdout} or \code{sys.stderr}, use
+its \method{write()} method.
+\end{funcdesc}
+
+
+The following data items are available for use in constructing the
+\var{flags} parameter to the \function{open()} function.
+
+\begin{datadesc}{O_RDONLY}
+\dataline{O_WRONLY}
+\dataline{O_RDWR}
+\dataline{O_NDELAY}
+\dataline{O_NONBLOCK}
+\dataline{O_APPEND}
+\dataline{O_DSYNC}
+\dataline{O_RSYNC}
+\dataline{O_SYNC}
+\dataline{O_NOCTTY}
+\dataline{O_CREAT}
+\dataline{O_EXCL}
+\dataline{O_TRUNC}
+Options for the \var{flag} argument to the \function{open()} function.
+These can be bit-wise OR'd together.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{datadesc}
+
+
+\subsection{Files and Directories \label{os-file-dir}}
+
+\begin{funcdesc}{access}{path, mode}
+Check read/write/execute permissions for this process or extance of file
+\var{path}.  Return \code{1} if access is granted, \code{0} if not.
+See the \UNIX{} manual for the semantics.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{chmod}{path, mode}
+Change the mode of \var{path} to the numeric \var{mode}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{chown}{path, uid, gid}
+Change the owner and group id of \var{path} to the numeric \var{uid}
+and \var{gid}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{link}{src, dst}
+Create a hard link pointing to \var{src} named \var{dst}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{listdir}{path}
+Return a list containing the names of the entries in the directory.
+The list is in arbitrary order.  It does not include the special
+entries \code{'.'} and \code{'..'} even if they are present in the
+directory.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{lstat}{path}
+Like \function{stat()}, but do not follow symbolic links.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{mkfifo}{path\optional{, mode}}
+Create a FIFO (a named pipe) named \var{path} with numeric mode
+\var{mode}.  The default \var{mode} is \code{0666} (octal).  The current
+umask value is first masked out from the mode.
+Availability: \UNIX{}.
+
+FIFOs are pipes that can be accessed like regular files.  FIFOs exist
+until they are deleted (for example with \function{os.unlink()}).
+Generally, FIFOs are used as rendezvous between ``client'' and
+``server'' type processes: the server opens the FIFO for reading, and
+the client opens it for writing.  Note that \function{mkfifo()}
+doesn't open the FIFO --- it just creates the rendezvous point.
+\end{funcdesc}
+
+\begin{funcdesc}{mkdir}{path\optional{, mode}}
+Create a directory named \var{path} with numeric mode \var{mode}.
+The default \var{mode} is \code{0777} (octal).  On some systems,
+\var{mode} is ignored.  Where it is used, the current umask value is
+first masked out.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{makedirs}{path\optional{, mode}}
+\index{directory!creating}
+Recursive directory creation function.  Like \function{mkdir()},
+but makes all intermediate-level directories needed to contain the
+leaf directory.  Throws an \exception{error} exception if the leaf
+directory already exists or cannot be created.  The default \var{mode}
+is \code{0777} (octal).
+\versionadded{1.5.2}
+\end{funcdesc}
+
+\begin{funcdesc}{readlink}{path}
+Return a string representing the path to which the symbolic link
+points.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{remove}{path}
+Remove the file \var{path}.  See \function{rmdir()} below to remove a
+directory.  This is identical to the \function{unlink()} function
+documented below.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{removedirs}{path}
+\index{directory!deleting}
+Recursive directory removal function.  Works like
+\function{rmdir()} except that, if the leaf directory is
+successfully removed, directories corresponding to rightmost path
+segments will be pruned way until either the whole path is consumed or
+an error is raised (which is ignored, because it generally means that
+a parent directory is not empty).  Throws an \exception{error}
+exception if the leaf directory could not be successfully removed.
+\versionadded{1.5.2}
+\end{funcdesc}
+
+\begin{funcdesc}{rename}{src, dst}
+Rename the file or directory \var{src} to \var{dst}.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{renames}{old, new}
+Recursive directory or file renaming function.
+Works like \function{rename()}, except creation of any intermediate
+directories needed to make the new pathname good is attempted first.
+After the rename, directories corresponding to rightmost path segments
+of the old name will be pruned away using \function{removedirs()}.
+
+Note: this function can fail with the new directory structure made if
+you lack permissions needed to remove the leaf directory or file.
+\versionadded{1.5.2}
+\end{funcdesc}
+
+\begin{funcdesc}{rmdir}{path}
+Remove the directory \var{path}.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{stat}{path}
+Perform a \cfunction{stat()} system call on the given path.  The
+return value is a tuple of at least 10 integers giving the most
+important (and portable) members of the \emph{stat} structure, in the
+order
+\code{st_mode},
+\code{st_ino},
+\code{st_dev},
+\code{st_nlink},
+\code{st_uid},
+\code{st_gid},
+\code{st_size},
+\code{st_atime},
+\code{st_mtime},
+\code{st_ctime}.
+More items may be added at the end by some implementations.
+(On MS Windows, some items are filled with dummy values.)
+Availability: Macintosh, \UNIX{}, Windows.
+
+Note: The standard module \refmodule{stat}\refstmodindex{stat} defines
+functions and constants that are useful for extracting information
+from a \ctype{stat} structure.
+\end{funcdesc}
+
+\begin{funcdesc}{statvfs}{path}
+Perform a \cfunction{statvfs()} system call on the given path.  The
+return value is a tuple of 11 integers giving the most common
+members of the \ctype{statvfs} structure, in the order
+\code{f_bsize},
+\code{f_frsize},
+\code{f_blocks},
+\code{f_bfree},
+\code{f_bavail},
+\code{f_files},
+\code{f_ffree},
+\code{f_favail},
+\code{f_fsid},
+\code{f_flag},
+\code{f_namemax}.
+Availability: \UNIX{}.
+
+Note: The standard module \module{statvfs}\refstmodindex{statvfs}
+defines constants that are useful for extracting information
+from a \ctype{statvfs} structure.
+\end{funcdesc}
+
+\begin{funcdesc}{symlink}{src, dst}
+Create a symbolic link pointing to \var{src} named \var{dst}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{unlink}{path}
+Remove the file \var{path}.  This is the same function as
+\function{remove()}; the \function{unlink()} name is its traditional
+\UNIX{} name.
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{utime}{path, (atime, mtime)}
+Set the access and modified time of the file to the given values.
+(The second argument is a tuple of two items.)
+Availability: Macintosh, \UNIX{}, Windows.
+\end{funcdesc}
+
+
+\subsection{Process Management \label{os-process}}
+
+These functions may be used to create and manage additional
+processes.
+
+
+\begin{funcdesc}{execl}{path, arg0, arg1, ...}
+This is equivalent to
+\samp{execv(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execle}{path, arg0, arg1, ..., env}
+This is equivalent to
+\samp{execve(\var{path}, (\var{arg0}, \var{arg1}, ...), \var{env})}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execlp}{path, arg0, arg1, ...}
+This is equivalent to
+\samp{execvp(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execv}{path, args}
+Execute the executable \var{path} with argument list \var{args},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execve}{path, args, env}
+Execute the executable \var{path} with argument list \var{args},
+and environment \var{env},
+replacing the current process (i.e., the Python interpreter).
+The argument list may be a tuple or list of strings.
+The environment must be a dictionary mapping strings to strings.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execvp}{path, args}
+This is like \samp{execv(\var{path}, \var{args})} but duplicates
+the shell's actions in searching for an executable file in a list of
+directories.  The directory list is obtained from
+\code{environ['PATH']}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{execvpe}{path, args, env}
+This is a cross between \function{execve()} and \function{execvp()}.
+The directory list is obtained from \code{\var{env}['PATH']}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{_exit}{n}
+Exit to the system with status \var{n}, without calling cleanup
+handlers, flushing stdio buffers, etc.
+Availability: \UNIX{}, Windows.
+
+Note: the standard way to exit is \code{sys.exit(\var{n})}.
+\function{_exit()} should normally only be used in the child process
+after a \function{fork()}.
+\end{funcdesc}
+
+\begin{funcdesc}{fork}{}
+Fork a child process.  Return \code{0} in the child, the child's
+process id in the parent.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{kill}{pid, sig}
+\index{process!killing}
+\index{process!signalling}
+Kill the process \var{pid} with signal \var{sig}.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{nice}{increment}
+Add \var{increment} to the process's ``niceness''.  Return the new
+niceness.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{plock}{op}
+Lock program segments into memory.  The value of \var{op}
+(defined in \code{<sys/lock.h>}) determines which segments are locked.
+Availabilty: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{spawnv}{mode, path, args}
+Execute the program \var{path} in a new process, passing the arguments 
+specified in \var{args} as command-line parameters.  \var{args} may be 
+a list or a tuple.  \var{mode} is a magic operational constant.  See
+the Visual \Cpp{} Runtime Library documentation for further
+information.
+Availability: Windows.
+\versionadded{1.5.2}
+\end{funcdesc}
+
+\begin{funcdesc}{spawnve}{mode, path, args, env}
+Execute the program \var{path} in a new process, passing the arguments 
+specified in \var{args} as command-line parameters and the contents of 
+the mapping \var{env} as the environment.  \var{args} may be a list or
+a tuple.  \var{mode} is a magic operational constant.  See the Visual
+\Cpp{} Runtime Library documentation for further information.
+Availability: Windows.
+\versionadded{1.5.2}
+\end{funcdesc}
+
+\begin{datadesc}{_P_WAIT}
+\dataline{_P_NOWAIT}
+\dataline{_P_NOWAITO}
+\dataline{_P_OVERLAY}
+\dataline{_P_DETACH}
+Possible values for the \var{mode} parameter to \function{spawnv()}
+and \function{spawnve()}.
+Availability: Windows.
+\versionadded{1.5.2}
+\end{datadesc}
+
+\begin{funcdesc}{system}{command}
+Execute the command (a string) in a subshell.  This is implemented by
+calling the Standard C function \cfunction{system()}, and has the
+same limitations.  Changes to \code{posix.environ}, \code{sys.stdin}
+etc.\ are not reflected in the environment of the executed command.
+The return value is the exit status of the process encoded in the
+format specified for \function{wait()}.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{times}{}
+Return a 5-tuple of floating point numbers indicating accumulated (CPU
+or other)
+times, in seconds.  The items are: user time, system time, children's
+user time, children's system time, and elapsed real time since a fixed
+point in the past, in that order.  See the \UNIX{}
+manual page \manpage{times}{2} or the corresponding Windows Platform
+API documentation.
+Availability: \UNIX{}, Windows.
+\end{funcdesc}
+
+\begin{funcdesc}{wait}{}
+Wait for completion of a child process, and return a tuple containing
+its pid and exit status indication: a 16-bit number, whose low byte is
+the signal number that killed the process, and whose high byte is the
+exit status (if the signal number is zero); the high bit of the low
+byte is set if a core file was produced.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{waitpid}{pid, options}
+Wait for completion of a child process given by proces id, and return
+a tuple containing its process id and exit status indication (encoded
+as for \function{wait()}).  The semantics of the call are affected by
+the value of the integer \var{options}, which should be \code{0} for
+normal operation.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{datadesc}{WNOHANG}
+The option for \function{waitpid()} to avoid hanging if no child
+process status is available immediately.
+Availability: \UNIX{}.
+\end{datadesc}
+
+The following functions take a process stats code as returned by
+\function{waitpid()} as a parameter.  They may be used to determine
+the disposition of a process.
+
+\begin{funcdesc}{WIFSTOPPED}{status}
+Return true if the process has been stopped.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{WIFSIGNALED}{status}
+Return true if the process exited due to a signal.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{WIFEXITED}{status}
+Return true if the process exited using the \manpage{exit}{2} system
+call.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{WEXITSTATUS}{status}
+If \code{WIFEXITED(\var{status})} is true, return the integer
+parameter to the \manpage{exit}{2} system call.  Otherwise, the return 
+value is meaningless.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+\begin{funcdesc}{WSTOPSIG}{status}
+Return the signal which caused the process to exit.
+Availability: \UNIX{}.
+\end{funcdesc}
+
+
+\subsection{Miscellanenous System Data \label{os-path}}
+
+The follow data values are used to support path manipulation
+operations.  These are defined for all platforms.
+
+Higher-level operations on pathnames are defined in the
+\refmodule{os.path} module.
+
+
 \begin{datadesc}{curdir}
 The constant string used by the OS to refer to the current directory,
 e.g.\ \code{'.'} for \POSIX{} or \code{':'} for the Macintosh.
@@ -64,20 +794,13 @@
 \begin{datadesc}{altsep}
 An alternative character used by the OS to separate pathname components,
 or \code{None} if only one separator character exists.  This is set to
-\character{/} on DOS/Windows systems where \code{sep} is a backslash.
+\character{/} on DOS and Windows systems where \code{sep} is a backslash.
 \end{datadesc}
 
 \begin{datadesc}{pathsep}
 The character conventionally used by the OS to separate search patch
 components (as in \envvar{PATH}), e.g.\ \character{:} for \POSIX{} or
-\character{;} for MS-DOS.
-\end{datadesc}
-
-\begin{datadesc}{linesep}
-The string used to separate (or, rather, terminate) lines on the
-current platform.  This may be a single character, e.g. \code{'\e n'}
-for \POSIX{} or \code{'\e r'} for MacOS, or multiple characters,
-e.g. \code{'\e r\e n'} for MS-DOS.
+\character{;} for DOS and Windows.
 \end{datadesc}
 
 \begin{datadesc}{defpath}
@@ -85,70 +808,9 @@
 doesn't have a \code{'PATH'} key.
 \end{datadesc}
 
-\begin{funcdesc}{makedirs}{path\optional{, mode}}
-\versionadded{1.5.2}
-\index{directory!creating}
-Recursive directory creation function.  Like \function{mkdir()},
-but makes all intermediate-level directories needed to contain the
-leaf directory.  Throws an \exception{os.error} exception if the leaf
-directory already exists or cannot be created.  The default \var{mode}
-is \code{0777} (octal).
-\end{funcdesc}
-
-\begin{funcdesc}{removedirs}{path}
-\versionadded{1.5.2}
-\index{directory!deleting}
-Recursive directory removal function.  Works like
-\function{rmdir()} except that, if the leaf directory is
-successfully removed, directories corresponding to rightmost path
-segments will be pruned way until either the whole path is consumed or
-an error is raised (which is ignored, because it generally means that
-a parent directory is not empty).  Throws an \exception{os.error}
-exception if the leaf directory could not be successfully removed.
-\end{funcdesc}
-
-\begin{funcdesc}{renames}{old, new}
-\versionadded{1.5.2}
-Recursive directory or file renaming function.
-Works like \function{rename()}, except creation of any intermediate
-directories needed to make the new pathname good is attempted first.
-After the rename, directories corresponding to rightmost path segments
-of the old name will be pruned away using \function{removedirs()}.
-
-Note: this function can fail with the new directory structure made if
-you lack permissions needed to remove the leaf directory or file.
-\end{funcdesc}
-
-\begin{funcdesc}{execl}{path, arg0, arg1, ...}
-This is equivalent to
-\samp{execv(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
-\end{funcdesc}
-
-\begin{funcdesc}{execle}{path, arg0, arg1, ..., env}
-This is equivalent to
-\samp{execve(\var{path}, (\var{arg0}, \var{arg1}, ...), \var{env})}.
-\end{funcdesc}
-
-\begin{funcdesc}{execlp}{path, arg0, arg1, ...}
-This is equivalent to
-\samp{execvp(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
-\end{funcdesc}
-
-\begin{funcdesc}{execvp}{path, args}
-This is like \samp{execv(\var{path}, \var{args})} but duplicates
-the shell's actions in searching for an executable file in a list of
-directories.  The directory list is obtained from
-\code{environ['PATH']}.
-\end{funcdesc}
-
-\begin{funcdesc}{execvpe}{path, args, env}
-This is a cross between \function{execve()} and \function{execvp()}.
-The directory list is obtained from \code{\var{env}['PATH']}.
-\end{funcdesc}
-
-(The functions \function{execv()} and \function{execve()} are not
-documented here, since they are implemented by the OS dependent
-module.  If the OS dependent module doesn't define either of these,
-the functions that rely on it will raise an exception.  They are
-documented in the section on module \module{posix}, together with all
-other functions that \module{os} imports from the OS dependent module.)
+\begin{datadesc}{linesep}
+The string used to separate (or, rather, terminate) lines on the
+current platform.  This may be a single character, e.g. \code{'\e n'}
+for \POSIX{} or \code{'\e r'} for MacOS, or multiple characters,
+e.g. \code{'\e r\e n'} for MS-DOS and MS Windows.
+\end{datadesc}
diff --git a/Doc/lib/libposix.tex b/Doc/lib/libposix.tex
index 8431599..4bbe6e6 100644
--- a/Doc/lib/libposix.tex
+++ b/Doc/lib/libposix.tex
@@ -11,7 +11,7 @@
 disguised \UNIX{} interface).
 
 \strong{Do not import this module directly.}  Instead, import the
-module \module{os}, which provides a \emph{portable} version of this
+module \refmodule{os}, which provides a \emph{portable} version of this
 interface.  On \UNIX{}, the \module{os} module provides a superset of
 the \module{posix} interface.  On non-\UNIX{} operating systems the
 \module{posix} module is not available, but a subset is always
@@ -30,11 +30,12 @@
 \exception{error} (a synonym for the standard exception
 \exception{OSError}), described below.
 
+
 \subsection{Large File Support \label{posix-large-files}}
+\sectionauthor{Steve Clift}{clift@mail.anacapa.net}
 \index{large files}
 \index{file!large files}
 
-\sectionauthor{Steve Clift}{clift@mail.anacapa.net}
 
 Several operating systems (including AIX, HPUX, Irix and Solaris)
 provide support for files that are larger than 2 Gb from a C
@@ -58,7 +59,8 @@
 \end{verbatim} % $ <-- bow to font-lock
 
 
-\subsection{\module{posix} Module Contents \label{posix-contents}}
+\subsection{Module Contents \label{posix-contents}}
+
 
 Module \module{posix} defines the following data item:
 
@@ -75,13 +77,13 @@
 export statements to the command string for \function{system()} or
 \function{popen()}.
 
-\strong{Note:} The \module{os} module provides an alternate
+\strong{Note:} The \refmodule{os} module provides an alternate
 implementation of \code{environ} which updates the environment on
 modification.  Note also that updating \code{os.environ} will render
-this dictionary obsolete.  Use of the \module{os} for this is
+this dictionary obsolete.  Use of the \refmodule{os} for this is
 recommended over direct access to the \module{posix} module.
 \end{datadesc}
 
 Additional contents of this module should only be accessed via the
-\module{os} module; refer to the documentation for that module for
+\refmodule{os} module; refer to the documentation for that module for
 further information.
