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.

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

extend		An example of using the generic Makefile.pre.in from
		the Misc directory to build a statically linked or
		shared extension module.

ibrowse		An Emacs info file browser (uses stdwin).
		See also ../doc (the Python library documentation can
		be converted to info format).

md5test		Test program for the optional md5 module.

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.

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

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.

stdwin		Demos that use the STDWIN library.  Require the 'stdwin'
		built-in module.

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

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