The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Puppet::* classes are designed to provide an access to the "puppeted"
object using a GUI based on Tk.

In other words the user is the puppeeter and it controls its puppet
object through the optionnal Tk display.

The basic idea is when you construct a Puppet::* object, you have all
the functionnality of the object without the GUI. Then, when the need
arises, you may (or the class may decide to) open the GUI of the
object and then the user may perform any interactive he wishes.

On the other hand, if the need does not arise, you may instanciate a
lot of objects without cluttering your display.

For instance, if you have an object (say a ProcessGroup) controlling a
set of processes (Process objects). The user may start the
ProcessGroup through its GUI. Then all processes are run. If one of
them fails, it will raise its own GUI to display the cause of the
problem and let the user decide what to do.

This class named Puppet::Any is the base class inherited by all other
Puppet classes. In this example, Process and Process group both will
inherit Puppet::Any.

The base class features :
- A Tk::Multi::Manager to show or hide the different display of the base class
  (or of the derived class)
- A menu bar
- An event log display so derived object may log their activity
- A Debug log display so derived object may log their "accidental"
  activities
- An Object Scanner to display the attribute of the derived object
- A set of functions to managed "has-a" relationship between Puppet objects.
  The menu bar feature a "content" bar which enabled the user to open the
  display of all "contained" objects.
- a facility to store data on a database file tied to a hash (using the MLDBM
  module)
- a help support so you can provide an on-line documentation (based on 
Tk::Pod)

Future puppets derived of Puppet::Any will be :
Puppet::Twins (for RPC calls and Puppet features)
Puppet::Process
Puppet::ProcessGroup
Puppet::AtomicTest (no nuke there, its just a test that cannot be divided)

Don't ask me for a release or a release date of them. I have
prototypes of most of them and I'll release them when I get the time
to put them in a proper shape and to document them.

I'd like people who actually use this module for their application to
drop me a short note about what they're using this module for. 

This module was written with perl5.004. 

See the embedded documentation in the module for more details.

Comments and suggestions are always welcome.

Note that this module is in alpha state. Its interface may change (but
I hope not).

Legal mumbo jumbo:

 Copyright (c) 1998 Dominique Dumont. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 

 - Dominique Dumont
   dominique_dumont@grenoble.hp.com

---------------------------------------------------------------------
INSTALLATION

   	 gunzip -c <dist_file>.tar.gz | tar xvf -
   	 cd <dist_directory>
   	 perl Makefile.PL
   	 make test          
   	 make install