\documentstyle[twoside,11pt,myformat]{report}

% NOTE: this file controls which chapters/sections of the library
% manual are actually printed.  It is easy to customize your manual
% by commenting out sections that you're not interested in.

\title{Python Library Reference}

\input{boilerplate}

\makeindex			% tell \index to actually write the .idx file


\begin{document}

\pagenumbering{roman}

\maketitle

\input{copyright}

\begin{abstract}

\noindent
Python is an extensible, interpreted, object-oriented programming
language.  It supports a wide range of applications, from simple text
processing scripts to interactive WWW browsers.

While the {\em Python Reference Manual} describes the exact syntax and
semantics of the language, it does not describe the standard library
that is distributed with the language, and which greatly enhances its
immediate usability.  This library contains built-in modules (written
in C) that provide access to system functionality such as file I/O
that would otherwise be inaccessible to Python programmers, as well as
modules written in Python that provide standardized solutions for many
problems that occur in everyday programming.  Some of these modules
are explicitly designed to encourage and enhance the portability of
Python programs.

This library reference manual documents Python's standard library, as
well as many optional library modules (which may or may not be
available, depending on whether the underlying platform supports them
and on the configuration choices made at compile time).  It also
documents the standard types of the language and its built-in
functions and exceptions, many of which are not or incompletely
documented in the Reference Manual.

This manual assumes basic knowledge about the Python language.  For an
informal introduction to Python, see the {\em Python Tutorial}; the
Python Reference Manual remains the highest authority on syntactic and
semantic questions.  Finally, the manual entitled {\em Extending and
Embedding the Python Interpreter} describes how to add new extensions
to Python and how to embed it in other applications.

\end{abstract}

\pagebreak

{
\parskip = 0mm
\tableofcontents
}

\pagebreak

\pagenumbering{arabic}

				% Chapter title:

\input{libintro}		% Introduction

\input{libobjs}			% Built-in Types, Exceptions and Functions
\input{libtypes}
\input{libexcs}
\input{libfuncs}

\input{libpython}		% Python Services
\input{libsys}
\input{libtypes2}		% types is already taken :-(
\input{liboperator}
\input{libtraceback}
\input{libpickle}
\input{libshelve}
\input{libcopy}
\input{libmarshal}
\input{libimp}
\input{libparser}
\input{libbltin}		% really __builtin__
\input{libmain}			% really __main__

\input{libstrings}		% String Services
\input{libstring}
\input{libregex}
\input{libregsub}
\input{libstruct}
\input{libsoundex}

\input{libmisc}			% Miscellaneous Services
\input{libmath}
\input{librand}
\input{libwhrandom}
\input{libarray}

\input{liballos}		% Generic Operating System Services
\input{libos}
\input{libtime}
\input{libgetopt}
\input{libtempfile}
\input{liberrno}

\input{libsomeos}		% Optional Operating System Services
\input{libsignal}
\input{libsocket}
\input{libselect}
\input{libthread}

\input{libunix}			% UNIX Specific Services
\input{libposix}
\input{libppath}		% == posixpath
\input{libpwd}
\input{libgrp}
\input{libcrypt}
\input{libdbm}
\input{libgdbm}
\input{libtermios}
\input{libfcntl}
\input{libposixfile}
\input{libsyslog}

\input{libpdb}			% The Python Debugger

\input{libprofile}		% The Python Profiler

\input{libwww}			% Internet and WWW Services
\input{libcgi}
\input{liburllib}
\input{libhttplib}
\input{libftplib}
\input{libgopherlib}
\input{libnntplib}
\input{liburlparse}
\input{libsgmllib}
\input{libhtmllib}
\input{libformatter}
\input{librfc822}
\input{libmimetools}
\input{libbinascii}
\input{libxdrlib}

\input{librestricted}
\input{librexec}
\input{libbastion}

\input{libmm}			% Multimedia Services
\input{libaudioop}
\input{libimageop}
\input{libaifc}
\input{libjpeg}
\input{librgbimg}
\input{libimghdr}

\input{libcrypto}		% Cryptographic Services
\input{libmd5}
\input{libmpz}
\input{librotor}

%\input{libamoeba}		% AMOEBA ONLY

\input{libmac}			% MACINTOSH ONLY
\input{libctb}
\input{libmacconsole}
\input{libmacdnr}
\input{libmacfs}
\input{libmacos}
\input{libmacostools}
\input{libmactcp}
\input{libmacspeech}
\input{libmacui}

\input{libstdwin}		% STDWIN ONLY

\input{libsgi}			% SGI IRIX ONLY
\input{libal}
%\input{libaudio}
\input{libcd}
\input{libfl}
\input{libfm}
\input{libgl}
\input{libimgfile}
%\input{libpanel}

\input{libsun}			% SUNOS ONLY

\input{lib.ind}			% Index

\end{document}
