aboutsummaryrefslogtreecommitdiff
path: root/sfruit
diff options
context:
space:
mode:
authorLuke Iannini <lukeiannini@users.sourceforge.net>2008-10-26 08:22:12 +0000
committerLuke Iannini <lukeiannini@users.sourceforge.net>2008-10-26 08:22:12 +0000
commit204cb1b74aeec62614a3de516ab67779618e9a36 (patch)
treeb1d404adb3d313e3ed6a8410fbcf6b9f79faf83f /sfruit
parent2ded32118bbf25d3bdaa95acded1fffe22be2329 (diff)
continued reorg
svn path=/trunk/abstractions/sfruit/; revision=10349
Diffstat (limited to 'sfruit')
-rw-r--r--sfruit/SOSCroute-help.pd30
-rw-r--r--sfruit/SOSCroute.pd63
-rw-r--r--sfruit/audiotis.pd40
-rw-r--r--sfruit/bb-help.pd9
-rw-r--r--sfruit/bb.pd8
-rw-r--r--sfruit/beat2frac-help.pd34
-rw-r--r--sfruit/beat2frac.pd83
-rw-r--r--sfruit/btn.pd47
-rw-r--r--sfruit/canvasselect.pd42
-rw-r--r--sfruit/color.hsl2rgb.pd161
-rw-r--r--sfruit/color.random-dark-light18.pd50
-rw-r--r--sfruit/color.random-dark-light24.pd50
-rw-r--r--sfruit/color.rgb2pd18.pd18
-rw-r--r--sfruit/color.rgb2pd24.pd27
-rw-r--r--sfruit/color.rgbset-help.pd19
-rw-r--r--sfruit/color.rgbset.pd156
-rw-r--r--sfruit/countseq-help.pd29
-rw-r--r--sfruit/countseq.pd105
-rw-r--r--sfruit/cpugraph-help.pd6
-rw-r--r--sfruit/cpugraph.pd95
-rw-r--r--sfruit/deeprouteOSC.pd96
-rw-r--r--sfruit/dialog.under-cursor-help.pd17
-rw-r--r--sfruit/dialog.under-cursor.pd63
-rw-r--r--sfruit/dialog.yes-no.pd51
-rw-r--r--sfruit/donecanvasdialog-help.pd4
-rw-r--r--sfruit/dotrouteOSC.pd20
-rw-r--r--sfruit/ds-begin-help.pd41
-rw-r--r--sfruit/ds-begin.pd13
-rw-r--r--sfruit/ds-dump-array.pd20
-rw-r--r--sfruit/ds-dump-help.pd58
-rw-r--r--sfruit/ds-dump-only-help.pd84
-rw-r--r--sfruit/ds-dump-only.pd26
-rw-r--r--sfruit/ds-dump.pd27
-rw-r--r--sfruit/ds-end-help.pd41
-rw-r--r--sfruit/ds-end.pd26
-rw-r--r--sfruit/ds-first-help.pd84
-rw-r--r--sfruit/ds-first.pd29
-rw-r--r--sfruit/ds-get-list.pd70
-rw-r--r--sfruit/ds-idx-only-help.pd23
-rw-r--r--sfruit/ds-idx-only.pd58
-rw-r--r--sfruit/ds-idx.pd36
-rw-r--r--sfruit/ds-next-element.pd154
-rw-r--r--sfruit/ds-raise-help.pd7
-rw-r--r--sfruit/ds-raise.pd11
-rw-r--r--sfruit/ds-select-help.pd39
-rw-r--r--sfruit/ds-select.pd22
-rw-r--r--sfruit/dynamic-gui-messages-help.pd10
-rw-r--r--sfruit/eqpowmix~.pd58
-rw-r--r--sfruit/gemkeycommand.pd6
-rw-r--r--sfruit/gemkeynamedown.pd16
-rw-r--r--sfruit/gop-edit.pd39
-rw-r--r--sfruit/guilink-help.pd15
-rw-r--r--sfruit/guilink.pd9
-rw-r--r--sfruit/hotpack-help.pd27
-rw-r--r--sfruit/hotpack.pd175
-rw-r--r--sfruit/if-help.pd37
-rw-r--r--sfruit/if.pd29
-rw-r--r--sfruit/ifspigot-help.pd11
-rw-r--r--sfruit/ifspigot.pd20
-rw-r--r--sfruit/instance-help.pd30
-rw-r--r--sfruit/instance.pd57
-rw-r--r--sfruit/keycommand-help.pd41
-rw-r--r--sfruit/keycommand.pd6
-rw-r--r--sfruit/keymodroute-help.pd15
-rw-r--r--sfruit/keymodroute.pd17
-rw-r--r--sfruit/keynamedown-help.pd9
-rw-r--r--sfruit/keynamedown.pd16
-rw-r--r--sfruit/keynameonly-help.pd22
-rw-r--r--sfruit/keynameonly.pd14
-rw-r--r--sfruit/list-dripx-help.pd15
-rw-r--r--sfruit/list-dripx.pd43
-rw-r--r--sfruit/list-idx-list-help.pd38
-rw-r--r--sfruit/list-idx-list.pd19
-rw-r--r--sfruit/list-idx-many-help.pd14
-rw-r--r--sfruit/list-idx-many.pd37
-rw-r--r--sfruit/list-proc-insert-help.pd47
-rw-r--r--sfruit/list-proc-insert.pd16
-rw-r--r--sfruit/list-range-help.pd55
-rw-r--r--sfruit/list-range.pd159
-rw-r--r--sfruit/list-remove-help.pd21
-rw-r--r--sfruit/list-remove.pd30
-rw-r--r--sfruit/list-sample-help.pd27
-rw-r--r--sfruit/list-sample.pd35
-rw-r--r--sfruit/list-shuffle-help.pd12
-rw-r--r--sfruit/list-shuffle.pd11
-rw-r--r--sfruit/list-slice-help.pd24
-rw-r--r--sfruit/list-slice.pd56
-rw-r--r--sfruit/list-split-at-help.pd36
-rw-r--r--sfruit/list-split-at.pd28
-rw-r--r--sfruit/list-swap-help.pd21
-rw-r--r--sfruit/list-swap.pd26
-rw-r--r--sfruit/list-value-extend-help.pd46
-rw-r--r--sfruit/list-value-extend.pd21
-rw-r--r--sfruit/list-value-help.pd25
-rw-r--r--sfruit/list-value.pd27
-rw-r--r--sfruit/list-zip-help.pd58
-rw-r--r--sfruit/list-zip.pd170
-rw-r--r--sfruit/makedollarsym.pd12
-rw-r--r--sfruit/mate.pd33
-rw-r--r--sfruit/menubar.pd44
-rw-r--r--sfruit/midi-coarsefine.pd21
-rw-r--r--sfruit/myifspigot-help.pd20
-rw-r--r--sfruit/myifspigot.pd10
-rw-r--r--sfruit/oscinify.pd8
-rw-r--r--sfruit/oscoutify.pd8
-rw-r--r--sfruit/pausetimer-help.pd21
-rw-r--r--sfruit/pausetimer.pd73
-rw-r--r--sfruit/pcount.pd28
-rw-r--r--sfruit/round-help.pd10
-rw-r--r--sfruit/round.pd19
-rw-r--r--sfruit/rprint-help.pd15
-rw-r--r--sfruit/rprint.pd4
-rw-r--r--sfruit/s2l-explode-help.pd10
-rw-r--r--sfruit/s2l-explode.pd14
-rw-r--r--sfruit/s2l-shorten.pd36
-rw-r--r--sfruit/savebang-help.pd9
-rw-r--r--sfruit/savebang.pd13
-rw-r--r--sfruit/saveclear-help.pd16
-rw-r--r--sfruit/saveclear.pd14
-rw-r--r--sfruit/screendimens.pd19
-rw-r--r--sfruit/sdeeprouteOSC.pd54
-rw-r--r--sfruit/sendmany-osc.pd20
-rw-r--r--sfruit/sendmany.pd20
-rw-r--r--sfruit/setabng-help.pd24
-rw-r--r--sfruit/setabng.pd22
-rw-r--r--sfruit/sft.seqnames.pd31
-rw-r--r--sfruit/sft.sig.pd12
-rw-r--r--sfruit/storebang-help.pd20
-rw-r--r--sfruit/storebang.pd30
-rw-r--r--sfruit/timerr.pd8
-rw-r--r--sfruit/trimdirs-help.pd24
-rw-r--r--sfruit/trimdirs.pd57
-rw-r--r--sfruit/troute-help.pd47
-rw-r--r--sfruit/troute.pd246
-rw-r--r--sfruit/vmetro-help.pd23
-rw-r--r--sfruit/vmetro.pd32
136 files changed, 5115 insertions, 0 deletions
diff --git a/sfruit/SOSCroute-help.pd b/sfruit/SOSCroute-help.pd
new file mode 100644
index 0000000..d51a417
--- /dev/null
+++ b/sfruit/SOSCroute-help.pd
@@ -0,0 +1,30 @@
+#N canvas 707 400 454 373 10;
+#X msg 262 44 /otherthang;
+#X msg 23 18 /mythang 100;
+#X msg 58 39 /otherthang ohyeah;
+#X floatatom 93 186 5 0 0 0 - - -;
+#X symbolatom 136 186 10 0 0 0 - - -;
+#X obj 103 145 list;
+#X obj 224 144 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 71 145 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 290 317 SOSCroute 0.1;
+#X text 290 333 2007 Luke Iannini;
+#X obj 103 101 SOSCroute /mythang;
+#X text 8 215 SOSCroute is the same as OSCroute \, but with one addition:
+it has a right-inlet for changing the route.;
+#X obj 302 101 OSCroute /onlythang;
+#X text 9 262 For 0.1 \, that addition comes with the subtraction of
+using multiple arguments for multiple routes (that's harder : ) ).
+;
+#X msg 245 24 /mythang;
+#X connect 0 0 10 1;
+#X connect 1 0 10 0;
+#X connect 2 0 10 0;
+#X connect 5 0 4 0;
+#X connect 5 0 3 0;
+#X connect 10 0 5 0;
+#X connect 10 0 7 0;
+#X connect 10 1 6 0;
+#X connect 14 0 10 1;
diff --git a/sfruit/SOSCroute.pd b/sfruit/SOSCroute.pd
new file mode 100644
index 0000000..db4ac79
--- /dev/null
+++ b/sfruit/SOSCroute.pd
@@ -0,0 +1,63 @@
+#N canvas 192 314 908 508 10;
+#X obj 301 159 \$0;
+#X obj 267 261 \$0;
+#X obj 43 33 inlet;
+#X obj 43 67 s \$0-inlet;
+#X obj 363 424 s pd-\$0OSCroute;
+#N canvas 279 88 285 163 \$0OSCroute 0;
+#X obj 20 20 r 39957-inlet;
+#X obj 20 50 deeprouteOSC /chptrA/interp-constrained-to-0-1;
+#X obj 20 80 s 39957-outlet1;
+#X obj 160 100 s 39957-outlet2;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 45 240 pd \$0OSCroute;
+#X obj 37 442 outlet;
+#X msg 301 186 obj 20 20 r \$1-inlet;
+#X msg 319 134 clear;
+#X obj 233 45 list append \$1;
+#X obj 391 35 inlet;
+#X obj 391 61 list;
+#X obj 233 77 t b b b a b b;
+#X msg 267 287 obj 20 80 s \$1-outlet1;
+#X obj 37 414 r \$0-outlet1;
+#X obj 192 414 r \$0-outlet2;
+#X obj 192 443 outlet;
+#X msg 233 376 connect 0 0 1 0 \, connect 1 0 2 0 \, connect 1 1 3
+0;
+#X obj 250 321 \$0;
+#X msg 250 347 obj 160 100 s \$1-outlet2;
+#X obj 487 35 loadbang;
+#X obj 487 59 list append \$2;
+#X obj 487 81 sel 0;
+#X obj 485 144 print SOSCroute;
+#X msg 485 111 Sorry - SOSCroute currently only supports one argument!
+;
+#X obj 233 12 initbang;
+#X msg 284 234 obj 20 50 routeOSC \$1;
+#X connect 0 0 7 0;
+#X connect 1 0 13 0;
+#X connect 2 0 3 0;
+#X connect 7 0 4 0;
+#X connect 8 0 4 0;
+#X connect 9 0 12 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 17 0;
+#X connect 12 1 18 0;
+#X connect 12 2 1 0;
+#X connect 12 3 26 0;
+#X connect 12 4 0 0;
+#X connect 12 5 8 0;
+#X connect 13 0 4 0;
+#X connect 14 0 6 0;
+#X connect 15 0 16 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 4 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 1 24 0;
+#X connect 24 0 23 0;
+#X connect 25 0 9 0;
+#X connect 26 0 4 0;
diff --git a/sfruit/audiotis.pd b/sfruit/audiotis.pd
new file mode 100644
index 0000000..bf08310
--- /dev/null
+++ b/sfruit/audiotis.pd
@@ -0,0 +1,40 @@
+#N canvas 615 28 193 280 10;
+#X obj 25 88 snapshot~;
+#X obj 13 18 loadbang;
+#X obj 112 112 hradio 15 1 0 2 \$0nullS \$0nullR empty 0 -8 0 10 -262144
+-4160 -1 0;
+#X obj 25 202 sel 1;
+#X obj 25 237 f;
+#X obj 55 238 + 1;
+#X obj 103 139 hradio 8 1 0 6 \$0nullS \$0nullR empty 0 -8 0 10 -261234
+-1 -1 0;
+#X obj 88 239 mod 6;
+#X obj 123 128 bng 9 250 50 0 \$0nulls \$0nullr empty 17 7 0 10 -260097
+-1 -1;
+#X obj 80 9 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 25 62 noise~;
+#X obj 25 110 change;
+#X obj 13 40 metro 250;
+#X obj 25 132 t b;
+#X obj 25 172 f;
+#X obj 51 172 + 1;
+#X obj 77 172 mod 2;
+#X connect 0 0 11 0;
+#X connect 1 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 7 0 4 1;
+#X connect 9 0 12 0;
+#X connect 10 0 0 0;
+#X connect 11 0 13 0;
+#X connect 12 0 0 0;
+#X connect 13 0 14 0;
+#X connect 14 0 3 0;
+#X connect 14 0 15 0;
+#X connect 14 0 2 0;
+#X connect 15 0 16 0;
+#X connect 16 0 14 1;
+#X coords 0 -1 1 1 54 60 2 100 100;
diff --git a/sfruit/bb-help.pd b/sfruit/bb-help.pd
new file mode 100644
index 0000000..a63a07b
--- /dev/null
+++ b/sfruit/bb-help.pd
@@ -0,0 +1,9 @@
+#N canvas 0 22 450 300 10;
+#X obj 70 115 bb \$0.googly-moogly;
+#X obj 243 181 r \$0.googly-moogly;
+#X obj 243 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 16 20 [bb] - Simply \, a bang with a set send destination.
+Handy for rapid prototyping. Use like [bb receiver-name].;
+#X text 284 274 2008 Luke Iannini;
+#X connect 1 0 2 0;
diff --git a/sfruit/bb.pd b/sfruit/bb.pd
new file mode 100644
index 0000000..9e5fa39
--- /dev/null
+++ b/sfruit/bb.pd
@@ -0,0 +1,8 @@
+#N canvas 984 292 179 107 10;
+#X obj 11 11 bng 15 250 50 0 \$1 \$0null empty 17 7 0 10 -262144 -1
+-1;
+#X obj 11 36 s \$1;
+#X obj 41 10 inlet;
+#X connect 0 0 1 0;
+#X connect 2 0 1 0;
+#X coords 0 -1 1 1 17 17 1 10 10;
diff --git a/sfruit/beat2frac-help.pd b/sfruit/beat2frac-help.pd
new file mode 100644
index 0000000..d61d727
--- /dev/null
+++ b/sfruit/beat2frac-help.pd
@@ -0,0 +1,34 @@
+#N canvas 452 388 367 355 10;
+#X text 7 4 [beat2frac];
+#X text 8 27 Given a beat division \, outputs the length as a fraction
+of a quarter note \, so that multiplied by 60secs/BPM gives length
+in seconds of a beat of that division.;
+#X msg 24 75 1/4;
+#X floatatom 174 180 5 0 0 0 - - -;
+#X msg 174 149 90;
+#X obj 64 255 *;
+#X obj 174 217 expr 60000 / $f1;
+#X floatatom 64 294 8 0 0 0 ms - -;
+#X msg 207 149 120;
+#X msg 43 96 1/4T;
+#X obj 64 146 beat2frac;
+#X obj 64 234 f;
+#X obj 89 234 t b a;
+#X text 251 309 2008 Luke Iannini;
+#X text 251 323 proyekto.net;
+#X text 75 95 also accepts triplets (T or t);
+#X text 211 171 Tempo;
+#X text 97 116 accepts any arbitrary division;
+#X msg 64 117 9/17;
+#X connect 2 0 10 0;
+#X connect 3 0 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 6 0 12 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 5 0;
+#X connect 12 0 11 0;
+#X connect 12 1 5 1;
+#X connect 18 0 10 0;
diff --git a/sfruit/beat2frac.pd b/sfruit/beat2frac.pd
new file mode 100644
index 0000000..546d4ad
--- /dev/null
+++ b/sfruit/beat2frac.pd
@@ -0,0 +1,83 @@
+#N canvas 594 98 330 547 10;
+#X declare -lib zexy -lib list-abs;
+#X obj 95 480 * 4;
+#X obj 95 503 outlet;
+#X obj 27 81 s2l-explode;
+#X obj 27 19 inlet;
+#X obj 163 172 list-splat -1;
+#X obj 27 107 list-split-at /;
+#X msg 84 130 reset;
+#X obj 27 189 list-l2s;
+#X obj 200 198 sel T t;
+#X obj 200 249 s \$0triplet?;
+#X obj 163 277 list append;
+#X obj 163 300 list-l2s;
+#X obj 163 327 atoi;
+#X obj 27 283 atoi;
+#X obj 95 405 f;
+#X obj 95 429 /;
+#X obj 131 364 t b a;
+#X msg 269 222 1;
+#X obj 95 455 * 1;
+#X obj 121 455 r \$0triplet?;
+#X obj 27 47 t a b;
+#X obj 75 48 s \$0reset;
+#X obj 238 277 r \$0reset;
+#X msg 200 221 0.666667;
+#N canvas 933 375 193 260 trigger 1;
+#X obj 115 109 == 0;
+#X obj 90 109 f 0;
+#X msg 105 65 0;
+#X obj 95 188 spigot;
+#X obj 23 189 spigot;
+#X obj 46 56 t a b;
+#X obj 95 216 outlet;
+#X obj 23 216 outlet;
+#X obj 46 27 inlet;
+#X obj 105 27 inlet;
+#X obj 56 163 == 0;
+#X connect 0 0 1 1;
+#X connect 1 0 0 0;
+#X connect 1 0 10 0;
+#X connect 1 0 3 1;
+#X connect 2 0 1 1;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 4 0;
+#X connect 5 0 3 0;
+#X connect 5 1 1 0;
+#X connect 8 0 5 0;
+#X connect 9 0 2 0;
+#X connect 10 0 4 1;
+#X restore 27 155 pd trigger;
+#X obj 178 46 import zexy list-abs;
+#X connect 0 0 1 0;
+#X connect 2 0 5 0;
+#X connect 3 0 20 0;
+#X connect 4 0 10 0;
+#X connect 4 1 8 0;
+#X connect 5 0 24 0;
+#X connect 5 1 6 0;
+#X connect 6 0 24 1;
+#X connect 7 0 13 0;
+#X connect 8 0 23 0;
+#X connect 8 1 23 0;
+#X connect 8 2 17 0;
+#X connect 8 2 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 0 18 0;
+#X connect 16 0 14 0;
+#X connect 16 1 15 1;
+#X connect 17 0 9 0;
+#X connect 18 0 0 0;
+#X connect 19 0 18 1;
+#X connect 20 0 2 0;
+#X connect 20 1 21 0;
+#X connect 22 0 10 1;
+#X connect 23 0 9 0;
+#X connect 24 0 7 0;
+#X connect 24 1 4 0;
diff --git a/sfruit/btn.pd b/sfruit/btn.pd
new file mode 100644
index 0000000..0d9051a
--- /dev/null
+++ b/sfruit/btn.pd
@@ -0,0 +1,47 @@
+#N canvas 361 196 433 465 10;
+#X declare -lib list-abs;
+#X text -117 -87 at size 11 letters are 7px wide;
+#X obj -50 348 hradio 15 1 0 4 \$0radio \$0radioR empty 0 -8 0 10 -262144
+-1 -1 0;
+#X obj -49 349 cnv 13 118 13 empty \$0canvas boobies 3 6 0 11 -233017
+-66577 0;
+#X text -118 -45 subtract difference add half to text xoffset;
+#X text -117 -67 div result + 2 \, then add 1 extra radio;
+#X obj -61 38 s2l-explode;
+#X msg -61 -2 boobies;
+#X obj -61 17 t a a;
+#X obj 65 17 s \$0canvas;
+#X obj -61 59 list-len;
+#X obj -61 80 * 7;
+#X obj -61 124 t a a;
+#X obj -34 146 div 15;
+#X obj -61 102 + 2;
+#X obj -34 168 + 1;
+#X msg 19 242 vis_size \$1 13;
+#X obj 19 201 * 15;
+#X obj 19 222 - 2;
+#X obj 19 263 s \$0canvas;
+#X obj -34 203 t a a;
+#X obj -22 17 prepent label;
+#X msg -34 291 number \$1;
+#X obj -34 314 s \$0radioR;
+#X floatatom 33 159 5 0 0 0 - - -;
+#X obj 185 -61 import list-abs;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 7 1 20 0;
+#X connect 9 0 10 0;
+#X connect 10 0 13 0;
+#X connect 11 1 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 11 0;
+#X connect 14 0 19 0;
+#X connect 15 0 18 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 19 0 21 0;
+#X connect 19 1 16 0;
+#X connect 20 0 8 0;
+#X connect 21 0 22 0;
+#X connect 23 0 16 0;
diff --git a/sfruit/canvasselect.pd b/sfruit/canvasselect.pd
new file mode 100644
index 0000000..1a82d7d
--- /dev/null
+++ b/sfruit/canvasselect.pd
@@ -0,0 +1,42 @@
+#N canvas 0 22 450 300 10;
+#X declare -lib iemguts -lib list-abs;
+#X obj 9 14 import iemguts list-abs;
+#X obj 203 154 list-map;
+#X obj 176 174 list-map;
+#X obj 176 132 t a a;
+#X obj 258 154 - 1;
+#X obj 231 174 + 1;
+#X msg 203 198 mouse \$1 \$2 0 0;
+#X msg 236 105 vis 1 \, editmode 1;
+#X msg 176 219 mouseup \$1 \$2 0;
+#X obj 176 38 inlet;
+#N canvas 35 286 450 300 canvasposition 0;
+#X obj 172 58 inlet;
+#X obj 172 103 outlet;
+#X obj 172 81 canvasposition \$1;
+#X text 84 8 subpatch'd so its argument lines up with sendcanvas's
+(sendcanvas defaults to its immediate parent \, canvas position defaults
+to its grandparent);
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 176 82 pd canvasposition;
+#X obj 176 61 t b;
+#X obj 236 125 sendcanvas \$1;
+#X obj 176 246 sendcanvas \$1;
+#X obj 176 105 t a b;
+#X connect 1 0 6 0;
+#X connect 1 1 4 0;
+#X connect 2 0 8 0;
+#X connect 2 1 5 0;
+#X connect 3 0 2 0;
+#X connect 3 1 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 2 1;
+#X connect 6 0 13 0;
+#X connect 7 0 12 0;
+#X connect 8 0 13 0;
+#X connect 9 0 11 0;
+#X connect 10 0 14 0;
+#X connect 11 0 10 0;
+#X connect 14 0 3 0;
+#X connect 14 1 7 0;
diff --git a/sfruit/color.hsl2rgb.pd b/sfruit/color.hsl2rgb.pd
new file mode 100644
index 0000000..01bf336
--- /dev/null
+++ b/sfruit/color.hsl2rgb.pd
@@ -0,0 +1,161 @@
+#N canvas 662 22 695 753 10;
+#X declare -lib list-abs;
+#X obj 121 143 moses 0.5;
+#X obj 190 79 v \$0h;
+#X obj 224 79 v \$0s;
+#X obj 259 79 v \$0l;
+#X obj 190 40 unpack f f f;
+#X obj 121 110 v \$0l;
+#X obj 181 293 v \$0q;
+#X obj 121 229 *;
+#X obj 148 212 + 1;
+#X obj 148 188 v \$0s;
+#X obj 121 166 t f b;
+#X obj 251 214 *;
+#X obj 256 184 v \$0s;
+#X obj 216 251 -;
+#X obj 216 215 +;
+#X obj 217 160 t f f b;
+#X obj 51 119 v \$0l;
+#X obj 51 144 * 2;
+#X obj 51 168 t f b;
+#X obj 66 194 v \$0q;
+#X obj 51 221 -;
+#X obj 51 244 v \$0p;
+#X obj 34 17 inlet;
+#X obj 34 274 v \$0h;
+#X obj 34 332 + 0.33333;
+#X obj 34 305 t f f f;
+#X obj 73 361 - 0.33333;
+#X obj 34 76 t b b b a;
+#X obj 34 395 pack f f f;
+#X obj 34 424 list-map;
+#X obj 34 505 list-map;
+#X obj 315 482 moses 0.5;
+#X obj 315 515 t b;
+#X obj 315 546 v \$0q;
+#X obj 167 657 +;
+#X obj 182 635 v \$0p;
+#X obj 167 606 t f b;
+#X obj 222 562 v \$0q;
+#X obj 261 562 v \$0p;
+#X obj 167 505 * 6;
+#X obj 167 529 t f b b;
+#X obj 167 482 moses 0.166667;
+#X obj 222 589 -;
+#X obj 167 572 *;
+#X obj 167 683 s \$0colorCalced;
+#X obj 315 571 s \$0colorCalced;
+#X obj 437 482 moses 0.666667;
+#X obj 437 687 +;
+#X obj 452 665 v \$0p;
+#X obj 437 636 t f b;
+#X obj 492 592 v \$0q;
+#X obj 531 592 v \$0p;
+#X obj 437 535 * 6;
+#X obj 437 559 t f b b;
+#X obj 492 619 -;
+#X obj 437 602 *;
+#X obj 437 713 s \$0colorCalced;
+#X obj 437 509 expr 0.666667 - $f1;
+#X obj 582 481 t b;
+#X obj 582 537 s \$0colorCalced;
+#X obj 582 512 v \$0p;
+#X obj 79 459 r \$0colorCalced;
+#X obj 34 717 outlet;
+#N canvas 0 22 182 204 restrict 0;
+#X obj 25 26 inlet;
+#X obj 25 162 outlet;
+#X obj 91 98 div 1;
+#X obj 64 119 -;
+#X obj 64 74 t f f;
+#X obj 25 48 moses 0;
+#X obj 25 97 + 1;
+#X connect 0 0 5 0;
+#X connect 2 0 3 1;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 4 1 2 0;
+#X connect 5 0 6 0;
+#X connect 5 1 4 0;
+#X connect 6 0 1 0;
+#X restore 97 424 pd restrict;
+#X obj 372 52 import list-abs;
+#X connect 0 0 10 0;
+#X connect 0 1 15 0;
+#X connect 4 0 1 0;
+#X connect 4 1 2 0;
+#X connect 4 2 3 0;
+#X connect 5 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 1;
+#X connect 9 0 8 0;
+#X connect 10 0 7 0;
+#X connect 10 1 9 0;
+#X connect 11 0 13 1;
+#X connect 12 0 11 1;
+#X connect 12 0 14 1;
+#X connect 13 0 6 0;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 15 1 11 0;
+#X connect 15 2 12 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 20 0;
+#X connect 18 1 19 0;
+#X connect 19 0 20 1;
+#X connect 20 0 21 0;
+#X connect 22 0 27 0;
+#X connect 23 0 25 0;
+#X connect 24 0 28 0;
+#X connect 25 0 24 0;
+#X connect 25 1 28 1;
+#X connect 25 2 26 0;
+#X connect 26 0 28 2;
+#X connect 27 0 23 0;
+#X connect 27 1 16 0;
+#X connect 27 2 5 0;
+#X connect 27 3 4 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 29 1 63 0;
+#X connect 30 0 62 0;
+#X connect 30 1 41 0;
+#X connect 31 0 32 0;
+#X connect 31 1 46 0;
+#X connect 32 0 33 0;
+#X connect 33 0 45 0;
+#X connect 34 0 44 0;
+#X connect 35 0 34 1;
+#X connect 36 0 34 0;
+#X connect 36 1 35 0;
+#X connect 37 0 42 0;
+#X connect 38 0 42 1;
+#X connect 39 0 40 0;
+#X connect 40 0 43 0;
+#X connect 40 1 37 0;
+#X connect 40 2 38 0;
+#X connect 41 0 39 0;
+#X connect 41 1 31 0;
+#X connect 42 0 43 1;
+#X connect 43 0 36 0;
+#X connect 46 0 57 0;
+#X connect 46 1 58 0;
+#X connect 47 0 56 0;
+#X connect 48 0 47 1;
+#X connect 49 0 47 0;
+#X connect 49 1 48 0;
+#X connect 50 0 54 0;
+#X connect 51 0 54 1;
+#X connect 52 0 53 0;
+#X connect 53 0 55 0;
+#X connect 53 1 50 0;
+#X connect 53 2 51 0;
+#X connect 54 0 55 1;
+#X connect 55 0 49 0;
+#X connect 57 0 52 0;
+#X connect 58 0 60 0;
+#X connect 60 0 59 0;
+#X connect 61 0 30 1;
+#X connect 63 0 29 1;
diff --git a/sfruit/color.random-dark-light18.pd b/sfruit/color.random-dark-light18.pd
new file mode 100644
index 0000000..f19c324
--- /dev/null
+++ b/sfruit/color.random-dark-light18.pd
@@ -0,0 +1,50 @@
+#N canvas 231 105 422 404 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 76 184 pack f f f;
+#X obj 133 47 t b b b;
+#X obj 185 184 pack f f f;
+#X obj 76 365 outlet;
+#X obj 185 365 outlet;
+#X obj 133 21 inlet;
+#X obj 76 85 random 1000;
+#X obj 185 230 list-map;
+#X obj 241 230 / 1000;
+#X obj 76 230 list-map;
+#X obj 132 230 / 1000;
+#X obj 76 267 color.hsl2rgb;
+#X obj 185 267 color.hsl2rgb;
+#X obj 185 321 color.rgb2pd18;
+#X obj 76 321 color.rgb2pd18;
+#X obj 76 122 t a a;
+#X obj 318 85 random 100;
+#X obj 318 147 + 100;
+#X obj 318 115 + 600;
+#X obj 152 100 float_argument \$1 900;
+#X obj 261 25 import list-abs;
+#X connect 0 0 9 0;
+#X connect 1 0 6 0;
+#X connect 1 1 19 0;
+#X connect 1 2 16 0;
+#X connect 2 0 7 0;
+#X connect 5 0 1 0;
+#X connect 6 0 15 0;
+#X connect 7 0 12 0;
+#X connect 7 1 8 0;
+#X connect 8 0 7 1;
+#X connect 9 0 11 0;
+#X connect 9 1 10 0;
+#X connect 10 0 9 1;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 4 0;
+#X connect 14 0 3 0;
+#X connect 15 0 0 0;
+#X connect 15 1 2 0;
+#X connect 16 0 18 0;
+#X connect 17 0 2 2;
+#X connect 18 0 0 2;
+#X connect 18 0 17 0;
+#X connect 19 0 2 1;
+#X connect 19 0 0 1;
diff --git a/sfruit/color.random-dark-light24.pd b/sfruit/color.random-dark-light24.pd
new file mode 100644
index 0000000..746d401
--- /dev/null
+++ b/sfruit/color.random-dark-light24.pd
@@ -0,0 +1,50 @@
+#N canvas 231 105 359 415 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 76 184 pack f f f;
+#X obj 76 57 t b b b;
+#X obj 185 184 pack f f f;
+#X obj 76 365 outlet;
+#X obj 185 365 outlet;
+#X obj 76 21 inlet;
+#X obj 76 85 random 1000;
+#X obj 152 85 random 1000;
+#X obj 228 83 random 200;
+#X obj 228 116 + 600;
+#X obj 242 152 + 200;
+#X obj 185 230 list-map;
+#X obj 241 230 / 1000;
+#X obj 76 230 list-map;
+#X obj 132 230 / 1000;
+#X obj 76 267 color.hsl2rgb;
+#X obj 76 321 color.rgb2pd24;
+#X obj 185 321 color.rgb2pd24;
+#X obj 185 267 color.hsl2rgb;
+#X obj 76 122 t a a;
+#X obj 192 21 import list-abs;
+#X connect 0 0 13 0;
+#X connect 1 0 6 0;
+#X connect 1 1 7 0;
+#X connect 1 2 8 0;
+#X connect 2 0 11 0;
+#X connect 5 0 1 0;
+#X connect 6 0 19 0;
+#X connect 7 0 0 1;
+#X connect 7 0 2 1;
+#X connect 8 0 9 0;
+#X connect 9 0 0 2;
+#X connect 9 0 10 0;
+#X connect 10 0 2 2;
+#X connect 11 0 18 0;
+#X connect 11 1 12 0;
+#X connect 12 0 11 1;
+#X connect 13 0 15 0;
+#X connect 13 1 14 0;
+#X connect 14 0 13 1;
+#X connect 15 0 16 0;
+#X connect 16 0 3 0;
+#X connect 17 0 4 0;
+#X connect 18 0 17 0;
+#X connect 19 0 0 0;
+#X connect 19 1 2 0;
diff --git a/sfruit/color.rgb2pd18.pd b/sfruit/color.rgb2pd18.pd
new file mode 100644
index 0000000..e5c1809
--- /dev/null
+++ b/sfruit/color.rgb2pd18.pd
@@ -0,0 +1,18 @@
+#N canvas 373 62 364 212 10;
+#X obj 46 77 unpack f f f;
+#X obj 46 48 inlet;
+#X obj 46 173 outlet;
+#X obj 46 109 * 63;
+#X obj 155 109 * 63;
+#X obj 265 109 * 63;
+#X text 296 110 2^6;
+#X obj 46 141 expr -4096 * $i1 - 64 * $i2 - $i3 -1 \;;
+#X text 80 156 2^12 (18-6);
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 0 2 5 0;
+#X connect 1 0 0 0;
+#X connect 3 0 7 0;
+#X connect 4 0 7 1;
+#X connect 5 0 7 2;
+#X connect 7 0 2 0;
diff --git a/sfruit/color.rgb2pd24.pd b/sfruit/color.rgb2pd24.pd
new file mode 100644
index 0000000..d3b25c6
--- /dev/null
+++ b/sfruit/color.rgb2pd24.pd
@@ -0,0 +1,27 @@
+#N canvas 553 56 206 305 10;
+#X obj 43 76 unpack f f f;
+#X obj 43 150 * -65536;
+#X obj 92 104 * -1;
+#X obj 43 197 +;
+#X obj 77 180 +;
+#X obj 43 227 - 1;
+#X obj 43 260 outlet;
+#X obj 43 11 inlet;
+#X obj 77 129 * -256;
+#X obj 43 38 list-map;
+#X obj 107 27 * 255;
+#X obj 107 49 int;
+#X connect 0 0 1 0;
+#X connect 0 1 8 0;
+#X connect 0 2 2 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 1;
+#X connect 3 0 5 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 7 0 9 0;
+#X connect 8 0 4 0;
+#X connect 9 0 0 0;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 9 1;
diff --git a/sfruit/color.rgbset-help.pd b/sfruit/color.rgbset-help.pd
new file mode 100644
index 0000000..95cea80
--- /dev/null
+++ b/sfruit/color.rgbset-help.pd
@@ -0,0 +1,19 @@
+#N canvas 0 22 483 336 10;
+#X obj 59 101 color.rgbset;
+#X msg 128 228;
+#X msg 59 68 245 22 201;
+#X text 57 50 Takes a triplet of 0-255 RGB values to set;
+#X text 139 102 Orange bang re-outputs current values;
+#X text 140 116 Radio-dial selects back \, front or label;
+#X text 6 9 [color.rgbset] - Easily work with and set colors for GUI
+objects;
+#X obj 59 258 hradio 20 1 0 2 empty empty empty 0 -8 0 10 -262144 -1
+-1 0;
+#X text 141 181 right outlet makes a "color # # #" message (connect
+a message box to it) that you can cut and paste to dynamically set
+your GUI colors;
+#X text 58 284 Left outlet connects directly to GUI objects to change
+their colors;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 2 0 0 0;
diff --git a/sfruit/color.rgbset.pd b/sfruit/color.rgbset.pd
new file mode 100644
index 0000000..a93382f
--- /dev/null
+++ b/sfruit/color.rgbset.pd
@@ -0,0 +1,156 @@
+#N canvas 185 89 559 602 10;
+#X obj 30 173 cnv 15 18 15 empty \$0dispcol1 empty 20 12 0 14 -128992
+-262144 0;
+#X obj 218 73 * -65536;
+#X obj 281 73 * -256;
+#X obj 351 73 * -1;
+#X obj 351 98 t b f;
+#X obj 281 130 +;
+#X obj 281 161 t b f;
+#X obj 282 194 +;
+#X obj 282 221 - 1;
+#X obj 282 252 list prepend;
+#X obj 282 276 list trim;
+#X obj 282 301 route 0 1 2;
+#X obj 282 388 f;
+#X obj 310 388 f;
+#X obj 338 388 f;
+#X obj 351 336 t b b f;
+#X obj 287 336 t b f b;
+#X obj 225 337 t f b b;
+#X obj 279 473 pack f f f;
+#X obj 279 500 list prepend color;
+#X obj 30 106 vsl 15 60 0 255 0 0 \$0red \$0redR empty 0 -8 0 8 -258049
+-1 -1 2938 1;
+#X obj 50 106 vsl 15 60 0 255 0 0 \$0green \$0greenR empty 0 -8 0 8
+-4033 -1 -1 2938 1;
+#X obj 70 106 vsl 15 60 0 255 0 0 \$0blue \$0blueR empty 0 -8 0 8 -64
+-1 -1 2938 1;
+#X obj 279 526 list trim;
+#X obj 52 90 hradio 10 1 0 3 \$0layer \$0layerr back 0 -4 0 8 -1 -262144
+-1 0;
+#X obj 361 224 r \$0layer;
+#X obj 218 47 int;
+#X obj 281 47 int;
+#X obj 351 48 int;
+#X obj 218 21 r \$0red;
+#X obj 281 21 r \$0green;
+#X obj 351 21 r \$0blue;
+#X obj 30 85 bng 15 250 50 0 \$0nullS \$0nullR empty 0 -6 0 8 -260033
+-1 -1;
+#X obj 35 288 r \$0layer;
+#X obj 35 313 sel 0 1 2;
+#X msg 35 396 back;
+#X msg 55 376 front;
+#X msg 73 356 label;
+#X obj 36 434 list prepend label;
+#X obj 36 478 s \$0layerr;
+#X obj 36 457 list trim;
+#X obj 279 552 outlet;
+#X msg 205 421 color \$1;
+#X msg 294 422 color \$1;
+#X obj 205 442 s \$0dispcol1;
+#X obj 295 442 s \$0dispcol2;
+#X msg 384 422 color \$1;
+#X obj 385 442 s \$0dispcol3;
+#X obj 49 173 cnv 15 18 15 empty \$0dispcol2 empty 20 12 0 14 -1 -262144
+0;
+#X obj 68 173 cnv 15 18 15 empty \$0dispcol3 empty 20 12 0 14 -1 -262144
+0;
+#X obj 421 500 list prepend set;
+#X obj 421 526 list trim;
+#X obj 421 552 outlet;
+#N canvas 1016 679 458 308 init 0;
+#X obj 130 260 s \$0layer;
+#X msg 100 207 0;
+#X msg 130 207 1;
+#X msg 161 207 2;
+#X msg 232 191 0;
+#X obj 232 226 s \$0redR;
+#X obj 232 244 s \$0greenR;
+#X obj 232 262 s \$0blueR;
+#X msg 202 191 127;
+#X obj 89 57 t b b b b b b;
+#X obj 89 33 loadbang;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 4 0 7 0;
+#X connect 8 0 5 0;
+#X connect 8 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 9 1 1 0;
+#X connect 9 2 4 0;
+#X connect 9 3 2 0;
+#X connect 9 4 4 0;
+#X connect 9 5 3 0;
+#X connect 10 0 9 0;
+#X restore 81 536 pd init;
+#X obj 30 26 inlet;
+#X obj 30 51 unpack f f f;
+#X connect 1 0 7 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 4 1 5 1;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 1 7 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 17 0;
+#X connect 11 1 16 0;
+#X connect 11 2 15 0;
+#X connect 12 0 18 0;
+#X connect 12 0 42 0;
+#X connect 13 0 18 1;
+#X connect 13 0 43 0;
+#X connect 14 0 18 2;
+#X connect 14 0 46 0;
+#X connect 15 0 12 0;
+#X connect 15 1 13 0;
+#X connect 15 2 14 0;
+#X connect 16 0 12 0;
+#X connect 16 1 13 0;
+#X connect 16 2 14 0;
+#X connect 17 0 12 0;
+#X connect 17 1 13 0;
+#X connect 17 2 14 0;
+#X connect 18 0 19 0;
+#X connect 19 0 23 0;
+#X connect 19 0 50 0;
+#X connect 23 0 41 0;
+#X connect 25 0 9 1;
+#X connect 26 0 1 0;
+#X connect 27 0 2 0;
+#X connect 28 0 3 0;
+#X connect 29 0 26 0;
+#X connect 30 0 27 0;
+#X connect 31 0 28 0;
+#X connect 32 0 20 0;
+#X connect 32 0 21 0;
+#X connect 32 0 22 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 34 1 36 0;
+#X connect 34 2 37 0;
+#X connect 35 0 38 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 0;
+#X connect 38 0 40 0;
+#X connect 40 0 39 0;
+#X connect 42 0 44 0;
+#X connect 43 0 45 0;
+#X connect 46 0 47 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 54 0 55 0;
+#X connect 55 0 20 0;
+#X connect 55 1 21 0;
+#X connect 55 2 22 0;
+#X coords 0 -1 1 1 56 109 2 30 80;
diff --git a/sfruit/countseq-help.pd b/sfruit/countseq-help.pd
new file mode 100644
index 0000000..5cad812
--- /dev/null
+++ b/sfruit/countseq-help.pd
@@ -0,0 +1,29 @@
+#N canvas 897 724 526 351 10;
+#X floatatom 136 196 5 0 0 0 - - -;
+#X obj 25 295 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 62 261 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 232 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 25 140 metro 250;
+#X obj 25 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X text 21 9 countseq - count beats in a measure with accents on specific
+notes;
+#X text 21 41 First arg - notes per measure.;
+#X text 22 64 Rest of args - beat numbers you'd like a separate bang
+for (2nd outlet) or an "accented" bang (3rd outlet). Prefix "accented"
+beats with the letter "a" \, like "a4";
+#X text 141 291 Coming soon - a helper object to generate lists of
+common beat definitions \, like "16 beats with separate bangs every
+4 and accented bangs every 8";
+#X text 170 198 index;
+#X text 166 130 All counts start at 1;
+#X obj 25 174 countseq 16 5 a9 13;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 12 0 1 0;
+#X connect 12 1 2 0;
+#X connect 12 2 3 0;
+#X connect 12 3 0 0;
diff --git a/sfruit/countseq.pd b/sfruit/countseq.pd
new file mode 100644
index 0000000..b5d32b5
--- /dev/null
+++ b/sfruit/countseq.pd
@@ -0,0 +1,105 @@
+#N canvas 974 303 373 390 10;
+#X declare -lib list-abs -lib iemlib;
+#X obj 26 159 f;
+#X obj 81 83 sel restart;
+#X msg 81 108 0;
+#X obj 112 108 t b;
+#X obj 28 10 inlet;
+#X obj 163 40 inlet;
+#X obj 130 159 mod \$1;
+#X obj 232 147 dollarg;
+#X obj 232 124 loadbang;
+#X obj 232 171 list split 1;
+#X obj 88 285 list-find;
+#N canvas 712 115 568 364 split-symbols 0;
+#X obj 160 159 route symbol float;
+#X obj 84 159 list-filter;
+#X obj 84 53 inlet;
+#X obj 84 77 t a a;
+#X msg 160 182 0;
+#X msg 265 184 0;
+#X msg 212 183 1;
+#X obj 383 158 route symbol float;
+#X obj 307 158 list-filter;
+#X msg 488 183 0;
+#X msg 383 181 1;
+#X msg 435 182 0;
+#X obj 307 288 outlet;
+#X obj 84 249 outlet;
+#X obj 307 252 list-map;
+#X obj 384 233 s2l-explode;
+#X obj 384 253 list split 1;
+#X obj 418 274 list-l2s;
+#X obj 418 295 atoi;
+#X text 349 312 remove leading "accent" identifier;
+#X connect 0 0 4 0;
+#X connect 0 1 6 0;
+#X connect 0 2 5 0;
+#X connect 1 0 13 0;
+#X connect 1 1 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 1 8 0;
+#X connect 4 0 1 1;
+#X connect 5 0 1 1;
+#X connect 6 0 1 1;
+#X connect 7 0 10 0;
+#X connect 7 1 11 0;
+#X connect 7 2 9 0;
+#X connect 8 0 14 0;
+#X connect 8 1 7 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 1;
+#X connect 11 0 8 1;
+#X connect 14 0 12 0;
+#X connect 14 1 15 0;
+#X connect 15 0 16 0;
+#X connect 16 1 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 14 1;
+#X restore 208 199 pd split-symbols;
+#X obj 159 285 list-find;
+#X obj 26 194 t a a a;
+#X obj 26 312 sel 0;
+#X obj 26 354 outlet;
+#X obj 88 354 outlet;
+#X obj 159 354 outlet;
+#X obj 208 40 inlet;
+#X obj 58 159 + 1;
+#X obj 282 331 + 1;
+#X obj 282 354 outlet;
+#X obj 210 255 list-apply - 1;
+#X obj 139 228 list-apply - 1;
+#X obj 80 63 list;
+#X obj 28 32 route bang seek;
+#X obj 180 9 import list-abs iemlib;
+#X connect 0 0 13 0;
+#X connect 0 0 19 0;
+#X connect 0 0 20 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 2 0 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 25 0;
+#X connect 5 0 6 1;
+#X connect 6 0 0 1;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 1 11 0;
+#X connect 10 0 16 0;
+#X connect 11 0 23 0;
+#X connect 11 1 22 0;
+#X connect 12 0 17 0;
+#X connect 13 0 14 0;
+#X connect 13 1 10 0;
+#X connect 13 2 12 0;
+#X connect 14 0 15 0;
+#X connect 18 0 11 0;
+#X connect 19 0 6 0;
+#X connect 20 0 21 0;
+#X connect 22 0 12 1;
+#X connect 23 0 10 1;
+#X connect 24 0 1 0;
+#X connect 25 0 0 0;
+#X connect 25 1 0 1;
+#X connect 25 2 24 0;
diff --git a/sfruit/cpugraph-help.pd b/sfruit/cpugraph-help.pd
new file mode 100644
index 0000000..fbef5e8
--- /dev/null
+++ b/sfruit/cpugraph-help.pd
@@ -0,0 +1,6 @@
+#N canvas 0 22 370 270 10;
+#X obj 115 94 cpugraph;
+#X text 16 11 [cpugraph] - A nice GOP widget for monitoring CPU usage.
+Use the "Mark" button to note down the current value to compare to
+later.;
+#X text 231 237 2008 Luke Iannini;
diff --git a/sfruit/cpugraph.pd b/sfruit/cpugraph.pd
new file mode 100644
index 0000000..c95efa2
--- /dev/null
+++ b/sfruit/cpugraph.pd
@@ -0,0 +1,95 @@
+#N canvas 172 176 741 586 10;
+#X declare -lib maxlib;
+#X obj 52 260 cnv 15 100 50 empty \$0cpucnv empty 20 12 0 14 -225271
+-262144 0;
+#X floatatom 104 312 4 0 0 1 Now #0now #0nullS;
+#X obj 288 163 cputime;
+#X obj 288 53 loadbang;
+#X msg 288 81 1;
+#X obj 288 135 t b b;
+#X obj 288 223 * 0.1;
+#X obj 288 192 int;
+#X floatatom 52 312 4 0 0 1 Avg #0avg #0nullS;
+#X obj 349 240 average 10;
+#X obj 110 243 bng 15 250 50 0 \$0markbang \$0nullR empty 17 7 0 10
+-261682 -1 -1;
+#X obj 96 176 f;
+#X obj 96 205 print CPU;
+#N canvas 0 22 454 304 (subpatch) 0;
+#X array \$0cpu 100 float 0;
+#X coords 0 1 99 0 100 50 1;
+#X restore 52 260 graph;
+#X obj 288 262 * 0.01;
+#X obj 288 345 until;
+#X obj 288 472 tabread \$0cpu;
+#X obj 288 534 tabwrite \$0cpu;
+#X obj 288 379 f;
+#X obj 321 379 + 1;
+#X obj 369 443 - 1;
+#X obj 288 426 t a a;
+#X obj 439 389 t b a;
+#X obj 369 325 f;
+#X obj 288 294 t b b a;
+#X msg 328 325 1;
+#X obj 288 401 sel 100;
+#X msg 288 325 100;
+#X obj 476 243 sel 0 1;
+#X msg 476 273 color 6;
+#X msg 527 273 color 13;
+#X obj 476 307 s \$0cpucnv;
+#X obj 476 219 change;
+#X obj 476 196 > 99;
+#X obj 288 107 metro 500;
+#X floatatom 52 242 4 0 0 1 Mark> #0mark #0nullS;
+#X obj 239 223 s \$0now;
+#X obj 349 273 s \$0avg;
+#X obj 111 154 r \$0avg;
+#X obj 121 176 s \$0mark;
+#X obj 26 155 r \$0markbang;
+#X obj 288 501 min 1;
+#X msg 377 397 100;
+#X obj 436 72 import maxlib;
+#X connect 2 0 7 0;
+#X connect 3 0 4 0;
+#X connect 4 0 34 0;
+#X connect 5 0 2 0;
+#X connect 5 1 2 1;
+#X connect 6 0 9 0;
+#X connect 6 0 14 0;
+#X connect 6 0 33 0;
+#X connect 6 0 36 0;
+#X connect 7 0 6 0;
+#X connect 9 0 37 0;
+#X connect 11 0 12 0;
+#X connect 11 0 39 0;
+#X connect 14 0 24 0;
+#X connect 15 0 18 0;
+#X connect 16 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 26 0;
+#X connect 19 0 18 1;
+#X connect 20 0 17 1;
+#X connect 21 0 16 0;
+#X connect 21 1 20 0;
+#X connect 22 0 23 0;
+#X connect 22 1 17 1;
+#X connect 23 0 41 0;
+#X connect 24 0 27 0;
+#X connect 24 1 25 0;
+#X connect 24 2 23 1;
+#X connect 25 0 18 1;
+#X connect 26 0 42 0;
+#X connect 26 1 21 0;
+#X connect 27 0 15 0;
+#X connect 28 0 29 0;
+#X connect 28 1 30 0;
+#X connect 29 0 31 0;
+#X connect 30 0 31 0;
+#X connect 32 0 28 0;
+#X connect 33 0 32 0;
+#X connect 34 0 5 0;
+#X connect 38 0 11 1;
+#X connect 40 0 11 0;
+#X connect 41 0 17 0;
+#X connect 42 0 22 0;
+#X coords 0 -1 1 1 104 100 1 50 230;
diff --git a/sfruit/deeprouteOSC.pd b/sfruit/deeprouteOSC.pd
new file mode 100644
index 0000000..f59a382
--- /dev/null
+++ b/sfruit/deeprouteOSC.pd
@@ -0,0 +1,96 @@
+#N canvas 368 88 344 571 10;
+#X declare -lib zexy -lib list-abs -lib mrpeach;
+#X obj 207 43 namecanvas \$0self;
+#N canvas 208 132 808 593 constructor 0;
+#X obj 401 113 symbol2list /;
+#X obj 440 364 s2l-explode;
+#X obj 440 385 list prepend /;
+#X obj 440 406 list-l2s;
+#X obj 377 466 list append;
+#X obj 377 533 s \$0self;
+#X obj 377 364 f;
+#X obj 401 242 list split 1;
+#X obj 401 209 list;
+#X obj 401 175 t b a;
+#X obj 401 283 t b b a;
+#X obj 358 243 b;
+#X obj 377 415 * 30;
+#X obj 403 364 + 1;
+#X obj 259 460 pack f f;
+#X msg 259 489 connect \$1 0 \$2 0;
+#X msg 496 243 0;
+#X msg 482 156 obj 30 20 inlet;
+#X obj 401 139 t a b b;
+#X obj 482 179 s \$0self;
+#X obj 590 460 + 30;
+#X obj 590 439 f;
+#X msg 590 489 obj 30 \$1 outlet;
+#X obj 390 442 s \$0y;
+#X obj 605 418 r \$0y;
+#X obj 335 398 + 2;
+#X obj 227 335 r \$0out;
+#X obj 227 360 f;
+#X obj 259 407 t a a;
+#X obj 259 381 t a a;
+#X obj 227 381 + 1;
+#X obj 563 360 t b b;
+#X obj 563 386 s \$0out;
+#X obj 401 46 list append \$1;
+#X obj 401 69 sel 0;
+#X obj 401 23 initbang;
+#X msg 319 86 symbol /null;
+#X obj 553 20 import zexy list-abs mrpeach;
+#X msg 377 489 obj 30 \$1 routeOSC \$2;
+#X obj 259 433 + 2;
+#X obj 292 433 + 3;
+#X connect 0 0 18 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 38 0;
+#X connect 6 0 13 0;
+#X connect 6 0 27 1;
+#X connect 6 0 29 0;
+#X connect 7 0 10 0;
+#X connect 7 1 8 1;
+#X connect 7 2 31 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 10 1 6 0;
+#X connect 10 2 1 0;
+#X connect 11 0 8 0;
+#X connect 12 0 4 0;
+#X connect 12 0 23 0;
+#X connect 13 0 6 1;
+#X connect 14 0 15 0;
+#X connect 15 0 5 0;
+#X connect 16 0 6 1;
+#X connect 17 0 19 0;
+#X connect 18 0 9 0;
+#X connect 18 1 16 0;
+#X connect 18 2 17 0;
+#X connect 20 0 22 0;
+#X connect 21 0 20 0;
+#X connect 22 0 5 0;
+#X connect 24 0 21 1;
+#X connect 25 0 12 0;
+#X connect 26 0 27 0;
+#X connect 27 0 30 0;
+#X connect 28 0 39 0;
+#X connect 28 1 40 0;
+#X connect 29 0 28 0;
+#X connect 29 1 25 0;
+#X connect 30 0 28 0;
+#X connect 31 0 32 0;
+#X connect 31 1 21 0;
+#X connect 33 0 34 0;
+#X connect 34 0 36 0;
+#X connect 34 1 0 0;
+#X connect 35 0 33 0;
+#X connect 36 0 0 0;
+#X connect 38 0 5 0;
+#X connect 39 0 14 0;
+#X connect 40 0 14 1;
+#X restore 207 21 pd constructor;
diff --git a/sfruit/dialog.under-cursor-help.pd b/sfruit/dialog.under-cursor-help.pd
new file mode 100644
index 0000000..3d410c8
--- /dev/null
+++ b/sfruit/dialog.under-cursor-help.pd
@@ -0,0 +1,17 @@
+#N canvas 677 392 419 249 10;
+#X text 4 8 [dialog.under-cursor] constructs the appropriate message
+to spawn a pd-window under the cursor's current position.;
+#X text 5 46 Required arguments are the dimensions of the window you'd
+like to spawn (a necessity require by the message to Pd);
+#X obj 45 173 dialog.under-cursor 330 115;
+#X obj 45 197 s pd-\$0.my-dialog;
+#N canvas 563 580 330 115 \$0.my-dialog 0;
+#X text 45 22 Hallo there!;
+#X restore 287 193 pd \$0.my-dialog;
+#X obj 45 151 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 6 85 The window will automatically stay within your screen's
+boundaries.;
+#X text 273 220 2008 Luke Iannini;
+#X connect 2 0 3 0;
+#X connect 5 0 2 0;
diff --git a/sfruit/dialog.under-cursor.pd b/sfruit/dialog.under-cursor.pd
new file mode 100644
index 0000000..4633d5a
--- /dev/null
+++ b/sfruit/dialog.under-cursor.pd
@@ -0,0 +1,63 @@
+#N canvas 518 38 492 494 10;
+#X declare -lib toxy;
+#X declare -lib hcs;
+#X obj 38 10 inlet;
+#X obj 38 53 cursor;
+#X obj 38 74 route motion;
+#X obj 38 449 outlet;
+#X obj 38 96 unpack f f;
+#X obj 38 277 pack f f;
+#X obj 111 195 + 10;
+#X text 174 81 1/2 window width;
+#X text 162 299 window dimens;
+#X msg 38 328 relocate \$1x\$2+0+0 0x0+\$3+\$4;
+#X obj 38 303 list prepend \$1 \$2;
+#X obj 148 93 / 2;
+#X obj 38 252 clip 0 1140;
+#X obj 262 21 loadbang;
+#X obj 38 176 -;
+#X obj 148 70 \$1;
+#X obj 238 159 - \$1;
+#X obj 278 180 - \$2;
+#X obj 38 202 int;
+#X obj 38 355 t b a b;
+#X msg 77 380 vis 0;
+#X obj 38 398 del 10;
+#X msg 38 420 vis 1;
+#X obj 111 252 clip 20 650;
+#X obj 278 201 - 100;
+#X text 265 222 Dock/Menubar/Taskbar/Windowtitlebar;
+#X obj 262 106 screendimens;
+#X obj 262 127 unpack f f;
+#X obj 38 31 t b;
+#X obj 351 21 import hcs;
+#X connect 0 0 28 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 14 0;
+#X connect 4 1 6 0;
+#X connect 5 0 10 0;
+#X connect 6 0 23 0;
+#X connect 9 0 19 0;
+#X connect 10 0 9 0;
+#X connect 11 0 14 1;
+#X connect 12 0 5 0;
+#X connect 13 0 15 0;
+#X connect 13 0 26 0;
+#X connect 14 0 18 0;
+#X connect 15 0 11 0;
+#X connect 16 0 12 2;
+#X connect 17 0 24 0;
+#X connect 18 0 12 0;
+#X connect 19 0 21 0;
+#X connect 19 1 3 0;
+#X connect 19 2 20 0;
+#X connect 20 0 3 0;
+#X connect 21 0 22 0;
+#X connect 22 0 3 0;
+#X connect 23 0 5 1;
+#X connect 24 0 23 2;
+#X connect 26 0 27 0;
+#X connect 27 0 16 0;
+#X connect 27 1 17 0;
+#X connect 28 0 1 0;
diff --git a/sfruit/dialog.yes-no.pd b/sfruit/dialog.yes-no.pd
new file mode 100644
index 0000000..409fe01
--- /dev/null
+++ b/sfruit/dialog.yes-no.pd
@@ -0,0 +1,51 @@
+#N canvas 266 442 628 346 10;
+#X declare -lib toxy;
+#X declare -lib hcs;
+#X declare -lib list-abs;
+#N canvas 781 650 305 105 \$0.dialog-box 0;
+#X obj 2 2 cnv 15 300 30 empty \$0.line1 Are_you_sure? 20 12 0 14 -262144
+-1 0;
+#X obj 2 33 cnv 15 300 30 empty \$0.line2 empty 20 12 0 14 -262144
+-1 0;
+#X obj 74 71 bng 30 250 50 0 \$0.yes-s \$0.yes-r Yes. 35 15 0 10 -4032
+-1 -1;
+#X obj 184 71 bng 30 250 50 0 \$0.no-s \$0.no-r No. 35 15 0 10 -86853
+-1 -1;
+#X restore 49 308 pd \$0.dialog-box;
+#X obj 31 22 inlet;
+#X obj 33 159 r \$0.yes-s;
+#X obj 73 179 r \$0.no-s;
+#X msg 33 203 1;
+#X msg 73 203 vis 0;
+#X obj 33 252 outlet;
+#X obj 344 40 loadbang;
+#X obj 344 87 s2l-explode;
+#X obj 344 113 list split 30;
+#X obj 344 223 list-l2s;
+#X obj 381 144 list-l2s;
+#X obj 344 248 prepent label;
+#X obj 381 165 prepent label;
+#X obj 344 274 s \$0.line1;
+#X obj 381 187 s \$0.line2;
+#X obj 73 225 s pd-\$0.dialog-box;
+#X obj 31 67 s pd-\$0.dialog-box;
+#X obj 31 45 dialog.under-cursor 305 105 1440 900;
+#X obj 344 62 list-onearg \$1 Are_you_sure?;
+#X obj 481 22 import list-abs;
+#X connect 1 0 18 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 16 0;
+#X connect 7 0 19 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 9 2 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 8 0;
diff --git a/sfruit/donecanvasdialog-help.pd b/sfruit/donecanvasdialog-help.pd
new file mode 100644
index 0000000..4795b26
--- /dev/null
+++ b/sfruit/donecanvasdialog-help.pd
@@ -0,0 +1,4 @@
+#N canvas 576 113 450 300 10;
+#X msg 57 145 donecanvasdialog 1 -1 1 0 -1 1 1 85 60 100 100;
+#X msg 57 105 donecanvasdialog xUnits yUnits GOP(1)GOPandHide(2) xFrom
+yFrom xTo yTo xSize ySize xMargin yMargin;
diff --git a/sfruit/dotrouteOSC.pd b/sfruit/dotrouteOSC.pd
new file mode 100644
index 0000000..7aacea8
--- /dev/null
+++ b/sfruit/dotrouteOSC.pd
@@ -0,0 +1,20 @@
+#N canvas 0 22 350 222 10;
+#X declare -lib zexy;
+#X obj 123 68 loadbang;
+#X obj 123 88 list append \$1;
+#X obj 48 190 outlet;
+#X obj 48 169 sdeeprouteOSC;
+#X msg 123 148 /\$1;
+#X obj 48 144 inlet;
+#X obj 94 47 inlet;
+#X obj 123 128 list2symbol /;
+#X obj 123 108 symbol2list .;
+#X obj 193 35 import zexy;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 7 0;
diff --git a/sfruit/ds-begin-help.pd b/sfruit/ds-begin-help.pd
new file mode 100644
index 0000000..b17158d
--- /dev/null
+++ b/sfruit/ds-begin-help.pd
@@ -0,0 +1,41 @@
+#N struct 1631datatemplate float x float y;
+#N canvas 544 342 450 300 10;
+#X obj 127 140 ds-begin pd-\$0mydata;
+#N canvas 0 22 450 300 \$0datatemplate 0;
+#X obj 99 58 drawpolygon 90 3 0 0 0 10 10 10 10 0 0 0;
+#X obj 112 95 loadbang;
+#X obj 112 124 t b b b;
+#X msg 188 127 clear;
+#X obj 188 149 s pd-\$0mydata;
+#X msg 112 182 0 0 \, 20 0 \, 40 0;
+#X obj 131 213 ds-begin pd-\$0mydata;
+#X obj 90 247 append \$0datatemplate x y;
+#X obj 94 96 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 32 struct \$0datatemplate float x float y;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 1 6 0;
+#X connect 2 2 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 2;
+#X connect 8 0 2 0;
+#X restore 293 88 pd \$0datatemplate;
+#N canvas 3 345 126 108 \$0mydata 1;
+#X scalar 1631datatemplate 0 0 \;;
+#X scalar 1631datatemplate 20 0 \;;
+#X scalar 1631datatemplate 40 0 \;;
+#X restore 293 110 pd \$0mydata;
+#X obj 50 177 append \$0datatemplate x y;
+#X obj 50 99 t b b;
+#X obj 50 68 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 50 140 20 20;
+#X text 8 5 Convenience abstraction for the common task of outputting
+the head of a data structure subpatch.;
+#X connect 0 0 3 2;
+#X connect 4 0 6 0;
+#X connect 4 1 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
diff --git a/sfruit/ds-begin.pd b/sfruit/ds-begin.pd
new file mode 100644
index 0000000..d2322ff
--- /dev/null
+++ b/sfruit/ds-begin.pd
@@ -0,0 +1,13 @@
+#N canvas 339 80 224 198 10;
+#X obj 48 65 list append traverse \$1;
+#X obj 48 88 list trim;
+#X obj 21 13 inlet;
+#X obj 21 36 t b b;
+#X obj 21 156 outlet;
+#X obj 21 120 pointer;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 3 1 0 0;
+#X connect 5 0 4 0;
diff --git a/sfruit/ds-dump-array.pd b/sfruit/ds-dump-array.pd
new file mode 100644
index 0000000..f27db40
--- /dev/null
+++ b/sfruit/ds-dump-array.pd
@@ -0,0 +1,20 @@
+#N canvas 1004 477 263 225 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 81 29 inlet;
+#X obj 81 78 getsize \$1 \$2;
+#X obj 81 50 t p p;
+#X obj 81 156 element \$1 \$2;
+#X obj 81 185 outlet;
+#X obj 81 106 list-range;
+#X obj 81 131 list-drip;
+#X obj 132 185 outlet;
+#X obj 140 33 import list-abs;
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 1;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 6 1 7 0;
diff --git a/sfruit/ds-dump-help.pd b/sfruit/ds-dump-help.pd
new file mode 100644
index 0000000..aa8d298
--- /dev/null
+++ b/sfruit/ds-dump-help.pd
@@ -0,0 +1,58 @@
+#N struct datatemplate float x float y;
+#N canvas 471 25 394 302 10;
+#X text 12 13 Outputs all (input bang) or first n (input float n) pointers
+in a subpatch. Takes a subpatch as its argument.;
+#X obj 55 136 ds-dump pd-\$0data;
+#X obj 55 86 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 13 48 Right outlet bangs at end of data.;
+#X obj 55 174 get datatemplate x;
+#N canvas 450 363 128 100 \$0data 1;
+#X scalar datatemplate 10 10 \;;
+#X scalar datatemplate 20 20 \;;
+#X scalar datatemplate 30 30 \;;
+#X scalar datatemplate 40 40 \;;
+#X restore 271 116 pd \$0data;
+#N canvas 10 355 450 300 datatemplate 0;
+#X msg 190 198 traverse pd-\$1data \, bang;
+#X obj 190 224 pointer;
+#X obj 163 128 loadbang;
+#X obj 79 279 append datatemplate x y;
+#X msg 17 208 10 10 \, 20 20 \, 30 30 \, 40 40;
+#X obj 48 18 struct datatemplate float x float y;
+#X obj 48 41 drawpolygon 0 3 0 0 0 10 10 10 10 0 0 0;
+#X obj 144 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 190 175 \$0;
+#X obj 163 153 t b b b;
+#X msg 229 153 clear;
+#X obj 229 176 s pd-\$0data;
+#X connect 0 0 1 0;
+#X connect 1 0 3 2;
+#X connect 2 0 9 0;
+#X connect 4 0 3 0;
+#X connect 7 0 9 0;
+#X connect 8 0 0 0;
+#X connect 9 0 4 0;
+#X connect 9 1 8 0;
+#X connect 9 2 10 0;
+#X connect 10 0 11 0;
+#X restore 272 141 pd datatemplate;
+#X obj 55 110 t a b;
+#X obj 55 200 list-extend;
+#X obj 55 224 prepent set;
+#X msg 80 85 2;
+#X text 269 260 2008 Luke Iannini;
+#X text 272 274 proyekto.net;
+#X obj 169 137 bng 15 250 50 0 empty empty end 17 7 0 10 -262144 -1
+-1;
+#X msg 55 251;
+#X connect 1 0 4 0;
+#X connect 1 1 13 0;
+#X connect 2 0 7 0;
+#X connect 4 0 8 0;
+#X connect 7 0 1 0;
+#X connect 7 1 8 1;
+#X connect 8 0 9 0;
+#X connect 9 0 14 0;
+#X connect 10 0 7 0;
diff --git a/sfruit/ds-dump-only-help.pd b/sfruit/ds-dump-only-help.pd
new file mode 100644
index 0000000..3fe50c1
--- /dev/null
+++ b/sfruit/ds-dump-only-help.pd
@@ -0,0 +1,84 @@
+#N struct datatemplatered float x float y;
+#N struct datatemplateblue float x float y;
+#N canvas 447 356 450 300 10;
+#X obj 55 86 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 13 48 Right outlet bangs at end of data.;
+#N canvas 963 339 134 109 \$0data 1;
+#X scalar datatemplatered 30 10 \;;
+#X scalar datatemplatered 40 20 \;;
+#X scalar datatemplatered 50 30 \;;
+#X scalar datatemplatered 60 40 \;;
+#X scalar datatemplateblue 10 10 \;;
+#X scalar datatemplateblue 20 20 \;;
+#X scalar datatemplateblue 30 30 \;;
+#X scalar datatemplateblue 40 40 \;;
+#X restore 321 56 pd \$0data;
+#X obj 55 110 t a b;
+#X obj 55 200 list-extend;
+#X obj 55 224 prepent set;
+#X text 269 260 2008 Luke Iannini;
+#X text 272 274 proyekto.net;
+#X obj 298 142 bng 15 250 50 0 empty empty end 17 7 0 10 -262144 -1
+-1;
+#X msg 55 251;
+#N canvas 10 355 450 300 datatemplateblue 0;
+#X msg 190 198 traverse pd-\$1data \, bang;
+#X obj 190 224 pointer;
+#X obj 163 128 loadbang;
+#X msg 17 208 10 10 \, 20 20 \, 30 30 \, 40 40;
+#X obj 144 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 190 175 \$0;
+#X msg 229 153 clear;
+#X obj 229 176 s pd-\$0data;
+#X obj 48 18 struct datatemplateblue float x float y;
+#X obj 79 279 append datatemplateblue x y;
+#X obj 48 41 drawpolygon 9 3 0 0 0 10 10 10 10 0 0 0;
+#X obj 163 153 t b b b b;
+#X obj 89 153 s \$0makeRed;
+#X connect 0 0 1 0;
+#X connect 1 0 9 2;
+#X connect 2 0 11 0;
+#X connect 3 0 9 0;
+#X connect 4 0 11 0;
+#X connect 5 0 0 0;
+#X connect 6 0 7 0;
+#X connect 11 0 12 0;
+#X connect 11 1 3 0;
+#X connect 11 2 5 0;
+#X connect 11 3 6 0;
+#X restore 322 81 pd datatemplateblue;
+#N canvas 10 355 450 300 datatemplatered 0;
+#X msg 190 198 traverse pd-\$1data \, bang;
+#X obj 190 224 pointer;
+#X obj 144 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 190 175 \$0;
+#X obj 79 279 append datatemplatered x y;
+#X obj 48 18 struct datatemplatered float x float y;
+#X obj 48 41 drawpolygon 900 3 0 0 0 10 10 10 10 0 0 0;
+#X msg 17 208 30 10 \, 40 20 \, 50 30 \, 60 40;
+#X obj 163 152 t b b;
+#X obj 163 128 r \$0makeRed;
+#X connect 0 0 1 0;
+#X connect 1 0 4 2;
+#X connect 2 0 8 0;
+#X connect 3 0 0 0;
+#X connect 7 0 4 0;
+#X connect 8 0 7 0;
+#X connect 8 1 3 0;
+#X connect 9 0 8 0;
+#X restore 322 101 pd datatemplatered;
+#X text 12 13 Outputs all pointers in a subpatch conforming to a specific
+template \, with the rest coming out the middle outlet.;
+#X obj 55 174 get datatemplatered x;
+#X obj 55 141 ds-dump-only pd-\$0data datatemplatered;
+#X connect 0 0 3 0;
+#X connect 3 0 14 0;
+#X connect 3 1 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 9 0;
+#X connect 13 0 4 0;
+#X connect 14 0 13 0;
+#X connect 14 2 8 0;
diff --git a/sfruit/ds-dump-only.pd b/sfruit/ds-dump-only.pd
new file mode 100644
index 0000000..ce3a454
--- /dev/null
+++ b/sfruit/ds-dump-only.pd
@@ -0,0 +1,26 @@
+#N canvas 480 22 450 300 10;
+#X declare -lib list-abs;
+#X obj 182 135 until;
+#X msg 182 156 next;
+#X obj 56 90 list append \$1;
+#X obj 56 113 prepent traverse;
+#X obj 56 53 loadbang;
+#X obj 182 22 inlet;
+#X obj 182 242 outlet;
+#X obj 336 242 outlet;
+#X obj 317 40 t b b b;
+#X obj 242 242 outlet;
+#X obj 182 179 pointer \$2;
+#X obj 318 18 import list-abs;
+#X connect 0 0 1 0;
+#X connect 1 0 10 0;
+#X connect 2 0 3 0;
+#X connect 3 0 10 0;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 8 0 2 0;
+#X connect 8 1 7 0;
+#X connect 8 2 0 1;
+#X connect 10 0 6 0;
+#X connect 10 1 9 0;
+#X connect 10 2 8 0;
diff --git a/sfruit/ds-dump.pd b/sfruit/ds-dump.pd
new file mode 100644
index 0000000..43171b9
--- /dev/null
+++ b/sfruit/ds-dump.pd
@@ -0,0 +1,27 @@
+#N canvas 0 22 450 300 10;
+#X declare -lib list-abs;
+#X obj 182 135 until;
+#X obj 182 179 pointer;
+#X msg 182 156 next;
+#X obj 56 90 list append \$1;
+#X obj 56 113 prepent traverse;
+#X obj 56 53 loadbang;
+#X obj 182 16 inlet;
+#X obj 182 242 outlet;
+#X obj 336 242 outlet;
+#X obj 317 40 t b b b;
+#X obj 182 46 t a b;
+#X obj 293 16 import list-abs;
+#X connect 0 0 2 0;
+#X connect 1 0 7 0;
+#X connect 1 1 9 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 10 0;
+#X connect 9 0 3 0;
+#X connect 9 1 8 0;
+#X connect 9 2 0 1;
+#X connect 10 0 0 0;
+#X connect 10 1 3 0;
diff --git a/sfruit/ds-end-help.pd b/sfruit/ds-end-help.pd
new file mode 100644
index 0000000..085b8fd
--- /dev/null
+++ b/sfruit/ds-end-help.pd
@@ -0,0 +1,41 @@
+#N struct 1635datatemplate float x float y;
+#N canvas 0 22 450 300 10;
+#N canvas 0 22 450 300 \$0datatemplate 0;
+#X obj 99 58 drawpolygon 90 3 0 0 0 10 10 10 10 0 0 0;
+#X obj 112 95 loadbang;
+#X obj 112 124 t b b b;
+#X msg 188 127 clear;
+#X obj 188 149 s pd-\$0mydata;
+#X msg 112 182 0 0 \, 20 0 \, 40 0;
+#X obj 131 213 ds-begin pd-\$0mydata;
+#X obj 90 247 append \$0datatemplate x y;
+#X obj 94 96 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 32 struct \$0datatemplate float x float y;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 1 6 0;
+#X connect 2 2 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 2;
+#X connect 8 0 2 0;
+#X restore 293 88 pd \$0datatemplate;
+#N canvas 3 345 126 108 \$0mydata 1;
+#X scalar 1635datatemplate 0 0 \;;
+#X scalar 1635datatemplate 20 0 \;;
+#X scalar 1635datatemplate 40 0 \;;
+#X restore 293 110 pd \$0mydata;
+#X obj 50 177 append \$0datatemplate x y;
+#X obj 50 99 t b b;
+#X obj 50 68 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 127 140 ds-end pd-\$0mydata;
+#X msg 50 140 60 0;
+#X text 8 4 Outputs the last pointer in a data structure so that one
+can append after it.;
+#X connect 3 0 6 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 2;
+#X connect 6 0 2 0;
diff --git a/sfruit/ds-end.pd b/sfruit/ds-end.pd
new file mode 100644
index 0000000..df873b1
--- /dev/null
+++ b/sfruit/ds-end.pd
@@ -0,0 +1,26 @@
+#N canvas 61 377 261 305 10;
+#X declare -lib list-abs;
+#X obj 139 175 pointer;
+#X obj 139 37 inlet;
+#X obj 100 228 pointer;
+#X obj 32 113 list append \$1;
+#X obj 32 137 prepent traverse;
+#X obj 139 60 t b b b;
+#X obj 139 110 until;
+#X msg 139 140 next;
+#X obj 178 198 t b b;
+#X obj 100 255 outlet;
+#X obj 27 19 import list-abs;
+#X connect 0 0 2 1;
+#X connect 0 1 8 0;
+#X connect 1 0 5 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 5 1 0 0;
+#X connect 5 2 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 8 0 2 0;
+#X connect 8 1 6 1;
diff --git a/sfruit/ds-first-help.pd b/sfruit/ds-first-help.pd
new file mode 100644
index 0000000..a372af1
--- /dev/null
+++ b/sfruit/ds-first-help.pd
@@ -0,0 +1,84 @@
+#N struct datatemplatered float x float y;
+#N struct datatemplateblue float x float y;
+#N canvas 0 22 450 300 10;
+#X obj 360 250 ds-first;
+#X obj 55 86 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 11 30 Right outlet bangs at end of data.;
+#N canvas 963 339 134 109 \$0data 1;
+#X scalar datatemplatered 30 10 \;;
+#X scalar datatemplatered 40 20 \;;
+#X scalar datatemplatered 50 30 \;;
+#X scalar datatemplatered 60 40 \;;
+#X scalar datatemplateblue 10 10 \;;
+#X scalar datatemplateblue 20 20 \;;
+#X scalar datatemplateblue 30 30 \;;
+#X scalar datatemplateblue 40 40 \;;
+#X restore 321 56 pd \$0data;
+#X obj 55 110 t a b;
+#X obj 55 200 list-extend;
+#X obj 55 224 prepent set;
+#X text 269 260 2008 Luke Iannini;
+#X text 272 274 proyekto.net;
+#X obj 298 142 bng 15 250 50 0 empty empty end 17 7 0 10 -262144 -1
+-1;
+#X msg 55 251 30;
+#N canvas 10 355 450 300 datatemplateblue 0;
+#X msg 190 198 traverse pd-\$1data \, bang;
+#X obj 190 224 pointer;
+#X obj 163 128 loadbang;
+#X msg 17 208 10 10 \, 20 20 \, 30 30 \, 40 40;
+#X obj 144 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 190 175 \$0;
+#X msg 229 153 clear;
+#X obj 229 176 s pd-\$0data;
+#X obj 48 18 struct datatemplateblue float x float y;
+#X obj 79 279 append datatemplateblue x y;
+#X obj 48 41 drawpolygon 9 3 0 0 0 10 10 10 10 0 0 0;
+#X obj 163 153 t b b b b;
+#X obj 89 153 s \$0makeRed;
+#X connect 0 0 1 0;
+#X connect 1 0 9 2;
+#X connect 2 0 11 0;
+#X connect 3 0 9 0;
+#X connect 4 0 11 0;
+#X connect 5 0 0 0;
+#X connect 6 0 7 0;
+#X connect 11 0 12 0;
+#X connect 11 1 3 0;
+#X connect 11 2 5 0;
+#X connect 11 3 6 0;
+#X restore 322 81 pd datatemplateblue;
+#N canvas 10 355 450 300 datatemplatered 0;
+#X msg 190 198 traverse pd-\$1data \, bang;
+#X obj 190 224 pointer;
+#X obj 144 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 190 175 \$0;
+#X obj 79 279 append datatemplatered x y;
+#X obj 48 18 struct datatemplatered float x float y;
+#X obj 48 41 drawpolygon 900 3 0 0 0 10 10 10 10 0 0 0;
+#X msg 17 208 30 10 \, 40 20 \, 50 30 \, 60 40;
+#X obj 163 152 t b b;
+#X obj 163 128 r \$0makeRed;
+#X connect 0 0 1 0;
+#X connect 1 0 4 2;
+#X connect 2 0 8 0;
+#X connect 3 0 0 0;
+#X connect 7 0 4 0;
+#X connect 8 0 7 0;
+#X connect 8 1 3 0;
+#X connect 9 0 8 0;
+#X restore 322 101 pd datatemplatered;
+#X obj 55 174 get datatemplatered x;
+#X text 12 13 Outputs first encountered pointer of a template.;
+#X obj 55 141 ds-first pd-\$0data datatemplatered;
+#X connect 1 0 4 0;
+#X connect 4 0 15 0;
+#X connect 4 1 5 1;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 13 0 5 0;
+#X connect 15 0 13 0;
+#X connect 15 1 9 0;
diff --git a/sfruit/ds-first.pd b/sfruit/ds-first.pd
new file mode 100644
index 0000000..9f02641
--- /dev/null
+++ b/sfruit/ds-first.pd
@@ -0,0 +1,29 @@
+#N canvas 540 376 450 300 10;
+#X declare -lib list-abs;
+#X obj 182 135 until;
+#X msg 182 156 next;
+#X obj 56 90 list append \$1;
+#X obj 56 113 prepent traverse;
+#X obj 56 53 loadbang;
+#X obj 182 22 inlet;
+#X obj 209 242 outlet;
+#X obj 336 242 outlet;
+#X obj 182 179 pointer \$2;
+#X obj 182 206 t b a;
+#X obj 182 52 t b b;
+#X obj 297 50 t b b;
+#X obj 289 17 import list-abs;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 5 0 10 0;
+#X connect 8 0 9 0;
+#X connect 8 2 11 0;
+#X connect 9 0 11 0;
+#X connect 9 1 6 0;
+#X connect 10 0 0 0;
+#X connect 10 1 2 0;
+#X connect 11 0 7 0;
+#X connect 11 1 0 1;
diff --git a/sfruit/ds-get-list.pd b/sfruit/ds-get-list.pd
new file mode 100644
index 0000000..b1d4a0e
--- /dev/null
+++ b/sfruit/ds-get-list.pd
@@ -0,0 +1,70 @@
+#N canvas 539 101 566 566 10;
+#X declare -lib list-abs;
+#X declare -lib iemlib -lib list-abs;
+#N canvas 936 317 494 366 builder 1;
+#X obj 182 56 dollarg;
+#X obj 182 30 initbang;
+#X obj 209 277 s \$0self;
+#N canvas 381 63 155 275 makepack 0;
+#X obj 11 26 inlet;
+#X obj 32 99 until;
+#X obj 32 155 list-extend;
+#X msg 95 100 pack;
+#X msg 32 127 f;
+#X obj 11 182 list;
+#X obj 11 73 t b a b;
+#X obj 11 208 list prepend obj 10 200;
+#X obj 11 238 list trim;
+#X obj 11 269 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 1;
+#X connect 3 0 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 6 1 1 0;
+#X connect 6 2 3 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X restore 131 164 pd makepack;
+#X msg 221 114 obj 10 10 inlet;
+#X msg 111 185 obj 10 300 outlet;
+#X obj 126 104 - 1;
+#X text 304 73 first arg is template;
+#X obj 126 82 f;
+#X obj 92 141 t a b a;
+#X obj 182 82 t b a b;
+#X msg -10 168 connect 2 0 3 0;
+#X obj 34 200 list-range;
+#X obj 34 221 list-drip;
+#X msg 34 252 connect 3 \$1 4 \$1;
+#X msg -6 282 connect 4 0 5 0;
+#X obj 202 158 list trim;
+#X obj 202 135 list prepend obj 10 100 get;
+#X obj 310 29 import iemlib list-abs;
+#X connect 0 0 10 0;
+#X connect 0 1 8 1;
+#X connect 1 0 0 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X connect 6 0 9 0;
+#X connect 8 0 6 0;
+#X connect 9 0 12 0;
+#X connect 9 0 11 0;
+#X connect 9 0 15 0;
+#X connect 9 1 5 0;
+#X connect 9 2 3 0;
+#X connect 10 0 8 0;
+#X connect 10 1 17 0;
+#X connect 10 2 4 0;
+#X connect 11 0 2 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 2 0;
+#X connect 15 0 2 0;
+#X connect 16 0 2 0;
+#X connect 17 0 16 0;
+#X restore 311 39 pd builder;
+#X obj 310 16 namecanvas \$0self;
diff --git a/sfruit/ds-idx-only-help.pd b/sfruit/ds-idx-only-help.pd
new file mode 100644
index 0000000..02f3c23
--- /dev/null
+++ b/sfruit/ds-idx-only-help.pd
@@ -0,0 +1,23 @@
+#N canvas 0 22 450 300 10;
+#X text 16 11 ds-idx-only;
+#X text 274 254 2008 Luke Iannini;
+#X obj 105 89 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 123 88 bang for last used index;
+#X msg 54 88 10;
+#X obj 54 126 ds-idx-only pd-\$0data datatemplate5 3;
+#X obj 273 153 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 16 35 outputs the nth pointer of a certain template type \,
+or a bang from the right outlet if the nth pointer does not exist.
+;
+#X obj 54 170 get datatemplate5 x;
+#X obj 70 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 54 223 5 0 0 0 - - -;
+#X connect 2 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 5 1 6 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
diff --git a/sfruit/ds-idx-only.pd b/sfruit/ds-idx-only.pd
new file mode 100644
index 0000000..cf1a76f
--- /dev/null
+++ b/sfruit/ds-idx-only.pd
@@ -0,0 +1,58 @@
+#N canvas 869 295 378 463 10;
+#X declare -lib list-abs -lib iemlib;
+#X obj 197 233 sel \$3;
+#X obj 197 210 f;
+#X obj 221 210 + 1;
+#X obj 116 289 pointer;
+#X obj 162 346 once;
+#X msg 183 325 reset;
+#X obj 162 426 outlet;
+#X obj 240 75 list append \$1;
+#X obj 240 98 prepent traverse;
+#X msg 212 187 0;
+#X obj 38 85 until;
+#X msg 38 109 next;
+#X obj 127 102 t b;
+#X obj 224 161 route bang;
+#X obj 38 131 pointer \$2;
+#X obj 144 8 inlet;
+#X obj 128 172 t b p;
+#X obj 197 255 t b b;
+#X obj 183 138 t b b a;
+#X obj 144 37 t b b a;
+#X obj 127 80 r \$0stop;
+#X obj 224 278 s \$0stop;
+#X obj 162 375 route bang;
+#X obj 232 426 outlet;
+#X obj 206 17 import list-abs iemlib;
+#X connect 0 0 17 0;
+#X connect 1 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 1;
+#X connect 3 0 4 0;
+#X connect 4 0 22 0;
+#X connect 5 0 4 1;
+#X connect 7 0 8 0;
+#X connect 8 0 14 0;
+#X connect 9 0 1 1;
+#X connect 10 0 11 0;
+#X connect 11 0 14 0;
+#X connect 12 0 10 1;
+#X connect 13 1 0 1;
+#X connect 14 0 16 0;
+#X connect 14 2 12 0;
+#X connect 14 2 4 0;
+#X connect 15 0 19 0;
+#X connect 16 0 1 0;
+#X connect 16 1 3 1;
+#X connect 17 0 3 0;
+#X connect 17 1 21 0;
+#X connect 18 0 5 0;
+#X connect 18 1 9 0;
+#X connect 18 2 13 0;
+#X connect 19 0 10 0;
+#X connect 19 1 7 0;
+#X connect 19 2 18 0;
+#X connect 20 0 12 0;
+#X connect 22 0 23 0;
+#X connect 22 1 6 0;
diff --git a/sfruit/ds-idx.pd b/sfruit/ds-idx.pd
new file mode 100644
index 0000000..d6955f1
--- /dev/null
+++ b/sfruit/ds-idx.pd
@@ -0,0 +1,36 @@
+#N canvas 692 40 319 298 10;
+#X declare -lib list-abs;
+#X obj 64 28 inlet;
+#X obj 166 134 list append \$1;
+#X obj 166 157 prepent traverse;
+#X obj 64 56 t a b;
+#X obj 103 195 pointer;
+#X obj 64 234 pointer;
+#X msg 103 170 next;
+#X obj 103 136 until;
+#X obj 64 92 t b a;
+#X obj 64 261 outlet;
+#X obj 142 262 outlet;
+#X obj 142 234 t b b;
+#X obj 136 87 list append \$1;
+#X obj 91 114 spigot 1;
+#X obj 136 65 loadbang;
+#X text 192 69 until protection;
+#X obj 146 34 import list-abs;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 8 0;
+#X connect 3 1 1 0;
+#X connect 4 0 5 1;
+#X connect 4 1 11 0;
+#X connect 5 0 9 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 8 0 5 0;
+#X connect 8 1 13 0;
+#X connect 11 0 10 0;
+#X connect 11 1 7 1;
+#X connect 12 0 13 1;
+#X connect 13 0 7 0;
+#X connect 14 0 12 0;
diff --git a/sfruit/ds-next-element.pd b/sfruit/ds-next-element.pd
new file mode 100644
index 0000000..43c7d4b
--- /dev/null
+++ b/sfruit/ds-next-element.pd
@@ -0,0 +1,154 @@
+#N canvas 453 22 467 768 10;
+#X declare -lib iemlib;
+#X obj 133 259 f;
+#X obj 160 259 + 1;
+#X obj 133 237 until;
+#X obj 118 701 once;
+#X obj 199 603 t a;
+#X obj 133 579 &&;
+#X obj 160 327 + 1;
+#X obj 133 640 f;
+#X obj 133 600 sel 1;
+#X obj 91 9 inlet;
+#X obj 170 527 r \$0findValue;
+#X obj 137 30 s \$0findValue;
+#X msg 148 215 0;
+#X obj 118 736 outlet;
+#X obj 91 73 t p p;
+#X obj 133 552 <=;
+#X obj 160 552 >;
+#X obj 133 306 t a a;
+#X obj 133 665 t a b;
+#X obj 172 665 s \$0stopLooking;
+#X obj 170 237 r \$0stopLooking;
+#X obj 160 346 t a a a;
+#X obj 296 554 sel 1;
+#X obj 296 382 >;
+#X obj 311 358 - 1;
+#X obj 91 116 sel 1;
+#X obj 137 74 s \$0pointer;
+#X obj 225 404 r \$0pointer;
+#X obj 133 281 sel 0;
+#X obj 245 467 t a b;
+#N canvas 0 22 448 336 earliest? 0;
+#X obj 82 74 inlet;
+#X obj 157 97 r \$0pointer;
+#X msg 82 100 0;
+#X obj 97 178 r \$0findValue;
+#X obj 82 206 >;
+#X obj 82 232 sel 1;
+#X obj 129 294 outlet;
+#X msg 129 270 0;
+#X msg 55 270 0;
+#X obj 55 294 outlet;
+#X obj 82 129 element \$1 \$2;
+#X obj 82 154 get \$3 \$4;
+#X connect 0 0 2 0;
+#X connect 1 0 10 1;
+#X connect 2 0 10 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 5 1 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 10 0 11 0;
+#X connect 11 0 4 0;
+#X restore 174 293 pd earliest?;
+#X obj 272 513 s \$0stopLooking;
+#X obj 245 642 t a;
+#N canvas 848 394 186 293 first 0;
+#X obj 13 10 inlet;
+#X obj 88 41 r \$0pointer;
+#X obj 27 252 outlet;
+#X obj 13 90 t p p;
+#X obj 28 139 r \$0findValue;
+#X obj 13 188 sel 1;
+#X obj 13 162 >;
+#X msg 13 43 0;
+#X msg 13 218 0;
+#X msg 40 218 1;
+#X obj 13 115 get \$3 \$4;
+#X obj 13 68 element \$1 \$2;
+#X connect 0 0 7 0;
+#X connect 1 0 11 1;
+#X connect 3 0 10 0;
+#X connect 4 0 6 1;
+#X connect 5 0 8 0;
+#X connect 5 1 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 11 0;
+#X connect 8 0 2 0;
+#X connect 9 0 2 0;
+#X connect 10 0 6 0;
+#X connect 11 0 3 0;
+#X restore 18 372 pd first;
+#X obj 91 96 getsize \$1 \$2;
+#X obj 160 434 element \$1 \$2;
+#X obj 133 481 element \$1 \$2;
+#X obj 160 453 get \$3 \$4;
+#X obj 133 504 get \$3 \$4;
+#X text 240 48 takes a pointer to an array;
+#X obj 200 147 s \$0reset;
+#X obj 118 147 t b a b a b;
+#X obj 151 701 r \$0reset;
+#X obj 315 34 inlet;
+#X obj 91 51 pointer;
+#X obj 91 30 t b a;
+#X obj 282 128 import iemlib;
+#X connect 0 0 1 0;
+#X connect 0 0 28 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 1;
+#X connect 5 0 8 0;
+#X connect 6 0 21 0;
+#X connect 7 0 18 0;
+#X connect 8 0 7 0;
+#X connect 9 0 45 0;
+#X connect 10 0 15 1;
+#X connect 10 0 16 1;
+#X connect 12 0 0 1;
+#X connect 14 0 34 0;
+#X connect 14 1 26 0;
+#X connect 15 0 5 0;
+#X connect 16 0 5 1;
+#X connect 17 0 36 0;
+#X connect 17 1 6 0;
+#X connect 18 0 3 0;
+#X connect 18 1 19 0;
+#X connect 20 0 2 1;
+#X connect 21 0 35 0;
+#X connect 21 1 23 0;
+#X connect 21 2 4 0;
+#X connect 22 0 7 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 1;
+#X connect 25 0 33 0;
+#X connect 25 1 41 0;
+#X connect 27 0 35 1;
+#X connect 27 0 36 1;
+#X connect 28 0 30 0;
+#X connect 28 1 17 0;
+#X connect 29 0 32 0;
+#X connect 29 1 31 0;
+#X connect 30 0 17 0;
+#X connect 30 1 29 0;
+#X connect 32 0 3 0;
+#X connect 33 0 13 0;
+#X connect 34 0 25 0;
+#X connect 35 0 37 0;
+#X connect 36 0 38 0;
+#X connect 37 0 16 0;
+#X connect 38 0 15 0;
+#X connect 41 0 3 0;
+#X connect 41 1 2 0;
+#X connect 41 2 12 0;
+#X connect 41 3 24 0;
+#X connect 41 4 40 0;
+#X connect 42 0 3 1;
+#X connect 43 0 44 1;
+#X connect 44 0 14 0;
+#X connect 45 0 44 0;
+#X connect 45 1 11 0;
diff --git a/sfruit/ds-raise-help.pd b/sfruit/ds-raise-help.pd
new file mode 100644
index 0000000..224b183
--- /dev/null
+++ b/sfruit/ds-raise-help.pd
@@ -0,0 +1,7 @@
+#N canvas 796 410 318 141 10;
+#X obj 23 104 ds-raise pd-myData myTemplate;
+#X text 7 4 [ds-raise] - hack to bring the first template in a datastructure
+to the top;
+#X obj 23 83 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X connect 2 0 0 0;
diff --git a/sfruit/ds-raise.pd b/sfruit/ds-raise.pd
new file mode 100644
index 0000000..c51b952
--- /dev/null
+++ b/sfruit/ds-raise.pd
@@ -0,0 +1,11 @@
+#N canvas 814 246 126 152 10;
+#X obj 12 58 t p p;
+#X obj 12 34 ds-first \$1 \$2;
+#X obj 12 82 get \$2 x;
+#X obj 12 107 set \$2 x;
+#X obj 12 10 inlet;
+#X connect 0 0 2 0;
+#X connect 0 1 3 1;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 1 0;
diff --git a/sfruit/ds-select-help.pd b/sfruit/ds-select-help.pd
new file mode 100644
index 0000000..1143418
--- /dev/null
+++ b/sfruit/ds-select-help.pd
@@ -0,0 +1,39 @@
+#N canvas 1 22 450 300 10;
+#N canvas 0 22 450 300 \$0data 0;
+#X restore 313 163 pd \$0data;
+#N canvas 535 125 450 300 createdata 0;
+#X obj 212 101 \$0;
+#X msg 212 125 traverse pd-\$1data \, bang;
+#X obj 212 148 pointer;
+#X obj 23 181 append \$0mytemplate x y velocity;
+#X obj 23 23 loadbang;
+#X obj 23 44 t b b;
+#X msg 23 116 50 60 70;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 3;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 0 0;
+#X connect 6 0 3 0;
+#X restore 312 199 pd createdata;
+#N canvas 479 22 359 135 \$0mytemplate 0;
+#X obj 17 18 struct \$0mytemplate float x float y float velocity;
+#X obj 17 48 drawpolygon 900 1 0 0 0 10 10 10 10 0 0 0;
+#X restore 312 136 pd \$0mytemplate;
+#X obj 19 129 ds-dump pd-\$0data;
+#X obj 19 91 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 19 163 ds-select \$0mytemplate velocity 52;
+#X obj 19 188 get \$0mytemplate x y;
+#X floatatom 19 218 5 0 0 0 - - -;
+#X floatatom 136 218 5 0 0 0 - - -;
+#X text 7 5 [ds-select] outputs pointers to elements whose attribute
+value matches its arguments. Non-matching pointers are sent to the
+right outlet. Call like [ds-select <template> <attribute> *<value>]
+*optional. The value can also be set by the right inlet.;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 1 8 0;
diff --git a/sfruit/ds-select.pd b/sfruit/ds-select.pd
new file mode 100644
index 0000000..dd6c7b5
--- /dev/null
+++ b/sfruit/ds-select.pd
@@ -0,0 +1,22 @@
+#N canvas 319 364 368 277 10;
+#X obj 145 119 get \$1 \$2;
+#X obj 145 162 sel \$3;
+#X obj 278 31 inlet;
+#X obj 73 238 outlet;
+#X obj 73 119 pointer;
+#X obj 145 31 inlet;
+#X obj 145 55 t a a;
+#X obj 243 238 outlet;
+#X obj 178 185 t b;
+#X obj 243 119 pointer;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 8 0;
+#X connect 2 0 1 1;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 1 4 1;
+#X connect 6 1 9 1;
+#X connect 8 0 9 0;
+#X connect 9 0 7 0;
diff --git a/sfruit/dynamic-gui-messages-help.pd b/sfruit/dynamic-gui-messages-help.pd
new file mode 100644
index 0000000..cf494f9
--- /dev/null
+++ b/sfruit/dynamic-gui-messages-help.pd
@@ -0,0 +1,10 @@
+#N canvas 986 26 450 300 10;
+#X msg 39 77 obj 10 10 vsl width height bottom top log/lin init send
+receive label l-offsetX l-offsetY font fontsize bgcolor frontcolor
+labelcolor init-to jumponclick \;;
+#X msg 39 127 obj 10 10 vradio size 1(?) init number send receive label
+l-offsetX l-offsetY font fontsize bgcolor frontcolor labelcolor init-to
+\;;
+#X msg 39 27 obj 10 10 tgl size init send receive label l-offsetX l-offsetY
+font fontsize bgcolor frontcolor labelcolor init-to non-zero-value
+\;;
diff --git a/sfruit/eqpowmix~.pd b/sfruit/eqpowmix~.pd
new file mode 100644
index 0000000..9249ec7
--- /dev/null
+++ b/sfruit/eqpowmix~.pd
@@ -0,0 +1,58 @@
+#N canvas 259 345 452 502 10;
+#X declare -lib hcs;
+#X obj 308 42 inlet;
+#X obj 57 174 expr cos($f1 * 3.14159 / 2);
+#X obj 247 175 expr sin($f1 * 3.14159 / 2);
+#X obj 308 108 clip 0 1;
+#X obj 42 312 *~;
+#X obj 232 311 *~;
+#X obj 247 287 line~;
+#X obj 57 287 line~;
+#X obj 247 206 t f b;
+#X obj 247 248 pack f f;
+#X msg 247 268 \$1 \$2;
+#X obj 57 206 t f b;
+#X obj 84 227 f;
+#X obj 57 248 pack f f;
+#X msg 57 268 \$1 \$2;
+#X obj 99 206 r \$0block-ms;
+#X obj 274 227 f;
+#X obj 289 206 r \$0block-ms;
+#X obj 42 43 inlet~;
+#X obj 232 41 inlet~;
+#X obj 141 414 outlet~;
+#X text 24 457 equal power 2-channel mixer \, based on HCS's pan_core~/equal_power_pan~
+;
+#X obj 356 42 loadbang;
+#X msg 356 62 0.5;
+#X obj 310 319 loadbang;
+#X obj 310 351 blocksize_in_ms;
+#X obj 310 385 s \$0block-ms;
+#X obj 66 113 import hcs;
+#X connect 0 0 3 0;
+#X connect 1 0 11 0;
+#X connect 2 0 8 0;
+#X connect 3 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 20 0;
+#X connect 5 0 20 0;
+#X connect 6 0 5 1;
+#X connect 7 0 4 1;
+#X connect 8 0 9 0;
+#X connect 8 1 16 0;
+#X connect 9 0 10 0;
+#X connect 10 0 6 0;
+#X connect 11 0 13 0;
+#X connect 11 1 12 0;
+#X connect 12 0 13 1;
+#X connect 13 0 14 0;
+#X connect 14 0 7 0;
+#X connect 15 0 12 1;
+#X connect 16 0 9 1;
+#X connect 17 0 16 1;
+#X connect 18 0 4 0;
+#X connect 19 0 5 0;
+#X connect 22 0 23 0;
+#X connect 23 0 3 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
diff --git a/sfruit/gemkeycommand.pd b/sfruit/gemkeycommand.pd
new file mode 100644
index 0000000..aae2851
--- /dev/null
+++ b/sfruit/gemkeycommand.pd
@@ -0,0 +1,6 @@
+#N canvas 633 31 178 175 10;
+#X obj 29 116 s \$2;
+#X obj 29 82 list append \$3;
+#X obj 29 47 gemkeynamedown \$1;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
diff --git a/sfruit/gemkeynamedown.pd b/sfruit/gemkeynamedown.pd
new file mode 100644
index 0000000..458f8c2
--- /dev/null
+++ b/sfruit/gemkeynamedown.pd
@@ -0,0 +1,16 @@
+#N canvas 626 383 191 186 10;
+#X obj 26 120 spigot;
+#X msg 83 89 1;
+#X msg 45 89 0;
+#X obj 26 64 sel 1 0;
+#X obj 83 64 sel \$1;
+#X obj 26 152 outlet;
+#X obj 26 17 gemkeyname;
+#X connect 0 0 5 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 1;
+#X connect 3 0 0 0;
+#X connect 3 1 2 0;
+#X connect 4 0 1 0;
+#X connect 6 0 3 0;
+#X connect 6 1 4 0;
diff --git a/sfruit/gop-edit.pd b/sfruit/gop-edit.pd
new file mode 100644
index 0000000..01b6032
--- /dev/null
+++ b/sfruit/gop-edit.pd
@@ -0,0 +1,39 @@
+#N canvas 356 354 434 358 10;
+#X declare -lib iemlib;
+#X declare -lib iemguts;
+#X obj 284 188 loadbang;
+#X msg 284 213 10;
+#X obj 121 14 r \$0.y-size-s;
+#X obj 92 -6 r \$0.x-size-s;
+#X obj 1 1 nbx 3 14 0 1e+37 0 0 \$0.x-off-s \$0.x-off-r x-offs 40 7
+0 10 -262144 -1 -1 0 256;
+#X obj 1 15 nbx 3 14 0 1e+37 0 0 \$0.y-off-s \$0.y-off-r y-offs 40
+7 0 10 -262144 -1 -1 0 256;
+#X obj 92 78 hotpack f f f f;
+#X obj 150 34 r \$0.x-off-s;
+#X obj 179 54 r \$0.y-off-s;
+#X msg 92 101 donecanvasdialog 1 -1 2 0 -1 1 1 \$1 \$2 \$3 \$4;
+#X obj 325 55 import iemguts;
+#X obj 92 133 sendcanvas 1;
+#X obj 1 41 nbx 3 14 0 1e+37 0 0 \$0.x-size-s \$0.x-size-r x-size 40
+7 0 10 -262144 -1 -1 0 256;
+#X obj 1 55 nbx 3 14 0 1e+37 0 0 \$0.y-size-s \$0.y-size-r y-size 40
+7 0 10 -262144 -1 -1 0 256;
+#X obj 19 30 cnv 10 43 10 empty empty gop-edit 2 5 0 8 -260129 -262144
+0;
+#X obj 284 302 s \$0.y-size-r;
+#X obj 284 242 s \$0.x-off-r;
+#X obj 284 262 s \$0.y-off-r;
+#X obj 284 282 s \$0.x-size-r;
+#X connect 0 0 1 0;
+#X connect 1 0 16 0;
+#X connect 1 0 17 0;
+#X connect 1 0 18 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 1;
+#X connect 3 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 2;
+#X connect 8 0 6 3;
+#X connect 9 0 11 0;
+#X coords 0 -1 1 1 85 70 2 0 0;
diff --git a/sfruit/guilink-help.pd b/sfruit/guilink-help.pd
new file mode 100644
index 0000000..2d16905
--- /dev/null
+++ b/sfruit/guilink-help.pd
@@ -0,0 +1,15 @@
+#N canvas 36 238 450 300 10;
+#X obj 54 95 guilink \$0 frequency;
+#X obj 241 61 vsl 15 128 1 20000 1 0 \$0frequency \$0frequencyR empty
+0 -9 0 10 -203904 -1 -1 0 1;
+#X obj 269 114 nbx 5 14 1 20000 1 0 \$0frequencyD \$0frequencyDR empty
+0 -8 0 10 -203904 -1 -1 1 256;
+#X text 18 9 guilink: link two gui elements so that they reflect each
+other's settings;
+#X obj 71 146 r \$0parameter;
+#X floatatom 71 177 6 0 0 0 - - -;
+#X text 14 217 Uses a uniform naming scheme. The "master" control is
+uses \$0parameter as its sendname and \$0parameterR as its receivename.
+The "slave" control uses \$0parameterD (for Display) as its sendname
+and \$0paramterDR for its receivename;
+#X connect 4 0 5 0;
diff --git a/sfruit/guilink.pd b/sfruit/guilink.pd
new file mode 100644
index 0000000..11e3f8d
--- /dev/null
+++ b/sfruit/guilink.pd
@@ -0,0 +1,9 @@
+#N canvas 469 180 164 138 10;
+#X obj 23 21 r \$1\$2;
+#X obj 23 101 s \$1\$2R;
+#X obj 93 21 r \$1\$2D;
+#X obj 91 101 s \$1\$2DR;
+#X msg 23 53 set \$1;
+#X connect 0 0 4 0;
+#X connect 2 0 1 0;
+#X connect 4 0 3 0;
diff --git a/sfruit/hotpack-help.pd b/sfruit/hotpack-help.pd
new file mode 100644
index 0000000..6cc3b1c
--- /dev/null
+++ b/sfruit/hotpack-help.pd
@@ -0,0 +1,27 @@
+#N canvas 727 260 394 293 10;
+#X text 9 8 [hotpack] works just like [pack] \, except that it all
+of its inlets are "hot". Inlets will remember whatever they were last
+sent.;
+#X msg 29 90 vegetables;
+#X msg 109 90 with;
+#X msg 149 90 cheese;
+#X msg 39 120 if;
+#X msg 111 120 you;
+#X msg 151 120 please;
+#X obj 29 215 prepent set;
+#X obj 29 180 hotpack s s s;
+#X obj 66 156 symbol;
+#X obj 104 156 symbol;
+#X text 268 241 2008 Luke Iannini;
+#X text 267 255 proyekto.net;
+#X msg 29 252;
+#X connect 1 0 8 0;
+#X connect 2 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 8 0;
+#X connect 5 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 13 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 2;
diff --git a/sfruit/hotpack.pd b/sfruit/hotpack.pd
new file mode 100644
index 0000000..bf2a2c3
--- /dev/null
+++ b/sfruit/hotpack.pd
@@ -0,0 +1,175 @@
+#N canvas 4 22 859 425 10;
+#X declare -lib iemlib;
+#N canvas 916 222 446 500 builder 0;
+#X obj -315 22 initbang;
+#X obj -288 219 s \$0self;
+#X obj -279 128 s \$0inlets;
+#X obj -315 172 list trim;
+#X obj -315 194 t b a;
+#X obj -300 244 r \$0inlets;
+#X obj -93 80 t a b;
+#X obj -315 270 f;
+#X obj -315 318 until;
+#X obj -315 294 t a b;
+#X msg -278 294 0;
+#X obj -250 294 s \$0reset;
+#X obj -300 343 r \$0reset;
+#X obj -315 368 f;
+#X obj -283 369 + 1;
+#X obj -315 45 t b b;
+#X obj -244 53 v \$0objects;
+#X obj -315 403 sel 0;
+#X obj -315 453 s \$0makeFirstInlet;
+#X obj -288 428 s \$0makeRestOfInlets;
+#X text -133 180 25;
+#X obj -315 149 list prepend obj 10 100 pack;
+#X obj -19 145 v \$0objects;
+#X msg -93 50 s s s s s;
+#X msg -66 109 5;
+#X msg -17 110 4;
+#X msg -274 46 4;
+#X obj -244 76 s \$0packObjID;
+#X obj -315 111 dollarg;
+#X obj -95 18 import iemlib;
+#X connect 0 0 15 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 1 1 0;
+#X connect 5 0 7 1;
+#X connect 6 0 21 0;
+#X connect 6 1 24 0;
+#X connect 6 1 25 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 0;
+#X connect 9 0 8 0;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 12 0 13 1;
+#X connect 13 0 14 0;
+#X connect 13 0 17 0;
+#X connect 14 0 13 1;
+#X connect 15 0 28 0;
+#X connect 15 1 26 0;
+#X connect 17 0 18 0;
+#X connect 17 1 19 0;
+#X connect 21 0 3 0;
+#X connect 23 0 6 0;
+#X connect 24 0 2 0;
+#X connect 25 0 22 0;
+#X connect 26 0 16 0;
+#X connect 26 0 27 0;
+#X connect 28 0 21 0;
+#X connect 28 1 2 0;
+#X restore 14 315 pd builder;
+#N canvas 469 248 424 330 firstinlet 0;
+#X obj 131 92 s \$0self;
+#X obj 194 19 pack f f;
+#X obj 239 -3 + 1;
+#X obj 194 -40 t a a;
+#X msg 194 57 connect \$2 0 \$1 0;
+#X obj 144 -81 v \$0objects;
+#X obj 144 -158 r \$0makeFirstInlet;
+#X msg 275 -91 obj 10 10 inlet;
+#X obj 117 -81 + 2;
+#X msg 286 -70 obj 10 160 outlet;
+#X obj 275 -47 s \$0self;
+#X obj 144 -130 t b b b;
+#X msg 15 58 connect \$1 0 \$2 0;
+#X obj 60 -14 + 2;
+#X obj 15 13 pack f f;
+#X obj 144 -57 t a a;
+#X obj 15 -40 t a a;
+#X connect 1 0 4 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 3 1 2 0;
+#X connect 4 0 0 0;
+#X connect 5 0 8 0;
+#X connect 5 0 15 0;
+#X connect 6 0 11 0;
+#X connect 7 0 10 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 11 0 5 0;
+#X connect 11 1 9 0;
+#X connect 11 2 7 0;
+#X connect 12 0 0 0;
+#X connect 13 0 14 1;
+#X connect 14 0 12 0;
+#X connect 15 0 16 0;
+#X connect 15 1 3 0;
+#X connect 16 0 14 0;
+#X connect 16 1 13 0;
+#X restore 14 338 pd firstinlet;
+#N canvas 394 97 493 684 restofinlets 0;
+#X msg 213 232 obj \$1 10 inlet;
+#X obj 186 295 s \$0self;
+#X msg 186 261 obj \$1 30 t b a;
+#X obj 186 199 t a a;
+#X obj 147 53 r \$0makeRestOfInlets;
+#X obj 186 103 * 40;
+#X obj 186 131 + 10;
+#X text 219 106 width of inlet object;
+#X text 218 130 x offset;
+#X obj 86 131 v \$0objects;
+#X obj 58 131 + 2;
+#X obj 166 375 v \$0objects;
+#X obj 147 77 t b a a;
+#X obj 166 325 t b a;
+#X obj 193 350 s \$0inletIndex;
+#X obj 166 410 t a a a;
+#X obj 364 500 + 1;
+#X obj 364 461 t a a;
+#X msg 364 554 connect \$1 0 \$2 0;
+#X obj 364 526 pack f f;
+#X obj 409 500 + 2;
+#X obj 185 483 + 2;
+#X obj 80 513 r \$0inletIndex;
+#X obj 23 460 + 2;
+#X obj 185 619 s \$0self;
+#X obj 185 536 pack f f;
+#X obj 185 453 t a b;
+#X obj 212 504 f;
+#X msg 185 565 connect \$1 0 \$2 0;
+#X obj 23 536 pack f f f;
+#X msg 23 567 connect \$1 1 \$2 \$3;
+#X obj 227 481 r \$0packObjID;
+#X obj 51 492 r \$0packObjID;
+#X connect 0 0 1 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 0 0;
+#X connect 4 0 12 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 9 0;
+#X connect 11 0 15 0;
+#X connect 12 0 9 0;
+#X connect 12 1 13 0;
+#X connect 12 2 5 0;
+#X connect 13 0 11 0;
+#X connect 13 1 14 0;
+#X connect 15 0 23 0;
+#X connect 15 1 26 0;
+#X connect 15 2 17 0;
+#X connect 16 0 19 0;
+#X connect 17 0 16 0;
+#X connect 17 1 20 0;
+#X connect 18 0 24 0;
+#X connect 19 0 18 0;
+#X connect 20 0 19 1;
+#X connect 21 0 25 0;
+#X connect 22 0 29 2;
+#X connect 23 0 29 0;
+#X connect 25 0 28 0;
+#X connect 26 0 21 0;
+#X connect 26 1 27 0;
+#X connect 27 0 25 1;
+#X connect 28 0 24 0;
+#X connect 29 0 30 0;
+#X connect 30 0 24 0;
+#X connect 31 0 27 1;
+#X connect 32 0 29 1;
+#X restore 14 361 pd restofinlets;
+#X obj 14 384 namecanvas \$0self;
diff --git a/sfruit/if-help.pd b/sfruit/if-help.pd
new file mode 100644
index 0000000..0fdd366
--- /dev/null
+++ b/sfruit/if-help.pd
@@ -0,0 +1,37 @@
+#N canvas 623 253 399 403 10;
+#X text 19 20 [if f x] - if f(x) is true \, output from left outlet
+\, else output from right outlet.;
+#X text 19 60 ...where ["f"] is an object that outputs 0 or 1 (like
+[<] or [==]) \, and x is an argument for f.;
+#X text 19 99 Example: to recreate [moses]:;
+#X obj 20 152 if < 5;
+#X floatatom 20 122 5 0 0 0 - - -;
+#X floatatom 20 192 5 0 0 0 - - -;
+#X floatatom 53 192 5 0 0 0 - - -;
+#X obj 20 216 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 53 216 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 17 240 Or route (for floats only):;
+#X floatatom 20 342 5 0 0 0 - - -;
+#X floatatom 65 342 5 0 0 0 - - -;
+#X obj 20 366 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 65 366 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 20 302 if == 11;
+#X msg 20 264 11;
+#X msg 51 264 12;
+#X text 254 370 2008 Luke Iannini;
+#X text 254 385 proyekto.net;
+#X connect 3 0 5 0;
+#X connect 3 1 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 14 0 10 0;
+#X connect 14 1 11 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
diff --git a/sfruit/if.pd b/sfruit/if.pd
new file mode 100644
index 0000000..2ab54b1
--- /dev/null
+++ b/sfruit/if.pd
@@ -0,0 +1,29 @@
+#N canvas 542 305 149 282 10;
+#X obj 71 23 \$1 \$2;
+#X obj 98 -41 inlet;
+#X obj 24 -41 inlet;
+#X obj 24 186 outlet;
+#X obj 71 186 outlet;
+#X obj 24 154 spigot;
+#X obj 71 154 spigot;
+#X obj 71 105 unpack;
+#X obj 71 48 sel 0;
+#X obj 24 -11 t a a;
+#X obj 24 124 t a a;
+#X msg 71 80 0 1;
+#X msg 98 80 1 0;
+#X connect 0 0 8 0;
+#X connect 1 0 0 1;
+#X connect 2 0 9 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 5 1;
+#X connect 7 1 6 1;
+#X connect 8 0 11 0;
+#X connect 8 1 12 0;
+#X connect 9 0 10 0;
+#X connect 9 1 0 0;
+#X connect 10 0 5 0;
+#X connect 10 1 6 0;
+#X connect 11 0 7 0;
+#X connect 12 0 7 0;
diff --git a/sfruit/ifspigot-help.pd b/sfruit/ifspigot-help.pd
new file mode 100644
index 0000000..e9b1209
--- /dev/null
+++ b/sfruit/ifspigot-help.pd
@@ -0,0 +1,11 @@
+#N canvas 630 151 498 250 10;
+#X obj 26 74 ifspigot \$0test;
+#X text 10 12 [ifspigot] - receiver-conditional spigot;
+#X text 124 74 if test is 1 \, spigot is on \, else spigot is off;
+#X obj 26 114 ifspigot \$0test false;
+#X text 160 114 if test is 0 \, spigot is on \, else spigot is off
+;
+#X obj 26 157 ifspigot \$0test true 1;
+#X text 167 152 last argument lets you set default state of internal
+spigot \; with no argument \, it is 0;
+#X text 369 224 2008 Luke Iannini;
diff --git a/sfruit/ifspigot.pd b/sfruit/ifspigot.pd
new file mode 100644
index 0000000..604cc7f
--- /dev/null
+++ b/sfruit/ifspigot.pd
@@ -0,0 +1,20 @@
+#N canvas 0 22 293 288 10;
+#X obj 29 37 inlet;
+#X obj 29 243 outlet;
+#X obj 80 88 r \$1;
+#X obj 80 125 == 1;
+#X obj 152 38 loadbang;
+#X obj 152 59 list append \$2;
+#X msg 152 108 0;
+#X obj 152 84 sel false;
+#X obj 29 156 spigot \$3;
+#X obj 151 243 outlet;
+#X connect 0 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 8 1;
+#X connect 3 0 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 3 1;
+#X connect 7 0 6 0;
+#X connect 8 0 1 0;
diff --git a/sfruit/instance-help.pd b/sfruit/instance-help.pd
new file mode 100644
index 0000000..8333a17
--- /dev/null
+++ b/sfruit/instance-help.pd
@@ -0,0 +1,30 @@
+#N canvas 688 443 594 298 10;
+#X obj 9 96 instance Higgins;
+#X floatatom 9 122 5 0 0 0 - - -;
+#X obj 9 146 instance Higgins;
+#X floatatom 9 172 5 0 0 0 - - -;
+#X obj 9 196 instance Higgins;
+#X floatatom 9 222 5 0 0 0 - - -;
+#X obj 9 246 instance Higgins;
+#X floatatom 9 272 5 0 0 0 - - -;
+#X obj 180 120 v HigginsInst;
+#X obj 180 94 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 180 145 5 0 0 0 - - -;
+#X text 13 11 [instance] keeps track of how many times it has been
+created with the same name. If you have [closebang] \, it will also
+detect when an instance is deleted.;
+#X text 226 140 create a [v <Name>Inst] to find out how many <Name>
+instances currently exist.;
+#X text 373 255 2008 Luke Iannini;
+#X text 373 271 proyekto.net;
+#X text 168 186 Put [instance] inside of your abstractions to assign
+each one a unique number. They will number themselves according to
+their creation order (you can copy and paste abstractions to manipulate
+this \, if desired).;
+#X connect 0 0 1 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
diff --git a/sfruit/instance.pd b/sfruit/instance.pd
new file mode 100644
index 0000000..1c0cc06
--- /dev/null
+++ b/sfruit/instance.pd
@@ -0,0 +1,57 @@
+#N canvas 0 22 479 399 10;
+#X obj 271 25 loadbang;
+#X obj 244 49 + 1;
+#X obj 244 70 s \$0instance;
+#X obj 275 98 closebang;
+#X obj 243 124 - 1;
+#X obj 63 60 r \$0instance;
+#X obj 47 100 f;
+#X obj 17 60 t f b;
+#X obj 34 171 r \$0instance;
+#X obj 18 145 sel 1;
+#X obj 18 196 f;
+#X obj 18 220 - 1;
+#X obj 18 244 s \$0instance;
+#X obj 243 156 closebang;
+#X obj 243 205 f;
+#X obj 259 180 r \$0instance;
+#X obj 18 116 <;
+#X obj 85 329 r \$0instance;
+#X obj 17 33 r \$1InstClosed;
+#X obj 272 49 v \$1Inst;
+#X obj 275 124 v \$1Inst;
+#X obj 243 228 s \$1InstClosed;
+#X obj 85 357 outlet;
+#X text 15 273 Takes instanced object name as argument;
+#X text 16 289 e.g. [instance notescrombler];
+#X text 132 358 This instance's #;
+#X obj 343 370 s \$1-Instances;
+#X obj 309 299 closebang;
+#X obj 309 325 v \$1Inst;
+#X obj 383 299 loadbang;
+#X obj 384 325 v \$1Inst;
+#X connect 0 0 19 0;
+#X connect 1 0 2 0;
+#X connect 1 0 19 0;
+#X connect 3 0 20 0;
+#X connect 4 0 20 0;
+#X connect 5 0 6 1;
+#X connect 6 0 16 1;
+#X connect 7 0 16 0;
+#X connect 7 1 6 0;
+#X connect 8 0 10 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 13 0 14 0;
+#X connect 14 0 21 0;
+#X connect 15 0 14 1;
+#X connect 16 0 9 0;
+#X connect 17 0 22 0;
+#X connect 18 0 7 0;
+#X connect 19 0 1 0;
+#X connect 20 0 4 0;
+#X connect 27 0 28 0;
+#X connect 28 0 26 0;
+#X connect 29 0 30 0;
+#X connect 30 0 26 0;
diff --git a/sfruit/keycommand-help.pd b/sfruit/keycommand-help.pd
new file mode 100644
index 0000000..4780b65
--- /dev/null
+++ b/sfruit/keycommand-help.pd
@@ -0,0 +1,41 @@
+#N canvas 932 55 326 225 10;
+#X text 12 9 [keycommand] - assign a keyboard key to a receiver;
+#X obj 42 82 keycommand a \$0go;
+#X obj 42 102 keycommand s \$0do-it;
+#X obj 42 122 keycommand d \$0now;
+#X obj 42 142 keycommand f \$0comeon;
+#X obj 212 82 r \$0go;
+#X obj 212 102 r \$0do-it;
+#X obj 212 122 r \$0now;
+#X obj 212 142 r \$0comeon;
+#X obj 294 99 bng 15 250 50 0 empty empty empty 17 7 0 10 -258113 -257985
+-1;
+#X obj 294 119 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -4160
+-1;
+#X obj 294 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -159808
+-4034 -1;
+#X obj 294 159 bng 15 250 50 0 empty empty empty 17 7 0 10 -260097
+-4032 -1;
+#X text 187 183 2008 Luke Iannini;
+#X text 187 198 proyekto.net;
+#N canvas 0 22 450 300 optional-message 0;
+#X obj 289 70 r \$0messages;
+#X obj 41 87 keycommand w \$0messages SAID;
+#X obj 41 107 keycommand e \$0messages WHO;
+#X obj 41 67 keycommand q \$0messages I;
+#X obj 41 127 keycommand r \$0messages PUT;
+#X obj 41 147 keycommand t \$0messages ALL;
+#X obj 41 167 keycommand y \$0messages THOSE;
+#X obj 41 187 keycommand u \$0messages THINGS;
+#X obj 41 207 keycommand i \$0messages IN;
+#X obj 41 227 keycommand o \$0messages YOUR;
+#X obj 41 247 keycommand p \$0messages HEAD;
+#X symbolatom 289 124 10 0 0 0 - - -;
+#X text 51 17 keycommand takes an optional third argument to send a
+symbol to the receiver specified in the second argument.;
+#X connect 0 0 11 0;
+#X restore 8 196 pd optional-message;
+#X connect 5 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 8 0 12 0;
diff --git a/sfruit/keycommand.pd b/sfruit/keycommand.pd
new file mode 100644
index 0000000..1b6a5d5
--- /dev/null
+++ b/sfruit/keycommand.pd
@@ -0,0 +1,6 @@
+#N canvas 274 22 177 175 10;
+#X obj 29 47 keynamedown \$1;
+#X obj 29 116 s \$2;
+#X obj 29 82 list append \$3;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
diff --git a/sfruit/keymodroute-help.pd b/sfruit/keymodroute-help.pd
new file mode 100644
index 0000000..b340f1c
--- /dev/null
+++ b/sfruit/keymodroute-help.pd
@@ -0,0 +1,15 @@
+#N canvas 260 402 450 300 10;
+#X obj 125 130 keymodroute Alt_L;
+#X obj 125 97 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 125 175 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 224 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 13 12 keymodroute - divert a message stream to the right outlet
+when a modifier key is held down.;
+#X text 145 96 click with and without "Alt" held down;
+#X text 301 274 2008 Luke Iannini;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 1 0 0 0;
diff --git a/sfruit/keymodroute.pd b/sfruit/keymodroute.pd
new file mode 100644
index 0000000..a0b41fb
--- /dev/null
+++ b/sfruit/keymodroute.pd
@@ -0,0 +1,17 @@
+#N canvas 11 461 208 158 10;
+#X obj 77 28 keynameonly \$1;
+#X obj 32 27 inlet;
+#X obj 32 51 t a a;
+#X obj 102 92 spigot;
+#X obj 77 51 == 0;
+#X obj 32 91 spigot 1;
+#X obj 32 115 outlet;
+#X obj 102 115 outlet;
+#X connect 0 0 4 0;
+#X connect 0 0 3 1;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 1 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 5 1;
+#X connect 5 0 6 0;
diff --git a/sfruit/keynamedown-help.pd b/sfruit/keynamedown-help.pd
new file mode 100644
index 0000000..f291038
--- /dev/null
+++ b/sfruit/keynamedown-help.pd
@@ -0,0 +1,9 @@
+#N canvas 889 330 358 158 10;
+#X text 11 17 [keynamedown] outputs the [keyname] pressed only on the
+press \, not the release.;
+#X obj 36 111 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 36 85 keynamedown a;
+#X text 181 122 2008 Luke Iannini;
+#X text 180 137 proyekto.net;
+#X connect 2 0 1 0;
diff --git a/sfruit/keynamedown.pd b/sfruit/keynamedown.pd
new file mode 100644
index 0000000..61a3f8f
--- /dev/null
+++ b/sfruit/keynamedown.pd
@@ -0,0 +1,16 @@
+#N canvas 688 107 173 195 10;
+#X obj 26 17 keyname;
+#X obj 26 120 spigot;
+#X msg 85 89 1;
+#X msg 45 89 0;
+#X obj 26 64 sel 1 0;
+#X obj 85 64 sel \$1;
+#X obj 26 152 outlet;
+#X connect 0 0 4 0;
+#X connect 0 1 5 0;
+#X connect 1 0 6 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 4 1 3 0;
+#X connect 5 0 2 0;
diff --git a/sfruit/keynameonly-help.pd b/sfruit/keynameonly-help.pd
new file mode 100644
index 0000000..e6488c1
--- /dev/null
+++ b/sfruit/keynameonly-help.pd
@@ -0,0 +1,22 @@
+#N canvas 98 339 450 300 10;
+#X obj 63 113 keynameonly a;
+#X obj 173 113 keynameonly b;
+#X obj 283 113 keynameonly c;
+#X floatatom 63 137 5 0 0 0 - - -;
+#X floatatom 173 137 5 0 0 0 - - -;
+#X floatatom 283 137 5 0 0 0 - - -;
+#X obj 63 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 173 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 283 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 16 15 keynameonly - only listen for keystrokes from one key
+;
+#X text 279 271 2008 Luke Iannini;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 8 0;
diff --git a/sfruit/keynameonly.pd b/sfruit/keynameonly.pd
new file mode 100644
index 0000000..fa76d9a
--- /dev/null
+++ b/sfruit/keynameonly.pd
@@ -0,0 +1,14 @@
+#N canvas 0 22 195 224 10;
+#X obj 47 65 keyname;
+#X obj 86 89 sel \$1;
+#X obj 47 172 outlet;
+#X obj 47 146 spigot;
+#X msg 86 113 1;
+#X msg 119 113 0;
+#X connect 0 0 3 0;
+#X connect 0 1 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 1;
diff --git a/sfruit/list-dripx-help.pd b/sfruit/list-dripx-help.pd
new file mode 100644
index 0000000..d0f1fcf
--- /dev/null
+++ b/sfruit/list-dripx-help.pd
@@ -0,0 +1,15 @@
+#N canvas 531 393 379 300 10;
+#X msg 76 68 a b c d e f g h i;
+#X obj 76 103 list-dripx 3;
+#X obj 76 172 print;
+#X msg 167 103 2;
+#X obj 145 150 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1
+-1;
+#X text 80 244 based on list-drip by Frank Barknecht;
+#X text 252 272 2008 Luke Iannini;
+#X text 4 13 list-dripx - output (n) elements of a list at a time.
+;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 4 0;
+#X connect 3 0 1 1;
diff --git a/sfruit/list-dripx.pd b/sfruit/list-dripx.pd
new file mode 100644
index 0000000..c3b6851
--- /dev/null
+++ b/sfruit/list-dripx.pd
@@ -0,0 +1,43 @@
+#N canvas 839 426 450 300 10;
+#X declare -lib list-abs;
+#N canvas 0 22 701 318 drip 1;
+#X obj 64 123 until;
+#X obj 64 181 list append;
+#X obj 194 206 bang;
+#X text 126 90 First store list \, then start the loop;
+#X text 143 118 "until" bangs its output until told to stop by a "bang"
+to its right inlet.;
+#X text 163 168 Store the remaining list.;
+#X text 230 209 third outlet of "split" tells us to stop.;
+#X obj 64 243 outlet;
+#X obj 64 57 inlet;
+#X text 217 44 From list-help.pd;
+#X obj 143 243 outlet;
+#X obj 64 86 t b a;
+#X obj 64 206 list split 1;
+#X obj 333 157 loadbang;
+#X obj 333 177 list-onearg \$1;
+#X obj 414 156 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 12 0;
+#X connect 2 0 0 1;
+#X connect 8 0 11 0;
+#X connect 11 0 0 0;
+#X connect 11 1 1 1;
+#X connect 12 0 7 0;
+#X connect 12 1 1 1;
+#X connect 12 2 2 0;
+#X connect 12 2 10 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 1;
+#X connect 15 0 14 1;
+#X restore 133 139 pd drip;
+#X obj 133 90 inlet;
+#X obj 133 212 outlet;
+#X obj 177 181 outlet;
+#X obj 172 90 inlet;
+#X obj 238 123 import list-abs;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 1 0 0 0;
+#X connect 4 0 0 1;
diff --git a/sfruit/list-idx-list-help.pd b/sfruit/list-idx-list-help.pd
new file mode 100644
index 0000000..79a6b8e
--- /dev/null
+++ b/sfruit/list-idx-list-help.pd
@@ -0,0 +1,38 @@
+#N canvas 0 22 630 440 10;
+#X declare -lib list-abs -lib iemlib;
+#X obj 33 221 list-idx-list in the town where I was born lived a man
+who sailed to sea;
+#X obj 33 98 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
+;
+#X obj 33 78 loadbang;
+#X obj 33 145 f;
+#X obj 60 145 + 1;
+#X obj 86 145 mod 14;
+#X msg 242 140 and he told us of his life in the land of sub ma rines
+;
+#X obj 33 260 list prepend label;
+#X obj 33 283 list trim;
+#X obj 33 307 s \$0.canvas;
+#X obj 37 340 cnv 15 200 60 empty \$0.canvas sailed 70 28 0 20 -257985
+-66577 0;
+#X msg 242 119 in the town where I was born lived a man who sailed
+to sea;
+#X text 26 14 [list-idx-list] a wrapper for list-idx that makes building
+simple "arrays" easier;
+#X text 481 404 2008 Luke Iannini;
+#X obj 33 116 metro 500;
+#X obj 33 176 nbx 2 25 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 20
+-262144 -1 -1 11 256;
+#X connect 0 0 7 0;
+#X connect 1 0 14 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 3 0 15 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 1;
+#X connect 6 0 0 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 11 0 0 1;
+#X connect 14 0 3 0;
+#X connect 15 0 0 0;
diff --git a/sfruit/list-idx-list.pd b/sfruit/list-idx-list.pd
new file mode 100644
index 0000000..d390395
--- /dev/null
+++ b/sfruit/list-idx-list.pd
@@ -0,0 +1,19 @@
+#N canvas 244 335 290 197 10;
+#X declare -lib list-abs -lib iemlib;
+#X obj 39 131 list-idx;
+#X obj 60 87 dollarg;
+#X obj 39 109 list;
+#X obj 60 66 loadbang;
+#X obj 39 23 inlet;
+#X obj 39 44 t b a;
+#X obj 39 156 outlet;
+#X obj 135 68 import list-abs iemlib;
+#X obj 140 23 inlet;
+#X connect 0 0 6 0;
+#X connect 1 0 2 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 5 1 0 1;
+#X connect 8 0 2 1;
diff --git a/sfruit/list-idx-many-help.pd b/sfruit/list-idx-many-help.pd
new file mode 100644
index 0000000..780a160
--- /dev/null
+++ b/sfruit/list-idx-many-help.pd
@@ -0,0 +1,14 @@
+#N canvas 301 700 450 300 10;
+#X declare -lib iemlib -lib list-abs;
+#X obj 79 160 list-idx-many 2 4 6;
+#X obj 79 190 print;
+#X msg 79 114 a b c d e f g;
+#X text 19 12 [list-idx-many] - just like [list-idx] except you can
+specify multiple indexes to grab (outputting a new list instead of
+a single element);
+#X msg 190 115 1 2 4 5 6;
+#X text 276 230 2008 Luke Iannini;
+#X text 276 246 proyekto.net;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 4 0 0 1;
diff --git a/sfruit/list-idx-many.pd b/sfruit/list-idx-many.pd
new file mode 100644
index 0000000..36af58e
--- /dev/null
+++ b/sfruit/list-idx-many.pd
@@ -0,0 +1,37 @@
+#N canvas 1079 646 553 411 10;
+#X declare -lib iemlib -lib list-abs;
+#X obj 285 34 import iemlib list-abs;
+#X obj 133 61 dollarg;
+#X obj 112 153 list;
+#X obj 133 40 loadbang;
+#X obj 203 40 inlet;
+#X obj 64 154 list;
+#X obj 64 252 list-idx;
+#X obj 112 183 list-drip;
+#X obj 112 211 t b a;
+#X obj 85 40 inlet;
+#X obj 64 287 list-extend;
+#X obj 85 79 t b a b;
+#X obj 203 183 t b;
+#X obj 163 349 list;
+#X obj 163 374 outlet;
+#X text 182 60 can remove the dollarg with no harm except that the
+index-list must be put in the right inlet rather than as arguments
+;
+#X connect 1 0 2 1;
+#X connect 2 0 7 0;
+#X connect 3 0 1 0;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 7 1 13 0;
+#X connect 8 0 5 0;
+#X connect 8 1 6 1;
+#X connect 9 0 11 0;
+#X connect 10 0 13 1;
+#X connect 11 0 2 0;
+#X connect 11 1 5 1;
+#X connect 11 2 12 0;
+#X connect 12 0 10 1;
+#X connect 13 0 14 0;
diff --git a/sfruit/list-proc-insert-help.pd b/sfruit/list-proc-insert-help.pd
new file mode 100644
index 0000000..07d112f
--- /dev/null
+++ b/sfruit/list-proc-insert-help.pd
@@ -0,0 +1,47 @@
+#N canvas 246 385 587 311 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 58 181 list-proc-insert;
+#X msg 58 96 a b c d e f g;
+#X obj 182 181 list-len;
+#X obj 104 130 hradio 15 1 0 8 empty empty POS_(zero-based) 0 -6 0
+8 -262144 -1 -1 0;
+#X floatatom 104 155 5 0 0 0 - - -;
+#X obj 58 216 print NEW_LIST;
+#X text 9 65 Argument: default POS;
+#X text 8 45 POS is zerobased. Negative POS will count from the end.
+;
+#X text 10 268 based on list-insert by frank barknecht;
+#X text 429 268 2008 Luke Iannini;
+#X text 235 122 POS defaults to 0 \, meaning it will prepend the result
+to the original list.;
+#N canvas 0 22 322 281 how_to_append 0;
+#X obj 58 181 list-proc-insert;
+#X msg 58 66 a b c d e f g;
+#X obj 58 97 t a a;
+#X obj 58 216 print NEW_LIST2;
+#X obj 85 134 list-len;
+#X obj 183 189 f;
+#X obj 213 189 + 1;
+#X obj 183 168 t b;
+#X connect 0 0 3 0;
+#X connect 0 1 7 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 2 1 4 0;
+#X connect 4 0 0 1;
+#X connect 5 0 0 2;
+#X connect 5 0 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 5 0;
+#X restore 310 185 pd how_to_append;
+#X text 7 6 list-proc-insert: call user-defined process on incoming
+list and insert result into original list at position POS.;
+#X obj 416 30 import list-abs;
+#X connect 0 0 5 0;
+#X connect 0 1 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 2;
+#X connect 3 0 4 0;
+#X connect 4 0 0 1;
diff --git a/sfruit/list-proc-insert.pd b/sfruit/list-proc-insert.pd
new file mode 100644
index 0000000..106bff6
--- /dev/null
+++ b/sfruit/list-proc-insert.pd
@@ -0,0 +1,16 @@
+#N canvas 433 22 275 240 10;
+#X declare -lib list-abs;
+#X obj 35 34 inlet;
+#X obj 75 34 inlet;
+#X obj 35 147 list-insert \$1;
+#X obj 35 62 t a a;
+#X obj 176 175 outlet;
+#X obj 178 39 inlet;
+#X obj 35 174 outlet;
+#X obj 167 92 import list-abs;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 2 0 6 0;
+#X connect 3 0 4 0;
+#X connect 3 1 2 2;
+#X connect 5 0 2 0;
diff --git a/sfruit/list-range-help.pd b/sfruit/list-range-help.pd
new file mode 100644
index 0000000..987a2e0
--- /dev/null
+++ b/sfruit/list-range-help.pd
@@ -0,0 +1,55 @@
+#N canvas 198 58 783 493 10;
+#X obj 22 194 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 22 317 prepent set;
+#X text 10 2 list-range: create a list of all numbers from x to y \,
+with interval of z;
+#X text 11 37 Takes 1 \, 2 or 3 args:;
+#X text 388 65 With creation arguments \, only outputs on bang. Bang
+also outputs a list with the last input parameters. Newly input parameters
+will cause immediate output.;
+#X obj 206 317 prepent set;
+#X msg 187 200 -12;
+#X msg 224 200 12;
+#X obj 496 317 prepent set;
+#X obj 496 243 list-range;
+#X msg 467 200 -12 32 7;
+#X msg 530 200 1 100 50;
+#X text 11 86 2 args: output [n1 to (n2-1)] \, with interval 1 if n1
+is less than n2 \, or interval -1 if n2 is less than n1;
+#X text 11 56 1 arg: output [0 to (n-1)] with interval 1 if n is positive
+\, or interval -1 if N is negative.;
+#X text 11 116 3 args: output [n1 to (n2-1)] with interval n3.;
+#X msg 330 200 5 20;
+#X msg 369 200 5 -3;
+#X obj 346 317 prepent set;
+#X text 19 376 Creation args;
+#X text 361 268 Two args;
+#X text 509 267 Three args;
+#X msg 595 202 1 99 11;
+#X msg 22 349;
+#X text 615 441 2008 Luke Iannini;
+#X obj 615 456 pddplink http://proyekto.net;
+#X obj 206 243 list-range;
+#X obj 346 243 list-range;
+#X obj 22 243 list-range 0 9 2;
+#X text 213 272 One arg;
+#X msg 496 353;
+#X msg 346 388;
+#X msg 206 428;
+#X connect 0 0 27 0;
+#X connect 1 0 22 0;
+#X connect 5 0 31 0;
+#X connect 6 0 25 0;
+#X connect 7 0 25 0;
+#X connect 8 0 29 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 15 0 26 0;
+#X connect 16 0 26 0;
+#X connect 17 0 30 0;
+#X connect 21 0 9 0;
+#X connect 25 0 5 0;
+#X connect 26 0 17 0;
+#X connect 27 0 1 0;
diff --git a/sfruit/list-range.pd b/sfruit/list-range.pd
new file mode 100644
index 0000000..2ca09ed
--- /dev/null
+++ b/sfruit/list-range.pd
@@ -0,0 +1,159 @@
+#N canvas 740 166 285 632 10;
+#X declare -lib list-abs;
+#X obj 129 52 t b b b;
+#X obj 129 168 list-extend;
+#X obj 129 28 loadbang;
+#X obj 23 37 inlet;
+#N canvas 0 22 645 437 conformList 0;
+#X obj 100 17 inlet;
+#X obj 100 47 t a a;
+#X obj 100 165 list;
+#X obj 100 79 list length;
+#X obj 100 105 sel 1 2 3;
+#X obj 273 165 list;
+#X obj 491 165 list;
+#X obj 273 240 -;
+#X obj 273 219 unpack f f;
+#X obj 273 192 t a a;
+#X obj 273 289 sel 0 1;
+#X obj 273 317 list;
+#X obj 363 317 list;
+#X obj 273 347 list append 1;
+#X obj 363 347 list append -1;
+#X obj 273 263 > 0;
+#X obj 100 194 t a a;
+#X obj 35 298 list;
+#X obj 127 298 list;
+#X obj 100 243 sel 0 1;
+#X obj 100 219 > 0;
+#X obj 127 323 list prepend 0;
+#X obj 127 349 list append 1;
+#X obj 273 395 outlet;
+#X text 259 57 3 elements: no change;
+#X text 259 37 2 elements: count from el1 to el2;
+#X text 260 8 1 element: negative \, count down from 0 positive \,
+count up from zero.;
+#X obj 35 348 list append -1;
+#X obj 35 323 list prepend 0;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 1 1 2 1;
+#X connect 1 1 5 1;
+#X connect 1 1 6 1;
+#X connect 2 0 16 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 9 0;
+#X connect 6 0 23 0;
+#X connect 7 0 15 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 9 0 8 0;
+#X connect 9 1 11 1;
+#X connect 9 1 12 1;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 23 0;
+#X connect 14 0 23 0;
+#X connect 15 0 10 0;
+#X connect 16 0 20 0;
+#X connect 16 1 18 1;
+#X connect 16 1 17 1;
+#X connect 17 0 28 0;
+#X connect 18 0 21 0;
+#X connect 19 0 17 0;
+#X connect 19 1 18 0;
+#X connect 20 0 19 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 27 0 23 0;
+#X connect 28 0 27 0;
+#X restore 23 215 pd conformList;
+#X obj 50 475 until;
+#X obj 23 414 f;
+#X obj 65 449 unpack f f f;
+#X obj 50 509 f;
+#X obj 81 509 +;
+#X obj 50 541 list-extend;
+#X obj 23 570 list;
+#X obj 23 449 t b a;
+#X obj 23 596 outlet;
+#X obj 23 241 t b a a b;
+#N canvas 0 22 450 300 calcElementCount 0;
+#X obj 107 276 outlet;
+#X obj 107 21 inlet;
+#X obj 107 51 unpack f f f;
+#X obj 107 77 -;
+#X obj 107 102 abs;
+#X obj 176 102 abs;
+#X obj 107 127 pack f f;
+#X obj 134 175 div;
+#X obj 107 175 mod;
+#X obj 107 150 t a a;
+#X obj 107 199 sel 0;
+#X obj 107 226 f;
+#X obj 145 226 f;
+#X obj 145 199 b;
+#X obj 145 247 + 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 3 1;
+#X connect 2 2 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 6 1;
+#X connect 6 0 9 0;
+#X connect 7 0 11 1;
+#X connect 7 0 12 1;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 1 7 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 0 0;
+#X restore 57 283 pd calcElementCount;
+#X obj 23 88 route bang;
+#X obj 50 143 t b a;
+#X obj 23 190 list;
+#X obj 148 113 list-onearg \$2;
+#X obj 129 143 list-onearg \$3;
+#X obj 168 83 \$1;
+#X obj 152 246 import list-abs;
+#X connect 0 0 20 0;
+#X connect 0 1 19 0;
+#X connect 0 2 21 0;
+#X connect 1 0 18 1;
+#X connect 2 0 0 0;
+#X connect 3 0 16 0;
+#X connect 4 0 14 0;
+#X connect 5 0 8 0;
+#X connect 6 0 12 0;
+#X connect 7 0 8 1;
+#X connect 7 2 9 1;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 1;
+#X connect 10 0 11 1;
+#X connect 11 0 13 0;
+#X connect 12 0 11 0;
+#X connect 12 1 5 0;
+#X connect 14 0 6 0;
+#X connect 14 1 7 0;
+#X connect 14 2 15 0;
+#X connect 14 3 10 1;
+#X connect 15 0 6 1;
+#X connect 16 0 18 0;
+#X connect 16 1 17 0;
+#X connect 17 0 18 0;
+#X connect 17 1 18 1;
+#X connect 18 0 4 0;
+#X connect 19 0 1 0;
+#X connect 20 0 1 0;
+#X connect 21 0 1 0;
diff --git a/sfruit/list-remove-help.pd b/sfruit/list-remove-help.pd
new file mode 100644
index 0000000..a2f23b9
--- /dev/null
+++ b/sfruit/list-remove-help.pd
@@ -0,0 +1,21 @@
+#N canvas 558 452 463 332 10;
+#X obj 201 141 hradio 15 1 0 8 empty empty POS_(zero-based) 0 -6 0
+8 -262144 -1 -1 1;
+#X floatatom 201 161 5 0 0 0 - - -;
+#X msg 151 109 0 1 2 3 4;
+#X obj 151 227 print;
+#X text 36 51 Negative POS counts from the end of the list.;
+#X text 35 26 list-remove: remove (n) elements at position POS from
+list.;
+#X text 36 72 Arguments: POS to begin removal \, number of elements
+to remove.;
+#X floatatom 251 176 5 0 0 0 - - -;
+#X text 290 176 # of elements;
+#X obj 151 197 list-remove 2 2;
+#X text 235 304 list-remove 2007 Luke Iannini;
+#X text 5 276 helpfile based on list-abs by Frank Barknecht;
+#X connect 0 0 1 0;
+#X connect 1 0 9 1;
+#X connect 2 0 9 0;
+#X connect 7 0 9 2;
+#X connect 9 0 3 0;
diff --git a/sfruit/list-remove.pd b/sfruit/list-remove.pd
new file mode 100644
index 0000000..9f9f31f
--- /dev/null
+++ b/sfruit/list-remove.pd
@@ -0,0 +1,30 @@
+#N canvas 611 258 453 367 10;
+#X obj 69 177 list split \$1;
+#X obj 173 178 list split;
+#X obj 238 125 \$1;
+#X obj 238 151 + \$2;
+#X obj 263 125 loadbang;
+#X obj 238 69 inlet;
+#X obj 357 16 inlet;
+#X obj 357 72 t b f;
+#X obj 69 18 inlet;
+#X obj 69 48 t a a;
+#X obj 69 237 list append;
+#X obj 69 280 outlet;
+#X obj 238 221 b;
+#X connect 0 0 10 0;
+#X connect 1 1 10 1;
+#X connect 1 2 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X connect 5 0 0 1;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 7 1 3 1;
+#X connect 8 0 9 0;
+#X connect 9 0 0 0;
+#X connect 9 1 1 0;
+#X connect 10 0 11 0;
+#X connect 12 0 10 1;
diff --git a/sfruit/list-sample-help.pd b/sfruit/list-sample-help.pd
new file mode 100644
index 0000000..f274505
--- /dev/null
+++ b/sfruit/list-sample-help.pd
@@ -0,0 +1,27 @@
+#N canvas 421 159 709 295 10;
+#X obj 30 128 list-sample 5;
+#X msg 30 61 a b c d e f g h i j k l m n o p q r s t u v w x y z;
+#X obj 30 160 prepent set;
+#X floatatom 128 129 5 0 0 0 - - -;
+#X msg 167 128 3;
+#X msg 167 152 20;
+#X obj 276 147 list-shuffle;
+#X msg 276 110 a b c d e f g h i j k l m n o p q r s t u v w x y z
+;
+#X obj 276 173 prepent set;
+#X text 356 147 is just list-sample with a length equal to the length
+of the input list;
+#X text 23 10 list-sample: grab n unique random items from the incoming
+list and output them as a new list;
+#X text 572 266 2008 Luke Iannini;
+#X msg 30 199;
+#X msg 276 212;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 3 0 0 1;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 13 0;
diff --git a/sfruit/list-sample.pd b/sfruit/list-sample.pd
new file mode 100644
index 0000000..785cb53
--- /dev/null
+++ b/sfruit/list-sample.pd
@@ -0,0 +1,35 @@
+#N canvas 754 395 450 300 10;
+#X declare -lib list-abs -lib zexy;
+#X obj 47 189 list-idx;
+#X obj 26 8 inlet;
+#X obj 107 116 list length;
+#X obj 92 160 urn;
+#X obj 234 18 inlet;
+#X obj 47 58 \$1;
+#X obj 47 112 list;
+#X obj 47 86 until;
+#X obj 47 133 t a b;
+#X obj 47 221 list-extend;
+#X obj 200 116 t b;
+#X obj 26 274 outlet;
+#X obj 26 245 list;
+#X obj 26 33 t b b a a b;
+#X obj 241 65 import list-abs zexy;
+#X connect 0 0 9 0;
+#X connect 1 0 13 0;
+#X connect 2 0 3 1;
+#X connect 3 0 0 1;
+#X connect 4 0 5 1;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 0 0;
+#X connect 8 1 3 0;
+#X connect 9 0 12 1;
+#X connect 10 0 9 1;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 13 1 5 0;
+#X connect 13 2 6 1;
+#X connect 13 3 2 0;
+#X connect 13 4 10 0;
diff --git a/sfruit/list-shuffle-help.pd b/sfruit/list-shuffle-help.pd
new file mode 100644
index 0000000..b63454a
--- /dev/null
+++ b/sfruit/list-shuffle-help.pd
@@ -0,0 +1,12 @@
+#N canvas 0 22 408 277 10;
+#X obj 50 108 list-shuffle;
+#X msg 50 71 a b c d e f g h i j k l m n o p q r s t u v w x y z;
+#X obj 50 134 prepent set;
+#X msg 50 173;
+#X text 30 17 list-shuffle: reorder the incoming list in a random fashion
+;
+#X text 28 33 (see list-sample to grab just a few items randomly);
+#X text 251 241 2008 Luke Iannini;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
diff --git a/sfruit/list-shuffle.pd b/sfruit/list-shuffle.pd
new file mode 100644
index 0000000..ce211e7
--- /dev/null
+++ b/sfruit/list-shuffle.pd
@@ -0,0 +1,11 @@
+#N canvas 681 406 169 195 10;
+#X obj 41 124 list-sample;
+#X obj 41 33 inlet;
+#X obj 41 59 t a a;
+#X obj 68 88 list length;
+#X obj 41 155 outlet;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 2 1 3 0;
+#X connect 3 0 0 1;
diff --git a/sfruit/list-slice-help.pd b/sfruit/list-slice-help.pd
new file mode 100644
index 0000000..af07c8b
--- /dev/null
+++ b/sfruit/list-slice-help.pd
@@ -0,0 +1,24 @@
+#N canvas 620 339 431 350 10;
+#X declare -lib list-abs;
+#X obj 107 307 print;
+#X msg 107 154 0 1 2 3 4 5 6 7 8 9 10 11;
+#X text 6 12 [list-slice]: grab a slice from the interior of a list.
+First arg is the start-index (inclusive) \, second arg is the end index
+(not inclusive).;
+#X text 5 59 Added coolness: negative indices work for both arguments.
+;
+#X text 12 73 e.g.: 2 -2 removes the first two and last two items;
+#X obj 107 262 list-slice 3 8;
+#X msg 148 186 2 -2;
+#X msg 158 211 -5 -2;
+#X obj 148 240 unpack f f;
+#X text 257 309 2008 Luke Iannini;
+#X text 257 325 proyekto.net sndrft;
+#X text 43 88 -5 -2 gives the fifth-to-last through third-to-last items
+;
+#X connect 1 0 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 8 1 5 2;
diff --git a/sfruit/list-slice.pd b/sfruit/list-slice.pd
new file mode 100644
index 0000000..255bbd3
--- /dev/null
+++ b/sfruit/list-slice.pd
@@ -0,0 +1,56 @@
+#N canvas 73 356 492 370 10;
+#X declare -lib list-abs;
+#X obj 308 24 import list-abs;
+#X obj 57 14 inlet;
+#X obj 85 318 outlet;
+#X obj 114 15 inlet start-at-idx;
+#X obj 102 237 spigot;
+#X obj 201 87 inlet end-at-idx;
+#X obj 187 237 spigot;
+#X obj 114 79 t a a;
+#X obj 57 99 list-splat;
+#X obj 85 290 list-splat;
+#X obj 122 56 list append \$1;
+#X obj 122 36 loadbang;
+#X obj 187 214 f;
+#X obj 102 262 list-len;
+#X obj 187 261 expr $f2 - $f1;
+#X obj 209 108 loadbang;
+#X obj 209 128 list append \$2;
+#X obj 135 214 == 0;
+#X obj 220 214 > 0;
+#X obj 297 261 spigot;
+#X obj 330 214 < 0;
+#X obj 85 167 t a a b b;
+#X obj 297 213 f;
+#X obj 201 149 t a a a a a;
+#X connect 1 0 8 0;
+#X connect 3 0 7 0;
+#X connect 4 0 13 0;
+#X connect 5 0 23 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 1;
+#X connect 7 1 12 1;
+#X connect 8 1 21 0;
+#X connect 9 0 2 0;
+#X connect 10 0 7 0;
+#X connect 11 0 10 0;
+#X connect 12 0 6 0;
+#X connect 13 0 9 1;
+#X connect 14 0 9 1;
+#X connect 15 0 16 0;
+#X connect 16 0 23 0;
+#X connect 17 0 4 1;
+#X connect 18 0 6 1;
+#X connect 19 0 9 1;
+#X connect 20 0 19 1;
+#X connect 21 0 9 0;
+#X connect 21 1 4 0;
+#X connect 21 2 12 0;
+#X connect 21 3 22 0;
+#X connect 22 0 19 0;
+#X connect 23 0 17 0;
+#X connect 23 1 18 0;
+#X connect 23 2 14 1;
+#X connect 23 3 22 1;
+#X connect 23 4 20 0;
diff --git a/sfruit/list-split-at-help.pd b/sfruit/list-split-at-help.pd
new file mode 100644
index 0000000..a6c29f8
--- /dev/null
+++ b/sfruit/list-split-at-help.pd
@@ -0,0 +1,36 @@
+#N canvas 741 82 388 382 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 49 128 list-split-at /;
+#X msg 161 128 symbol |;
+#X msg 161 158 symbol /;
+#N canvas 0 22 450 300 display 0;
+#X obj 120 112 prepent add;
+#X obj 120 80 inlet;
+#X obj 120 164 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X restore 49 199 pd display;
+#X msg -1 128 set;
+#X obj 49 100 t a b;
+#X obj 136 203 bng 15 250 50 0 empty empty done 17 7 0 10 -262144 -4034
+-1;
+#X text 8 330 note: due to limitations of [select] \, the type of atom
+sent to the right inlet must be the same as the type of the creation
+argument (i.e. float>float or symbol>symbol);
+#X msg 49 77 a b | c / d | e f g / h i j | k / l m | n o p;
+#X text 11 12 [list-split-at] splits a list into multiple lists upon
+encountering a delimiter;
+#X msg 49 227;
+#X text 271 289 2008 Luke Iannini;
+#X text 271 303 proyekto.net;
+#X obj 256 36 import list-abs;
+#X connect 0 0 3 0;
+#X connect 0 1 6 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 1;
+#X connect 3 0 10 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 5 1 4 0;
+#X connect 8 0 5 0;
diff --git a/sfruit/list-split-at.pd b/sfruit/list-split-at.pd
new file mode 100644
index 0000000..e71ded5
--- /dev/null
+++ b/sfruit/list-split-at.pd
@@ -0,0 +1,28 @@
+#N canvas 741 479 192 221 10;
+#X declare -lib list-abs;
+#X obj 25 47 list-drip;
+#X obj 50 130 list-extend;
+#X obj 25 160 list;
+#X obj 25 100 t b b;
+#X obj 25 72 sel \$1;
+#X obj 25 5 inlet;
+#X obj 25 182 outlet;
+#X obj 106 55 inlet;
+#X obj 25 25 t a b;
+#X obj 76 159 t b b;
+#X obj 76 182 outlet;
+#X obj 85 14 import list-abs;
+#X connect 0 0 4 0;
+#X connect 0 1 9 0;
+#X connect 1 0 2 1;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 3 1 1 1;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 1;
+#X connect 8 0 0 0;
+#X connect 8 1 1 1;
+#X connect 9 0 10 0;
+#X connect 9 1 2 0;
diff --git a/sfruit/list-swap-help.pd b/sfruit/list-swap-help.pd
new file mode 100644
index 0000000..41c9917
--- /dev/null
+++ b/sfruit/list-swap-help.pd
@@ -0,0 +1,21 @@
+#N canvas 123 502 452 313 10;
+#X msg 79 125 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15;
+#X msg 43 70 doodle doddle deedle;
+#X obj 43 189 list-swap 2;
+#X obj 43 258 print Swapped;
+#X text 78 108 List you'd like altered;
+#X text 43 54 Replacement items;
+#X obj 115 154 hradio 15 1 0 8 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X floatatom 115 173 5 0 0 0 - - -;
+#X text 156 173 Position to begin writing;
+#X text 18 13 List-swap: overwrite a portion of a list with another
+list.;
+#X text 101 208 Argument is default position;
+#X text 315 287 2007 Luke Iannini;
+#X text 3 293 Built on list-insert by Frank Barknecht;
+#X connect 0 0 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 2 2;
diff --git a/sfruit/list-swap.pd b/sfruit/list-swap.pd
new file mode 100644
index 0000000..09add8a
--- /dev/null
+++ b/sfruit/list-swap.pd
@@ -0,0 +1,26 @@
+#N canvas 514 190 357 287 10;
+#X declare -lib list-abs;
+#X obj 101 25 inlet;
+#X obj 100 193 list-insert;
+#X obj 145 92 list;
+#X obj 217 24 inlet;
+#X obj 168 24 inlet;
+#X obj 217 112 \$1;
+#X obj 100 228 outlet;
+#X obj 101 53 t a b b a;
+#X obj 246 112 list length;
+#X obj 145 162 list-remove;
+#X obj 243 67 import list-abs;
+#X connect 0 0 7 0;
+#X connect 1 0 6 0;
+#X connect 2 0 9 0;
+#X connect 3 0 5 0;
+#X connect 4 0 2 1;
+#X connect 5 0 1 1;
+#X connect 5 0 9 1;
+#X connect 7 0 1 0;
+#X connect 7 1 2 0;
+#X connect 7 2 5 0;
+#X connect 7 3 8 0;
+#X connect 8 0 9 2;
+#X connect 9 0 1 2;
diff --git a/sfruit/list-value-extend-help.pd b/sfruit/list-value-extend-help.pd
new file mode 100644
index 0000000..a81ed16
--- /dev/null
+++ b/sfruit/list-value-extend-help.pd
@@ -0,0 +1,46 @@
+#N canvas 0 22 622 415 10;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X declare -lib list-abs;
+#X obj 451 20 import list-abs;
+#X obj 47 208 prepent set;
+#X msg 47 124 a b c;
+#X msg 91 124 d e f;
+#X msg 136 124 bang;
+#X msg 47 231;
+#X obj 283 208 prepent set;
+#X obj 283 127 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 139 345 prepent set;
+#X obj 139 294 metro 100;
+#X obj 139 252 loadbang;
+#X obj 139 274 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 275 313 uses [list-value] internally \; exploit that if you
+like;
+#X text 460 370 2008 Luke Iannini;
+#X msg 283 231;
+#X msg 139 370;
+#X obj 139 316 list-value \$0.my-list;
+#X obj 47 172 list-value-extend \$0.my-list;
+#X obj 283 172 list-value-extend \$0.my-list;
+#X text 15 24 [list-value-extend] - append new input to the current
+value \, then replace the current value with the result. Outputs current
+value when [bang(ed \, just like vanilla [list-value]. Use [clear(
+to clear all [list-value-extend]s and [list-value]s of the same name.
+;
+#X msg 173 124 clear;
+#X connect 1 0 5 0;
+#X connect 2 0 17 0;
+#X connect 3 0 17 0;
+#X connect 4 0 17 0;
+#X connect 6 0 14 0;
+#X connect 7 0 18 0;
+#X connect 8 0 15 0;
+#X connect 9 0 16 0;
+#X connect 10 0 11 0;
+#X connect 11 0 9 0;
+#X connect 16 0 8 0;
+#X connect 17 0 1 0;
+#X connect 18 0 6 0;
+#X connect 20 0 17 0;
diff --git a/sfruit/list-value-extend.pd b/sfruit/list-value-extend.pd
new file mode 100644
index 0000000..4c3eeb0
--- /dev/null
+++ b/sfruit/list-value-extend.pd
@@ -0,0 +1,21 @@
+#N canvas 355 364 450 300 10;
+#X declare -lib list-abs;
+#X obj 153 85 t a b;
+#X obj 281 42 import list-abs;
+#X obj 153 165 list-extend;
+#X obj 60 36 inlet;
+#X obj 60 195 list-value \$1;
+#X obj 60 218 outlet;
+#X obj 180 135 list-value \$1;
+#X obj 60 59 route bang clear;
+#X msg 106 104 clear;
+#X connect 0 0 2 0;
+#X connect 0 1 6 0;
+#X connect 2 0 6 0;
+#X connect 3 0 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 1;
+#X connect 7 0 4 0;
+#X connect 7 1 8 0;
+#X connect 7 2 0 0;
+#X connect 8 0 4 0;
diff --git a/sfruit/list-value-help.pd b/sfruit/list-value-help.pd
new file mode 100644
index 0000000..f412497
--- /dev/null
+++ b/sfruit/list-value-help.pd
@@ -0,0 +1,25 @@
+#N canvas 439 39 591 371 10;
+#X declare -lib list-abs;
+#X msg 111 152 a b c;
+#X obj 263 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 263 199 list-value cheese;
+#X obj 111 200 list-value cheese;
+#X obj 439 23 import list-abs;
+#X obj 263 272 prepent set;
+#X msg 159 152 e f g;
+#X text 17 22 [list-value] - [v]/[value] for lists \, or anything else.
+;
+#X text 16 48 Works just like [v] - including updating newly instantiated
+[list-value]s with the right data.;
+#X text 397 332 2008 Luke Iannini;
+#X msg 263 305;
+#X text 18 83 Accepts a [clear( message to clear all [list-value] objects
+of the same name;
+#X msg 205 152 clear;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 5 0 10 0;
+#X connect 6 0 3 0;
+#X connect 12 0 3 0;
diff --git a/sfruit/list-value.pd b/sfruit/list-value.pd
new file mode 100644
index 0000000..45e987a
--- /dev/null
+++ b/sfruit/list-value.pd
@@ -0,0 +1,27 @@
+#N canvas 536 378 450 300 10;
+#X obj 55 171 list;
+#X obj 55 197 outlet;
+#X obj 55 51 inlet;
+#X obj 244 73 loadbang;
+#X obj 244 163 list;
+#X obj 244 186 route bang;
+#X obj 244 95 s \$1.INIT-NEW;
+#X obj 244 116 r \$1.INIT-NEW;
+#X obj 55 73 route bang clear;
+#X obj 76 102 t b;
+#X obj 76 125 s \$1.VALUE;
+#X obj 76 145 r \$1.VALUE;
+#X obj 265 138 r \$1.VALUE;
+#X obj 301 210 s \$1.VALUE;
+#X connect 0 0 1 0;
+#X connect 2 0 8 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 1 13 0;
+#X connect 7 0 4 0;
+#X connect 8 0 0 0;
+#X connect 8 1 9 0;
+#X connect 8 2 10 0;
+#X connect 9 0 10 0;
+#X connect 11 0 0 1;
+#X connect 12 0 4 1;
diff --git a/sfruit/list-zip-help.pd b/sfruit/list-zip-help.pd
new file mode 100644
index 0000000..8564ff8
--- /dev/null
+++ b/sfruit/list-zip-help.pd
@@ -0,0 +1,58 @@
+#N canvas 171 167 862 369 10;
+#X obj 31 181 list-zip;
+#X text 707 326 2008 Luke Iannini;
+#X obj 707 341 pddplink http://proyekto.net;
+#X text 25 9 [list-zip] "zips" or interweaves the elements of 2 or
+more lists.;
+#X obj 183 216 list-zip 4;
+#X msg 76 147 a b c d e f g;
+#X msg 31 112 A B C D E F G;
+#X obj 31 88 t b b;
+#X obj 31 207 prepent set;
+#X obj 31 59 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 221 157 a b c d e f g;
+#X msg 202 134 A B C D E F G;
+#X msg 183 111 1 2 3 4 5 6 7;
+#X obj 183 240 prepent set;
+#X msg 31 235;
+#X obj 183 84 t b b b b;
+#X msg 240 180 animal broom climb drive egg flange green;
+#X obj 183 58 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 183 268;
+#X obj 539 198 list-zip;
+#X msg 539 76 A B C D E F G H I J K L M N O P;
+#X obj 539 135 t a a;
+#X obj 539 156 list length;
+#X obj 539 177 list-range;
+#X msg 526 50 Here comes the sun little darling;
+#X obj 539 256 prepent set;
+#X text 614 171 list-enum with list-range and list-zip;
+#X msg 539 282;
+#X connect 0 0 8 0;
+#X connect 4 0 13 0;
+#X connect 5 0 0 1;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 7 1 5 0;
+#X connect 8 0 14 0;
+#X connect 9 0 7 0;
+#X connect 10 0 4 2;
+#X connect 11 0 4 1;
+#X connect 12 0 4 0;
+#X connect 13 0 18 0;
+#X connect 15 0 12 0;
+#X connect 15 1 11 0;
+#X connect 15 2 10 0;
+#X connect 15 3 16 0;
+#X connect 16 0 4 3;
+#X connect 17 0 15 0;
+#X connect 19 0 25 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 21 1 19 1;
+#X connect 22 0 23 0;
+#X connect 23 0 19 0;
+#X connect 24 0 21 0;
+#X connect 25 0 27 0;
diff --git a/sfruit/list-zip.pd b/sfruit/list-zip.pd
new file mode 100644
index 0000000..06a1302
--- /dev/null
+++ b/sfruit/list-zip.pd
@@ -0,0 +1,170 @@
+#N canvas 372 122 667 644 10;
+#N canvas 566 25 818 707 creator 1;
+#X obj 282 19 initbang;
+#X obj 282 43 t b b b;
+#X obj 723 60 \$1;
+#X obj 723 84 < 3;
+#X obj 723 105 sel 0 1;
+#X obj 723 127 \$1;
+#X obj 723 178 v \$0arg;
+#X obj 20 107 until;
+#X obj 20 132 f;
+#X obj 50 132 + 1;
+#X msg 60 106 0;
+#X obj 20 83 v \$0arg;
+#X obj 20 60 t b b;
+#X obj 20 160 t a a;
+#X obj 174 394 s \$0self;
+#X obj 174 349 pack f f;
+#X obj 124 494 sel 9;
+#X msg 124 514 6;
+#X obj 97 539 pack f f;
+#X msg 352 104 obj 40 10 inlet \, obj 40 30 t a b \, obj 40 50 list-drip
+;
+#N canvas 925 401 189 317 make-trigger 0;
+#X obj 33 31 inlet;
+#X obj 50 89 v \$0arg;
+#X obj 50 124 until;
+#X obj 64 186 list-extend;
+#X obj 33 212 list;
+#X obj 33 54 t b b b b;
+#X msg 79 146 t a;
+#X msg 50 145 b;
+#X obj 33 236 list prepend obj 40 70;
+#X obj 33 281 outlet;
+#X obj 33 258 list trim;
+#X connect 0 0 5 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 0;
+#X connect 3 0 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 5 1 1 0;
+#X connect 5 2 6 0;
+#X connect 5 3 3 1;
+#X connect 6 0 3 0;
+#X connect 7 0 3 0;
+#X connect 8 0 10 0;
+#X connect 10 0 9 0;
+#X restore 335 127 pd make-trigger;
+#X obj 301 249 s \$0self;
+#X text 696 196 arg < 3 becomes 2;
+#X msg 318 150 obj 40 400 list append \, obj 40 420 list-extend \,
+obj 10 440 list \, obj 10 460 outlet;
+#X obj 301 82 t b b b b;
+#X msg 301 187 connect 2 0 3 0 \, connect 3 0 4 0 \, connect 3 1 7
+1 \, connect 4 0 5 0 \, connect 4 1 8 0 \, connect 5 0 6 0 \, connect
+6 0 7 0 \, connect 7 0 8 1 \, connect 8 0 9 0;
+#X obj 20 302 + 10;
+#X obj 20 278 * 3;
+#X obj 47 213 s \$0idx;
+#X obj 351 406 r \$0idx;
+#X msg 378 536 obj \$1 10 inlet;
+#X msg 351 557 obj \$1 200 list-dripslow \, obj \$1 400 list append
+;
+#X obj 351 487 t a a;
+#X obj 351 584 s \$0self;
+#X obj 35 560 r \$0idx;
+#X obj 20 583 f;
+#X obj 20 539 t b a;
+#X obj 47 583 + 1;
+#X obj 351 462 + 130;
+#X obj 351 436 * 100;
+#X obj 378 512 + 50;
+#X obj 124 472 - 1;
+#X obj 174 530 s \$0self;
+#X obj 174 482 pack f f;
+#X msg 174 371 connect \$1 0 \$2 1;
+#X obj 20 325 t a a a a;
+#X obj 174 304 t a a;
+#X obj 97 448 t a a;
+#X obj 174 427 t a a;
+#X obj 201 325 + 1;
+#X obj 174 456 + 1;
+#X obj 201 456 + 2;
+#X msg 174 507 connect \$1 0 \$2 0;
+#X obj 97 489 + 2;
+#X msg 97 564 connect \$1 0 \$2 1;
+#X obj 97 590 s \$0self;
+#X obj 20 628 pack f f;
+#X obj 20 606 + 1;
+#X msg 20 653 connect 5 \$1 \$2 0;
+#X obj 20 676 s \$0self;
+#X obj 255 19 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 723 154 - 1;
+#X msg 749 127 2;
+#X connect 0 0 1 0;
+#X connect 1 0 12 0;
+#X connect 1 1 24 0;
+#X connect 1 2 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 4 1 62 0;
+#X connect 5 0 61 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 13 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 1;
+#X connect 11 0 7 0;
+#X connect 12 0 11 0;
+#X connect 12 1 10 0;
+#X connect 13 0 27 0;
+#X connect 13 1 28 0;
+#X connect 15 0 44 0;
+#X connect 16 0 17 0;
+#X connect 16 1 18 1;
+#X connect 17 0 18 1;
+#X connect 18 0 54 0;
+#X connect 19 0 21 0;
+#X connect 20 0 21 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 24 1 23 0;
+#X connect 24 2 20 0;
+#X connect 24 3 19 0;
+#X connect 25 0 21 0;
+#X connect 26 0 45 0;
+#X connect 27 0 26 0;
+#X connect 29 0 39 0;
+#X connect 30 0 33 0;
+#X connect 31 0 33 0;
+#X connect 32 0 31 0;
+#X connect 32 1 40 0;
+#X connect 34 0 35 1;
+#X connect 35 0 57 0;
+#X connect 36 0 35 0;
+#X connect 36 1 37 0;
+#X connect 37 0 56 1;
+#X connect 38 0 32 0;
+#X connect 39 0 38 0;
+#X connect 40 0 30 0;
+#X connect 41 0 16 0;
+#X connect 43 0 52 0;
+#X connect 44 0 14 0;
+#X connect 45 0 36 0;
+#X connect 45 1 47 0;
+#X connect 45 2 48 0;
+#X connect 45 3 46 0;
+#X connect 46 0 15 0;
+#X connect 46 1 49 0;
+#X connect 47 0 53 0;
+#X connect 47 1 41 0;
+#X connect 48 0 50 0;
+#X connect 48 1 51 0;
+#X connect 49 0 15 1;
+#X connect 50 0 43 0;
+#X connect 51 0 43 1;
+#X connect 52 0 42 0;
+#X connect 53 0 18 0;
+#X connect 54 0 55 0;
+#X connect 56 0 58 0;
+#X connect 57 0 56 0;
+#X connect 58 0 59 0;
+#X connect 60 0 1 0;
+#X connect 61 0 6 0;
+#X connect 62 0 61 0;
+#X restore 109 604 pd creator;
+#X obj 2 604 namecanvas \$0self;
diff --git a/sfruit/makedollarsym.pd b/sfruit/makedollarsym.pd
new file mode 100644
index 0000000..f15c75f
--- /dev/null
+++ b/sfruit/makedollarsym.pd
@@ -0,0 +1,12 @@
+#N canvas 1171 630 142 155 10;
+#X obj 16 90 makefilename $%d;
+#X obj 16 12 inlet;
+#X obj 16 63 \$1;
+#X obj 16 39 t b;
+#X obj 77 12 inlet;
+#X obj 16 117 outlet;
+#X connect 0 0 5 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 1;
diff --git a/sfruit/mate.pd b/sfruit/mate.pd
new file mode 100644
index 0000000..d33a865
--- /dev/null
+++ b/sfruit/mate.pd
@@ -0,0 +1,33 @@
+#N canvas 0 22 450 300 10;
+#X declare -lib moonlib -lib ggee;
+#X obj 284 110 getdir 1;
+#X obj 284 163 list2symbol /;
+#X obj 284 75 t b b;
+#X obj 347 110 getpatchname 1;
+#X obj 284 133 list append;
+#X obj 284 51 loadbang;
+#X obj 284 195 s \$0fullFile;
+#X obj 364 195 s \$0file;
+#X obj 233 196 s \$0dir;
+#X obj 144 167 popen;
+#X obj 144 110 list;
+#X obj 144 80 r \$0edit;
+#X obj 175 110 r \$0fullFile;
+#X msg 144 137 mate \$1;
+#X obj 101 101 bng 15 250 50 0 \$0edit \$0editR T 4 8 0 12 -139998
+-262144 -262144;
+#X obj 62 50 import moonlib ggee;
+#X connect 0 0 4 0;
+#X connect 0 0 8 0;
+#X connect 1 0 6 0;
+#X connect 2 0 0 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 1;
+#X connect 3 0 7 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 10 0 13 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 1;
+#X connect 13 0 9 0;
+#X coords 0 -1 1 1 17 17 2 100 100;
diff --git a/sfruit/menubar.pd b/sfruit/menubar.pd
new file mode 100644
index 0000000..675f429
--- /dev/null
+++ b/sfruit/menubar.pd
@@ -0,0 +1,44 @@
+#N canvas 713 295 450 300 10;
+#X declare -lib zexy -lib ggee;
+#X msg 64 137 open \$1;
+#X obj 64 167 popen;
+#X obj 103 18 bng 15 250 50 0 \$0reveal \$0revealR Reveal 17 7 0 10
+-2112 -262144 -1;
+#X obj 64 80 r \$0reveal;
+#X obj 160 18 bng 15 250 50 0 \$0edit \$0editR Edit 17 7 0 10 -139998
+-262144 -1;
+#X obj 284 110 getdir 1;
+#X obj 284 163 list2symbol /;
+#X obj 284 75 t b b;
+#X obj 347 110 getpatchname 1;
+#X obj 284 133 list append;
+#X obj 284 51 loadbang;
+#X obj 284 195 s \$0fullFile;
+#X obj 364 195 s \$0file;
+#X obj 233 196 s \$0dir;
+#X obj 64 110 list;
+#X obj 95 110 r \$0dir;
+#X obj 144 167 popen;
+#X obj 144 110 list;
+#X obj 144 80 r \$0edit;
+#X obj 175 110 r \$0fullFile;
+#X msg 144 137 mate \$1;
+#X obj 51 204 import zexy ggee;
+#X connect 0 0 1 0;
+#X connect 3 0 14 0;
+#X connect 5 0 9 0;
+#X connect 5 0 13 0;
+#X connect 6 0 11 0;
+#X connect 7 0 5 0;
+#X connect 7 1 8 0;
+#X connect 8 0 9 1;
+#X connect 8 0 12 0;
+#X connect 9 0 6 0;
+#X connect 10 0 7 0;
+#X connect 14 0 0 0;
+#X connect 15 0 14 1;
+#X connect 17 0 20 0;
+#X connect 18 0 17 0;
+#X connect 19 0 17 1;
+#X connect 20 0 16 0;
+#X coords 0 -1 1 1 102 21 2 100 15;
diff --git a/sfruit/midi-coarsefine.pd b/sfruit/midi-coarsefine.pd
new file mode 100644
index 0000000..4d660d9
--- /dev/null
+++ b/sfruit/midi-coarsefine.pd
@@ -0,0 +1,21 @@
+#N canvas 1100 781 338 286 10;
+#X obj 106 200 +;
+#X obj 161 60 - 0.5;
+#X obj 161 112 * 0.00392157;
+#X obj 161 86 * 2;
+#X obj 161 136 t b f;
+#X obj 106 168 f;
+#X obj 106 26 inlet;
+#X obj 161 26 inlet;
+#X obj 106 227 clip 0 1;
+#X obj 106 253 outlet;
+#X connect 0 0 8 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 4 1 0 1;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
diff --git a/sfruit/myifspigot-help.pd b/sfruit/myifspigot-help.pd
new file mode 100644
index 0000000..3d5882b
--- /dev/null
+++ b/sfruit/myifspigot-help.pd
@@ -0,0 +1,20 @@
+#N canvas 0 22 450 300 10;
+#X text 35 28 [myifspigot] - choose your own comparison operator;
+#X text 36 52 if "receiver" (\$1) is "==/>=/</>/whatever" (\$2) than
+\$3 then spigot is on. \$4 sets initial state of spigot.;
+#X obj 76 165 myifspigot \$0test > 3;
+#X obj 76 88 loadbang;
+#X obj 76 114 metro 250;
+#X obj 76 214 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 266 169 hradio 15 1 0 8 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X obj 266 209 s \$0test;
+#X text 296 275 2008 Luke Iannini;
+#X text 229 152 Set higher than 3 to turn on spigot;
+#X floatatom 276 189 5 0 0 0 - - -;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 6 0 7 0;
+#X connect 6 0 10 0;
diff --git a/sfruit/myifspigot.pd b/sfruit/myifspigot.pd
new file mode 100644
index 0000000..3bfdb06
--- /dev/null
+++ b/sfruit/myifspigot.pd
@@ -0,0 +1,10 @@
+#N canvas 248 356 164 276 10;
+#X obj 29 37 inlet;
+#X obj 29 243 outlet;
+#X obj 80 92 r \$1;
+#X obj 29 156 spigot \$4;
+#X obj 80 125 \$2 \$3;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
diff --git a/sfruit/oscinify.pd b/sfruit/oscinify.pd
new file mode 100644
index 0000000..a0d6fe3
--- /dev/null
+++ b/sfruit/oscinify.pd
@@ -0,0 +1,8 @@
+#N canvas 433 96 153 116 10;
+#X obj 22 11 r PDOSC;
+#X obj 22 34 deeprouteOSC \$1;
+#X obj 22 65 s \$2;
+#X obj 22 91 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 3 0;
diff --git a/sfruit/oscoutify.pd b/sfruit/oscoutify.pd
new file mode 100644
index 0000000..ad53ca8
--- /dev/null
+++ b/sfruit/oscoutify.pd
@@ -0,0 +1,8 @@
+#N canvas 594 98 149 115 10;
+#X obj 21 84 s PDOSC;
+#X obj 21 31 r \$2;
+#X obj 21 55 list prepend \$1;
+#X obj 21 0 inlet;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
diff --git a/sfruit/pausetimer-help.pd b/sfruit/pausetimer-help.pd
new file mode 100644
index 0000000..a29cfb0
--- /dev/null
+++ b/sfruit/pausetimer-help.pd
@@ -0,0 +1,21 @@
+#N canvas 669 298 565 260 10;
+#X obj 123 37 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X msg 131 95 pause;
+#X msg 171 95 resume;
+#X msg 216 95 reset;
+#X floatatom 123 195 0 0 0 0 - - -;
+#X obj 123 157 pausetimer;
+#X text 6 6 pausetimer: pausable [timer];
+#X obj 123 56 metro 0.1;
+#X text 261 77 float to add offset ( reset on [reset( );
+#X msg 258 95 -5000;
+#X msg 258 114 15000;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 0;
+#X connect 5 0 4 0;
+#X connect 7 0 5 0;
+#X connect 9 0 5 0;
+#X connect 10 0 5 0;
diff --git a/sfruit/pausetimer.pd b/sfruit/pausetimer.pd
new file mode 100644
index 0000000..96db6e1
--- /dev/null
+++ b/sfruit/pausetimer.pd
@@ -0,0 +1,73 @@
+#N canvas 424 138 374 392 10;
+#X declare -lib iemlib;
+#X obj -1 23 inlet;
+#X obj 217 230 timer;
+#X obj 217 287 f;
+#X obj 245 287 +;
+#X obj 217 254 t b a;
+#X obj 245 312 s \$0pausedTime;
+#X msg 296 254 0;
+#X obj 70 298 r \$0pausedTime;
+#X obj 55 323 -;
+#X obj 55 233 timer;
+#X obj 217 174 r \$0pause;
+#X obj 244 200 r \$0getPauseLength;
+#X obj 55 275 f;
+#X obj 69 174 f;
+#X obj 69 196 sel 1 0;
+#X obj -1 57 route reset pause resume;
+#X obj -1 178 s \$0reset;
+#X obj 296 231 r \$0reset;
+#X msg 182 141 0;
+#X msg 98 174 1;
+#X obj 220 118 s \$0getPauseLength;
+#X obj 55 369 outlet;
+#X obj 46 88 once;
+#X obj 163 88 once;
+#X obj 163 108 t b b b;
+#X obj 46 108 t b b b;
+#X obj 96 118 s \$0pause;
+#X obj 94 139 route bang;
+#X obj 55 347 +;
+#X obj 121 341 r \$0reset;
+#X msg 88 342 0;
+#X obj 199 57 import iemlib;
+#X connect 0 0 15 0;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 2 1;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 4 1 3 1;
+#X connect 6 0 2 1;
+#X connect 6 0 5 0;
+#X connect 7 0 8 1;
+#X connect 8 0 28 0;
+#X connect 9 0 12 0;
+#X connect 10 0 1 0;
+#X connect 11 0 1 1;
+#X connect 12 0 8 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 14 1 9 1;
+#X connect 15 0 9 0;
+#X connect 15 0 16 0;
+#X connect 15 1 22 0;
+#X connect 15 2 23 0;
+#X connect 15 3 27 0;
+#X connect 17 0 6 0;
+#X connect 18 0 13 1;
+#X connect 19 0 13 1;
+#X connect 22 0 25 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 1;
+#X connect 24 1 18 0;
+#X connect 24 2 20 0;
+#X connect 25 0 23 1;
+#X connect 25 1 19 0;
+#X connect 25 2 26 0;
+#X connect 27 0 13 0;
+#X connect 27 1 28 1;
+#X connect 28 0 21 0;
+#X connect 29 0 30 0;
+#X connect 30 0 28 1;
diff --git a/sfruit/pcount.pd b/sfruit/pcount.pd
new file mode 100644
index 0000000..8261e27
--- /dev/null
+++ b/sfruit/pcount.pd
@@ -0,0 +1,28 @@
+#N canvas 731 546 353 279 10;
+#X declare -lib iemlib;
+#X obj 78 24 inlet;
+#X obj 63 144 f 0;
+#X msg 78 108 0;
+#X obj 63 246 outlet;
+#X obj 78 66 route reset;
+#X obj 241 20 inlet;
+#X obj 52 108 b;
+#X obj 159 24 inlet;
+#X obj 138 144 + \$1;
+#X obj 208 144 mod \$2;
+#X obj 171 111 init 1;
+#X obj 257 111 init 1e+21;
+#X obj 174 191 import iemlib;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 1 0 8 0;
+#X connect 2 0 1 1;
+#X connect 4 0 2 0;
+#X connect 4 1 6 0;
+#X connect 5 0 9 1;
+#X connect 6 0 1 0;
+#X connect 7 0 8 1;
+#X connect 8 0 9 0;
+#X connect 9 0 1 1;
+#X connect 10 0 8 1;
+#X connect 11 0 9 1;
diff --git a/sfruit/round-help.pd b/sfruit/round-help.pd
new file mode 100644
index 0000000..bacd6a3
--- /dev/null
+++ b/sfruit/round-help.pd
@@ -0,0 +1,10 @@
+#N canvas 0 22 387 243 10;
+#X text 27 15 [round] - round a number to the closest integer;
+#X obj 76 87 hsl 128 15 0 10 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 600 1;
+#X obj 73 145 round;
+#X floatatom 73 173 5 0 0 0 - - -;
+#X floatatom 73 118 5 0 0 0 - - -;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
diff --git a/sfruit/round.pd b/sfruit/round.pd
new file mode 100644
index 0000000..9fe87d3
--- /dev/null
+++ b/sfruit/round.pd
@@ -0,0 +1,19 @@
+#N canvas 550 22 215 243 10;
+#X obj 65 61 int;
+#X obj 50 100 -;
+#X obj 50 132 > 0.5;
+#X obj 26 166 +;
+#X obj 26 100 f;
+#X obj 26 30 t b a a;
+#X obj 26 192 outlet;
+#X obj 26 6 inlet;
+#X connect 0 0 1 1;
+#X connect 0 0 4 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 1;
+#X connect 3 0 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 5 1 1 0;
+#X connect 5 2 0 0;
+#X connect 7 0 5 0;
diff --git a/sfruit/rprint-help.pd b/sfruit/rprint-help.pd
new file mode 100644
index 0000000..5ddfc43
--- /dev/null
+++ b/sfruit/rprint-help.pd
@@ -0,0 +1,15 @@
+#N canvas 664 410 415 267 10;
+#X obj 44 191 rprint \$0.some-data;
+#X obj 44 137 s \$0.some-data;
+#X text 20 14 [rprint] - intercept a send and print it to the console.
+Usually for debugging.;
+#X msg 44 93 nom nom nom;
+#X obj 263 100 r \$0.some-data;
+#X obj 263 128 list prepend set;
+#X obj 263 153 list trim;
+#X msg 263 186;
+#X text 267 229 2008 Luke Iannini;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
diff --git a/sfruit/rprint.pd b/sfruit/rprint.pd
new file mode 100644
index 0000000..c7a56fb
--- /dev/null
+++ b/sfruit/rprint.pd
@@ -0,0 +1,4 @@
+#N canvas 674 156 132 106 10;
+#X obj 26 24 r \$1;
+#X obj 26 56 print \$1;
+#X connect 0 0 1 0;
diff --git a/sfruit/s2l-explode-help.pd b/sfruit/s2l-explode-help.pd
new file mode 100644
index 0000000..f038c99
--- /dev/null
+++ b/sfruit/s2l-explode-help.pd
@@ -0,0 +1,10 @@
+#N canvas 854 366 442 210 10;
+#X obj 44 81 s2l-explode;
+#X text 2 6 [s2l-explode] splits a symbol into individual characters
+;
+#X msg 44 52 Supercalifragilisticexpialidocious;
+#X obj 44 107 prepent set;
+#X msg 44 142;
+#X connect 0 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
diff --git a/sfruit/s2l-explode.pd b/sfruit/s2l-explode.pd
new file mode 100644
index 0000000..56f1255
--- /dev/null
+++ b/sfruit/s2l-explode.pd
@@ -0,0 +1,14 @@
+#N canvas 583 307 229 180 10;
+#X declare -lib zexy;
+#X obj 46 92 symbol2list;
+#X obj 109 41 loadbang;
+#X msg 109 67 symbol;
+#X obj 46 41 inlet;
+#X obj 46 125 outlet;
+#X obj 46 67 list;
+#X obj 119 128 import zexy;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 1;
+#X connect 3 0 5 0;
+#X connect 5 0 0 0;
diff --git a/sfruit/s2l-shorten.pd b/sfruit/s2l-shorten.pd
new file mode 100644
index 0000000..0991ce0
--- /dev/null
+++ b/sfruit/s2l-shorten.pd
@@ -0,0 +1,36 @@
+#N canvas 0 25 331 384 10;
+#X declare -lib list-abs;
+#X obj 41 42 inlet;
+#X obj 41 64 s2l-explode;
+#X obj 41 85 list split \$1;
+#X obj 74 247 list append;
+#X obj 74 270 list-l2s;
+#X obj 74 296 outlet;
+#X obj 137 199 loadbang;
+#X obj 137 220 list-onearg \$2 >;
+#X obj 41 137 list length;
+#X obj 41 201 list;
+#X obj 74 201 list;
+#X obj 41 107 t a a;
+#X obj 41 180 t b;
+#X obj 74 181 t b;
+#X obj 41 158 sel \$1;
+#X obj 186 68 import list-abs;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 2 2 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 7 0 3 1;
+#X connect 8 0 14 0;
+#X connect 9 0 4 0;
+#X connect 10 0 3 0;
+#X connect 11 0 8 0;
+#X connect 11 1 10 1;
+#X connect 11 1 9 1;
+#X connect 12 0 9 0;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X connect 14 1 13 0;
diff --git a/sfruit/savebang-help.pd b/sfruit/savebang-help.pd
new file mode 100644
index 0000000..bd3bca7
--- /dev/null
+++ b/sfruit/savebang-help.pd
@@ -0,0 +1,9 @@
+#N canvas 976 723 373 150 10;
+#X obj 102 90 savebang;
+#X obj 102 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 8 8 [savebang] outputs a bang when its containing patch is
+saved. The bang is output before the file is saved \, making it useful
+for clearing temporary data. Original idea by Hans-Christoph Steiner
+\; requires [tot];
+#X connect 0 0 1 0;
diff --git a/sfruit/savebang.pd b/sfruit/savebang.pd
new file mode 100644
index 0000000..adfb49e
--- /dev/null
+++ b/sfruit/savebang.pd
@@ -0,0 +1,13 @@
+#N canvas 736 201 223 185 10;
+#X declare -lib toxy;
+#X msg 26 47 capture 1;
+#X obj 68 97 route menusave;
+#X obj 26 21 loadbang;
+#X obj 26 73 tot .parent;
+#X obj 68 122 outlet;
+#X text 25 155 Idea by hans-christoph steiner;
+#X obj 124 17 import toxy;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 0 0;
+#X connect 3 2 1 0;
diff --git a/sfruit/saveclear-help.pd b/sfruit/saveclear-help.pd
new file mode 100644
index 0000000..0a5a312
--- /dev/null
+++ b/sfruit/saveclear-help.pd
@@ -0,0 +1,16 @@
+#N canvas 4 22 450 300 10;
+#X text 12 20 saveclear - send a "clear" message to a subpatch before
+the patch is saved.;
+#X obj 16 246 saveclear pd-\$0.my-subpatch;
+#X text 12 59 This is useful for dynamically generated subpatches whose
+contents should not be saved along with the patch.;
+#N canvas 0 22 450 300 \$0.my-subpatch 1;
+#X restore 201 246 pd \$0.my-subpatch;
+#X obj 40 104 loadbang;
+#X obj 40 189 s pd-\$0.my-subpatch;
+#X msg 40 128 msg 10 10 This content was dynamically generated on load
+- but it will be cleared before the patch is saved so that it does
+not exist in saveclear-help.pd \, obj 50 150 bng \, obj 100 100 vslider
+\, obj 150 150 hradio;
+#X connect 4 0 6 0;
+#X connect 6 0 5 0;
diff --git a/sfruit/saveclear.pd b/sfruit/saveclear.pd
new file mode 100644
index 0000000..ce9e065
--- /dev/null
+++ b/sfruit/saveclear.pd
@@ -0,0 +1,14 @@
+#N canvas 591 377 210 205 10;
+#X declare -lib toxy;
+#X msg 26 47 capture 1;
+#X obj 68 97 route menusave;
+#X obj 26 21 loadbang;
+#X obj 26 73 tot .parent;
+#X msg 68 121 clear;
+#X obj 68 147 s \$1;
+#X obj 111 22 import toxy;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 0 0;
+#X connect 3 2 1 0;
+#X connect 4 0 5 0;
diff --git a/sfruit/screendimens.pd b/sfruit/screendimens.pd
new file mode 100644
index 0000000..33c7f38
--- /dev/null
+++ b/sfruit/screendimens.pd
@@ -0,0 +1,19 @@
+#N canvas 880 47 296 242 10;
+#X declare -lib toxy;
+#X msg 56 87 query winfo screenwidth .;
+#X obj 56 164 pack f f;
+#X msg 101 109 query winfo screenheight .;
+#X obj 56 59 t b b;
+#X obj 56 35 inlet;
+#X obj 56 190 outlet;
+#X obj 101 131 tot .;
+#X obj 56 109 tot .;
+#X obj 139 35 import toxy;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 6 0;
+#X connect 3 0 0 0;
+#X connect 3 1 2 0;
+#X connect 4 0 3 0;
+#X connect 6 0 1 1;
+#X connect 7 0 1 0;
diff --git a/sfruit/sdeeprouteOSC.pd b/sfruit/sdeeprouteOSC.pd
new file mode 100644
index 0000000..912c65e
--- /dev/null
+++ b/sfruit/sdeeprouteOSC.pd
@@ -0,0 +1,54 @@
+#N canvas 0 22 961 518 10;
+#X obj 301 159 \$0;
+#X obj 267 261 \$0;
+#X obj 43 33 inlet;
+#X obj 43 67 s \$0-inlet;
+#X obj 37 442 outlet;
+#X msg 301 186 obj 20 20 r \$1-inlet;
+#X msg 319 134 clear;
+#X obj 233 45 list append \$1;
+#X obj 391 34 inlet;
+#X obj 391 60 list;
+#X obj 233 77 t b b b a b b;
+#X msg 267 287 obj 20 80 s \$1-outlet1;
+#X obj 37 414 r \$0-outlet1;
+#X obj 487 35 loadbang;
+#X obj 487 59 list append \$2;
+#X obj 487 81 sel 0;
+#X obj 233 12 initbang;
+#X msg 233 376 connect 0 0 1 0 \, connect 1 0 2 0;
+#X msg 284 234 obj 20 50 deeprouteOSC \$1;
+#X msg 485 111 Sorry - sdeeprouteOSC currently only supports one argument!
+;
+#X obj 485 144 print sdeeprouteOSC;
+#N canvas 279 88 285 163 \$0deeprouteOSC 0;
+#X obj 20 20 r 39957-inlet;
+#X obj 20 50 deeprouteOSC /chptrA/interp-constrained-to-0-1;
+#X obj 20 80 s 39957-outlet1;
+#X obj 160 100 s 39957-outlet2;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 45 240 pd \$0deeprouteOSC;
+#X obj 363 424 s pd-\$0deeprouteOSC;
+#X connect 0 0 5 0;
+#X connect 1 0 11 0;
+#X connect 2 0 3 0;
+#X connect 5 0 22 0;
+#X connect 6 0 22 0;
+#X connect 7 0 10 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 17 0;
+#X connect 10 2 1 0;
+#X connect 10 3 18 0;
+#X connect 10 4 0 0;
+#X connect 10 5 6 0;
+#X connect 11 0 22 0;
+#X connect 12 0 4 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 1 19 0;
+#X connect 16 0 7 0;
+#X connect 17 0 22 0;
+#X connect 18 0 22 0;
+#X connect 19 0 20 0;
diff --git a/sfruit/sendmany-osc.pd b/sfruit/sendmany-osc.pd
new file mode 100644
index 0000000..adbbf3b
--- /dev/null
+++ b/sfruit/sendmany-osc.pd
@@ -0,0 +1,20 @@
+#N canvas 696 252 225 433 10;
+#X obj 26 48 t b a;
+#X obj 32 160 list;
+#X obj 74 241 list-drip;
+#X obj 74 275 t b a;
+#X obj 74 209 list;
+#X obj 26 16 inlet;
+#X obj 95 161 inlet;
+#X obj 32 375 s PDOSC;
+#X obj 32 338 list prepend;
+#X connect 0 0 4 0;
+#X connect 0 1 1 1;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 1 8 1;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 4 1;
+#X connect 8 0 7 0;
diff --git a/sfruit/sendmany.pd b/sfruit/sendmany.pd
new file mode 100644
index 0000000..03890d0
--- /dev/null
+++ b/sfruit/sendmany.pd
@@ -0,0 +1,20 @@
+#N canvas 701 45 196 403 10;
+#X declare -lib list-abs;
+#X obj 32 365 s;
+#X obj 26 48 t b a;
+#X obj 32 160 list;
+#X obj 77 241 list-drip;
+#X obj 77 275 t b a;
+#X obj 77 209 list;
+#X obj 26 16 inlet;
+#X obj 98 161 inlet;
+#X obj 76 49 import list-abs;
+#X connect 1 0 5 0;
+#X connect 1 1 2 1;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 4 1 0 1;
+#X connect 5 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 5 1;
diff --git a/sfruit/setabng-help.pd b/sfruit/setabng-help.pd
new file mode 100644
index 0000000..6660af7
--- /dev/null
+++ b/sfruit/setabng-help.pd
@@ -0,0 +1,24 @@
+#N canvas 0 22 666 356 10;
+#X text 314 156 [setabng]'s right xlets should be cross-connected to
+a [bng] object. Sending a [set( message to the left inlet of setabng
+will blink the [bng] without transmitting to setabng's left outlet.
+;
+#X text 13 11 [setabng] - add a [set( method to [bng] objects so they
+can be flashed without passing a [bang( message to their outlet.;
+#X obj 240 160 bng 50 250 50 0 empty empty empty 17 7 0 10 -262130
+-1 -1;
+#X msg 59 89 set;
+#X obj 59 178 setabng;
+#X obj 59 311 bng 20 250 50 0 empty empty bang 22 10 0 10 -262144 -1
+-1;
+#X obj 89 90 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 69 236 use [setabng]'s left outlet in place of your [bng]'s
+outlet \, and [setabng]'s left inlet in place of your [bng]'s inlet
+;
+#X text 445 330 2008 Luke Iannini;
+#X connect 2 0 4 1;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 4 1 2 0;
+#X connect 6 0 4 0;
diff --git a/sfruit/setabng.pd b/sfruit/setabng.pd
new file mode 100644
index 0000000..80c3c23
--- /dev/null
+++ b/sfruit/setabng.pd
@@ -0,0 +1,22 @@
+#N canvas 766 282 203 271 10;
+#X obj 44 35 inlet;
+#X obj 44 199 spigot;
+#X msg 44 154 1;
+#X msg 83 154 0;
+#X obj 44 107 t b b b;
+#X obj 95 107 t b;
+#X obj 44 70 route set;
+#X obj 44 233 outlet;
+#X obj 132 166 inlet;
+#X obj 131 142 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 7 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 4 1 9 0;
+#X connect 4 2 3 0;
+#X connect 5 0 9 0;
+#X connect 6 0 4 0;
+#X connect 6 1 5 0;
+#X connect 8 0 1 0;
diff --git a/sfruit/sft.seqnames.pd b/sfruit/sft.seqnames.pd
new file mode 100644
index 0000000..94ca588
--- /dev/null
+++ b/sfruit/sft.seqnames.pd
@@ -0,0 +1,31 @@
+#N canvas 946 730 291 366 10;
+#X obj 79 121 list append \$1;
+#X obj 160 74 inlet;
+#X obj 15 6 inlet;
+#X obj 142 190 f;
+#X obj 178 190 + 1;
+#X msg 157 162 0;
+#X obj 84 71 sel reset;
+#X obj 79 226 list append;
+#X obj 79 152 t a b;
+#X obj 79 310 outlet;
+#X msg 79 253 \$1\$2;
+#X obj 15 71 route bang;
+#X obj 15 38 list;
+#X obj 79 281 list;
+#X connect 0 0 8 0;
+#X connect 1 0 0 1;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 3 0 7 1;
+#X connect 4 0 3 1;
+#X connect 5 0 3 1;
+#X connect 6 0 5 0;
+#X connect 7 0 10 0;
+#X connect 8 0 7 0;
+#X connect 8 1 3 0;
+#X connect 10 0 13 0;
+#X connect 11 0 0 0;
+#X connect 11 1 6 0;
+#X connect 12 0 11 0;
+#X connect 13 0 9 0;
diff --git a/sfruit/sft.sig.pd b/sfruit/sft.sig.pd
new file mode 100644
index 0000000..121d411
--- /dev/null
+++ b/sfruit/sft.sig.pd
@@ -0,0 +1,12 @@
+#N canvas 0 22 454 304 10;
+#X obj 92 97 snapshot~;
+#X obj 103 42 loadbang;
+#X obj 103 70 metro 50;
+#X obj 92 14 inlet~;
+#X obj 102 124 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-44926 -1 -1 0.694145 256;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X coords 0 -1 1 1 58 40 1 100 100;
diff --git a/sfruit/storebang-help.pd b/sfruit/storebang-help.pd
new file mode 100644
index 0000000..249c1fb
--- /dev/null
+++ b/sfruit/storebang-help.pd
@@ -0,0 +1,20 @@
+#N canvas 0 22 432 300 10;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X obj 29 185 storebang murray \$0.selection;
+#X obj 29 231 r \$0.selection;
+#X symbolatom 29 256 10 0 0 0 - - -;
+#X text 8 16 storebang - takes two arguments \, a value and a receiver.
+Clicking the bang will output the value to the receiver. This is useful
+for creating multiple choice lists \, and is especially helpful when
+dynamically generating a list of choices.;
+#X text 6 95 [storebang cheese \$0.receiver] will send "cheese" to
+\$0.receiver when clicked.;
+#X text 280 265 2008 Luke Iannini;
+#X obj 29 139 storebang federer \$0.selection;
+#X obj 29 162 storebang nadal \$0.selection;
+#X connect 1 0 2 0;
diff --git a/sfruit/storebang.pd b/sfruit/storebang.pd
new file mode 100644
index 0000000..4ca29f8
--- /dev/null
+++ b/sfruit/storebang.pd
@@ -0,0 +1,30 @@
+#N canvas 871 193 484 396 10;
+#X declare -lib zexy;
+#X declare -lib zexy;
+#X obj 57 226 list append \$1;
+#X obj 57 251 s \$2;
+#X obj 101 101 bng 15 250 50 0 \$0.storebang-s \$0.storebang-r empty
+17 7 0 10 -249828 -1 -1;
+#X obj 57 202 r \$0.storebang-s;
+#X obj 117 101 cnv 15 94 15 empty \$0.cnv \$1 3 8 0 10 -229120 -66577
+0;
+#X obj 189 232 list length;
+#X obj 189 137 loadbang;
+#X obj 189 319 s \$0.cnv;
+#X msg 189 288 vis_size \$1 15;
+#X obj 189 158 list append \$1 \$2;
+#X text 225 261 letter width;
+#X obj 189 261 * 4.5;
+#X obj 189 184 list2symbol;
+#X obj 189 211 s2l-explode;
+#X obj 329 170 import zexy;
+#X connect 0 0 1 0;
+#X connect 3 0 0 0;
+#X connect 5 0 11 0;
+#X connect 6 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 12 0;
+#X connect 11 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 5 0;
+#X coords 0 -1 1 1 34 17 2 100 100;
diff --git a/sfruit/timerr.pd b/sfruit/timerr.pd
new file mode 100644
index 0000000..09de7e0
--- /dev/null
+++ b/sfruit/timerr.pd
@@ -0,0 +1,8 @@
+#N canvas 871 385 105 115 10;
+#X obj 17 57 timer;
+#X obj 17 14 inlet;
+#X obj 53 14 inlet;
+#X obj 17 83 outlet;
+#X connect 0 0 3 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 0;
diff --git a/sfruit/trimdirs-help.pd b/sfruit/trimdirs-help.pd
new file mode 100644
index 0000000..7fa1027
--- /dev/null
+++ b/sfruit/trimdirs-help.pd
@@ -0,0 +1,24 @@
+#N canvas 0 22 496 364 10;
+#X msg 91 47 /Users/Me/Pd/Synths;
+#X obj 91 163 prepent set;
+#X obj 171 163 prepent set;
+#X text 26 251 Trims the last [n] directories from the end of a path.
+;
+#X text 27 265 With [trimdirs 1] \, /Users/Me/Pd/Synths becomes /Users/Me/Pd
+;
+#X text 26 279 Handles spaces just fine.;
+#X text 351 309 Luke Iannini 2008;
+#X text 351 321 proyekto.net;
+#X text 26 293 No/0 argument passes input through unchanged;
+#X obj 91 130 trimdirs 1;
+#X obj 171 130 trimdirs 2;
+#X obj 136 91 symbol;
+#X msg 171 195;
+#X msg 91 195;
+#X connect 0 0 11 0;
+#X connect 1 0 13 0;
+#X connect 2 0 12 0;
+#X connect 9 0 1 0;
+#X connect 10 0 2 0;
+#X connect 11 0 9 0;
+#X connect 11 0 10 0;
diff --git a/sfruit/trimdirs.pd b/sfruit/trimdirs.pd
new file mode 100644
index 0000000..a73998a
--- /dev/null
+++ b/sfruit/trimdirs.pd
@@ -0,0 +1,57 @@
+#N canvas 694 125 471 382 10;
+#X declare -lib zexy -lib list-abs;
+#X obj 185 137 symbol2list /;
+#X obj 185 176 list-splat -1;
+#X obj 156 282 list2symbol /;
+#X obj 185 202 list split 1;
+#X obj 21 181 symbol2list;
+#X obj 21 208 list prepend /;
+#X obj 21 272 list2symbol;
+#X msg 84 160 symbol;
+#X obj 84 139 loadbang;
+#X msg 84 250 symbol;
+#X obj 84 229 loadbang;
+#X obj 156 251 list append;
+#X obj 344 54 \$1;
+#X obj 344 31 loadbang;
+#X obj 344 109 * -1;
+#X obj 402 21 inlet;
+#X obj 185 20 inlet;
+#X obj 156 343 outlet;
+#X obj 344 137 sel 0;
+#X obj 185 87 demultiplex;
+#X obj 371 159 t a b;
+#X msg 376 198 1;
+#X msg 344 198 0;
+#X obj 185 110 s \$0passthrough;
+#X obj 170 314 r \$0passthrough;
+#X obj 344 82 abs;
+#X obj 303 253 import zexy list-abs;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 17 0;
+#X connect 3 0 4 0;
+#X connect 3 1 11 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 11 0;
+#X connect 7 0 4 1;
+#X connect 8 0 7 0;
+#X connect 9 0 6 1;
+#X connect 10 0 9 0;
+#X connect 11 0 2 0;
+#X connect 12 0 25 0;
+#X connect 13 0 12 0;
+#X connect 14 0 18 0;
+#X connect 15 0 25 0;
+#X connect 16 0 19 0;
+#X connect 18 0 22 0;
+#X connect 18 1 20 0;
+#X connect 19 0 23 0;
+#X connect 19 1 0 0;
+#X connect 20 0 1 1;
+#X connect 20 1 21 0;
+#X connect 21 0 19 1;
+#X connect 22 0 19 1;
+#X connect 24 0 17 0;
+#X connect 25 0 14 0;
diff --git a/sfruit/troute-help.pd b/sfruit/troute-help.pd
new file mode 100644
index 0000000..027205c
--- /dev/null
+++ b/sfruit/troute-help.pd
@@ -0,0 +1,47 @@
+#N canvas 285 348 468 386 10;
+#X msg 288 85 list j f g;
+#X msg 51 51 f;
+#X msg 138 51 g;
+#X msg 216 51 r;
+#X msg 257 51 o;
+#X msg 96 51 i;
+#X msg 176 51 a;
+#X text 321 353 2007 Luke Iannini;
+#X obj 111 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 141 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 171 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 201 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 288 211 list a r o;
+#X obj 119 125 troute e l o;
+#X text 13 10 troute 0.1;
+#X text 21 247 A seTtable route. A list in the right inlet will change
+the elements that route will react to. (Se)troute can add outlets to
+itself to accomadate longer argument lists \, but it cannot subtract
+them due to limitations in Pure Data. The utility of that is arguable
+\, anyways (since you can just change the actual arguments).;
+#X msg 288 106 list f i g;
+#X msg 288 127 list f o g;
+#X msg 288 148 list r a g;
+#X msg 288 169 list f i r;
+#X msg 288 190 list r i f;
+#X connect 0 0 13 1;
+#X connect 1 0 13 0;
+#X connect 2 0 13 0;
+#X connect 3 0 13 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 13 0;
+#X connect 12 0 13 1;
+#X connect 13 0 8 0;
+#X connect 13 1 9 0;
+#X connect 13 2 10 0;
+#X connect 13 3 11 0;
+#X connect 16 0 13 1;
+#X connect 17 0 13 1;
+#X connect 18 0 13 1;
+#X connect 19 0 13 1;
+#X connect 20 0 13 1;
diff --git a/sfruit/troute.pd b/sfruit/troute.pd
new file mode 100644
index 0000000..be06e57
--- /dev/null
+++ b/sfruit/troute.pd
@@ -0,0 +1,246 @@
+#N canvas 286 157 803 191 10;
+#X declare -lib iemlib -lib list-abs;
+#X obj 1 67 namecanvas \$0self;
+#N canvas 34 277 750 385 constructor 0;
+#X obj 266 103 s \$0totalArgs;
+#X obj 480 92 t a a;
+#X obj 507 117 list length;
+#X obj 507 138 s \$0totalArgs;
+#X obj 227 152 t b b a;
+#N canvas 423 44 903 672 connections 0;
+#X obj 362 60 inlet;
+#X msg 609 107 connect 0 0 1 0;
+#X obj 609 135 s pd-\$0canvas;
+#X msg 384 472 connect 1 \$1 \$2 0;
+#X obj 384 320 f;
+#X obj 414 320 + 1;
+#X obj 384 217 until;
+#X obj 384 179 f;
+#X obj 456 408 + 2;
+#X obj 384 441 list append;
+#X obj 384 504 s pd-\$0canvas;
+#X obj 215 505 s \$0self;
+#X obj 215 391 list append;
+#X msg 215 471 connect \$1 0 \$2 0;
+#X obj 400 251 r \$0reset;
+#X obj 287 360 + 1;
+#X obj 215 323 * 2;
+#X obj 215 344 t f f;
+#X obj 362 91 t b b b;
+#X obj 384 352 t f f;
+#X obj 216 295 f;
+#X obj 246 295 + 1;
+#X obj 216 192 until;
+#X obj 216 134 f;
+#X obj 232 111 r \$0checkedArgs;
+#X obj 232 242 r \$0resetIfLess;
+#X obj 400 149 r \$0totalOuts;
+#X obj 215 429 list-apply + 4;
+#X connect 0 0 18 0;
+#X connect 1 0 2 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 4 0 19 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 1;
+#X connect 9 0 3 0;
+#X connect 12 0 27 0;
+#X connect 13 0 11 0;
+#X connect 14 0 4 1;
+#X connect 15 0 12 1;
+#X connect 16 0 17 0;
+#X connect 17 0 12 0;
+#X connect 17 1 15 0;
+#X connect 18 0 23 0;
+#X connect 18 1 7 0;
+#X connect 18 2 1 0;
+#X connect 19 0 9 0;
+#X connect 19 1 8 0;
+#X connect 20 0 21 0;
+#X connect 20 0 16 0;
+#X connect 21 0 20 1;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 1;
+#X connect 25 0 20 1;
+#X connect 26 0 7 1;
+#X connect 27 0 13 0;
+#X restore 227 236 pd connections;
+#X obj 227 63 dollarg;
+#N canvas 906 445 436 308 initialSetup 0;
+#X obj 53 9 inlet;
+#X msg 97 71 0;
+#X obj 137 87 s \$0reset;
+#X obj 75 98 \$0;
+#X obj 75 153 s pd-\$0canvas;
+#X obj 53 230 s pd-\$0canvas;
+#X obj 53 178 list prepend obj 0 50 route;
+#X obj 53 204 list trim;
+#X obj 53 47 t a b b;
+#X msg 285 53 clear;
+#X obj 285 25 r \$0reset;
+#X obj 285 82 s pd-\$0canvas;
+#X msg 75 125 obj 0 20 r \$1-inlet0;
+#X obj 284 145 r \$0reset;
+#X obj 300 191 r \$0lessThan;
+#X obj 284 216 f;
+#X obj 284 168 t b;
+#X obj 284 240 sel 1;
+#X obj 284 285 s \$0resetIfLess;
+#X msg 284 262 0;
+#X connect 0 0 8 0;
+#X connect 1 0 2 0;
+#X connect 3 0 12 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 8 1 3 0;
+#X connect 8 2 1 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 12 0 4 0;
+#X connect 13 0 16 0;
+#X connect 14 0 15 1;
+#X connect 15 0 17 0;
+#X connect 16 0 15 0;
+#X connect 17 0 19 0;
+#X connect 19 0 18 0;
+#X restore 266 181 pd initialSetup;
+#N canvas 328 204 574 524 addOutlets 0;
+#X obj 54 18 inlet;
+#X obj 54 279 * 150;
+#X obj 54 144 until;
+#X obj 54 207 f;
+#X obj 87 207 + 1;
+#X obj 70 170 r \$0reset;
+#X msg 54 390 obj \$1 100 s \$2-outlet\$3;
+#X obj 54 301 list append \$0;
+#X obj 54 363 list append;
+#X obj 54 426 s pd-\$0canvas;
+#X obj 54 242 t a a;
+#X obj 54 120 f;
+#N canvas 392 28 506 356 selfhelp 0;
+#X obj 90 28 inlet;
+#X obj 120 210 s \$0self;
+#X obj 90 132 t a a;
+#X obj 127 65 r \$0lessThan;
+#X obj 90 107 spigot;
+#X obj 127 85 == 0;
+#X msg 120 171 obj \$1 100 r \$2-outlet\$3;
+#X msg 90 240 obj \$1 150 outlet;
+#X connect 0 0 4 0;
+#X connect 2 0 7 0;
+#X connect 2 1 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 1;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
+#X restore 274 425 pd selfhelp;
+#X obj 274 299 * 150;
+#X obj 274 227 f;
+#X obj 307 227 + 1;
+#X obj 274 321 list append \$0;
+#X obj 274 383 list append;
+#X obj 274 262 t a a;
+#X obj 54 42 t b b;
+#X obj 274 118 until;
+#X obj 274 58 f;
+#X obj 290 34 r \$0checkedArgs;
+#X obj 70 76 r \$0totalOuts;
+#X obj 290 180 r \$0resetIfLess;
+#X connect 0 0 19 0;
+#X connect 1 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 1;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 10 0 1 0;
+#X connect 10 1 8 1;
+#X connect 11 0 2 0;
+#X connect 13 0 16 0;
+#X connect 14 0 15 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 12 0;
+#X connect 18 0 13 0;
+#X connect 18 1 17 1;
+#X connect 19 0 11 0;
+#X connect 19 1 21 0;
+#X connect 20 0 14 0;
+#X connect 21 0 20 0;
+#X connect 22 0 21 1;
+#X connect 23 0 11 1;
+#X connect 24 0 14 1;
+#X restore 246 210 pd addOutlets;
+#N canvas 228 24 433 398 checkArgs 0;
+#X obj 131 114 >;
+#X obj 183 114 f;
+#X obj 131 65 t f f;
+#X obj 131 149 sel 1;
+#X obj 183 149 t f f;
+#X obj 213 188 -;
+#X obj 37 162 s \$0lessThan;
+#X obj 161 313 f;
+#X obj 161 179 t b;
+#X obj 161 344 s \$0checkedArgs;
+#X obj 213 223 s \$0checkedArgs;
+#X obj 131 14 r \$0totalOuts;
+#X obj 177 278 r \$0totalOuts;
+#X obj 37 130 == 0;
+#X connect 0 0 3 0;
+#X connect 0 0 13 0;
+#X connect 1 0 0 1;
+#X connect 1 0 4 0;
+#X connect 2 0 0 0;
+#X connect 2 1 1 1;
+#X connect 3 0 1 0;
+#X connect 3 1 8 0;
+#X connect 4 0 5 1;
+#X connect 4 1 5 0;
+#X connect 5 0 10 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 11 0 2 0;
+#X connect 12 0 7 1;
+#X connect 13 0 6 0;
+#X restore 266 124 pd checkArgs;
+#X obj 21 49 inlet;
+#X obj 21 87 s \$0-inlet0;
+#X obj 480 44 inlet;
+#X obj 480 165 s \$0-inlet1;
+#X obj 144 87 r \$0-inlet1;
+#X obj 479 208 r \$0totalArgs;
+#X obj 479 252 s \$0totalOuts;
+#X obj 479 230 + 1;
+#X obj 227 39 initbang;
+#N canvas 122 62 611 204 \$0canvas 1;
+#X restore 30 243 pd \$0canvas;
+#X obj 378 17 import iemlib list-abs;
+#X obj 30 263 saveclear pd-\$0canvas;
+#X connect 1 0 13 0;
+#X connect 1 1 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 0;
+#X connect 4 1 8 0;
+#X connect 4 2 7 0;
+#X connect 6 0 4 0;
+#X connect 6 1 0 0;
+#X connect 10 0 11 0;
+#X connect 12 0 1 0;
+#X connect 14 0 4 0;
+#X connect 15 0 17 0;
+#X connect 17 0 16 0;
+#X connect 18 0 6 0;
+#X restore 1 45 pd constructor;
+#X obj 1 20 inlet;
+#X obj 82 19 inlet;
+#X connect 2 0 1 0;
+#X connect 3 0 1 1;
diff --git a/sfruit/vmetro-help.pd b/sfruit/vmetro-help.pd
new file mode 100644
index 0000000..3190883
--- /dev/null
+++ b/sfruit/vmetro-help.pd
@@ -0,0 +1,23 @@
+#N canvas 803 193 370 290 10;
+#X obj 71 115 vmetro;
+#X obj 71 74 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
+;
+#X floatatom 122 48 5 0 0 0 - - -;
+#X obj 122 69 / 100;
+#X floatatom 122 91 5 0 0 0 - - -;
+#X text 15 5 [vmetro] works just like [metro] \, except that it can
+take fractional values to go faster than 1 millisecond.;
+#X text 15 215 original idea by IOhannes M Zmoelnig \, I think.;
+#X obj 71 137 t b b;
+#X obj 71 160 timer;
+#X floatatom 71 183 5 0 0 0 - - -;
+#X text 253 244 2008 Luke Iannini;
+#X text 254 259 proyekto.net;
+#X connect 0 0 7 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 1;
+#X connect 7 0 8 0;
+#X connect 7 1 8 1;
+#X connect 8 0 9 0;
diff --git a/sfruit/vmetro.pd b/sfruit/vmetro.pd
new file mode 100644
index 0000000..b421956
--- /dev/null
+++ b/sfruit/vmetro.pd
@@ -0,0 +1,32 @@
+#N canvas 718 533 518 301 10;
+#X declare -lib list-abs;
+#X obj 105 261 outlet;
+#X obj 327 29 inlet;
+#X obj 107 13 inlet;
+#X obj 178 102 route float bang;
+#X obj 107 195 delay;
+#X obj 234 178 list-onearg \$1 1;
+#X msg 107 111 stop;
+#X msg 178 125 bang;
+#X obj 78 218 t b b;
+#X obj 234 155 loadbang;
+#X obj 107 34 list;
+#X obj 107 56 sel stop;
+#X obj 152 77 sel 0;
+#X obj 375 29 import list-abs;
+#X connect 1 0 5 1;
+#X connect 2 0 10 0;
+#X connect 3 0 7 0;
+#X connect 3 1 7 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 0;
+#X connect 7 0 4 0;
+#X connect 8 0 4 0;
+#X connect 8 1 0 0;
+#X connect 9 0 5 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 11 1 12 0;
+#X connect 12 0 6 0;
+#X connect 12 1 3 0;