This directory contains various demonstrations of what you can do with
Python.  They were all written by me except where explicitly stated
otherwise -- in general, demos contributed by others ends up in the
../Contrib directory, unless I think they're of utmost general
importance (like Matt Conway's Tk demos).

A fair number of utilities that are useful when while developing
Python code can be found in the ../Tools directory -- some of these
can also be considered good examples of how to write Python code.

Finally, in order to save disk space and net bandwidth, not all
subdirectories listed here are distributed.  They are listed just
in case I change my mind about them.


classes		Some examples of how to use classes.

comparisons	A set of responses to a really old language-comparison
		challenge.

curses		A set of curses demos.

embed		An example of embedding Python in another application
		(see also pysvr).

imputil		Demonstration subclasses of imputil.Importer.

md5test		Test program for the optional md5 module.

metaclasses	The code from the 1.5 metaclasses paper on the web.

parser		Example using the parser module.

pdist		Old, unfinished code messing with CVS, RCS and remote
		files.

pysvr		An example of embedding Python in a threaded
		application.

rpc		A set of classes for building clients and servers for
		Sun RPC.

scripts		Some useful Python scripts that I put in my bin
		directory.  No optional built-in modules needed.

sgi		Demos that only run on Silicon Graphics machines.
		These require at least one of the optional built-in
		modules that only make sense for the SGI, such as
		'gl', 'al', and 'sv'.  Split in subdirectories
		per subject.

sockets		Examples for the new built-in module 'socket'.

threads		Demos that use the 'thread' module.  (Currently these
		only run on SGIs, but this may change in the future.)

tix		Demos using the Tix widget set addition to Tkinter.

tkinter		Demos using the Tk interface (including Matt Conway's
		excellent set of demos).

xml		Some XML demos.

xmlrpc		XML-RPC server framework (but see the standard library
		module SimpleXMLRPCServer.py for a replacement).

zlib		Some demos for the zlib module (see also the standard
		library module gzip.py).
