aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Iannini <lukeiannini@users.sourceforge.net>2009-06-07 17:47:28 +0000
committerLuke Iannini <lukeiannini@users.sourceforge.net>2009-06-07 17:47:28 +0000
commitc695eba0ee35b56ce492e38accb40c35ad669448 (patch)
tree5bf11a0cf10ebad634864383e468a74efbd4d81a
parentc89cfa407af8c8a456749fc8c61175b97d2ef385 (diff)
line-seq for [line]s that don't skip numbers on their way to their destination (integers only), and renamed some stuff
svn path=/trunk/abstractions/sfruit/; revision=11696
-rw-r--r--controctopus/cc-learner.pd40
-rw-r--r--pdsvn/pdsvndir.pd2
-rw-r--r--sfruit/anysoundfiler.pd126
-rw-r--r--sfruit/beat2frac.pd2
-rw-r--r--sfruit/btn.pd2
-rw-r--r--sfruit/countseq.pd2
-rw-r--r--sfruit/dialog.yes-no.pd2
-rw-r--r--sfruit/line-seq-help.pd39
-rw-r--r--sfruit/line-seq.pd78
-rw-r--r--sfruit/list-decorate-help.pd (renamed from sfruit/list-proc-insert-help.pd)6
-rw-r--r--sfruit/list-decorate.pd (renamed from sfruit/list-proc-insert.pd)0
-rw-r--r--sfruit/list-range-help.pd29
-rw-r--r--sfruit/s2l-shorten.pd36
-rw-r--r--sfruit/storebang.pd2
-rw-r--r--sfruit/symbol-s2l-help.pd (renamed from sfruit/s2l-explode-help.pd)4
-rw-r--r--sfruit/symbol-s2l.pd (renamed from sfruit/s2l-explode.pd)0
-rw-r--r--sfruit/symbol-shorten.pd32
17 files changed, 285 insertions, 117 deletions
diff --git a/controctopus/cc-learner.pd b/controctopus/cc-learner.pd
index 0ae986f..ad4b9ae 100644
--- a/controctopus/cc-learner.pd
+++ b/controctopus/cc-learner.pd
@@ -1,4 +1,4 @@
-#N canvas 1271 444 629 668 10;
+#N canvas 63 47 629 668 10;
#X obj 60 46 nbx 3 14 0 127 0 1 \$0.cc.s \$0.cc.r CC 42 8 0 11 -194624
-1 -1 1 256;
#X obj 63 64 bng 13 250 50 0 \$0.learn-on \$0.nullR empty 0 -6 0 8
@@ -116,7 +116,7 @@ Dev 32 8 0 11 -110565 -1 -1 1 256;
#X connect 6 1 5 0;
#X connect 8 0 3 0;
#X restore 348 156 pd parse-channel;
-#N canvas 833 52 478 437 midi-sensory 0;
+#N canvas 115 84 464 470 midi-sensory 1;
#X obj 73 159 spigot;
#X obj 73 100 r \$0.data;
#X obj 106 134 r MMMAP_SENSING?;
@@ -128,11 +128,21 @@ Dev 32 8 0 11 -110565 -1 -1 1 256;
#X obj 139 181 s MMMAP_SENSING?;
#X obj 73 231 s \$1.sensed;
#X obj 77 288 r MMMAP_SENSING?;
-#X obj 137 372 s \$1\$2/GUIR;
-#X msg 137 348 color \$1 -1 -1;
-#X obj 77 313 list-idx-list 0 15;
+#X obj 137 422 s \$1\$2/GUIR;
+#X msg 137 398 color \$1 -1 -1;
#X obj 198 288 r \$1\$2.assigning?;
-#X obj 198 313 list-idx-list 0 19;
+#X obj 334 315 sel 0 1;
+#X msg 334 340 0;
+#X obj 334 268 r \$1\$2.connections;
+#X obj 197 308 sel 1;
+#X obj 334 291 f;
+#X msg 197 331 19;
+#X obj 224 331 t b;
+#X obj 77 311 sel 1;
+#X obj 104 334 t b;
+#X msg 77 334 15;
+#X msg 362 340 15;
+#X msg 389 340 14;
#X connect 0 0 6 0;
#X connect 1 0 0 0;
#X connect 2 0 0 1;
@@ -140,11 +150,25 @@ Dev 32 8 0 11 -110565 -1 -1 1 256;
#X connect 6 0 5 0;
#X connect 6 1 7 0;
#X connect 7 0 8 0;
-#X connect 10 0 13 0;
+#X connect 10 0 21 0;
#X connect 12 0 11 0;
-#X connect 13 0 12 0;
+#X connect 13 0 17 0;
#X connect 14 0 15 0;
+#X connect 14 1 24 0;
+#X connect 14 2 25 0;
#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 17 0 19 0;
+#X connect 17 1 20 0;
+#X connect 18 0 14 0;
+#X connect 19 0 12 0;
+#X connect 20 0 18 0;
+#X connect 21 0 23 0;
+#X connect 21 1 22 0;
+#X connect 22 0 18 0;
+#X connect 23 0 12 0;
+#X connect 24 0 12 0;
+#X connect 25 0 12 0;
#X restore 485 392 pd midi-sensory;
#X text 195 15 [cc-learner /unit /control];
#X obj 32 329 s \$0.device-number.all;
diff --git a/pdsvn/pdsvndir.pd b/pdsvn/pdsvndir.pd
index 4115f37..31400e6 100644
--- a/pdsvn/pdsvndir.pd
+++ b/pdsvn/pdsvndir.pd
@@ -719,7 +719,7 @@ for "project" beaming (pdsvn-dir);
#X obj 28 122 t a b a;
#X obj 78 122 s \$0process;
#X obj 505 43 r \$0process;
-#X obj 505 73 s2l-explode;
+#X obj 505 73 symbol-explode;
#X obj 584 116 list length;
#X obj 203 77 s \$0listStatusReset;
#X obj 112 145 r \$0listStatusReset;
diff --git a/sfruit/anysoundfiler.pd b/sfruit/anysoundfiler.pd
index d9fd96c..3a652dc 100644
--- a/sfruit/anysoundfiler.pd
+++ b/sfruit/anysoundfiler.pd
@@ -5,7 +5,6 @@
#X msg 68 299 open \$1;
#X msg 530 542 0;
#X msg 407 441 1;
-#X obj 407 485 print starting;
#X obj 373 340 select 1;
#X msg 390 514 play;
#X obj 373 240 route ready bang samplerate length;
@@ -76,7 +75,6 @@
#X obj 731 327 r \$0-srate;
#X obj 733 363 r \$0-length_in_secs;
#X obj 68 387 readanysf~ 2 24 64;
-#X msg 313 84 set 64 1 64 \, 0;
#X text 320 59 <--- upsampled by factor of 64 \, then switched off
;
#X obj 143 138 t a b;
@@ -87,64 +85,68 @@
#X obj 724 460 r \$0-resize?;
#X obj 691 483 spigot;
#X obj 579 409 print stopping;
-#X connect 0 0 18 0;
-#X connect 1 0 55 0;
-#X connect 3 0 54 0;
-#X connect 4 0 47 0;
-#X connect 5 0 36 0;
-#X connect 7 0 12 0;
-#X connect 8 0 38 0;
-#X connect 9 0 7 0;
-#X connect 9 1 39 0;
-#X connect 9 2 50 0;
-#X connect 9 3 51 0;
-#X connect 10 0 25 0;
-#X connect 10 0 26 0;
-#X connect 11 0 49 0;
-#X connect 12 0 35 0;
-#X connect 12 1 8 0;
-#X connect 12 2 5 0;
-#X connect 12 3 46 0;
-#X connect 13 0 11 0;
-#X connect 14 0 13 0;
-#X connect 14 1 16 0;
-#X connect 16 0 11 1;
-#X connect 17 0 15 0;
-#X connect 18 0 19 0;
-#X connect 19 0 58 0;
-#X connect 19 1 57 0;
-#X connect 20 0 3 0;
-#X connect 20 1 21 0;
-#X connect 20 2 22 0;
-#X connect 23 0 24 0;
+#X obj 415 419 print starting;
+#X msg 313 84 set 64 1 32 \, 0;
+#X connect 0 0 17 0;
+#X connect 1 0 64 0;
+#X connect 3 0 53 0;
+#X connect 4 0 46 0;
+#X connect 5 0 35 0;
+#X connect 6 0 11 0;
+#X connect 7 0 37 0;
+#X connect 8 0 6 0;
+#X connect 8 1 38 0;
+#X connect 8 2 49 0;
+#X connect 8 3 50 0;
+#X connect 9 0 24 0;
+#X connect 9 0 25 0;
+#X connect 10 0 48 0;
+#X connect 11 0 34 0;
+#X connect 11 1 7 0;
+#X connect 11 2 5 0;
+#X connect 11 2 63 0;
+#X connect 11 3 45 0;
+#X connect 12 0 10 0;
+#X connect 13 0 12 0;
+#X connect 13 1 15 0;
+#X connect 15 0 10 1;
+#X connect 16 0 14 0;
+#X connect 17 0 18 0;
+#X connect 18 0 56 0;
+#X connect 18 1 55 0;
+#X connect 19 0 3 0;
+#X connect 19 1 20 0;
+#X connect 19 2 21 0;
+#X connect 22 0 23 0;
+#X connect 26 0 24 1;
#X connect 27 0 25 1;
-#X connect 28 0 26 1;
-#X connect 29 0 23 0;
-#X connect 30 0 32 0;
-#X connect 31 0 30 0;
-#X connect 33 0 48 0;
-#X connect 34 0 32 0;
-#X connect 34 0 24 0;
-#X connect 37 0 54 0;
-#X connect 39 0 4 0;
-#X connect 39 1 17 0;
-#X connect 39 2 33 0;
-#X connect 41 0 40 0;
-#X connect 44 0 9 0;
-#X connect 45 0 14 0;
-#X connect 49 0 17 1;
-#X connect 49 0 63 0;
-#X connect 52 0 13 1;
-#X connect 53 0 16 1;
-#X connect 54 0 24 0;
-#X connect 54 1 32 0;
-#X connect 54 2 43 0;
-#X connect 55 0 42 0;
-#X connect 57 0 20 0;
-#X connect 57 1 60 0;
-#X connect 58 0 20 0;
-#X connect 58 1 59 0;
-#X connect 59 0 61 0;
-#X connect 60 0 61 0;
-#X connect 62 0 63 1;
-#X connect 63 0 10 0;
+#X connect 28 0 22 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 32 0 47 0;
+#X connect 33 0 31 0;
+#X connect 33 0 23 0;
+#X connect 36 0 53 0;
+#X connect 38 0 4 0;
+#X connect 38 1 16 0;
+#X connect 38 2 32 0;
+#X connect 38 2 62 0;
+#X connect 40 0 39 0;
+#X connect 43 0 8 0;
+#X connect 44 0 13 0;
+#X connect 48 0 16 1;
+#X connect 48 0 61 0;
+#X connect 51 0 12 1;
+#X connect 52 0 15 1;
+#X connect 53 0 23 0;
+#X connect 53 1 31 0;
+#X connect 53 2 42 0;
+#X connect 55 0 19 0;
+#X connect 55 1 58 0;
+#X connect 56 0 19 0;
+#X connect 56 1 57 0;
+#X connect 57 0 59 0;
+#X connect 58 0 59 0;
+#X connect 60 0 61 1;
+#X connect 61 0 9 0;
+#X connect 64 0 41 0;
diff --git a/sfruit/beat2frac.pd b/sfruit/beat2frac.pd
index 2d285df..75900d3 100644
--- a/sfruit/beat2frac.pd
+++ b/sfruit/beat2frac.pd
@@ -2,7 +2,7 @@
#X obj 95 480 * 4;
#X obj 95 503 outlet;
-#X obj 27 81 s2l-explode;
+#X obj 27 81 symbol-explode;
#X obj 27 19 inlet;
#X obj 163 172 list-splat -1;
#X obj 27 107 list-split-at /;
diff --git a/sfruit/btn.pd b/sfruit/btn.pd
index e7de219..86e4e1d 100644
--- a/sfruit/btn.pd
+++ b/sfruit/btn.pd
@@ -7,7 +7,7 @@
-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 obj -61 38 symbol-explode;
#X msg -61 -2 boobies;
#X obj -61 17 t a a;
#X obj 65 17 s \$0canvas;
diff --git a/sfruit/countseq.pd b/sfruit/countseq.pd
index 17482b6..fb9dcc4 100644
--- a/sfruit/countseq.pd
+++ b/sfruit/countseq.pd
@@ -26,7 +26,7 @@
#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 233 symbol-explode;
#X obj 384 253 list split 1;
#X obj 418 274 list-l2s;
#X obj 418 295 atoi;
diff --git a/sfruit/dialog.yes-no.pd b/sfruit/dialog.yes-no.pd
index 40f59da..3985e56 100644
--- a/sfruit/dialog.yes-no.pd
+++ b/sfruit/dialog.yes-no.pd
@@ -16,7 +16,7 @@
#X msg 103 233 vis 0;
#X obj 33 252 outlet;
#X obj 344 40 loadbang;
-#X obj 344 87 s2l-explode;
+#X obj 344 87 symbol-explode;
#X obj 344 113 list split 30;
#X obj 344 223 list-l2s;
#X obj 381 144 list-l2s;
diff --git a/sfruit/line-seq-help.pd b/sfruit/line-seq-help.pd
new file mode 100644
index 0000000..de217ff
--- /dev/null
+++ b/sfruit/line-seq-help.pd
@@ -0,0 +1,39 @@
+#N canvas 393 102 571 427 10;
+#X text 125 212 arg1 initializes lag time;
+#X text 40 23 line-seq: like [line] but outputs integers and never
+ever skips a number on the way to its destination.;
+#X obj 42 80 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X msg 58 132 150;
+#X msg 68 152 275;
+#X text 100 150 and then this to see that all 125 numbers in between
+are output;
+#X obj 39 212 line-seq 250;
+#X floatatom 119 192 5 0 0 0 - - -;
+#X text 153 192 change lag time;
+#X obj 59 107 bng 15 250 50 0 \$0-reset-s \$0-reset-r empty 17 7 0
+10 -262144 -1 -1;
+#X text 88 130 then click this;
+#X text 76 105 reset the counter;
+#X obj 42 400 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 86 314 f;
+#X obj 116 314 + 1;
+#X obj 101 270 r \$0-reset-s;
+#X msg 101 292 0;
+#X floatatom 86 336 5 0 0 0 - - -;
+#X obj 59 257 t b;
+#X floatatom 56 378 5 0 0 0 - - -;
+#X connect 2 0 6 0;
+#X connect 3 0 6 0;
+#X connect 4 0 6 0;
+#X connect 6 0 12 0;
+#X connect 6 0 18 0;
+#X connect 6 0 19 0;
+#X connect 7 0 6 1;
+#X connect 13 0 14 0;
+#X connect 13 0 17 0;
+#X connect 14 0 13 1;
+#X connect 15 0 16 0;
+#X connect 16 0 13 0;
+#X connect 18 0 13 0;
diff --git a/sfruit/line-seq.pd b/sfruit/line-seq.pd
new file mode 100644
index 0000000..89178f0
--- /dev/null
+++ b/sfruit/line-seq.pd
@@ -0,0 +1,78 @@
+#N canvas 634 348 586 334 10;
+#X obj 77 113 line 0 1;
+#X obj 77 133 int;
+#X obj 77 199 list prepend;
+#X text 182 218 by taking the difference of the pair here and using
+a dripslow driven by a delay running at (linegrainrate/difference)
+smoothness can be maintained.;
+#X obj 238 37 inlet;
+#X obj 77 37 inlet;
+#X obj 77 290 outlet;
+#X obj 77 89 list append 50;
+#X text 182 281 replace with list-range>list-drip for a probably less
+taxing "instantaneous" range between grains;
+#X obj 77 254 t a a;
+#X text 182 104 rethinking: is line actually necessary? might be able
+to build the whole thing with [del] and avoid duplicate numbers. for
+now: added a [change] object in [pd smooth-range];
+#X obj 77 153 change;
+#N canvas 0 22 589 383 smooth_range 0;
+#X obj 170 152 unpack f f;
+#X obj 95 253 del;
+#X obj 170 174 expr $f3 / abs($f1 - $f2);
+#X msg 317 152 1;
+#X msg 317 131 line grain rate;
+#X obj 317 110 loadbang;
+#X obj 128 253 list-dripslow;
+#X obj 128 283 t b a;
+#X obj 128 227 t b a;
+#X obj 128 121 t a a;
+#X obj 128 203 list-range;
+#X obj 128 65 inlet;
+#X obj 155 334 outlet;
+#X obj 155 309 change;
+#N canvas 155 478 450 300 extend_range_for_list-range 0;
+#X obj 119 63 t a a;
+#X obj 119 29 inlet;
+#X obj 146 97 <;
+#X obj 146 122 expr ($f1 * 2) - 1;
+#X obj 119 177 list-add;
+#X msg 146 152 0 \$1;
+#X obj 119 222 outlet;
+#X connect 0 0 4 0;
+#X connect 0 1 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X restore 128 92 pd extend_range_for_list-range;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 1 0 6 0;
+#X connect 2 0 1 1;
+#X connect 3 0 2 2;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X connect 7 1 13 0;
+#X connect 8 0 6 0;
+#X connect 8 1 6 1;
+#X connect 9 0 10 0;
+#X connect 9 1 0 0;
+#X connect 10 0 8 0;
+#X connect 11 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 9 0;
+#X restore 77 228 pd smooth_range;
+#X connect 0 0 1 0;
+#X connect 1 0 11 0;
+#X connect 2 0 12 0;
+#X connect 4 0 7 1;
+#X connect 5 0 7 0;
+#X connect 7 0 0 0;
+#X connect 9 0 2 1;
+#X connect 9 1 6 0;
+#X connect 11 0 2 0;
+#X connect 12 0 9 0;
diff --git a/sfruit/list-proc-insert-help.pd b/sfruit/list-decorate-help.pd
index e6f49e7..726d5af 100644
--- a/sfruit/list-proc-insert-help.pd
+++ b/sfruit/list-decorate-help.pd
@@ -2,7 +2,7 @@
-#X obj 58 181 list-proc-insert;
+#X obj 58 181 list-decorate;
#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
@@ -17,7 +17,7 @@
#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 obj 58 181 list-decorate;
#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;
@@ -36,7 +36,7 @@ to the original list.;
#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
+#X text 7 6 list-decorate: call user-defined process on incoming
list and insert result into original list at position POS.;
#X obj 416 30 import-disabled list-abs;
#X connect 0 0 5 0;
diff --git a/sfruit/list-proc-insert.pd b/sfruit/list-decorate.pd
index c2eb628..c2eb628 100644
--- a/sfruit/list-proc-insert.pd
+++ b/sfruit/list-decorate.pd
diff --git a/sfruit/list-range-help.pd b/sfruit/list-range-help.pd
index 987a2e0..5e5ecd4 100644
--- a/sfruit/list-range-help.pd
+++ b/sfruit/list-range-help.pd
@@ -37,6 +37,35 @@ is less than n2 \, or interval -1 if n2 is less than n1;
#X msg 496 353;
#X msg 346 388;
#X msg 206 428;
+#N canvas 823 429 453 357 getting_the_full_range 0;
+#X obj 169 155 t a a;
+#X obj 169 121 inlet;
+#X obj 196 189 <;
+#X obj 196 214 expr ($f1 * 2) - 1;
+#X obj 169 269 list-add;
+#X msg 196 244 0 \$1;
+#X obj 169 314 outlet;
+#X msg 213 122 5 10;
+#X msg 250 122 10 -7;
+#X text 51 12 You may find it annoying that list-range stops just short
+of the destination - I'm copying Python's implementation and trusting
+they've got a good reason for that (maybe I even know it but I haven't
+had my coffee). In any case \, here's a little patch to "fix" that
+annoyance if it hits you (place it just before [list-range]).;
+#X obj 242 294 prepent set;
+#X msg 242 316;
+#X connect 0 0 4 0;
+#X connect 0 1 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 4 1;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 10 0 11 0;
+#X restore 471 23 pd getting_the_full_range;
#X connect 0 0 27 0;
#X connect 1 0 22 0;
#X connect 5 0 31 0;
diff --git a/sfruit/s2l-shorten.pd b/sfruit/s2l-shorten.pd
deleted file mode 100644
index cdddad6..0000000
--- a/sfruit/s2l-shorten.pd
+++ /dev/null
@@ -1,36 +0,0 @@
-#N canvas 0 25 331 384 10;
-
-#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-disabled 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/storebang.pd b/sfruit/storebang.pd
index 9a31cd2..a7a3537 100644
--- a/sfruit/storebang.pd
+++ b/sfruit/storebang.pd
@@ -16,7 +16,7 @@
#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 189 211 symbol-explode;
#X obj 329 170 import-disabled zexy;
#X connect 0 0 1 0;
#X connect 3 0 0 0;
diff --git a/sfruit/s2l-explode-help.pd b/sfruit/symbol-s2l-help.pd
index f038c99..feebd91 100644
--- a/sfruit/s2l-explode-help.pd
+++ b/sfruit/symbol-s2l-help.pd
@@ -1,6 +1,6 @@
#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 obj 44 81 symbol-explode;
+#X text 2 6 [symbol-explode] splits a symbol into individual characters
;
#X msg 44 52 Supercalifragilisticexpialidocious;
#X obj 44 107 prepent set;
diff --git a/sfruit/s2l-explode.pd b/sfruit/symbol-s2l.pd
index 6c5e02b..6c5e02b 100644
--- a/sfruit/s2l-explode.pd
+++ b/sfruit/symbol-s2l.pd
diff --git a/sfruit/symbol-shorten.pd b/sfruit/symbol-shorten.pd
new file mode 100644
index 0000000..00a7890
--- /dev/null
+++ b/sfruit/symbol-shorten.pd
@@ -0,0 +1,32 @@
+#N canvas 484 22 472 341 10;
+#X obj 41 42 inlet;
+#X obj 41 64 symbol-explode;
+#X obj 131 219 list append;
+#X obj 131 282 list-l2s;
+#X obj 131 308 outlet;
+#X obj 214 198 loadbang;
+#X obj 214 219 list-onearg \$2 >;
+#X obj 187 37 import-disabled list-abs;
+#X obj 41 90 list-decorate;
+#X obj 239 120 loadbang;
+#X obj 131 171 list split;
+#X obj 239 143 expr \$1 -1;
+#X obj 154 81 list length;
+#X obj 154 103 <= 20;
+#X obj 41 115 route 1 0;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 2 1;
+#X connect 8 0 14 0;
+#X connect 8 1 12 0;
+#X connect 9 0 11 0;
+#X connect 10 0 2 0;
+#X connect 10 2 3 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 0;
+#X connect 13 0 8 2;
+#X connect 14 0 3 0;
+#X connect 14 1 10 0;