aboutsummaryrefslogtreecommitdiff
path: root/memento-p
diff options
context:
space:
mode:
authorLuke Iannini <lukeiannini@users.sourceforge.net>2008-07-24 10:04:42 +0000
committerLuke Iannini <lukeiannini@users.sourceforge.net>2008-07-24 10:04:42 +0000
commitf383589a188de280f26afe092168d3e6f5206ea6 (patch)
tree955f050b6ffcfc5394788dc42ffe69921d0eb2b7 /memento-p
parentb54beb5c550f8b12d0ecce9e3b89c9906c9f829b (diff)
renaming very unfortunately named semento to memento-p to aid discoverability (for the record, semento was supposed to be a play on 'senderfoot's memento' and 'cement'! :)). abstractions marked with -p are part of polaroid, and those with -c have features for controctopus.
svn path=/trunk/abstractions/senderfruit/; revision=10216
Diffstat (limited to 'memento-p')
-rw-r--r--memento-p/commun-c-constrain.pd189
-rw-r--r--memento-p/commun-c-ez.pd18
-rw-r--r--memento-p/commun-c-justosc-help.pd17
-rw-r--r--memento-p/commun-c-justosc.pd13
-rw-r--r--memento-p/commun-c-scale-ez.pd13
-rw-r--r--memento-p/commun-c-scale-help.pd36
-rw-r--r--memento-p/commun-c-scale.pd79
-rw-r--r--memento-p/commun-c.pd35
-rw-r--r--memento-p/originator-p.pd265
-rw-r--r--memento-p/polaroid-help.pd75
-rw-r--r--memento-p/polaroid.pd186
-rw-r--r--memento-p/rradical.state-p.pd220
-rw-r--r--memento-p/sft.careGUI-help.pd46
-rw-r--r--memento-p/sft.careGUI.pd131
14 files changed, 1323 insertions, 0 deletions
diff --git a/memento-p/commun-c-constrain.pd b/memento-p/commun-c-constrain.pd
new file mode 100644
index 0000000..0336c48
--- /dev/null
+++ b/memento-p/commun-c-constrain.pd
@@ -0,0 +1,189 @@
+#N canvas 286 32 505 662 10;
+#X obj 12 11 inlet;
+#X obj 108 565 outlet;
+#X text 5 93 RRADICAL_MEMENTO is also in originator;
+#X obj 108 538 list;
+#X obj 132 318 expr_scale 0 1 \$3 \$4;
+#X obj 289 318 expr_scale 0 1 \$3 \$4;
+#X obj 176 371 hotpack f f;
+#X obj 45 437 demultiplex;
+#X obj 108 459 round;
+#X obj 45 370 expr_scale 0 1 \$3 \$4;
+#X obj 156 11 inlet;
+#X obj 286 11 inlet;
+#X text 63 590 Use to constrain input to a smaller subset of the full
+range. Input as relative to 0-1. Reports back what the result will
+be when scaled fully;
+#X obj 156 59 s \$0boundLowFull;
+#X obj 286 59 s \$0boundHighFull;
+#X obj 162 252 r \$0boundLowFull;
+#X obj 329 252 r \$0boundHighFull;
+#X obj 132 229 r \$0constrainLow;
+#X obj 289 230 r \$0constrainHigh;
+#X obj 329 277 t b a;
+#X obj 162 279 t b a;
+#X obj 108 415 r \$0round?;
+#X obj 45 459 t a;
+#X text 186 548 Read \$1-OSC (== \$0-OSC) \, filter by argument \$2
+;
+#X obj 45 188 deeprouteOSC \$2-normalized;
+#X obj 187 521 deeprouteOSC \$2;
+#X obj 187 497 r \$1-RRADICAL-OSC;
+#X obj 45 165 r \$1-RRADICAL-OSC;
+#X obj 12 42 prepent \$2;
+#X obj 12 69 s \$1-RRADICAL-MEMENTO;
+#X obj 108 513 route \$2;
+#X obj 108 489 r \$1-in;
+#X text 191 538 ^;
+#N canvas 0 22 221 199 handleArgs 0;
+#X obj 26 26 loadbang;
+#X msg 26 127 1;
+#X obj 26 102 sel round hide;
+#X obj 26 149 s \$0round?;
+#X obj 26 78 list-drip;
+#X obj 95 149 s \$0hide?;
+#X obj 26 53 list append \$5 \$6;
+#X connect 0 0 6 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 5 0;
+#X connect 4 0 2 0;
+#X connect 6 0 4 0;
+#X restore 297 108 pd handleArgs;
+#N canvas 0 22 390 211 listParams 0;
+#X obj 31 79 spigot 1;
+#X msg 161 62 0;
+#X obj 161 39 r \$0hide?;
+#X obj 31 49 r \$1/listParams;
+#X obj 31 136 s \$1/returnParams;
+#X obj 31 106 list append \$2-normalized;
+#X text 16 161 listParams is used by Controctopus \, so we return a
+special address for 0-1 data input only;
+#X connect 0 0 5 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 0;
+#X connect 5 0 4 0;
+#X restore 297 133 pd listParams;
+#N canvas 0 22 352 303 receiveConstraints 0;
+#X obj 80 156 unpack f f;
+#X obj 80 200 s \$0constrainLow;
+#X obj 137 178 s \$0constrainHigh;
+#X obj 16 50 loadbang;
+#X msg 16 75 0 1;
+#X obj 80 115 list;
+#X obj 131 115 t a a;
+#X obj 80 87 route get;
+#X text 62 264 Used to recall the 0-1 ranged constraint;
+#X obj 80 20 r \$1-RRADICAL-OSC;
+#X obj 64 245 s \$1-COMMUN-RESPONSE;
+#X obj 80 43 deeprouteOSC \$2-constrain;
+#X obj 64 224 prepent \$2-constrained-to-0-1;
+#X text 145 68 Save the constraints;
+#X obj 147 87 commun \$2-constraints \$1;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 0 5 1;
+#X connect 5 0 0 0;
+#X connect 5 0 12 0;
+#X connect 6 0 0 0;
+#X connect 6 1 5 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 7 1 14 0;
+#X connect 9 0 11 0;
+#X connect 11 0 7 0;
+#X connect 12 0 10 0;
+#X connect 14 0 6 0;
+#X restore 297 157 pd receiveConstraints;
+#N canvas 323 119 442 277 constraintsFeedback 0;
+#X obj 19 35 inlet;
+#X obj 19 63 t a a b;
+#X msg 58 85 1;
+#X obj 19 128 spigot;
+#X obj 38 107 s \$1\$2/constraint/lookup/call;
+#X obj 67 129 r \$1\$2/constraint/lookup/response;
+#X obj 67 151 t a b;
+#X msg 94 173 0;
+#X obj 19 234 s \$1-COMMUN-RESPONSE;
+#X obj 19 213 prepent \$2-constrained-to;
+#X text 126 164 Only allow one or the other;
+#X text 79 31 Allows one to replace the "scaled output" response with
+something prettier (e.g. \, if it actually corresponds to a waveform
+selector \, you can return the names);
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 1 4 0;
+#X connect 1 2 2 0;
+#X connect 2 0 3 1;
+#X connect 3 0 9 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 3 1;
+#X connect 9 0 8 0;
+#X restore 176 396 pd constraintsFeedback;
+#N canvas 488 62 303 238 receiveMultiplier 1;
+#X obj 133 63 commun \$2-multiplier \$1;
+#X obj 72 15 r \$1-RRADICAL-OSC;
+#X obj 72 38 deeprouteOSC \$2-multiplier;
+#X obj 72 63 route get;
+#X obj 72 98 f;
+#X obj 38 171 prepent \$2-multiplier-is;
+#X obj 38 194 s \$1-COMMUN-RESPONSE;
+#X obj 72 134 s \$0multiplier;
+#X obj 123 98 t a a;
+#X obj 7 17 loadbang;
+#X msg 7 42 1;
+#X connect 0 0 8 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 0 0;
+#X connect 3 1 8 0;
+#X connect 4 0 7 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 8 0 7 0;
+#X connect 8 1 4 1;
+#X connect 9 0 10 0;
+#X connect 10 0 7 0;
+#X restore 297 181 pd receiveMultiplier;
+#X obj 81 391 r \$0multiplier;
+#X obj 45 408 *;
+#X connect 0 0 28 0;
+#X connect 3 0 1 0;
+#X connect 4 0 6 0;
+#X connect 4 0 9 3;
+#X connect 5 0 6 1;
+#X connect 5 0 9 4;
+#X connect 6 0 36 0;
+#X connect 7 0 22 0;
+#X connect 7 1 8 0;
+#X connect 8 0 22 0;
+#X connect 9 0 39 0;
+#X connect 10 0 13 0;
+#X connect 11 0 14 0;
+#X connect 15 0 20 0;
+#X connect 16 0 19 0;
+#X connect 17 0 4 0;
+#X connect 18 0 5 0;
+#X connect 19 0 5 0;
+#X connect 19 1 5 4;
+#X connect 19 1 4 4;
+#X connect 20 0 4 0;
+#X connect 20 1 5 3;
+#X connect 20 1 4 3;
+#X connect 21 0 7 1;
+#X connect 22 0 3 0;
+#X connect 24 0 9 0;
+#X connect 25 0 3 0;
+#X connect 26 0 25 0;
+#X connect 27 0 24 0;
+#X connect 28 0 29 0;
+#X connect 30 0 3 0;
+#X connect 31 0 30 0;
+#X connect 38 0 39 1;
+#X connect 39 0 7 0;
diff --git a/memento-p/commun-c-ez.pd b/memento-p/commun-c-ez.pd
new file mode 100644
index 0000000..da1c549
--- /dev/null
+++ b/memento-p/commun-c-ez.pd
@@ -0,0 +1,18 @@
+#N canvas 32 487 626 210 10;
+#X obj 21 62 commun-c \$2-\$3 \$1;
+#X obj 21 28 r \$1\$3;
+#X obj 21 92 s \$1\$3R;
+#X text 154 18 Use like commun-c.ez \$0 "uniqueID" paramName;
+#X text 154 34 UniqueID is a /ID used to allow multiple units of one
+type;
+#X text 174 53 e.g. sft.cfm /sfs1 /busA /unitA = unitA is the uniqueID
+;
+#X text 205 68 thus you'd call as commun-c.ez \$0 \$3 paramName;
+#X text 157 123 paramName is mapped to the local xers* that would usually
+be defined in the GUIcontrol. So a paramName of "baseFreq" will result
+in "\$0baseFreq" and "\$0baseFreqR" \, which is 99% of cases.;
+#X text 158 89 paramName is of course the parameter name \, but it
+also gets mapped to the commun as uniqueID-paramName.;
+#X text 434 183 *xers: [send]ers/[receive]rs;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
diff --git a/memento-p/commun-c-justosc-help.pd b/memento-p/commun-c-justosc-help.pd
new file mode 100644
index 0000000..b00d04d
--- /dev/null
+++ b/memento-p/commun-c-justosc-help.pd
@@ -0,0 +1,17 @@
+#N canvas 797 415 454 304 10;
+#X text 25 26 commun-c-justosc - Make a control visible to the OSC system
+of Memento \, without state-saving.;
+#X text 25 62 Mostly this is for buttons \, but could also work for
+other controls whose state is transient in nature.;
+#X obj 24 219 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 110 277 originator-p /system1 \$0;
+#X obj 24 143 commun-c-justosc /button1 \$0;
+#X msg 229 133 /system1/button1 bang;
+#X obj 229 159 s PDOSC;
+#X obj 229 239 s /system1/OSC;
+#X msg 229 211 /button1 bang;
+#X text 250 184 Or;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 8 0 7 0;
diff --git a/memento-p/commun-c-justosc.pd b/memento-p/commun-c-justosc.pd
new file mode 100644
index 0000000..7324c9f
--- /dev/null
+++ b/memento-p/commun-c-justosc.pd
@@ -0,0 +1,13 @@
+#N canvas 921 437 386 156 10;
+#X obj 202 38 r \$2/listParams;
+#X obj 202 65 list append \$1;
+#X obj 24 107 outlet;
+#X obj 24 30 r \$2-RRADICAL-OSC;
+#X obj 24 80 list;
+#X obj 24 54 deeprouteOSC \$1;
+#X obj 202 95 s \$2/returnParams;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/memento-p/commun-c-scale-ez.pd b/memento-p/commun-c-scale-ez.pd
new file mode 100644
index 0000000..679717c
--- /dev/null
+++ b/memento-p/commun-c-scale-ez.pd
@@ -0,0 +1,13 @@
+#N canvas 33 512 438 278 10;
+#X obj 106 36 r \$1\$3;
+#X obj 106 95 s \$1\$3R;
+#X text 47 201 Receives from \$0paramName and sends to \$0paramNameR
+;
+#X text 330 223 *optional;
+#X obj 106 66 commun-c-scale \$1 \$2/\$3 \$4 \$5 \$6 \$7;
+#X text 47 171 \$3 is uniqueID like /chptrA. In Bathyscaphe that's
+\$3 \, in FXS it's \$2.;
+#X text 46 153 [commun-c-scale-ez \$0 \$3 paramName 0 5000 round* hide*]
+;
+#X connect 0 0 4 0;
+#X connect 4 0 1 0;
diff --git a/memento-p/commun-c-scale-help.pd b/memento-p/commun-c-scale-help.pd
new file mode 100644
index 0000000..f181f47
--- /dev/null
+++ b/memento-p/commun-c-scale-help.pd
@@ -0,0 +1,36 @@
+#N canvas 731 31 478 597 10;
+#X text 130 258 Inlet 2 changes the lower scaling bound;
+#X text 228 288 Inlet 3 changes the upper scaling bound;
+#X floatatom 131 273 5 0 0 0 - - -;
+#X floatatom 232 304 5 0 0 0 - - -;
+#X floatatom 31 253 5 0 0 0 - - -;
+#X floatatom 31 363 5 0 0 0 - - -;
+#X text 29 236 Inlet 1 is the standard commun input;
+#X text 340 552 2008 Luke Iannini;
+#X text 2 573 Originally based on [commun-scale] by Frank Barknecht
+;
+#X text 13 26 Use commun-c-scale(ale) so that 0-1 values coming out
+of OSC stuff (like Controctopus) can be rescaled appropriately.;
+#X text 14 145 commun-c-scale's first and second args are swapped from
+commun-c (i.e. \$0 and /parametername);
+#X text 15 182 Optionally prepend a unique ID to the parameter when
+using with an abstraction that will have multiple copies;
+#X obj 31 327 commun-c-scale \$0 \$3/parameter 5 37;
+#X text 13 109 Don't use this for communs that are meant to store symbolic
+or list data (use regular commun-c for that).;
+#X text 34 404 * Argument 5 and 6 can be "round" and/or "hide" (the
+order doesn't matter).;
+#X text 34 434 * "hide" hides the parameter from Controctopus sniffing
+(useful to pare down the options to just the most interesting inputs).
+;
+#X text 34 476 * "round" rounds up from 0.5 increments so that an integer
+is always output (useful for communs connected to v/hdials and toggles).
+;
+#X text 14 62 0-1 data should be directed to /paramatername-normalized.
+The address /parametername still exists and will output arbitrary data.
+;
+#X text 328 537 made more confusing by;
+#X connect 2 0 12 1;
+#X connect 3 0 12 2;
+#X connect 4 0 12 0;
+#X connect 12 0 5 0;
diff --git a/memento-p/commun-c-scale.pd b/memento-p/commun-c-scale.pd
new file mode 100644
index 0000000..0efb334
--- /dev/null
+++ b/memento-p/commun-c-scale.pd
@@ -0,0 +1,79 @@
+#N canvas 286 32 505 662 10;
+#X obj 12 11 inlet;
+#X obj 108 565 outlet;
+#X text 5 93 RRADICAL_MEMENTO is also in originator;
+#X obj 108 538 list;
+#X obj 45 437 demultiplex;
+#X obj 108 459 round;
+#X obj 45 370 expr_scale 0 1 \$3 \$4;
+#X obj 156 11 inlet;
+#X obj 286 11 inlet;
+#X text 63 590 Use to constrain input to a smaller subset of the full
+range. Input as relative to 0-1. Reports back what the result will
+be when scaled fully;
+#X obj 156 59 s \$0boundLowFull;
+#X obj 286 59 s \$0boundHighFull;
+#X obj 132 252 r \$0boundLowFull;
+#X obj 162 282 r \$0boundHighFull;
+#X obj 108 415 r \$0round?;
+#X obj 45 459 t a;
+#X text 186 548 Read \$1-OSC (== \$0-OSC) \, filter by argument \$2
+;
+#X obj 45 188 deeprouteOSC \$2-normalized;
+#X obj 187 521 deeprouteOSC \$2;
+#X obj 187 497 r \$1-RRADICAL-OSC;
+#X obj 45 165 r \$1-RRADICAL-OSC;
+#X obj 12 42 prepent \$2;
+#X obj 12 69 s \$1-RRADICAL-MEMENTO;
+#X obj 108 513 route \$2;
+#X obj 108 489 r \$1-in;
+#X text 191 538 ^;
+#N canvas 0 22 221 199 handleArgs 0;
+#X obj 26 26 loadbang;
+#X msg 26 127 1;
+#X obj 26 102 sel round hide;
+#X obj 26 149 s \$0round?;
+#X obj 26 78 list-drip;
+#X obj 95 149 s \$0hide?;
+#X obj 26 53 list append \$5 \$6;
+#X connect 0 0 6 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 5 0;
+#X connect 4 0 2 0;
+#X connect 6 0 4 0;
+#X restore 348 118 pd handleArgs;
+#N canvas 0 22 390 211 listParams 0;
+#X obj 31 79 spigot 1;
+#X msg 161 62 0;
+#X obj 161 39 r \$0hide?;
+#X obj 31 49 r \$1/listParams;
+#X obj 31 136 s \$1/returnParams;
+#X obj 31 106 list append \$2-normalized;
+#X text 16 161 listParams is used by Controctopus \, so we return a
+special address for 0-1 data input only;
+#X connect 0 0 5 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 0;
+#X connect 5 0 4 0;
+#X restore 347 143 pd listParams;
+#X connect 0 0 21 0;
+#X connect 3 0 1 0;
+#X connect 4 0 15 0;
+#X connect 4 1 5 0;
+#X connect 5 0 15 0;
+#X connect 6 0 4 0;
+#X connect 7 0 10 0;
+#X connect 8 0 11 0;
+#X connect 12 0 6 3;
+#X connect 13 0 6 4;
+#X connect 14 0 4 1;
+#X connect 15 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 3 0;
+#X connect 19 0 18 0;
+#X connect 20 0 17 0;
+#X connect 21 0 22 0;
+#X connect 23 0 3 0;
+#X connect 24 0 23 0;
diff --git a/memento-p/commun-c.pd b/memento-p/commun-c.pd
new file mode 100644
index 0000000..a623e69
--- /dev/null
+++ b/memento-p/commun-c.pd
@@ -0,0 +1,35 @@
+#N canvas 560 190 666 338 10;
+#X obj 162 41 inlet;
+#X obj 161 260 outlet;
+#X obj 161 158 r \$2-in;
+#X obj 161 208 route \$1;
+#X text 22 282 Read \$2-OSC (== \$0-OSC) \, filter by argument \$1
+;
+#X obj 162 99 s \$2-RRADICAL-MEMENTO;
+#X text 95 123 RRADICAL_MEMENTO is also in originator;
+#X obj 49 183 r \$2-RRADICAL-OSC;
+#X obj 299 164 r \$2/listParams;
+#X obj 299 221 list append \$1;
+#X obj 162 72 prepent \$1;
+#X obj 161 233 list;
+#X obj 299 194 spigot 1;
+#X obj 429 106 loadbang;
+#X obj 429 154 sel hide;
+#X msg 429 177 0;
+#X obj 429 129 list append \$3;
+#X obj 49 207 deeprouteOSC \$1;
+#X obj 299 251 s \$2/returnParams;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 7 0 17 0;
+#X connect 8 0 12 0;
+#X connect 9 0 18 0;
+#X connect 10 0 5 0;
+#X connect 11 0 1 0;
+#X connect 12 0 9 0;
+#X connect 13 0 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 1;
+#X connect 16 0 14 0;
+#X connect 17 0 11 0;
diff --git a/memento-p/originator-p.pd b/memento-p/originator-p.pd
new file mode 100644
index 0000000..e3ccb9f
--- /dev/null
+++ b/memento-p/originator-p.pd
@@ -0,0 +1,265 @@
+#N canvas 210 71 1030 697 10;
+#X text 425 22 responsibilities:;
+#X text 98 10 ORIGINATOR (the mixing engineer);
+#X text 447 59 * set memento (restore settings from photo);
+#X text 448 40 * create memento (take photo);
+#N canvas 76 23 720 450 createMemento 0;
+#X obj 48 84 inlet;
+#X obj 97 117 symbol \$1;
+#X obj 97 90 loadbang;
+#X obj 97 150 s \$0-memento;
+#X text 75 49 \$1 is the default name of the memento \, that this originator
+creates \, but it can be changed later.;
+#X obj 74 179 outlet;
+#X text 292 108 What is a memento?;
+#X text 275 121 a memento is a directory in a global (data)pool;
+#X obj 305 139 r \$0-memento;
+#X msg 309 180 state \$1;
+#X obj 319 213 s \$0-pool;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X restore 122 321 pd createMemento;
+#X obj 122 104 inlet;
+#N canvas 600 185 664 406 setMemento 0;
+#X text 238 12 setMemento is responsible for restoring all registered
+variables.;
+#X obj 64 26 inlet;
+#X obj 109 286 outlet;
+#X obj 109 249 r \$0-restore;
+#X msg 64 126 getall;
+#X obj 64 183 s \$0-pool;
+#N canvas 468 415 450 300 change2substate 0;
+#X obj 92 39 inlet;
+#X obj 113 198 outlet;
+#X obj 185 93 r \$0-memento;
+#X obj 280 93 r \$0-substate;
+#X obj 113 144 pack s s 0;
+#X obj 92 93 symbol chdir;
+#X obj 92 67 t b;
+#X obj 113 167 route list;
+#X text 218 163 un-list again;
+#X connect 0 0 6 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 2;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X restore 131 127 pd change2substate;
+#X text 186 104 change to dir memento substate;
+#X obj 64 52 t b b b;
+#X obj 130 75 s \$0-set-ON;
+#X connect 1 0 8 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 6 0 5 0;
+#X connect 8 0 4 0;
+#X connect 8 1 6 0;
+#X connect 8 2 9 0;
+#X restore 256 446 pd setMemento;
+#X text 431 90 What is a memento?;
+#X text 463 111 a memento is a directory in a global (data)pool;
+#X text 432 135 What is a state?;
+#X obj 563 328 r \$0-pool;
+#X symbolatom 691 374 10 0 0 3 memento - -;
+#X msg 170 103 create help;
+#X msg 261 103 set memento;
+#X obj 777 348 inlet;
+#X obj 178 297 s \$0-substate;
+#X obj 828 482 r \$0-substate;
+#X msg 828 511 substate \$1;
+#X msg 99 471 copy;
+#X msg 210 472 paste;
+#X obj 134 514 s \$0-pool;
+#X obj 309 341 symbol;
+#X obj 156 440 t b b;
+#X obj 563 460 s \$2-in;
+#X obj 197 418 r \$0-set;
+#X obj 148 472 s \$0-set;
+#X obj 828 540 s \$0-pool;
+#X obj 225 274 s \$0-pool;
+#X text 819 348 OSC inlet;
+#X text 462 154 a state is the content of a memento subdirectory named
+by a number.;
+#X obj 535 273 r \$2-RRADICAL-MEMENTO;
+#X text 443 248 \$2-RRADICAL-MEMENTO is sent by commun objects;
+#X obj 777 413 s \$2-RRADICAL-OSC;
+#X obj 385 520 outlet;
+#N canvas 468 415 450 300 ch2subs 0;
+#X obj 92 39 inlet;
+#X obj 113 198 outlet;
+#X obj 185 93 r \$0-memento;
+#X obj 280 93 r \$0-substate;
+#X obj 113 144 pack s s 0;
+#X obj 92 67 t b;
+#X obj 113 167 route list;
+#X text 218 163 un-list again;
+#X obj 92 94 symbol chdir;
+#X connect 0 0 5 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 2;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 1 0;
+#X connect 8 0 4 0;
+#X restore 255 252 pd ch2subs;
+#X obj 225 230 t a b;
+#X obj 563 382 spigot;
+#X obj 448 520 spigot;
+#N canvas 548 386 450 300 tgl 0;
+#X obj 155 198 outlet;
+#X obj 240 198 outlet;
+#X msg 151 120 0;
+#X msg 184 120 1;
+#X msg 233 120 0;
+#X msg 266 120 1;
+#X obj 295 55 r \$0-set-ON;
+#X obj 292 85 loadbang;
+#X obj 185 65 r \$0-get-ON;
+#X text 20 7 This tgl is to prevent some loops when using get and set.
+;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X connect 7 0 2 0;
+#X connect 8 0 3 0;
+#X connect 8 0 4 0;
+#X restore 486 348 pd tgl;
+#X obj 235 177 t a b;
+#X obj 287 175 s \$0-get-ON;
+#X obj 385 493 spigot;
+#X obj 448 544 outlet;
+#X text 353 541 Value outlet;
+#X text 494 545 Value/Key outlet;
+#X obj 370 228 s \$0-substate;
+#X obj 340 203 t b f;
+#X obj 23 316 s \$0-pool;
+#X obj 646 494 outlet;
+#X text 641 515 OSC outlet;
+#X obj 637 461 OSCprepend \$1;
+#X msg 720 487 setsub \$1;
+#X obj 720 547 s \$0-setsub;
+#X obj 173 77 r \$0-setsub;
+#X obj 161 378 select copy paste set;
+#X obj 122 132 route create substate get setsub;
+#X obj 340 251 s \$0-set;
+#X obj 25 261 symbol;
+#X obj 101 267 symbol;
+#X obj 12 220 t b a;
+#X msg 12 360 set;
+#X text 12 382 after loadx \, set;
+#X obj 12 77 r SET_ALL_RRADICALS;
+#X obj 818 245 r \$0-substate;
+#X text 795 218 \$2 == \$0 parent;
+#X msg 818 270 set \$1;
+#X obj 818 298 s \$2-parentstate;
+#X msg 745 513 /preset \$1;
+#X obj 563 351 rradical.state-p \$1;
+#X obj 262 77 r \$2-localSave;
+#X text 14 47 global send to do something crazy with!;
+#X obj 262 56 r \$1-localSetsub;
+#X obj 22 197 route lddir svdir;
+#X msg 23 285 lddir \$1;
+#X msg 102 289 svdir \$1;
+#X obj 884 377 r \$1/OSC;
+#X obj 731 308 r PDOSC;
+#X obj 77 580 r \$1/getParams;
+#X obj 77 619 s \$2/listParams;
+#X text 85 599 Dispatch to commun-cs;
+#X obj 563 419 prepent RRADICAL.dummy;
+#X obj 535 300 prepent set;
+#X obj 448 493 prepent RRADICAL.dummy;
+#X obj 235 196 prepent get;
+#X obj 816 32 r \$2-COMMUN-RESPONSE;
+#X obj 816 86 s PDOSC;
+#X obj 816 60 OSCprepend \$1;
+#X obj 764 437 routeOSC /preset /substate;
+#X obj 777 377 deeprouteOSC \$1;
+#X obj 247 579 r \$2/returnParams;
+#X obj 247 619 s \$1/paramsList;
+#X connect 5 0 55 0;
+#X connect 10 0 68 0;
+#X connect 11 0 50 1;
+#X connect 12 0 55 0;
+#X connect 13 0 55 0;
+#X connect 14 0 88 0;
+#X connect 16 0 17 0;
+#X connect 16 0 67 0;
+#X connect 17 0 26 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 21 0 54 0;
+#X connect 22 0 25 0;
+#X connect 22 1 19 0;
+#X connect 24 0 6 0;
+#X connect 30 0 50 0;
+#X connect 30 0 81 0;
+#X connect 34 0 27 0;
+#X connect 35 0 27 0;
+#X connect 35 1 34 0;
+#X connect 36 0 80 0;
+#X connect 37 0 42 0;
+#X connect 38 0 37 1;
+#X connect 38 0 41 1;
+#X connect 38 1 36 1;
+#X connect 39 0 83 0;
+#X connect 39 1 40 0;
+#X connect 41 0 33 0;
+#X connect 46 0 56 0;
+#X connect 46 1 45 0;
+#X connect 50 0 48 0;
+#X connect 51 0 52 0;
+#X connect 53 0 55 0;
+#X connect 54 0 18 0;
+#X connect 54 1 22 0;
+#X connect 54 2 6 0;
+#X connect 55 0 4 0;
+#X connect 55 1 15 0;
+#X connect 55 2 39 0;
+#X connect 55 3 46 0;
+#X connect 55 4 21 0;
+#X connect 55 4 72 0;
+#X connect 57 0 73 0;
+#X connect 58 0 74 0;
+#X connect 59 0 60 0;
+#X connect 59 1 57 0;
+#X connect 60 0 21 0;
+#X connect 62 0 55 0;
+#X connect 63 0 65 0;
+#X connect 65 0 66 0;
+#X connect 67 0 50 0;
+#X connect 68 0 36 0;
+#X connect 68 0 41 0;
+#X connect 68 0 82 0;
+#X connect 68 1 80 1;
+#X connect 68 1 82 1;
+#X connect 68 2 11 0;
+#X connect 69 0 55 0;
+#X connect 71 0 55 0;
+#X connect 72 0 59 0;
+#X connect 72 1 58 0;
+#X connect 73 0 47 0;
+#X connect 74 0 47 0;
+#X connect 75 0 32 0;
+#X connect 75 0 87 0;
+#X connect 76 0 88 0;
+#X connect 77 0 78 0;
+#X connect 80 0 23 0;
+#X connect 81 0 68 0;
+#X connect 82 0 37 0;
+#X connect 83 0 35 0;
+#X connect 84 0 86 0;
+#X connect 86 0 85 0;
+#X connect 87 0 51 0;
+#X connect 87 1 51 0;
+#X connect 88 0 32 0;
+#X connect 88 0 87 0;
+#X connect 89 0 90 0;
diff --git a/memento-p/polaroid-help.pd b/memento-p/polaroid-help.pd
new file mode 100644
index 0000000..502c2ad
--- /dev/null
+++ b/memento-p/polaroid-help.pd
@@ -0,0 +1,75 @@
+#N canvas 182 36 657 763 10;
+#X obj 196 452 s \$0polaroid;
+#X msg 35 85 saveas;
+#X msg 84 85 load;
+#X msg 121 85 save;
+#X msg 158 85 restore;
+#X msg 130 410 saveas;
+#X msg 179 410 load;
+#X msg 216 410 save;
+#X msg 253 410 restore;
+#X msg 267 193 SetAFileFirst!;
+#X obj 292 309 bng 8 250 50 0 \$0restore \$0nullS empty 17 7 0 10 -258177
+-1 -1;
+#X obj 282 309 bng 8 250 50 0 \$0save \$0nullS empty 17 7 0 10 -4062
+-1 -1;
+#X obj 287 319 bng 8 250 50 0 \$0makeDefault \$0nullS empty 17 7 0
+10 -228742 -1 -1;
+#X text 307 305 Restores from currently selected file;
+#X text 129 327 Sets the selected file as this patch's "default" \,
+via a cross-connected messagebox (as shown);
+#X obj -2 8 cnv 15 430 50 empty empty Polaroid 20 12 0 16 -204352 -66577
+0;
+#X text 16 27 for Memento;
+#X text -61 305 Saves local state to the currently selected file;
+#X obj 33 247 bng 13 250 50 0 \$0saveLocalFile \$0saveLocalFileR SaveTo
+15 8 0 8 -1988 -1 -1;
+#X obj 33 270 bng 13 250 50 0 \$0loadLocalFile \$0loadLocalFileR Load
+15 8 0 8 -155777 -1 -1;
+#X text 85 246 Choose a file \, and save local state to it immediately
+;
+#X text 85 269 Choose a file \, and load a local state from it immediately
+;
+#X text 247 41 Local state saving device;
+#X obj -52 373 bng 8 250 50 0 \$0copy \$0copyR empty 17 7 0 10 -159808
+-1 -1;
+#X obj 238 374 bng 8 250 50 0 \$0paste \$0pasteR empty 17 7 0 10 -260097
+-1 -1;
+#X text -43 370 Copies local state to a temporary file;
+#X text 247 371 Pastes a local state from that temporary file;
+#X obj 136 177 polaroid \$1 \$0;
+#X msg 212 85 copy;
+#X msg 248 85 paste;
+#X text -5 509 Polaroid requires a "group" and \$0 as its arguments.
+These are required for communication with both originator and the \$0polaroid
+receiver.;
+#X text 87 467 Polaroid also has a built-in receiver \, for use without
+the GUI.;
+#X text -2 639 If you have multiple copies of a child abstraction \,
+give it a second argument like "/A" or "/B" \, then prepend its [commun]s
+with \$2 \, like [commun \$2-envelopeAttack \$0];
+#X text -1 687 Important: OSC routes can and must have (only) one slash
+in them \, meaning the "/A" and \$2-envelopeAttack above was deliberate.
+Using \$2/envelopeAttack will not work \, nor will just "A".;
+#X text 64 387 (works across all patches in the same "group" \, or
+\$1);
+#X text -3 559 The so called "group" is a common originator name among
+all of your abstractions. This is typically the first argument. If
+your rradical abstractions are all children of a parent abstraction
+\, it is convenient to use "\$1" for all of their first arguments \,
+and then define that globally in the first argument of your parent
+abstraction.;
+#X text 441 724 Luke Iannini \, 2008;
+#X text 441 738 proyekto.net tag sndrft;
+#X connect 1 0 27 0;
+#X connect 2 0 27 0;
+#X connect 3 0 27 0;
+#X connect 4 0 27 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 27 1;
+#X connect 27 1 9 0;
+#X connect 28 0 27 0;
+#X connect 29 0 27 0;
diff --git a/memento-p/polaroid.pd b/memento-p/polaroid.pd
new file mode 100644
index 0000000..9b4f35e
--- /dev/null
+++ b/memento-p/polaroid.pd
@@ -0,0 +1,186 @@
+#N canvas 361 200 341 279 10;
+#X obj 14 41 bng 13 250 50 0 \$0saveLocalFile \$0saveLocalFileR SaveTo
+15 8 0 8 -1988 -1 -1;
+#X obj 59 41 bng 13 250 50 0 \$0loadLocalFile \$0loadLocalFileR Load
+15 8 0 8 -155777 -1 -1;
+#X obj 11 25 cnv 13 114 13 empty empty empty 2 8 0 8 -1024 -66577 0
+;
+#X obj 13 27 cnv 9 110 9 empty \$0localFilenameR test 1 6 0 8 -262144
+-1 0;
+#X obj 17 117 inlet;
+#X obj 158 116 inlet;
+#X obj 111 43 bng 8 250 50 0 \$0load \$0nullS empty 17 7 0 10 -258177
+-1 -1;
+#X obj 101 43 bng 8 250 50 0 \$0save \$0nullR empty 17 7 0 10 -4062
+-1 -1;
+#X obj 158 170 outlet;
+#X obj 106 53 bng 8 250 50 0 \$0makeDefault \$0nullS empty 17 7 0 10
+-228742 -1 -1;
+#X obj 17 171 outlet null;
+#N canvas 186 394 339 332 messages 0;
+#X obj 17 29 inlet;
+#X obj 17 265 s \$0saveLocalFileR;
+#X obj 54 246 s \$0loadLocalFileR;
+#X obj 92 227 s \$0save;
+#X obj 17 130 sel saveas load save restore copy paste;
+#X obj 17 65 symbol;
+#X obj 171 187 s \$0copyR;
+#X obj 209 163 s \$0pasteR;
+#X obj 34 98 r \$2polaroid;
+#X obj 130 208 s \$0load;
+#X connect 0 0 5 0;
+#X connect 4 0 1 0;
+#X connect 4 1 2 0;
+#X connect 4 2 3 0;
+#X connect 4 3 9 0;
+#X connect 4 4 6 0;
+#X connect 4 5 7 0;
+#X connect 5 0 4 0;
+#X connect 8 0 4 0;
+#X restore 17 144 pd messages;
+#N canvas 655 133 358 405 defaulter 0;
+#X obj 58 14 inlet;
+#X obj 58 318 outlet;
+#X obj 58 59 symbol;
+#X obj 25 193 loadbang;
+#X msg 58 280 set \$1;
+#X obj 95 236 r \$0fileName;
+#X obj 58 260 symbol;
+#X obj 58 215 r \$0makeDefault;
+#X obj 25 173 s \$0localFilenameR;
+#X obj 58 133 s \$2-localSave;
+#X msg 58 80 lddir \$1;
+#X obj 120 271 loadbang;
+#X msg 120 294 symbol SetAFileFirst!;
+#X msg 101 106 setsub 0;
+#X obj 58 106 t b a;
+#X obj 168 106 s \$1-localSetsub;
+#X obj 106 59 s \$0def;
+#X msg 25 152 label Default--->;
+#X connect 0 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 17 0;
+#X connect 2 0 16 0;
+#X connect 3 0 1 0;
+#X connect 4 0 1 0;
+#X connect 5 0 6 1;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 10 0 14 0;
+#X connect 11 0 12 0;
+#X connect 12 0 6 1;
+#X connect 13 0 15 0;
+#X connect 14 0 13 0;
+#X connect 14 1 9 0;
+#X connect 17 0 8 0;
+#X restore 158 143 pd defaulter;
+#X obj 16 56 bng 8 250 50 0 \$0copy \$0copyR Copy 9 5 0 8 -159808 -1
+-1;
+#X obj 61 56 bng 8 250 50 0 \$0paste \$0pasteR Paste 9 5 0 8 -260097
+-1 -1;
+#N canvas 616 178 817 648 logic 1;
+#X obj 574 324 s \$0localFilenameR;
+#X obj 68 21 r \$0saveLocalFile;
+#X obj 309 23 r \$0loadLocalFile;
+#X obj 68 94 savepanel;
+#X obj 309 83 openpanel;
+#X msg 574 301 label \$1;
+#X obj 574 204 symbol2list;
+#X obj 574 254 list append >;
+#X obj 574 278 list-l2s;
+#X msg 600 204 symbol;
+#X obj 600 183 loadbang;
+#X obj 78 118 s \$0fileName;
+#X obj 574 137 r \$0fileName;
+#X obj 68 223 symbol;
+#X obj 309 213 symbol;
+#X obj 81 177 r \$0save;
+#X obj 323 168 r \$0load;
+#X obj 28 476 r \$0copy;
+#X obj 470 466 r \$0paste;
+#X obj 309 264 t b a;
+#X msg 309 318 setsub 0;
+#X obj 309 340 s \$1-localSetsub;
+#X obj 28 573 s \$2-localSave;
+#X obj 497 544 s \$2-localSave;
+#X obj 68 301 s \$2-localSave;
+#X obj 470 520 t b a;
+#X msg 470 564 setsub 0;
+#X obj 470 586 s \$1-localSetsub;
+#X msg 470 490 lddir /tmp/polaroidTemp;
+#X msg 28 549 svdir /tmp/polaroidTemp;
+#X msg 68 251 svdir \$1;
+#X msg 309 241 lddir \$1;
+#X obj 574 228 list split 21;
+#X obj 574 98 s \$0localFilenameR;
+#X obj 574 22 loadbang;
+#X msg 574 75 label ChooseAFile..;
+#X obj 58 520 s SAVE_PREP;
+#X obj 28 498 t b b;
+#X obj 98 73 s SAVE_PREP;
+#X obj 68 52 t b b;
+#X obj 574 160 ggee/stripdir;
+#X obj 105 198 r \$0def;
+#X obj 346 188 r \$0def;
+#X obj 154 263 print SavedTo;
+#X obj 154 239 list trim;
+#X obj 402 229 list trim;
+#X obj 402 253 print Loaded;
+#X obj 339 290 s \$2-localSave;
+#X obj 321 109 s \$0fileName;
+#X obj 574 49 spigot 1;
+#X msg 653 33 0;
+#X text 636 50 ^ Don't Override;
+#X obj 653 6 r \$0def;
+#X connect 1 0 39 0;
+#X connect 2 0 4 0;
+#X connect 3 0 11 0;
+#X connect 3 0 13 0;
+#X connect 4 0 14 0;
+#X connect 4 0 48 0;
+#X connect 5 0 0 0;
+#X connect 6 0 32 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 0;
+#X connect 9 0 6 1;
+#X connect 10 0 9 0;
+#X connect 12 0 40 0;
+#X connect 13 0 30 0;
+#X connect 13 0 44 0;
+#X connect 14 0 31 0;
+#X connect 14 0 45 0;
+#X connect 15 0 13 0;
+#X connect 16 0 14 0;
+#X connect 17 0 37 0;
+#X connect 18 0 28 0;
+#X connect 19 0 20 0;
+#X connect 19 1 47 0;
+#X connect 20 0 21 0;
+#X connect 25 0 26 0;
+#X connect 25 1 23 0;
+#X connect 26 0 27 0;
+#X connect 28 0 25 0;
+#X connect 29 0 22 0;
+#X connect 30 0 24 0;
+#X connect 31 0 19 0;
+#X connect 32 0 7 0;
+#X connect 32 2 8 0;
+#X connect 34 0 49 0;
+#X connect 35 0 33 0;
+#X connect 37 0 29 0;
+#X connect 37 1 36 0;
+#X connect 39 0 3 0;
+#X connect 39 1 38 0;
+#X connect 40 0 6 0;
+#X connect 41 0 13 1;
+#X connect 42 0 14 1;
+#X connect 44 0 43 0;
+#X connect 45 0 46 0;
+#X connect 49 0 35 0;
+#X connect 50 0 49 1;
+#X connect 52 0 50 0;
+#X restore 167 41 pd logic;
+#X connect 4 0 11 0;
+#X connect 5 0 12 0;
+#X connect 12 0 8 0;
+#X coords 0 -1 1 1 116 57 1 10 10;
diff --git a/memento-p/rradical.state-p.pd b/memento-p/rradical.state-p.pd
new file mode 100644
index 0000000..a7f7b2a
--- /dev/null
+++ b/memento-p/rradical.state-p.pd
@@ -0,0 +1,220 @@
+#N canvas 33 22 1040 638 10;
+#X obj 108 454 outlet;
+#X obj 87 475 outlet;
+#X obj 173 410 print attr;
+#X obj 87 380 pool RRADICAL;
+#X obj 205 46 inlet;
+#X obj 42 331 r \$0-pool;
+#X obj 356 373 s \$0-pool;
+#X obj 205 124 symbol \$1;
+#X obj 134 29 loadbang;
+#X msg 255 278 getdir;
+#X obj 130 433 outlet;
+#X obj 457 313 prepend get;
+#X msg 306 160 getall;
+#X obj 386 228 s \$0-substate;
+#X obj 356 203 t b f;
+#X msg 121 318 echodir \$1;
+#X obj 121 291 tgl 15 1 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X msg 118 347 getdir;
+#X msg 137 79 bang;
+#X msg 508 190 copyall;
+#X msg 565 190 paste;
+#X obj 532 223 s \$0-pool;
+#X obj 508 136 symbol;
+#N canvas 468 415 458 308 mkchange2substate 0;
+#X obj 92 39 inlet;
+#X obj 111 224 outlet;
+#X obj 198 93 r \$0-memento;
+#X obj 293 93 r \$0-substate;
+#X obj 111 150 pack s s 0;
+#X obj 92 93 symbol mkchdir;
+#X obj 92 67 t b;
+#X obj 111 180 route list;
+#X text 204 180 Un-List it again;
+#X connect 0 0 6 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 2;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X restore 356 274 pd mkchange2substate;
+#X obj 205 160 t b b s;
+#X obj 249 209 s \$0-memento;
+#X obj 17 525 print pool;
+#X obj 205 84 route state getstate getall substate set get;
+#X obj 508 160 select copy paste;
+#X obj 698 550 s \$0-pool;
+#X obj 17 544 print svld;
+#X obj 601 373 symbol;
+#X obj 793 377 symbol;
+#X obj 17 563 print currentDir;
+#X msg 191 349 printroot;
+#N canvas 468 415 478 328 mkchange2tmp 0;
+#X obj 92 39 inlet;
+#X obj 111 224 outlet;
+#X obj 198 93 r \$0-memento;
+#X obj 92 93 symbol mkchdir;
+#X obj 92 67 t b;
+#X obj 111 180 route list;
+#X text 204 180 Un-List it again;
+#X msg 296 94 symbol tmp;
+#X obj 111 150 pack s s s;
+#X obj 296 66 loadbang;
+#X msg 167 37 bang;
+#X connect 0 0 4 0;
+#X connect 2 0 8 1;
+#X connect 3 0 8 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X connect 7 0 8 2;
+#X connect 8 0 5 0;
+#X connect 9 0 7 0;
+#X connect 10 0 4 0;
+#X restore 623 347 pd mkchange2tmp;
+#N canvas 1317 161 462 312 mkchange2substate 0;
+#X obj 92 39 inlet;
+#X obj 111 224 outlet;
+#X obj 198 93 r \$0-memento;
+#X obj 293 93 r \$0-substate;
+#X obj 111 150 pack s s 0;
+#X obj 92 93 symbol mkchdir;
+#X obj 111 180 route list;
+#X text 204 180 Un-List it again;
+#X text 195 29 change back to substate dir;
+#X obj 92 67 t b b;
+#X msg 38 98 clrclip;
+#X connect 0 0 9 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 2;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 9 0 10 0;
+#X connect 9 1 5 0;
+#X connect 10 0 1 0;
+#X restore 771 424 pd mkchange2substate;
+#X obj 579 325 t b a b;
+#N canvas 405 362 623 338 sub2tmp 0;
+#X obj 121 12 inlet;
+#X obj 111 224 outlet;
+#X obj 198 93 r \$0-memento;
+#X obj 92 93 symbol mkchdir;
+#X obj 111 180 route list;
+#X text 204 180 Un-List it again;
+#X msg 36 91 paste;
+#X obj 121 40 t b b b;
+#X msg 406 90 copyall;
+#X text 189 8 copies data from current dir \, changes to "tmp" dir
+\, pastes data.;
+#X obj 293 93 symbol tmp;
+#X msg 294 47 bang;
+#X obj 359 47 loadbang;
+#X obj 111 150 pack s s s;
+#X connect 0 0 7 0;
+#X connect 2 0 13 1;
+#X connect 3 0 13 0;
+#X connect 4 0 1 0;
+#X connect 6 0 1 0;
+#X connect 7 0 6 0;
+#X connect 7 1 3 0;
+#X connect 7 2 8 0;
+#X connect 8 0 1 0;
+#X connect 10 0 13 2;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 13 0 4 0;
+#X restore 815 348 pd sub2tmp;
+#X obj 771 324 t b a b;
+#X msg 536 357 bang;
+#X obj 17 582 print currentCommand;
+#X obj 661 100 t a;
+#N canvas 757 334 643 358 tmp2sub+abs1 0;
+#X obj 121 12 inlet;
+#X obj 181 257 outlet;
+#X obj 268 126 r \$0-memento;
+#X obj 363 126 r \$0-substate;
+#X obj 181 183 pack s s 0;
+#X obj 162 126 symbol mkchdir;
+#X obj 181 213 route list;
+#X text 274 213 Un-List it again;
+#X msg 106 124 paste;
+#X msg 476 123 copyall;
+#X obj 121 40 t b b b b;
+#X msg 35 125 absdir 1;
+#X text 191 19 copies data from "tmp" dir \, changes to current substate
+\, pastes data \, returns to absolute directory mode.;
+#X connect 0 0 10 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 2;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 8 0 1 0;
+#X connect 9 0 1 0;
+#X connect 10 0 11 0;
+#X connect 10 1 8 0;
+#X connect 10 2 5 0;
+#X connect 10 3 9 0;
+#X connect 11 0 1 0;
+#X restore 579 417 pd tmp2sub+abs1;
+#X obj 661 293 route lddir svdir;
+#X msg 793 398 absdir 0 \, svdir \$1 \, absdir 1;
+#X msg 601 393 absdir 0 \, lddir \$1;
+#X obj 407 160 prepent set;
+#X connect 3 0 1 0;
+#X connect 3 1 0 0;
+#X connect 3 2 10 0;
+#X connect 3 4 2 0;
+#X connect 4 0 27 0;
+#X connect 5 0 3 0;
+#X connect 7 0 24 0;
+#X connect 8 0 7 0;
+#X connect 9 0 6 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
+#X connect 14 0 23 0;
+#X connect 14 1 13 0;
+#X connect 15 0 3 0;
+#X connect 16 0 15 0;
+#X connect 17 0 3 0;
+#X connect 18 0 7 0;
+#X connect 19 0 21 0;
+#X connect 20 0 21 0;
+#X connect 22 0 28 0;
+#X connect 23 0 6 0;
+#X connect 24 0 9 0;
+#X connect 24 1 23 0;
+#X connect 24 2 25 0;
+#X connect 27 0 7 0;
+#X connect 27 1 9 0;
+#X connect 27 2 12 0;
+#X connect 27 3 14 0;
+#X connect 27 4 47 0;
+#X connect 27 5 11 0;
+#X connect 27 6 22 0;
+#X connect 27 6 42 0;
+#X connect 28 0 19 0;
+#X connect 28 1 20 0;
+#X connect 31 0 46 0;
+#X connect 32 0 45 0;
+#X connect 34 0 3 0;
+#X connect 35 0 29 0;
+#X connect 36 0 29 0;
+#X connect 37 0 43 0;
+#X connect 37 1 31 0;
+#X connect 37 2 35 0;
+#X connect 38 0 29 0;
+#X connect 39 0 36 0;
+#X connect 39 1 32 0;
+#X connect 39 2 38 0;
+#X connect 40 0 31 0;
+#X connect 42 0 44 0;
+#X connect 43 0 29 0;
+#X connect 44 0 37 0;
+#X connect 44 1 39 0;
+#X connect 45 0 29 0;
+#X connect 46 0 29 0;
+#X connect 47 0 6 0;
diff --git a/memento-p/sft.careGUI-help.pd b/memento-p/sft.careGUI-help.pd
new file mode 100644
index 0000000..dd06e39
--- /dev/null
+++ b/memento-p/sft.careGUI-help.pd
@@ -0,0 +1,46 @@
+#N canvas 338 180 531 595 10;
+#X obj 109 86 sft.careGUI;
+#X obj 30 371 bng 15 250 50 0 \$0print empty Print 0 -6 0 8 -211762
+-1 -1;
+#X obj 68 306 bng 25 250 50 0 \$0restore \$0restoreR Restore 0 -6 0
+8 -233729 -1 -1;
+#X obj 30 306 bng 25 250 50 0 \$0save \$0saveR Save 0 -6 0 8 -40133
+-1 -1;
+#X obj 30 422 bng 20 250 50 0 \$0load empty Load 0 -6 0 8 -211157 -1
+-1;
+#X obj 60 422 bng 20 250 50 0 \$0saveAs empty SaveAs 0 -6 0 8 -113396
+-1 -1;
+#X obj 30 475 bng 15 250 50 0 \$0reset empty Reset 0 -6 0 8 -189876
+-1 -1;
+#X obj 30 250 hradio 10 1 0 8 \$0preset \$0presetR Preset 0 -6 0 8
+-129999 -1 -1 0;
+#X symbolatom 30 206 14 0 0 0 - #0fileName #0nullS;
+#X obj 30 260 hradio 10 1 0 8 \$0edit \$0editR empty 0 -6 0 8 -129264
+-1 -1 0;
+#X text 139 473 Resets the pool. Currently not implemented.;
+#X text 135 206 Displays the currently selected data file.;
+#X text 137 419 Set a file to Load or Save to. These do not actually
+move any data \, they simply choose the file to be operated upon.;
+#X text 137 370 Prints the full contents of the RRADICAL pool.;
+#X text 136 291 Save to \, or restore from \, the currently selected
+data file. These are "greyed out" until a file is set.;
+#X text 135 234 Loads a global substate (preset) setting into all rradical
+patches. The bottom radio only sets the substate to operate on \, without
+first loading its previous contents;
+#X obj 141 326 cnv 19 19 19 empty empty ! 5 7 0 14 -1 -1 0;
+#X obj 143 328 cnv 15 15 15 empty empty ! 5 7 0 14 -261761 -1 0;
+#X text 163 321 Warning! "Restore" will also load the first preset
+of all open patches.;
+#X obj 29 509 r SAVE_PREP;
+#X obj 29 540 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
+-1;
+#X text 140 503 This is a bang sent by sft.careGUI (and [polaroid])
+just before saving \, to allow preparations for the save event. For
+example \, one could use it to dump an array into a list into a commun
+object so that it could be saved when the save message arrives.;
+#X obj 4 6 cnv 15 430 50 empty empty sft.careGUI 20 12 0 16 -204352
+-66577 0;
+#X text 22 25 for Memento;
+#X text 367 559 Luke Iannini \, 2007;
+#X text 311 37 Memento control GUI;
+#X connect 19 0 20 0;
diff --git a/memento-p/sft.careGUI.pd b/memento-p/sft.careGUI.pd
new file mode 100644
index 0000000..cb5378f
--- /dev/null
+++ b/memento-p/sft.careGUI.pd
@@ -0,0 +1,131 @@
+#N canvas 956 305 601 476 10;
+#X obj 206 356 caretaker \$1;
+#X obj 63 62 bng 15 250 50 0 \$0print empty Print 0 -6 0 8 -211762
+-1 -1;
+#X obj 92 52 bng 25 250 50 0 \$0restore \$0restoreR ^^^^^ 0 -6 0 8
+-233017 -1 -1;
+#X obj 24 52 bng 25 250 50 0 \$0save \$0saveR ^^^^^ 0 -6 0 8 -233017
+-1 -1;
+#X obj 131 57 bng 20 250 50 0 \$0load empty Load 0 -6 0 8 -211157 -1
+-1;
+#X obj 161 57 bng 20 250 50 0 \$0saveAs empty SaveAs 0 -6 0 8 -113396
+-1 -1;
+#X obj 194 62 bng 15 250 50 0 \$0reset empty Reset 0 -6 0 8 -189876
+-1 -1;
+#X obj 18 127 r \$0save;
+#X obj 96 127 r \$0print;
+#X obj 167 127 r \$0restore;
+#X obj 307 97 r \$0load;
+#X obj 435 97 r \$0saveAs;
+#X obj 484 235 r \$0reset;
+#X msg 18 232 save RRADICAL;
+#X msg 96 198 print;
+#X msg 167 209 load RRADICAL;
+#X obj 130 23 hradio 10 1 0 8 \$0preset \$0presetR Preset 0 -6 0 8
+-129999 -1 -1 0;
+#X obj 435 187 savepanel;
+#X obj 307 187 openpanel;
+#X msg 484 264 reset;
+#X msg 346 242 file \$1;
+#X msg 22 320 setsub 0;
+#X obj 22 425 s SET_ALL_RRADICALS;
+#X obj 18 198 t b b;
+#X obj 45 97 s SAVE_PREP;
+#X symbolatom 22 24 14 0 0 0 - #0fileName #0nullS;
+#X obj 346 310 s \$0fileName;
+#X obj 346 333 loadbang;
+#X msg 346 356 symbol ChooseAFile...;
+#X obj 130 33 hradio 10 1 0 8 \$0edit \$0editR empty 0 -6 0 8 -129264
+-1 -1 0;
+#X obj 50 356 r \$0preset;
+#X obj 244 17 r \$0preset;
+#X msg 244 38 set \$1;
+#X obj 244 60 s \$0editR;
+#X msg 50 378 setsub \$1;
+#X msg 118 378 substate \$1;
+#X obj 118 357 r \$0edit;
+#X obj 167 232 t b b a;
+#X obj 167 274 outlet;
+#X obj 346 286 ggee/stripdir;
+#X obj 325 142 stat;
+#X obj 348 163 route error;
+#X obj 321 163 t b;
+#X msg 307 116 symbol Presets;
+#X obj 453 142 stat;
+#X obj 476 163 route error;
+#X obj 449 163 t b;
+#X msg 435 116 symbol Presets;
+#X obj 167 173 spigot;
+#N canvas 1244 68 458 308 enablebuttons 0;
+#X obj 38 82 inlet;
+#X obj 38 105 t b;
+#X obj 38 271 s \$0saveR;
+#X obj 75 207 s \$0restoreR;
+#X obj 170 25 loadbang;
+#X obj 143 109 s \$0saveR;
+#X obj 212 109 s \$0restoreR;
+#X msg 170 58 color 10 -1 -1 \, label ^^^^^;
+#X msg 38 238 color -2.54338e+06 -1 -1 \, label Save;
+#X msg 75 178 color -1.50121e+07 -1 -1 \, label Restore;
+#X msg 77 129 1;
+#X obj 77 151 s \$0buttonBlock;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 1 0 9 0;
+#X connect 1 0 10 0;
+#X connect 4 0 7 0;
+#X connect 7 0 5 0;
+#X connect 7 0 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 3 0;
+#X connect 10 0 11 0;
+#X restore 346 264 pd enablebuttons;
+#X obj 200 150 r \$0buttonBlock;
+#X obj 18 173 spigot;
+#X obj 51 150 r \$0buttonBlock;
+#X connect 7 0 51 0;
+#X connect 8 0 14 0;
+#X connect 9 0 48 0;
+#X connect 10 0 43 0;
+#X connect 11 0 47 0;
+#X connect 12 0 19 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 37 0;
+#X connect 17 0 20 0;
+#X connect 17 0 39 0;
+#X connect 18 0 20 0;
+#X connect 18 0 39 0;
+#X connect 19 0 0 0;
+#X connect 20 0 0 0;
+#X connect 20 0 49 0;
+#X connect 21 0 22 0;
+#X connect 23 0 13 0;
+#X connect 23 1 24 0;
+#X connect 27 0 28 0;
+#X connect 28 0 26 0;
+#X connect 30 0 34 0;
+#X connect 31 0 32 0;
+#X connect 32 0 33 0;
+#X connect 34 0 22 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 37 0 38 0;
+#X connect 37 1 21 0;
+#X connect 37 2 0 0;
+#X connect 39 0 26 0;
+#X connect 40 1 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 18 0;
+#X connect 43 0 40 0;
+#X connect 43 0 18 0;
+#X connect 44 1 45 0;
+#X connect 45 0 46 0;
+#X connect 46 0 17 0;
+#X connect 47 0 44 0;
+#X connect 47 0 17 0;
+#X connect 48 0 15 0;
+#X connect 50 0 48 1;
+#X connect 51 0 23 0;
+#X connect 52 0 51 1;
+#X coords 0 -1 1 1 200 70 1 20 10;