[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 M'XL(`*<28SP``^P]:W/C-I+S=?`K$(WV9&?U(O6ZL]>I2R9S%V\J.ZG-;.6N M4JDK2H0LKBF2(4C;RF3NMU\_`))ZV([G)$V2(2H92R0(-/K=Z`:E%W'<>W;8 MUN\/W<EH!'_[SF34K_ZU[5E_,ASTQX[3'[O/^HXS&`R>R=&!X:*6Z\Q+I7QV MG7I7*KJ_WV/W?Z=-(_WC^*!S])U^_P'ZN\[$,?3O#T?],=)_/)D\D_V#0F7: M1T[_%Y_TID'4FWIZ(<0+.0\B?ZFR1>R?R53-\E0'-RI<R3".KV6>2$_RW2[T MS6+IW<2!+^=Q>AU$5VUYJ^"A+$\C&>>IO/'"7,D@DME"P9<T\*:ADBT>(/&R M10M'4<LD6TF=I3""#+2<>T&8ITJ4D)R<RK="0@OCF1?*>/I/`X1,TAB`H'_Y M"G6##A>-IM,PO>"S:S_CK!>M%G4+YO*''V3G3C::\$2OR3T:\L<?SQ'B2(KG ME8?6.XGGZBZ)TTQ^\^K-5Z^_?/W%7[E#@T96H5;P-*#%0`@XX-N]+EWX]%SZ M,?2H@.%##[JW!L#S$@OE_48)Q7/S=%1<1&`K0S`YSH&N/!O^]>-("?/EG1"" MQVB^D)TPDRX\*_EA7LML$<O&/S0P_YEL]A&Y:I;Y06HP.HN72R_RY0]>>J6[ MW>Z/#?G9O[C\Z%V0R2$04HB")(PO(HE80Z'0BV">G4OZ8V'ZA/&"F"N7Q!`U M^P`.LH(?*RVC.,/I=$:SG_/4+BU;K*&0AFHT><X&`/E":I5I9,\USC0`='Z^ M#[%KH_[]]>LW_P-,\.KEF\KH-/V3QB'H?#7W\C#CBT\?8PV6IX]5(?HVBO/( M5RGH2Z"WF:_`Y!K1!TAT=:=F&[,4^/_WAOC0BJ]NU,C^__W5YU]^\^I@<Z#] M'P^']]A_QW7=<>'_N2Y<QW]'M?T_1D/ZBPMH0ESZRI/S-%[*;[PT`YOU51#I MV:*EY6T<Z\696&19<M;KW<;Z;M#OJEG<`=QE01QU\RCHW.8J_7F:IU==7_7^ M=TE#].C)GKA<)J%:JHB[R^E*?DWHE-\%F7>MTC:IEX5W@TY`JCR??`9Z6,YB M7YW+2P%J)+]:9.""D!W,5HGJ@-NB?*E7.E-+Z)Z'OIPJN8Q3)74>9'`/K"\. MI1<J#+M"X'+E$J;4<H4^RCP(E7D<M1IU`W.-KLWF-()-7R=.`UB((N_C*O66 M2X1913=!&D>X1'D;9`OIKR)O&<RLG@0?RT<7262I%^G$2[%C`LH4;):*9DJ> M3/-,9BI-`W22E@K6L`)`(\`2#OK):5LN09,'@$<11`N5`N+@N3:!38Y1)U+9 M+7ABT@_0FX+Q`$:&6<L3T/NP8$2QDG_[C^_:`I^+(W#M"#U`&(7>5_793J=# M9,$.8.:3G*EW"FC\1P3.399'\%2X:DM0^3H+`'-H*:)61A@N\6X1ZJL9+$4` MW54*\"9YFL3@*57Q&'K150YKACG>Q#*'NT$&:X0Q$/I(,47!>0)8`2#9BN.6 MU.#]W0)*R-DDLJ*YZ4KY)A:9TAF-D>;LB.I9&B29;.`-_MR`GI>P@@7Q#T,' MV(CS#&<`/`F=@=U#CT>C'Z2E#I9!"%K#,-<L!GZ(`,OQG+XC4_$$/$8#5@-2 MUNG`HN`V<%/!&)T9KLU@`!>%WV&1C3ANH$6&*S?()2`T\-%C?`J&NRV19P#W MS/@PR!0\[!5*P%1EP$OR%K@$($.TO.1%(@8UPCU%-F)D??OYFZ\`0I@2)IC* MF00G^!:I:5%F>+@U;0''T!7P_X"MD$5;7HL9'BX+\`'S)6%B1GSIFR44HWF] M*<P!,Z#;BU_(:=/4.=#D,@"7@00@M'/D/F(NC#XTKL*S#C3&'#`2@F0\4)($ M48U9D"Q!E`.]$&1X;@;T:P/S(*,A-R;9HC,/P*$!']!+9PM`PLG?XG0))%A) M.Q'!#BC5JV481->$O!@&3`LD!$IW3YFT/`[PJX[-9S-[B3"=J%DP#X#&4Y:] MBNH01914\>+:P-_$_3,O(HG(%EY6&1#@X3%7`M0P<@L$24PRC0Y@$*$>B$B( MC#J`A5XRJQJ`,>C2+,<6:D:P(;WARM::/]D2)K;3WA*4M;=B9024Q7'RV0QY MC0;%QS7#;08$RY*!FK>`F+@/D1O3$PF$@\07$@0O+D2/)D`74S/3X4>!RBO7 M<@"#?8\N+,[&).;)S+HRO8GN,BAE+];(LXAP/4:6K?Y6."*CX1PY,4'[-LM! M"T#86YE5;."H;<>&)0(,5F7LF`(_`GE!:CT-9F*%$T)O'!=5&>((/L:W>I,, MV"NP!M;P)DI,G@!J4)5=`8>V-RW2#,PLJO.V5-FLR^S[`&Z`%S>6@#K6?F:^ M$JR$*VNR[!5#Y%"]?G*[".`ZR58\9Q4U"W-?"18[Y(B>_0A<@R">&F6B%2P4 M;%Y@30RM'808.!#@$3I/**Z<J33S@%)S6&>>*F1ZTKP&UD[9:/&I:J&"G86> M!@Q7>H)^(V!)T^-=$([+%IA1JUU!/.=>*L!$@/21`\6Z=N$QQ\UC)!N2TTCE MF1#>5!,+@(DU.R;8$Z[&(=A>PFV511@2"8)`WQ(D'$BYU;<P]QR0E8#*"Z'/ M5:H`+!B:I1\%@;4J*D%P.C)0V]033">H$.7;31J*X'8T,FBMKGF&),]#D@59 M`%#P/@]`VJ*)6^+Y<_,<2FNA0^R4P#)7BNS6CMMG>+\<0%-'@7%G=8&$M65\ M@TNSPQ9+(\:&-;$;QL]U+74B=8L1+0S`W6``N&3Q2[QFO"O-KC"Q'&Z8^(%B ME(),Q2MSG5D)EH.3M!%<@A+ZY>B83M4B,(ROP?4!Q@&=;Y>"JR\6)A`*`QQM MI?Q(,,;)VDSL2+6X'ZB6!+B1-!T\8$71(@^I8W`KZ#.,Y\D%[N,9;0ZPP$CG MA6T!?(+[Z2N:422$YL(;\E@E$Q>E*@%Y*KSY>+Z&#<8T(<^+#-PXM^^7WSU4 M[:RI"B^;[%R%V:/XMF2$=:(4XZ!+X/L!@0'KOP7Z*5@%\LSFH[!@>G:JP+(I M(5[3[$:@J]J@T`>`5ESK+$O`8V!N36)0^/S5J@+TDBT&-6@@<*-$^1"2-4WD M0`X;*+WH8U7&P+L)WAUTG:$S^K<&*7QB3($6$CU\ZU4NR0@H<.\`;](J.6OG M[]H2S&_*%AAZ9Q[MYQ`DZ%*CMUJ!VW@H/`@\?0:/G_'#*?Q%EP(DCP<EMZH8 MF,%?&ZL8)CTKIS]#'8BF3";@TT=H&3$&\.UMRZ[W`,B^+<DCJ6)TR0`E-W%X M`QAAVT4F'B(WF-P#/Z@*F`$C`F$+%?6D,`*N7HHK"&FFI/7P^T\0)IZ3,;D- MM"*OYXZ7L3HKL&NT<$DY04""1?D6G&XPO"4#&3^0PQYMPB*OC.QV!3LT*_BP M).O1E6X+T&0++]$2F7E%%Q&=ZUY'8"R,'9D=I06`CG[(N?!"CI@)](ZU&A(@ M2\@K:UGH:/,TPJXPR<GWJ#8[%%BNR+5BMP(#0(-*UO_P6/2S2F/>\3,^V,S+ MM?%X;Q<QA*HFVLI,-Q,I>/8!F/#NHM$\B6.[-WAW*E?K5U:G#<$Z6);@D)/9 MPJMT`U9L0N&@`%7I(C`QLXG8.KT0&O@V<#BW_C7%QN1-AP%%O<`/,2I<"*MI M!DU1B:")7W]M/&2[`9[%Y,*V"V7`9E_:5?_R"_'\M5()22;AI[(B4DY@K@.] M*)!L45P@"]RY!-D*XS9A`T-851Z!?^%W4)>"/!6!X13DY)J0I%>@K>^81R!: MD?*_33B-4HEAKA_GP$2=G_(8$0=ZE?@19!<U$"59@!=1LD!5HSBRU=<"@RSP MLA!DG5!GUK+&X]%9/@?PP`"+E\":5R2TD5'Q+2TK6QER$8"I`7=Q)4_8-`"C ML'Z'AT!5"E*'X+#H4T(PK4X2F&S[P<VM!CQ!UJUJ\B@NY!DI-[/@($?L!..\ MX`I$$D9>*>\2A>!<,0VT"N?=(JI7':,0;:AHG`Z8K6(4C>/!B@IUHG'Z!#I] MVKKZ%.TGK%TXP(#Y6BFZAK-KCP#7E/3"3WF"2P++&V+\!SH;'<4B@C!;($C4 M`*;B'3LAOE`DK;A^\GT!/U=>.D5]!"Y5"/2AZ("X77F:`DU&.6NIKOB2?:$U MFK)T,_WLYE/%,Z9U13R>\=?M7M$2N#C7%/S7R8&C-=K_KT0[AZ@%>4+]1]\9 M#9[UG<&X7]=_'*5MT1_BG'W/\4C]1[\_F-CZCY'K8OW/T!V/Z_S/,5JE_@.\ M/D[:@IGKI'.)"?L/#5[=#MRVY!\<K7W/\9C\H[*W\C]R')3_@5/+_U':AOR_ MH-VEELG]82K$N&F<TEO;+:,=6'3F,(>#3B!NDVU7$]U73`01'NYVX8"XJ596 M$!D/F79C<0,,=Q9QOPL=V!9V;74;:^4FH_4:(^S"%49K-46F\D6!7L,>C;+0 MR=:[$!A>B/GGE<E,5>N)1E1`0R%8JU"1-%1+OOJORS=BELB.5Q:YT"T1Q\6$ MM`U'Q2\\B'GL@])_2_X1R#W/\9C\.Y-^:?^')/_#<5W_>92V+?_(`*P`UI-_ MTY71#5302%O_P<_K*@&+0C%X-?FI,BO%&\6VC@S#QP^][KIQVY)_DYG:YQR/ MR?]@8.J_!^/1B.K_1Q`!U/)_C%:M_W[Q:"ZRV.9I2Q68/;HB81-DN!V&>T\P M4KDYA=70W8I;<)5)IV)[C8U&RXK=R82+F:?13M,5M)NB]^FIM=+FXOFY**]] M^_V7O<H-I;W9AT;L[Z1MQ_^<D-SG'(_(_V`X+NV_,^R3_-?Q_W':MOWW?!\9 M@%T`RMJ6N77<KBY50)$'QEP:NNM8)X!G.OZ3R\^HHI(_VIUWW(@W"7HLZS,9 M*M`L,]I-1Y6PPLU]&&2J;$;:5Q&."I[T'/[G$H!IZ,VNI;P*,!_8FF,9H+=5 MWM`VI1O&'^'"-WP0A[O,RMJNH@J"UV!='JYX."^+%!ITH6''Y?(^36Z/8L#: MZU4-_,!9\025(6$NTDYMD-'%PS??@?KL8%35IO&N2BQRUHIK^JB6#DMDJ8`@ M\3&9@`FE%^7R396>T<NF-#*309$>:1>%G=4^O(X5$\F4.NFX;8H6.,EC2NF* M><J-?]KS1S)M[_J723&D%XR!99_K.0*T%V`+8&H?K0>FQ;I2?HWE$\`='&J: M?+.M3"*<77)=:U'ILALV2DI@O]!#'%)8>8(IDQ<0VGGHI;8YXT8>[BGCOQ+J M$M(I/X@U"/$M%K_X*E'P3X1>KXU3J]CI5D)2O(8VE,/2C1#YEU^L71P\=/C& MQ,NV?,0.*7\PW$T)N<WC-QP:TR&7`K#*_.HGFG,]#![`&.905+=IIP&[*GFH M6]6RU5<F*Z8PIW13>@J<8$-<%!63Z_S,`%7U`I=^`)_%6#[,J+5L7":]"W*H M%G&KY4K@%(_FPJFX;,Q4C_5,;0[R_NNOSRO=X/'>`IBNAYPWC?T5?:!%WS<` MR`PJ#L[/A6'.U74:Q-C+LV">AZ::^M9;40K5B#S5`E3S_CJ?7>LS&.E[)9<P MBN5>S&0797<)5O'1U10W+6X),3,O@Q%-%M<6D:VGR\W%TX8I?WE1UD.:BAN3 MDU\J+T(P;^)K`FJ!XS$]8*![!R[.-[W^XJ^-TX8HG@`V@`?>;@[RHM$T3_8: M[QH(3P\0QJE'"#19"U(.4EB*6E8YI]I?TO!%F2EEI/&@H1]W!2=B[1DCAL$2 MK&'/]14<#,,7=1[,?KL'T!L#O+4CO#O[XQU;VO+_#/KV.<?C^S].N?\SH/BO M/O]SI+;E_UWB60:?SUE,567SAY4'Z7?0M]8,\5F::G$\%^F2CNE"()=5%088 M%'-@\`\G2+_3MB7_14GJ_N9X3/[=B5O(_]B9H/R/(`RLY?\(;4O^B?X;OK0M MJJJ65%>\2.C\X+%QX[F65=RE4[G#6<74"B6?05FX#:R;PTOX';_2W[<NF.(/ MC;D_1MNQ_V,KU?8VQV/R/W0K]1_](<K_>%+O_QZE;<C_EE`;F7Z^.Q0MBAK) M.:`P`27Z>2G.10AL>Y@0^*(O(#R".,?F9,O(JWE"1PWF\D_]D2^;P2F_GL"/ M+13-@+.SRN]VNPWQ/+AHGIS`Q3]+Y_14T.LMK&-OXI<"NC(Z>GC&#TV6H[4M M^4_2O<_QJ/UW2O]_A+E@9^@,Z_W?H[0M^V\V+OGE-4&4K57WFIW.(K^KL2X\ M0P\A#\.M_0BG(F^"1?<O=`#?G@+*I-T;^.SCD;C?5MN2?WW\^'_@5OS_/L?_ M;NW_'Z4=./Z_+TC8&2#8XY.1NKWQPNW2*V/]7=Z?KFXJO.4O?SI[5V\L/*W= MX__O=8Y'ZS^'XS+_.R'YA_]J^3]&VY+_E[;X,C*OYKO_;/024W3%"S/HQ'/E MI%(E/T.I-#SC2T<I;<H/\\LQGKC"_C=%*G1K9DX8)7&2AW0?TZ>8R\,,`E>D M4:((CQT94.TA6GX3D#WUA^F#ZR#R=VBE!Y32VL'Q;9U4Q#?<@:.;Y36^(*_1 M-`\]DJ@I@A5SI5$\:<*30^HTDO_BO/)AW@3[Z\__]`=#\O\'`_3_Z_,_AV\; M]&>&V_,<?<?M3R:37T/__FB(^[^32=]Y)MUNMP2-<O][!@Q;3?\J_>\.,<<3 MZ,_R[SI]]/_=]4S\>D)^7\#5]%^C_]D!YG@/^CON^#[Z[SE`K>E?I?_J$'.\ ME_P[M?P?HVW2_S<C_Y-:_H_1UNE/3M;>@X"G^/\3BO^'0_3_:O__\&T7_?<= M!#Q!_MT^YG]=>B4`^?\']?VQU?3?07_\C/LU^YGCX?=_8P+0W9#_\="M\_]' M:5OO7ZOWSS^JMDO^]RS^3_+_2/Y==^ALQW\'J$Q^]M'+_R[Z[[L"Y-'Z#[3Y M3'^,`-#_&XV<6O\?HVWE?XHWOJ:>'^3V/>!;9J(K[JIU'G>G#;&J7E@5)1_J M)#QIWLE/)?SS9]E<X:?5:<\];<A?Y'0F.^&'QL''W';)_[Y?`?(D^7<=JO\8 MUN__.$I[J/YS\/#;>];?<DPOS[F3JUTUW866.*/RC>+[ZHR.&WYH''S,[4'_ M;T^;@>_A_X$"V/+_#E"9]NRCE_^=_M^>-X$?K_\?E/I_3.]_&M?UO\=IC]7_ M/U2OEYZAYF<_<4=E3.BG58\P!8\0KFVYC7!MRW.$8:F?J?C#Q]!M=&5/XI>T M<!VY[VJ][^K>OFN&""?9L$4XUL=ECG;)/[VA?X]S/";_HW%1_X^_`(W^W[!^ M_^-QVOWQ'X1[H;HO_*/B/7H)Q$LYSR-Z5[CTH(]+KY!IX=$`++HCP:OT2&D< M?&G&IAZ0\KX`\NZB>7<N5Q?-U;E,+KP3Y_33X3G^`L#)G;RXD/U3^58*_"7< MDY7\C+\F/5>^X]_AY>M_X>N=RHVWL@\?S4_>%->*G\#)8*95[^[4SF1&SLJN M:S-F$-LFY3U`$'U]9\?_K0:[)/_E#UL<I`#P*?F_`;__>^36]7]':9OT/T0! MX)/J_\8CS/_A:T!-_L^"=J`D8$W_-?KO__3?T^(_DG_7P6,`=?W/$=H6_0]0 M`/0>]!_T[ZW_K.M_]MDVZ;]OWQ_;T^GO]@?WUG_6\K_/MI/^>]__>3+]G>'V M_E\M_P=H&_0_2`'@TW__9SB"V[7_?X2VD_Y[#@*>5/^'[W\"_]\=U/5_QV@[ MZ;_G4T"/OO]O4+[_8\+O_YB@_J_W_P[?-O;_MG;LL^H%<@Z*?;GTHIF>R^RB MF9W+5'XJ9R=96=-1EQ'^/MI.^=]S`<CC[_\9E>__F(QH_[^N_SA.^W_4?VS\ MD#45@*2L(QXJ`DDWBD#,[T'7A2`?I.V4_SV?`GR"_1^3+PCV?U"__^<H;8_V M7]?V__?7[HG_]GH"X-'S/TY1_SD8#]'^C_$U8+7\'Z$1Z>N3/Q]MVRG_>S__ M]^OW?TG^77<$84!]_N<([6'Z[R<1\![TG_0'=?WO,9JA_\'._F-[^O[_8.2X M]?[_,=HF_3]P_8\S<>G]7^YXQ/O_E5=3[A<HVVKZK]'_`*__?CS^'Q;U_\,) M_?[CL#^J]_^.TC;B?S3ZU8B_\`0@ZO^U!SZ;Y#G(D^9=&T]ZUKMZO^6VK?_W M?/C_V:^)_XOW_[ICUZU__^>(C<K]@UF]`_"1MBW[OW_Q?U+]!\F_VQ\XE?K/ MPP3^IGWD\G\O_?=8`_@>]%][_\MA`G_3:OK'O4SIC'^QX2!S/.+_NY/B]W^< M_G@\QOA_6/_^UW':UOF_5%VE2FL\K8=LT97RU5T"T;?RS<^=RWF<1_1CZ0WL MP!<;7?'MYV^^NFA^^_V79TW\*++42V0+?\TOG<LD<>!_5Z;P-X6_23(P;\RW M/TN,'[-%D.*O\+:H;$!LUQC@,`/I=$>3_K_NO.U*5PZZ#J@/L?6&BI0>'NZZ M@8^Y(KV@<`:_IO_7WK7T-`X#X;M_A540;*4NS:M)7"166K0<N%1:(7%"*!!+ MK;9MJCY8K8#_OIX9)W%:!XI`</$<HF0\'H_'SMA.G'Q=AB\[:PZ]^[06&JHU MSQ+^VJ_W/@#(,8$5HU"V`@4,$960H5QG\0<@G'%<3:$4@(8#:R[18)!CI7%P M8CP8:6(40*)VK>;7'FZD$8`+`M1SU>9R;J02UTX'M;31=FTY7I`>\KOI1J*W M$/B=\"7K6NRE'53L;;A-&*S([O^\H<!=Z:8S%YOE8BJ5J!(HJS8O_NY=`N5_ M0Z5:S!_R8@E?V[Y?DU5:*W_DM?KL'O'"CHYHWX]_RI\1P+.66+1UWO+>A^3R MO/*KUMNY'F?KXQ6?_>.S8CUYR."CXA^=1A82W;D)$+#$+*-A\79S3DR?P16A M%&K&TQ-<&/(W-U#E1[U#*I_D"&(_D9W3V@\JM%[(;+U1P17[!<1.F0,*_*Q8 MK0G3G8^S>0Y8[8I[^'LTNKH=_;S\=7Y%4"H`N4;H;!BF/^:7'=7X3W'\0\>6 MDEY;_R=Q5(__P8"^_W7[?S^%C/?_0_[M^PD^CO$]7\3^0"W"?&BHGIJ)BXH2 MD<1J@A:'HLNV<ON&6!1[H1>H@3KN<:TVBD60PMP^#(4GO"[;^:V`4A+V>&1/ M"90=VT6:)5:4]KB5/^BRR,87+#A)@S12$]$@2J+8%YXGDD'*:.2B(PX=^@!1 M4@=INM"!DP)B?US,9)_Z2S^7#W+:Q[NL*(952"ET%`!,Y*7J@6I"I8$7=4#: E!DIL4TH*SY@U,K9PO[K/.7+DR)$C1XX<.?HZ^@\Q#!,5`,@````` ` end
