\chapter{Undocumented Modules}
\label{undoc}

Here's a quick listing of modules that are currently undocumented, but
that should be documented.  Feel free to contribute documentation for
them!  (The idea and most contents for this chapter were taken from a
posting by Fredrik Lundh; I have revised some modules' status.)


\section{Fundamental, and pretty straightforward to document}

cPickle.c -- mostly the same as pickle but no subclassing

cStringIO.c -- mostly the same as StringIO but no subclassing


\section{Frameworks; somewhat harder to document, but well worth the effort}

Tkinter.py -- Interface to Tcl/Tk for graphical user interfaces;
Fredrik Lundh is working on this one!

CGIHTTPServer.py -- CGI-savvy HTTP Server

SimpleHTTPServer.py -- Simple HTTP Server


\section{Stuff useful to a lot of people, including the CGI crowd}

MimeWriter.py -- Generic MIME writer

multifile.py -- make each part of a multipart message ``feel'' like

fileinput.py -- convenient loop over the lines in a list of input files.


\section{Miscellaneous useful utilities}

Some of these are very old and/or not very robust; marked with ``hmm''.

calendar.py -- Calendar printing functions

ConfigParser.py -- Parse a file of sectioned configuration parameters

cmp.py -- Efficiently compare files

cmpcache.py -- Efficiently compare files (uses statcache)

dircache.py -- like os.listdir, but caches results

dircmp.py -- class to build directory diff tools on

linecache.py -- Cache lines from files (used by pdb)

pipes.py -- Conversion pipeline templates (hmm)

popen2.py -- improved popen, can read AND write simultaneously

statcache.py -- Maintain a cache of file stats

colorsys.py -- Conversion between RGB and other color systems

dbhash.py -- (g)dbm-like wrapper for bsdhash.hashopen

mhlib.py -- MH interface

pty.py -- Pseudo terminal utilities

tty.py -- Terminal utilities

cmd.py -- build line-oriented command interpreters (used by pdb)

bdb.py -- A generic Python debugger base class (used by pdb)

ihooks.py -- Import hook support (for ni and rexec)


\section{Parsing Python}

(One could argue that these should all be documented together with the
parser module.)

tokenize.py -- regular expression that recognizes Python tokens; also
contains helper code for colorizing Python source code.

pyclbr.py -- Parse a Python file and retrieve classes and methods


\section{Platform specific modules}

ntpath.py -- equivalent of posixpath on 32-bit Windows

dospath.py -- equivalent of posixpath on MS-DOS


\section{Code objects and files, debugger etc.}

compileall.py -- force "compilation" of all .py files in a directory

py_compile.py -- "compile" a .py file to a .pyc file

repr.py -- Redo the `...` (representation) but with limits on most
sizes (used by pdb)


\section{Multimedia}

audiodev.py -- Plays audio files

sunau.py -- parse Sun and NeXT audio files

sunaudio.py -- interpret sun audio headers

toaiff.py -- Convert "arbitrary" sound files to AIFF files

sndhdr.py -- recognizing sound files

wave.py -- parse WAVE files

whatsound.py -- recognizing sound files


\section{Oddities}

These modules are probably also obsolete, or just not very useful.

bisect.py -- Bisection algorithms (this is actually useful at times)

dump.py -- Print python code that reconstructs a variable

find.py -- find files matching pattern in directory tree

fpformat.py -- General floating point formatting functions -- obsolete

grep.py -- grep

mutex.py -- Mutual exclusion -- for use with module sched

packmail.py -- create a self-unpacking \UNIX{} shell archive

poly.py -- Polynomials

sched.py -- event scheduler class

shutil.py -- utility functions usable in a shell-like program

util.py -- useful functions that don't fit elsewhere

zmod.py -- Compute properties of mathematical "fields"

tzparse.py -- Parse a timezone specification (unfinished)


\section{Obsolete}

newdir.py -- New dir() function (the standard dir() is now just as good)

addpack.py -- standard support for "packages" (use ni instead)

fmt.py -- text formatting abstractions (too slow)

Para.py -- helper for fmt.py

lockfile.py -- wrapper around FCNTL file locking (use
fcntl.lockf/flock intead)

tb.py -- Print tracebacks, with a dump of local variables (use
pdb.pm() or traceback.py instead)

codehack.py -- extract function name or line number from a function
code object (these are now accessible as attributes: co.co_name,
func.func_name, co.co_firstlineno)


\section{Extension modules}

bsddbmodule.c -- Interface to the Berkeley DB interface (yet another
dbm clone).

cursesmodule.c -- Curses interface.

dbhashmodule.c -- Obsolete; this functionality is now provided by
bsddbmodule.c.

dlmodule.c --  A highly experimental and dangerous device for calling
arbitrary C functions in arbitrary shared libraries.

newmodule.c -- Tommy Burnette's `new' module (creates new empty
objects of certain kinds) -- dangerous.

nismodule.c -- NIS (a.k.a. Sun's Yellow Pages) interface.

timingmodule.c -- Measure time intervals to high resolution (obsolete
-- use time.clock() instead).

stdwinmodule.c -- Interface to STDWIN (an old, unsupported
platform-independent GUI package).  Obsolete; use Tkinter for a
platform-independent GUI instead.

The following are SGI specific:

clmodule.c -- Interface to the SGI compression library.

svmodule.c -- Interface to the ``simple video'' board on SGI Indigo
(obsolete hardware).
