Short:        Object oriented addition to AmigaDOS
Architecture: m68k-amigaos

SHADOW.library V4.6 Released:09 Feb 1992 by David C. Navas
Update to SHADOW V4.3 -- fixes 1.3 bugs and 68000 bugs (we hope).

Freely distributable only for those environments which are
themselves freely distributable.

Includes shadow.library, ppipc.library, and several example programs
including a class browser.

Also included is more than 160k of Documentation!

Requires AmigaDOS2.0!!!

Taken from Shadow/Docs/Introduction.doc:

          SHADOW is a concurrent-object-oriented addition to AmigaDOS.
     Its principle design goal is to help standardize an extensible
     environment paradigm.  It takes advantage of some of the better
     AmigaDOS facilities (shared memory system, IPC ports, and fast
     context switching) by internally managing much of the inter-task
     communications, resource tracking, and resource allocation.

          Traditional object-oriented systems separate function
     interfaces from internal data structures and manage the allocation
     and access of these structures within objects.  SHADOW takes this
     interface separation one step further by uncoupling the method
     invocation from the parameter specification.  It also manages the
     allocation of structures in a transparent manner, allowing the use
     of the faster, hard-coded structure offsets of C structs.

          SHADOW was created to solve the problems which I ran into with
     my first programming project -- JazzBench.  That experience taught
     me that the most important thing in a co-operative multi-program
     environment is flexibility.  You need to be able to change the
     behaviour of EVERYTHING -as- -it- -runs-.  This lesson was the
     principle reason behind the initial design of SHADOW, and the result
     of that principle was the entire WatchedVariable construct. To a
     lesser extent, it was also responsible for Patches.

          However, that was not the only lesson that was learned.  Trying
     to locate governing control in some kind of super-server was a real
     bust.  Turns out so much information had to cross through that
     server to correctly manage all the resources that the server turns
     into a real bottleneck.  So what I needed was a subsystem which
     effectively dealt with the concurrency and shared resource management
     problems.

          The other major subsystem of SHADOW supports the increased use
     of more complicated data structures.  Sounds easy, but there've got
     to be a dozen AVLTree functions alone, and that doesn't include
     constant string management and singly-linked, priority lists, etc.