aboutsummaryrefslogtreecommitdiff
path: root/externals/grill
diff options
context:
space:
mode:
Diffstat (limited to 'externals/grill')
-rw-r--r--externals/grill/pool/main.cpp4
-rw-r--r--externals/grill/pool/pool.cpp225
-rwxr-xr-xexternals/grill/pool/pool.cwbin58761 -> 603 bytes
-rw-r--r--externals/grill/pool/pool.dsp10
-rw-r--r--externals/grill/pool/pool.h25
-rwxr-xr-xexternals/grill/pool/pool.helpbin5345 -> 304 bytes
-rw-r--r--externals/grill/pool/pool.pd402
7 files changed, 265 insertions, 401 deletions
diff --git a/externals/grill/pool/main.cpp b/externals/grill/pool/main.cpp
index 5d0cef10..c8297e9c 100644
--- a/externals/grill/pool/main.cpp
+++ b/externals/grill/pool/main.cpp
@@ -10,6 +10,8 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#include "pool.h"
+#define POOL_VERSION "0.1.0"
+
class pool:
public flext_base
{
@@ -189,6 +191,8 @@ pool::pool(I argc,const A *argv):
AddOutList();
AddOutAnything();
+ FLEXT_ADDMETHOD_(0,"pool",m_pool);
+
FLEXT_ADDMETHOD_(0,"set",m_set);
FLEXT_ADDMETHOD_(0,"add",m_add);
FLEXT_ADDMETHOD_(0,"reset",m_reset);
diff --git a/externals/grill/pool/pool.cpp b/externals/grill/pool/pool.cpp
index 629ab7fb..b45f0e87 100644
--- a/externals/grill/pool/pool.cpp
+++ b/externals/grill/pool/pool.cpp
@@ -78,8 +78,8 @@ poolval *poolval::Dup() const
}
-pooldir::pooldir(const A &d):
- dirs(NULL),vals(NULL),nxt(NULL)
+pooldir::pooldir(const A &d,pooldir *p):
+ parent(p),dirs(NULL),vals(NULL),nxt(NULL)
{
CopyAtom(&dir,&d);
}
@@ -108,7 +108,7 @@ pooldir *pooldir::AddDir(I argc,const A *argv)
}
if(c || !ix) {
- pooldir *nd = new pooldir(argv[0]);
+ pooldir *nd = new pooldir(argv[0],this);
nd->nxt = ix;
if(prv) prv->nxt = nd;
@@ -147,9 +147,9 @@ pooldir *pooldir::GetDir(I argc,const A *argv,BL rmv)
}
}
-BL pooldir::DelDir(const AtomList &d)
+BL pooldir::DelDir(I argc,const A *argv)
{
- pooldir *pd = GetDir(d,true);
+ pooldir *pd = GetDir(argc,argv,true);
if(pd && pd != this) {
delete pd;
return true;
@@ -193,6 +193,24 @@ V pooldir::SetVal(const A &key,AtomList *data,BL over)
}
}
+poolval *pooldir::RefVal(const A &key)
+{
+ I c = 1;
+ poolval *ix = vals;
+ for(; ix; ix = ix->nxt) {
+ c = compare(key,ix->key);
+ if(c <= 0) break;
+ }
+
+ return c || !ix?NULL:ix;
+}
+
+flext::AtomList *pooldir::PeekVal(const A &key)
+{
+ poolval *ix = RefVal(key);
+ return ix?ix->data:NULL;
+}
+
flext::AtomList *pooldir::GetVal(const A &key,BL cut)
{
I c = 1;
@@ -228,6 +246,18 @@ I pooldir::CntAll()
return cnt;
}
+I pooldir::GetKeys(AtomList &keys)
+{
+ I cnt = CntAll();
+ keys(cnt);
+
+ poolval *ix = vals;
+ for(I i = 0; ix; ++i,ix = ix->nxt)
+ SetAtom(keys[i],ix->key);
+
+ return cnt;
+}
+
I pooldir::GetAll(A *&keys,AtomList *&lst,BL cut)
{
I cnt = CntAll();
@@ -458,188 +488,3 @@ BL pooldir::SvDir(ostream &os,I depth,const AtomList &dir)
-pooldata::pooldata(const S *s):
- sym(s),nxt(NULL),refs(0),
- root(nullatom)
-{
- LOG1("new pool %s",sym?flext_base::GetString(sym):"<private>");
-}
-
-pooldata::~pooldata()
-{
- LOG1("free pool %s",sym?flext_base::GetString(sym):"<private>");
-}
-
-t_atom pooldata::nullatom = { A_NULL };
-
-
-V pooldata::Reset()
-{
- root.Clear(true);
-}
-
-BL pooldata::MkDir(const AtomList &d)
-{
- root.AddDir(d);
- return true;
-}
-
-BL pooldata::ChkDir(const AtomList &d)
-{
- return root.GetDir(d) != NULL;
-}
-
-BL pooldata::RmDir(const AtomList &d)
-{
- return root.DelDir(d);
-}
-
-BL pooldata::Set(const AtomList &d,const A &key,AtomList *data,BL over)
-{
- pooldir *pd = root.GetDir(d);
- if(!pd) return false;
- pd->SetVal(key,data,over);
- return true;
-}
-
-BL pooldata::Clr(const AtomList &d,const A &key)
-{
- pooldir *pd = root.GetDir(d);
- if(!pd) return false;
- pd->ClrVal(key);
- return true;
-}
-
-BL pooldata::ClrAll(const AtomList &d,BL rec,BL dironly)
-{
- pooldir *pd = root.GetDir(d);
- if(!pd) return false;
- pd->Clear(rec,dironly);
- return true;
-}
-
-flext::AtomList *pooldata::Get(const AtomList &d,const A &key)
-{
- pooldir *pd = root.GetDir(d);
- return pd?pd->GetVal(key):NULL;
-}
-
-I pooldata::CntAll(const AtomList &d)
-{
- pooldir *pd = root.GetDir(d);
- return pd?pd->CntAll():0;
-}
-
-I pooldata::GetAll(const AtomList &d,A *&keys,AtomList *&lst)
-{
- pooldir *pd = root.GetDir(d);
- if(pd)
- return pd->GetAll(keys,lst);
- else {
- keys = NULL; lst = NULL;
- return 0;
- }
-}
-
-I pooldata::GetSub(const AtomList &d,const t_atom **&dirs)
-{
- pooldir *pd = root.GetDir(d);
- if(pd)
- return pd->GetSub(dirs);
- else {
- dirs = NULL;
- return 0;
- }
-}
-
-
-BL pooldata::Paste(const AtomList &d,const pooldir *clip,I depth,BL repl,BL mkdir)
-{
- pooldir *pd = root.GetDir(d);
- if(pd)
- return pd->Paste(clip,depth,repl,mkdir);
- else
- return false;
-}
-
-pooldir *pooldata::Copy(const AtomList &d,const A &key,BL cut)
-{
- pooldir *pd = root.GetDir(d);
- if(pd) {
- AtomList *val = pd->GetVal(key,cut);
- if(val) {
- pooldir *ret = new pooldir(nullatom);
- ret->SetVal(key,val);
- return ret;
- }
- else
- return NULL;
- }
- else
- return NULL;
-}
-
-pooldir *pooldata::CopyAll(const AtomList &d,I depth,BL cut)
-{
- pooldir *pd = root.GetDir(d);
- if(pd) {
- pooldir *ret = new pooldir(nullatom);
- if(pd->Copy(ret,depth,cut))
- return ret;
- else {
- delete ret;
- return NULL;
- }
- }
- else
- return NULL;
-}
-
-
-static const C *CnvFlnm(C *dst,const C *src,I sz)
-{
-#if defined(PD) && defined(NT)
- I cnt = strlen(src);
- if(cnt >= sz-1) return NULL;
- for(I i = 0; i < cnt; ++i)
- dst[i] = src[i] != '/'?src[i]:'\\';
- dst[i] = 0;
- return dst;
-#else
- return src;
-#endif
-}
-
-BL pooldata::LdDir(const AtomList &d,const C *flnm,I depth,BL mkdir)
-{
- pooldir *pd = root.GetDir(d);
- if(pd) {
- C tmp[1024];
- const C *t = CnvFlnm(tmp,flnm,sizeof tmp);
- if(t) {
- ifstream fl(t);
- return fl.good() && pd->LdDir(fl,depth,mkdir);
- }
- else return false;
- }
- else
- return false;
-}
-
-BL pooldata::SvDir(const AtomList &d,const C *flnm,I depth,BL absdir)
-{
- pooldir *pd = root.GetDir(d);
- if(pd) {
- C tmp[1024];
- const C *t = CnvFlnm(tmp,flnm,sizeof tmp);
- if(t) {
- ofstream fl(t);
- return fl.good() && pd->SvDir(fl,depth,absdir?d:AtomList());
- }
- else return false;
- }
- else
- return false;
-}
-
-
diff --git a/externals/grill/pool/pool.cw b/externals/grill/pool/pool.cw
index 66e93306..5a7b3a70 100755
--- a/externals/grill/pool/pool.cw
+++ b/externals/grill/pool/pool.cw
Binary files differ
diff --git a/externals/grill/pool/pool.dsp b/externals/grill/pool/pool.dsp
index dbe09386..0c39ebb3 100644
--- a/externals/grill/pool/pool.dsp
+++ b/externals/grill/pool/pool.dsp
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /libpath:"c:\programme\audio\pd\bin" /libpath:"f:\prog\max\flext\pd-msvc"
+# ADD LINK32 kernel32.lib user32.lib pd.lib flext-pdwin.lib /nologo /dll /machine:I386 /out:"pd-msvc/pool.dll" /libpath:"c:\programme\audio\pd\bin" /libpath:"f:\prog\max\flext\pd-msvc"
!ELSEIF "$(CFG)" == "pool - Win32 Debug"
@@ -89,6 +89,10 @@ LINK32=link.exe
# Name "pool - Win32 Debug"
# Begin Source File
+SOURCE=.\data.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\main.cpp
# End Source File
# Begin Source File
@@ -99,5 +103,9 @@ SOURCE=.\pool.cpp
SOURCE=.\pool.h
# End Source File
+# Begin Source File
+
+SOURCE=.\readme.txt
+# End Source File
# End Target
# End Project
diff --git a/externals/grill/pool/pool.h b/externals/grill/pool/pool.h
index 21fe4eb3..3c698b1f 100644
--- a/externals/grill/pool/pool.h
+++ b/externals/grill/pool/pool.h
@@ -17,8 +17,6 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#error You need at least flext version 0.4.0
#endif
-#define POOL_VERSION "0.0.5"
-
#include <iostream.h>
typedef void V;
@@ -44,28 +42,36 @@ public:
poolval *nxt;
};
- class pooldir:
+class pooldir:
public flext
{
public:
- pooldir(const A &dir);
+ pooldir(const A &dir,pooldir *parent);
~pooldir();
V Clear(BL rec,BL dironly = false);
+ BL Empty() const { return !dirs && !vals; }
+ BL HasDirs() const { return dirs != NULL; }
+ BL HasVals() const { return vals != NULL; }
pooldir *GetDir(I argc,const A *argv,BL cut = false);
pooldir *GetDir(const AtomList &d,BL cut = false) { return GetDir(d.Count(),d.Atoms(),cut); }
- BL DelDir(const AtomList &d);
+ BL DelDir(I argc,const A *argv);
+ BL DelDir(const AtomList &d) { return DelDir(d.Count(),d.Atoms()); }
pooldir *AddDir(I argc,const A *argv);
pooldir *AddDir(const AtomList &d) { return AddDir(d.Count(),d.Atoms()); }
V SetVal(const A &key,AtomList *data,BL over = true);
V ClrVal(const A &key) { SetVal(key,NULL); }
+ AtomList *PeekVal(const A &key);
AtomList *GetVal(const A &key,BL cut = false);
I CntAll();
I GetAll(A *&keys,AtomList *&lst,BL cut = false);
- I GetSub(const t_atom **&dirs);
+ I GetKeys(AtomList &keys);
+ I GetSub(const A **&dirs);
+ poolval *RefVal(const A &key);
+
BL Paste(const pooldir *p,I depth,BL repl,BL mkdir);
BL Copy(pooldir *p,I depth,BL cur);
@@ -75,11 +81,11 @@ public:
A dir;
pooldir *nxt;
- pooldir *dirs;
+ pooldir *parent,*dirs;
poolval *vals;
};
- class pooldata:
+class pooldata:
public flext
{
public:
@@ -97,6 +103,7 @@ public:
BL Set(const AtomList &d,const A &key,AtomList *data,BL over = true);
BL Clr(const AtomList &d,const A &key);
BL ClrAll(const AtomList &d,BL rec,BL dironly = false);
+ AtomList *Peek(const AtomList &d,const A &key);
AtomList *Get(const AtomList &d,const A &key);
I CntAll(const AtomList &d);
I GetAll(const AtomList &d,A *&keys,AtomList *&lst);
@@ -118,7 +125,7 @@ public:
pooldir root;
private:
- static t_atom nullatom;
+ static const A nullatom;
};
#endif
diff --git a/externals/grill/pool/pool.help b/externals/grill/pool/pool.help
index 24d189b7..d0d17dc7 100755
--- a/externals/grill/pool/pool.help
+++ b/externals/grill/pool/pool.help
Binary files differ
diff --git a/externals/grill/pool/pool.pd b/externals/grill/pool/pool.pd
index ffd49615..0726e6f6 100644
--- a/externals/grill/pool/pool.pd
+++ b/externals/grill/pool/pool.pd
@@ -1,201 +1,201 @@
-#N canvas 25 23 966 669 12;
-#X obj 273 441 pool;
-#X msg 236 52 set 1 2 3;
-#X obj 272 563 print K;
-#X msg 602 156 getall;
-#X msg 236 81 set A k g;
-#X obj 251 594 print V;
-#X obj 290 532 print D;
-#X msg 236 111 set A l m;
-#X msg 239 140 set 2 34;
-#X msg 238 171 set 3 17;
-#X msg 423 50 clr A;
-#X msg 427 126 get A;
-#X msg 427 158 get 2;
-#X msg 20 79 echodir \$1;
-#X obj 20 58 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 20 160 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 20 181 absdir \$1;
-#X text 422 30 clear value;
-#X text 423 104 get value;
-#X obj 309 505 print C;
-#X text 375 504 command;
-#X text 357 531 directory (abs or rel to current);
-#X text 320 594 data value;
-#X text 338 562 data key;
-#X msg 26 279 pool pool1;
-#X msg 27 308 pool;
-#X text 69 308 set to private;
-#X msg 27 370 reset;
-#X text 26 349 clear all pool data;
-#X msg 608 56 clrall;
-#X text 599 34 clear all values in dir;
-#X text 602 135 get all values in dir;
-#X text 314 442 pool name can be given as argument;
-#X text 598 81 clear all values and dirs;
-#X msg 606 103 clrrec;
-#X msg 600 203 getrec;
-#X text 600 181 get all values in dir and subdirs;
-#X text 652 232 bang at EOL;
-#X text 661 150 bang at EOL;
-#X text 655 202 depth may be given;
-#X text 22 258 data is shared among pool objects;
-#X text 23 237 set pool name;
-#X text 20 36 at each command;
-#X text 20 20 echo current dir;
-#X text 233 27 set values;
-#X text 15 141 (default on);
-#X text 7 125 report absolute dirs;
-#X msg 28 417 help;
-#X text 70 418 get some info;
-#X text 658 219 default=-1 (= infinite);
-#X msg 604 283 cntall;
-#X text 663 281 count all values in dir;
-#X msg 604 309 cntrec;
-#X text 665 307 ... and subdirs;
-#X text 661 321 (depth may be given);
-#X msg 237 226 add 3 14;
-#X text 235 205 set but don't replace;
-#N canvas 0 0 421 528 dirs 0;
-#X msg 109 27 mkdir fld1;
-#X msg 111 122 chdir;
-#X msg 110 217 updir;
-#X msg 111 354 getsub -1;
-#X text 110 7 make absolute dir;
-#X text 109 51 make relative dir;
-#X msg 110 72 mksub fld2;
-#X text 109 104 change to absolute dir;
-#X msg 110 165 chsub fld2;
-#X text 108 146 change to relative dir;
-#X text 106 198 change to upper dir;
-#X text 107 250 remove absolute dir;
-#X msg 108 269 rmdir fld1;
-#X msg 110 308 rmsub fld2;
-#X text 109 289 remove relative dir;
-#X text 109 336 get subdirs;
-#X text 239 379 -1 ... infinite;
-#X text 161 213 depth may be given;
-#X text 162 229 default=1;
-#X text 192 348 depth may be given;
-#X text 192 365 default=1;
-#X text 108 377 count subdirs;
-#X msg 111 398 cntsub -1;
-#X obj 11 239 outlet;
-#X msg 111 458 getdir;
-#X text 110 438 get current dir;
-#X text 172 457 always absolute;
-#X connect 0 0 23 0;
-#X connect 1 0 23 0;
-#X connect 2 0 23 0;
-#X connect 3 0 23 0;
-#X connect 6 0 23 0;
-#X connect 8 0 23 0;
-#X connect 12 0 23 0;
-#X connect 13 0 23 0;
-#X connect 22 0 23 0;
-#X connect 24 0 23 0;
-#X restore 713 494 pd dirs;
-#X text 710 468 directory operations;
-#N canvas 0 0 467 434 file 0;
-#X text 117 207 save dir and subdirs;
-#X text 117 165 save data in current dir;
-#X msg 117 184 svdir c:/temp/pool.dat;
-#X msg 117 226 svrec c:/temp/pool.dat;
-#X msg 116 272 lddir c:/temp/pool.dat;
-#X msg 116 319 ldrec c:/temp/pool.dat;
-#X text 117 253 load data into current dir;
-#X text 115 300 load data into current dir and below;
-#X text 132 340 depth (default -1) and;
-#X text 134 356 mkdir flag (default 1) can be given;
-#X obj 22 188 outlet;
-#X text 117 37 save all;
-#X text 117 81 load all (add to existing data);
-#X msg 118 100 load c:/temp/pool.dat;
-#X msg 120 54 save c:/temp/pool.dat;
-#X text 22 12 file operations;
-#X connect 2 0 10 0;
-#X connect 3 0 10 0;
-#X connect 4 0 10 0;
-#X connect 5 0 10 0;
-#X connect 13 0 10 0;
-#X connect 14 0 10 0;
-#X restore 714 549 pd file;
-#X text 712 526 file operations;
-#X text 712 583 clipboard operations;
-#N canvas 0 0 529 577 clip 0;
-#X obj 17 183 outlet;
-#X text 97 56 copy value associated to key into clipboard;
-#X msg 100 77 copy A;
-#X msg 98 119 cut B;
-#X text 96 101 cut value associated to key into clipboard;
-#X msg 96 401 paste;
-#X msg 98 179 copyall;
-#X text 95 158 copy all values in current dir into clipboard;
-#X msg 97 221 cutall;
-#X text 95 201 cut all values in current dir into clipboard;
-#X text 94 263 copy all values in current dir into clipboard;
-#X text 94 306 cut all values in current dir into clipboard;
-#X msg 97 284 copyrec;
-#X text 194 285 depth may be given (default=-1);
-#X text 193 326 depth may be given (default=-1);
-#X msg 96 326 cutrec 1;
-#X text 194 345 1..only with first level subdirs;
-#X text 96 379 paste clipboard contents into current directory;
-#X text 167 397 depth (default -1) and;
-#X text 169 413 mkdir flag (default 1) can be given;
-#X text 171 448 depth (default -1) and;
-#X text 173 466 mkdir flag (default 1) can be given;
-#X msg 95 453 pasteadd;
-#X text 95 431 paste but don't replace;
-#X msg 94 521 clrclip;
-#X text 160 523 clear clipboard (free memory);
-#X text 22 12 clipboard operations (this is an internal clipboard...)
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 8 0 0 0;
-#X connect 12 0 0 0;
-#X connect 15 0 0 0;
-#X connect 22 0 0 0;
-#X connect 24 0 0 0;
-#X restore 714 606 pd clip;
-#X text 712 437 more commands:;
-#X obj 780 494 s \$0-pool;
-#X obj 778 549 s \$0-pool;
-#X obj 778 606 s \$0-pool;
-#X obj 349 392 r \$0-pool;
-#X connect 0 0 5 0;
-#X connect 0 1 2 0;
-#X connect 0 2 6 0;
-#X connect 0 3 19 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 14 0 13 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 24 0 0 0;
-#X connect 25 0 0 0;
-#X connect 27 0 0 0;
-#X connect 29 0 0 0;
-#X connect 34 0 0 0;
-#X connect 35 0 0 0;
-#X connect 47 0 0 0;
-#X connect 50 0 0 0;
-#X connect 52 0 0 0;
-#X connect 55 0 0 0;
-#X connect 57 0 64 0;
-#X connect 59 0 65 0;
-#X connect 62 0 66 0;
-#X connect 67 0 0 0;
+#N canvas 25 23 974 677 12;
+#X obj 260 478 pool;
+#X msg 295 108 set 1 2 3;
+#X obj 272 600 print K;
+#X msg 607 211 getall;
+#X msg 295 137 set A k g;
+#X obj 251 631 print V;
+#X obj 290 569 print D;
+#X msg 295 167 set A l m;
+#X msg 298 196 set 2 34;
+#X msg 297 227 set 3 17;
+#X msg 428 105 clr A;
+#X msg 432 181 get A;
+#X msg 432 213 get 2;
+#X msg 40 132 echodir \$1;
+#X obj 40 111 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0
+1;
+#X obj 40 213 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0
+1;
+#X msg 40 234 absdir \$1;
+#X text 427 85 clear value;
+#X text 428 159 get value;
+#X obj 309 542 print C;
+#X text 381 542 command;
+#X text 363 569 directory (abs or rel to current);
+#X text 326 632 data value;
+#X text 344 600 data key;
+#X msg 41 314 pool pool1;
+#X msg 42 343 pool;
+#X text 86 343 set to private;
+#X msg 42 405 reset;
+#X text 41 384 clear all pool data;
+#X msg 613 111 clrall;
+#X text 604 89 clear all values in dir;
+#X text 607 190 get all values in dir;
+#X text 314 479 pool name can be given as argument;
+#X text 603 136 clear all values and dirs;
+#X msg 611 158 clrrec;
+#X msg 605 258 getrec;
+#X text 605 236 get all values in dir and subdirs;
+#X text 670 289 bang at EOL;
+#X text 673 208 bang at EOL;
+#X text 670 257 depth may be given;
+#X text 43 291 set pool name;
+#X text 40 89 at each command;
+#X text 40 73 echo current dir;
+#X text 292 83 set values;
+#X text 35 194 (default on);
+#X text 27 178 report absolute dirs;
+#X msg 43 452 help;
+#X text 86 453 get some info;
+#X text 670 274 default=-1 (= infinite);
+#X msg 609 338 cntall;
+#X text 675 336 count all values in dir;
+#X msg 609 364 cntrec;
+#X text 677 362 ... and subdirs;
+#X text 673 376 (depth may be given);
+#X msg 296 282 add 3 14;
+#X text 294 261 set but don't replace;
+#N canvas 0 0 510 536 dirs 0;
+#X msg 109 27 mkdir fld1;
+#X msg 111 122 chdir;
+#X msg 110 217 updir;
+#X msg 111 354 getsub -1;
+#X text 110 7 make absolute dir;
+#X text 109 51 make relative dir;
+#X msg 110 72 mksub fld2;
+#X text 109 104 change to absolute dir;
+#X msg 110 165 chsub fld2;
+#X text 108 146 change to relative dir;
+#X text 106 198 change to upper dir;
+#X text 107 250 remove absolute dir;
+#X msg 108 269 rmdir fld1;
+#X msg 110 308 rmsub fld2;
+#X text 109 289 remove relative dir;
+#X text 109 336 get subdirs;
+#X text 251 380 -1 ... infinite;
+#X text 167 213 depth may be given;
+#X text 168 229 default=1;
+#X text 209 349 depth may be given;
+#X text 207 365 default=1;
+#X text 108 377 count subdirs;
+#X msg 111 398 cntsub -1;
+#X msg 111 458 getdir;
+#X text 110 438 get current dir;
+#X text 176 458 always absolute;
+#X obj 11 239 s \$0-pool;
+#X connect 0 0 26 0;
+#X connect 1 0 26 0;
+#X connect 2 0 26 0;
+#X connect 3 0 26 0;
+#X connect 6 0 26 0;
+#X connect 8 0 26 0;
+#X connect 12 0 26 0;
+#X connect 13 0 26 0;
+#X connect 22 0 26 0;
+#X connect 23 0 26 0;
+#X restore 718 511 pd dirs;
+#X text 715 485 directory operations;
+#N canvas 0 0 469 436 file 0;
+#X text 117 207 save dir and subdirs;
+#X text 117 165 save data in current dir;
+#X msg 117 184 svdir c:/temp/pool.dat;
+#X msg 117 226 svrec c:/temp/pool.dat;
+#X msg 116 272 lddir c:/temp/pool.dat;
+#X msg 116 319 ldrec c:/temp/pool.dat;
+#X text 117 253 load data into current dir;
+#X text 115 300 load data into current dir and below;
+#X text 132 340 depth (default -1) and;
+#X text 134 356 mkdir flag (default 1) can be given;
+#X text 117 37 save all;
+#X text 117 81 load all (add to existing data);
+#X msg 118 100 load c:/temp/pool.dat;
+#X msg 120 54 save c:/temp/pool.dat;
+#X text 22 12 file operations;
+#X obj 22 188 s \$0-pool;
+#X connect 2 0 15 0;
+#X connect 3 0 15 0;
+#X connect 4 0 15 0;
+#X connect 5 0 15 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 0;
+#X restore 719 566 pd file;
+#X text 717 543 file operations;
+#X text 717 600 clipboard operations;
+#N canvas 0 0 535 583 clip 0;
+#X text 97 56 copy value associated to key into clipboard;
+#X msg 100 77 copy A;
+#X msg 98 119 cut B;
+#X text 96 101 cut value associated to key into clipboard;
+#X msg 96 401 paste;
+#X msg 98 179 copyall;
+#X text 95 158 copy all values in current dir into clipboard;
+#X msg 97 221 cutall;
+#X text 95 201 cut all values in current dir into clipboard;
+#X text 94 263 copy all values in current dir into clipboard;
+#X text 94 306 cut all values in current dir into clipboard;
+#X msg 97 284 copyrec;
+#X text 194 285 depth may be given (default=-1);
+#X text 193 326 depth may be given (default=-1);
+#X msg 96 326 cutrec 1;
+#X text 194 345 1..only with first level subdirs;
+#X text 96 379 paste clipboard contents into current directory;
+#X text 167 397 depth (default -1) and;
+#X text 169 413 mkdir flag (default 1) can be given;
+#X text 183 448 depth (default -1) and;
+#X text 185 466 mkdir flag (default 1) can be given;
+#X msg 95 453 pasteadd;
+#X text 95 431 paste but don't replace;
+#X msg 94 521 clrclip;
+#X text 171 520 clear clipboard (free memory);
+#X text 22 12 clipboard operations (this is an internal clipboard...)
+;
+#X obj 4 193 s \$0-pool;
+#X connect 1 0 26 0;
+#X connect 2 0 26 0;
+#X connect 4 0 26 0;
+#X connect 5 0 26 0;
+#X connect 7 0 26 0;
+#X connect 11 0 26 0;
+#X connect 14 0 26 0;
+#X connect 21 0 26 0;
+#X connect 23 0 26 0;
+#X restore 719 623 pd clip;
+#X text 717 454 more commands:;
+#X obj 349 429 r \$0-pool;
+#X text 174 500 data is shared among pool objects with the same name
+;
+#X obj 26 10 cnv 15 850 40 empty empty pool 10 22 32 24 -260818 -1
+0;
+#X text 337 32 http://www.parasitaere-kapazitaeten.net;
+#X text 337 12 a hierarchical storage object \, (C)2002 Thomas Grill
+;
+#X connect 0 0 5 0;
+#X connect 0 1 2 0;
+#X connect 0 2 6 0;
+#X connect 0 3 19 0;
+#X connect 1 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X connect 10 0 0 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 24 0 0 0;
+#X connect 25 0 0 0;
+#X connect 27 0 0 0;
+#X connect 29 0 0 0;
+#X connect 34 0 0 0;
+#X connect 35 0 0 0;
+#X connect 46 0 0 0;
+#X connect 49 0 0 0;
+#X connect 51 0 0 0;
+#X connect 54 0 0 0;
+#X connect 63 0 0 0;