[Well, the first version of 'shoo' included symlinks into
 '/home/kragen/devel/shoo', all the rectpoints shared the same state,
 and attribute inheritance was broken, so it was kind of broken.  This
 version also includes a test script, although the output of the test
 script depends on where you install it and what implementation of bc
 you have.]

The idea is from Martin Hinsch's woosh:
http://wosx30.eco-station.uni-wuerzburg.de/~martin/woosh/
Implementation by Kragen Sitaker, not having read the woosh code; I
thought a prototype-based system would be more suited to the shell.

shoo makes your filesystem and shell into a prototype-based
object-oriented programming environment with dynamic method binding,
transparent persistence (but terrible memory management!), multiple
inheritance, and local-network distributed objects (if you have NFS,
and only the state is distributed --- not the computation).

Unfortunately, it still doesn't make the shell into a decent
general-purpose programming language.

To use it, all you need to do is put 'oo' somewhere in your path.  To
test it, run the script "testscript".  It should generate output and
stderr messages similar to the contents of the file "testoutput".

begin 644 shoo-4.tar.gz
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
E!DIL4TH*SY@U,K9PO[K/.7+DR)$C1XX<.?HZ^@\Q#!,5`,@`````
`
end




Reply via email to