From 91c256f44fc661dfa3fe4626699ec39913e923a7 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Fri, 4 Aug 2017 23:47:13 -0400
Subject: [PATCH] simplify external-tests.pd to only load and instantiate using
 absolute paths

---
 scripts/external-tests.pd | 779 ++++++++++++++++++--------------------
 1 file changed, 374 insertions(+), 405 deletions(-)

diff --git a/scripts/external-tests.pd b/scripts/external-tests.pd
index b9c6b358e..07ea528f8 100644
--- a/scripts/external-tests.pd
+++ b/scripts/external-tests.pd
@@ -1,6 +1,90 @@
-#N canvas 104 25 751 671 12;
-#X msg 513 70 bang;
-#N canvas 273 114 533 496 get_extensions 0;
+#N canvas 1 25 659 646 12;
+#X obj 61 34 loadbang;
+#N canvas 107 123 756 233 load_hcs/folder_list 0;
+#X obj 357 47 inlet;
+#X obj 357 155 s pd-\$0-hcs/folder_list;
+#N canvas 288 225 450 300 \$0-hcs/folder_list 0;
+#X restore 43 113 pd \$0-hcs/folder_list;
+#X obj 43 47 inlet;
+#X obj 43 76 s \$0-fl-in;
+#X obj 43 149 r \$0-fl-out;
+#X obj 43 180 outlet;
+#X msg 357 90 clear \, obj 5 5 receive \$0-fl-in \, obj 5 30 \$1/extra/hcs/folder_list
+\, obj 5 55 send \$0-fl-out \, connect 0 0 1 0 \, connect 1 0 2 0;
+#X connect 0 0 7 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 7 0 1 0;
+#X restore 164 429 pd load_hcs/folder_list;
+#X text 304 45 \$0-libdir - directory containing doc and extra;
+#N canvas 44 204 956 472 list_of_libdirs 0;
+#X obj 24 9 inlet;
+#X msg 24 150 libdir cyclone zexy creb cxc iemlib list-abs mapping
+markex maxlib memento mjlib motex osx pddp pdogg pixeltango pmpd rradical
+sigpack smlib unauthorized vbap pan freeverb~ hcs jmmmp ext13 ggee
+iem_anything ekext hexloader disis lyonpotpourri;
+#X text 70 128 libraries that are loaded at startup in Purr Data;
+#X text 49 267 Gem is currently excluded because it doesn't run on
+all platforms;
+#X obj 24 408 outlet;
+#X text 510 128 legacy libraries that are not loaded at startup;
+#X text 511 315 iem_tab: 45 classes that refuse to create without args
+;
+#X text 511 338 tof: param class is too complex to easily give default
+args;
+#X text 585 293 Missing:;
+#X text 84 245 Missing:;
+#X obj 24 376 list append;
+#X obj 24 35 trigger bang bang;
+#X msg 489 150 adaptive arraysize autotune~ bassemu~ bob~ boids bonk~
+bsaylor choice comport controctopus fluid~ hid iem16 iem_adaptfilt
+iem_ambi iem_bin_ambi iem_delay iemgui iemmatrix iem_roomsim iem_spec2
+iemxmlrpc jasch_lib K12 la-kitchen loop~ lrshift~ memento-p mjlib moocow
+moonlib motex mrpeach nsend pan pd~ pdcontainer pd-wavelet pique plugin~
+pmpd purepd rjlib rradical rtc sfruit sigmund~ stdout timestretch windowing
+;
+#X connect 0 0 11 0;
+#X connect 1 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 1 0;
+#X connect 11 1 12 0;
+#X connect 12 0 10 1;
+#X restore 132 124 pd list_of_libdirs;
+#N canvas 245 192 382 392 list_drip 0;
+#X obj 67 30 inlet;
+#X obj 102 83 list length;
+#X obj 102 108 until;
+#X obj 102 163 f;
+#X obj 102 188 + 1;
+#X msg 274 263 set;
+#X msg 66 307 \$1 \, \$2 \,;
+#X obj 66 263 list;
+#X msg 102 263 adddollar \$1 \, addcomma;
+#X msg 150 126 0;
+#X obj 66 332 symbol;
+#X obj 66 357 outlet;
+#X obj 67 55 trigger anything anything bang;
+#X obj 144 224 b;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 3 1;
+#X connect 4 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 1;
+#X connect 10 0 11 0;
+#X connect 12 0 7 0;
+#X connect 12 1 1 0;
+#X connect 12 2 5 0;
+#X connect 12 2 9 0;
+#X connect 12 2 13 0;
+#X connect 13 0 7 1;
+#X restore 132 154 pd list_drip;
+#N canvas 389 65 533 579 get_extensions 0;
 #X obj 17 44 inlet;
 #X obj 17 70 bang;
 #X msg 17 105 platform;
@@ -20,7 +104,9 @@
 #X msg 106 205 .pd_darwin .d_fat;
 #X obj 299 397 list;
 #X msg 246 205 .dll .m_i386;
-#X obj 17 460 outlet;
+#X obj 17 460 list append .pd;
+#X text 131 459 add ".pd" extension for abstractions;
+#X obj 17 485 outlet;
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
@@ -47,78 +133,49 @@
 #X connect 16 0 17 0;
 #X connect 17 0 19 0;
 #X connect 18 0 17 0;
-#X restore 97 345 pd get_extensions;
-#N canvas 453 108 450 323 get_libdir 0;
-#X obj 119 58 inlet;
-#X obj 119 135 pdinfo;
-#X obj 119 84 b;
-#X msg 119 110 libdir;
-#X obj 119 161 outlet;
-#X connect 0 0 2 0;
-#X connect 1 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X restore 513 95 pd get_libdir;
-#N canvas 107 123 756 233 load_hcs/folder_list 0;
-#X obj 306 40 inlet;
-#X obj 306 133 s pd-\$0-hcs/folder_list;
-#N canvas 0 0 450 300 \$0-hcs/folder_list 0;
-#X obj 5 5 receive 1003-fl-in;
-#X obj 5 30 /usr/lib/pd-l2ork/extra/hcs/folder_list;
-#X obj 5 55 send 1003-fl-out;
-#X connect 0 0 1 0;
+#X connect 19 0 21 0;
+#X restore 310 184 pd get_extensions;
+#X obj 164 275 list;
+#N canvas 245 192 382 392 list_drip 0;
+#X obj 67 30 inlet;
+#X obj 102 83 list length;
+#X obj 102 108 until;
+#X obj 102 163 f;
+#X obj 102 188 + 1;
+#X msg 274 263 set;
+#X msg 66 307 \$1 \, \$2 \,;
+#X obj 66 263 list;
+#X msg 102 263 adddollar \$1 \, addcomma;
+#X msg 150 126 0;
+#X obj 66 332 symbol;
+#X obj 66 357 outlet;
+#X obj 67 55 trigger anything anything bang;
+#X obj 144 224 b;
+#X connect 0 0 12 0;
 #X connect 1 0 2 0;
-#X restore 37 97 pd \$0-hcs/folder_list;
-#X obj 37 40 inlet;
-#X obj 37 65 s \$0-fl-in;
-#X obj 37 128 r \$0-fl-out;
-#X obj 37 154 outlet;
-#X msg 306 77 clear \, obj 5 5 receive \$0-fl-in \, obj 5 30 \$1/extra/hcs/folder_list
-\, obj 5 55 send \$0-fl-out \, connect 0 0 1 0 \, connect 1 0 2 0;
-#X connect 0 0 7 0;
+#X connect 2 0 3 0;
 #X connect 3 0 4 0;
-#X connect 5 0 6 0;
-#X connect 7 0 1 0;
-#X restore 97 569 pd load_hcs/folder_list;
-#N canvas 0 0 450 300 add_.pd 0;
-#X obj 66 29 inlet;
-#X obj 66 55 list append .pd;
-#X obj 66 80 outlet;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X restore 97 371 pd add_.pd;
-#X obj 97 425 t a a;
-#X obj 97 487 pack s s s;
-#X obj 37 19 loadbang;
-#X obj 130 453 s \$0-ext;
-#X obj 332 596 r \$0-reset;
-#X obj 150 317 s \$0-reset;
-#X msg 150 285 bang;
-#N canvas 0 0 450 300 remove_ext 0;
-#X obj 28 30 inlet;
-#X obj 78 150 r \$0-ext;
-#X obj 78 205 list length;
-#X obj 28 55 list fromsymbol;
-#X obj 28 260 list split;
-#X obj 28 80 t a a;
-#X obj 60 115 list length;
-#X obj 60 230 -;
-#X obj 28 285 list tosymbol;
-#X obj 28 310 outlet;
-#X obj 78 175 list fromsymbol;
-#X connect 0 0 3 0;
-#X connect 1 0 10 0;
-#X connect 2 0 7 1;
-#X connect 3 0 5 0;
+#X connect 4 0 3 1;
 #X connect 4 0 8 0;
-#X connect 5 0 4 0;
-#X connect 5 1 6 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 1;
-#X connect 8 0 9 0;
-#X connect 10 0 2 0;
-#X restore 97 624 pd remove_ext;
-#N canvas 314 37 450 472 remove_help 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 1;
+#X connect 10 0 11 0;
+#X connect 12 0 7 0;
+#X connect 12 1 1 0;
+#X connect 12 2 5 0;
+#X connect 12 2 9 0;
+#X connect 12 2 13 0;
+#X connect 13 0 7 1;
+#X restore 164 304 pd list_drip;
+#X text 304 65 \$0-current-libdir - current libdir being tested;
+#X obj 290 288 t a a;
+#X obj 164 369 pack s s s;
+#X text 249 369 ext current-libdir libdir;
+#X msg 164 394 list \$3/extra/\$2/*\$1;
+#N canvas 314 37 450 472 remove_help_patches 0;
 #X obj 40 14 inlet;
 #X obj 126 18 r \$0-ext;
 #X obj 126 43 sel .pd;
@@ -167,29 +224,102 @@
 #X connect 18 0 16 1;
 #X connect 19 0 20 0;
 #X connect 21 0 8 0;
-#X restore 97 594 pd remove_help;
-#X obj 513 120 s \$0-libdir;
-#X text 293 407 \$0-ext - library extension (platform specific);
-#X text 293 427 \$0-libdir - directory containing doc and extra;
-#X text 293 447 \$0-reset - reset state for each libdir;
-#X obj 197 453 r \$0-libdir;
-#X obj 77 285 t a b a b;
-#N canvas 443 86 450 557 get-creator-names 0;
+#X restore 164 453 pd remove_help_patches;
+#N canvas 0 0 450 300 remove_ext 0;
+#X obj 28 30 inlet;
+#X obj 78 150 r \$0-ext;
+#X obj 78 205 list length;
+#X obj 28 55 list fromsymbol;
+#X obj 28 260 list split;
+#X obj 28 80 t a a;
+#X obj 60 115 list length;
+#X obj 60 230 -;
+#X obj 28 285 list tosymbol;
+#X obj 28 310 outlet;
+#X obj 78 175 list fromsymbol;
+#X connect 0 0 3 0;
+#X connect 1 0 10 0;
+#X connect 2 0 7 1;
+#X connect 3 0 5 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 1;
+#X connect 8 0 9 0;
+#X connect 10 0 2 0;
+#X restore 164 479 pd remove_ext;
+#N canvas 70 66 589 509 test_load_with_declare 0;
+#X obj 64 21 inlet;
+#N canvas 0 0 450 300 \$0-load_declare 0;
+#X restore 153 319 pd \$0-load_declare;
+#X obj 153 161 f;
+#X obj 183 161 + 1;
+#X obj 153 186 * 30;
+#X obj 153 216 pack f s;
+#X obj 153 291 s pd-\$0-load_declare;
+#X obj 306 77 t b b;
+#X msg 171 132 0;
+#X msg 338 246 clear;
+#X msg 153 246 obj 5 \$1 declare -lib \$2;
+#X obj 64 56 trigger bang bang anything;
+#X msg 64 246 clear;
+#X text 59 354 Load each object by dynamically instantiating a [declare
+-lib libname]. We must clear the subpatch afterward as well to make
+sure we don't accidentally start with some loaded libs after editing
+this patch. Since Pd doesn't have any way to unload a library this
+works.;
+#X text 111 21 load a lib;
+#X obj 306 22 r \$0-current-libdir;
+#X text 361 49 reset for each libdir;
+#X connect 0 0 11 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 1;
+#X connect 4 0 5 0;
+#X connect 5 0 10 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 0;
+#X connect 8 0 2 1;
+#X connect 9 0 6 0;
+#X connect 10 0 6 0;
+#X connect 11 0 12 0;
+#X connect 11 1 2 0;
+#X connect 11 2 5 1;
+#X connect 12 0 6 0;
+#X connect 15 0 7 0;
+#X restore 164 509 pd test_load_with_declare;
+#N canvas 464 46 450 650 get-creator-names 0;
 #X obj 41 22 inlet;
-#X obj 51 356 outlet;
+#X obj 41 586 outlet;
 #X obj 141 54 r \$0-last-objectmaker-methodspace-length;
-#X obj 100 167 -;
+#X obj 41 137 -;
 #X obj 41 107 classinfo objectmaker;
 #X msg 41 82 methods;
-#X obj 51 208 until;
-#X obj 51 249 f;
-#X obj 94 249 + 1;
-#X obj 51 284 classinfo objectmaker;
-#X obj 151 181 t a;
+#X obj 41 168 until;
+#X obj 41 209 f;
+#X obj 84 209 + 1;
+#X obj 41 244 classinfo objectmaker;
+#X obj 141 137 t a;
 #X obj 41 47 bang;
-#X obj 51 309 t a a;
-#X obj 140 355 print testing;
-#X msg 123 329 \$1;
+#X obj 41 269 t a a;
+#X obj 210 241 r \$0-libdir;
+#X obj 210 296 list fromsymbol;
+#X obj 210 321 list length;
+#X obj 73 296 list split 1;
+#X obj 73 321 list fromsymbol;
+#X obj 73 356 list split;
+#X obj 179 425 select s;
+#X msg 179 450 1;
+#X obj 232 450 b;
+#X msg 232 475 0;
+#X obj 41 507 list prepend;
+#X obj 41 532 route 1;
+#X obj 41 557 list;
+#X text 110 532 filter out creators that aren't absolute paths;
+#X text 110 552 otherwise we get unmanageable namespace clashes;
+#X obj 210 271 trigger anything anything;
+#X obj 73 391 list tosymbol;
 #X connect 0 0 11 0;
 #X connect 2 0 3 1;
 #X connect 2 0 10 0;
@@ -203,110 +333,93 @@
 #X connect 9 0 12 0;
 #X connect 10 0 7 1;
 #X connect 11 0 5 0;
-#X connect 12 0 1 0;
-#X connect 12 1 14 0;
-#X connect 14 0 13 0;
-#X restore 77 686 pd get-creator-names;
-#N canvas 228 256 450 346 test-object 0;
-#X obj 86 36 inlet;
-#X text 132 34 creator_name argtype1 argtype2 etc.;
-#N canvas 150 78 649 452 right_outlet_for_aliases 0;
+#X connect 12 0 23 0;
+#X connect 12 1 16 0;
+#X connect 13 0 28 0;
+#X connect 14 0 15 0;
+#X connect 15 0 18 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 29 0;
+#X connect 18 2 29 0;
+#X connect 19 0 20 0;
+#X connect 19 1 21 0;
+#X connect 20 0 23 1;
+#X connect 21 0 22 0;
+#X connect 22 0 23 1;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 25 0 1 0;
+#X connect 28 0 14 0;
+#X connect 28 1 19 1;
+#X connect 29 0 19 0;
+#X restore 132 543 pd get-creator-names;
+#N canvas 238 135 450 346 test-object 0;
+#X obj 26 36 inlet;
+#X text 72 34 creator_name argtype1 argtype2 etc.;
+#N canvas 372 37 649 659 right_outlet_for_aliases 0;
 #X obj 70 25 inlet;
 #X obj 70 50 t a a;
 #X obj 102 78 list split 1;
-#X obj 102 103 t b a;
-#X msg 102 128 0;
-#X obj 102 183 b;
-#X msg 102 208 0;
-#X msg 162 208 1;
-#X obj 70 248 list prepend;
-#X obj 70 273 route 0 1;
-#X obj 70 358 outlet;
-#X obj 121 358 outlet;
-#X obj 102 158 classinfo;
+#X obj 135 303 t b a;
+#X msg 135 328 0;
+#X obj 135 383 b;
+#X msg 135 408 0;
+#X msg 195 408 1;
+#X obj 70 448 list prepend;
+#X obj 70 473 route 0 1;
+#X obj 70 558 outlet;
+#X obj 121 558 outlet;
+#X obj 135 358 classinfo;
+#X obj 70 498 list;
+#X obj 107 498 list;
 #X text 196 23 Check if we're a lone creator name with no corresponding
-class name. If so \, we are an alias and should skip the next class-based
-test(s) by going to the right outlet.;
-#X obj 70 298 list;
-#X obj 107 298 list;
+class name. If so \, we are an alias and should skip any class-based
+tests;
+#X obj 102 133 list fromsymbol;
+#X obj 329 89 r \$0-libdir;
+#X obj 439 87 r \$0-current-libdir;
+#X obj 290 140 symbol;
+#X obj 400 140 symbol;
+#X obj 102 103 trigger anything bang bang;
+#X obj 290 165 pack s s;
+#X msg 290 190 symbol \$1/\$2/;
+#X obj 290 215 list fromsymbol;
+#X obj 290 240 list length;
+#X obj 102 273 list split;
+#X obj 171 328 list tosymbol;
 #X connect 0 0 1 0;
 #X connect 1 0 8 0;
 #X connect 1 1 2 0;
-#X connect 2 0 3 0;
+#X connect 2 0 21 0;
 #X connect 3 0 4 0;
-#X connect 3 1 12 1;
+#X connect 3 1 27 0;
 #X connect 4 0 12 0;
 #X connect 5 0 6 0;
 #X connect 6 0 8 1;
 #X connect 7 0 8 1;
 #X connect 8 0 9 0;
-#X connect 9 0 14 0;
-#X connect 9 1 15 0;
+#X connect 9 0 13 0;
+#X connect 9 1 14 0;
 #X connect 12 0 5 0;
 #X connect 12 1 7 0;
-#X connect 14 0 10 0;
-#X connect 15 0 11 0;
-#X restore 86 61 pd right_outlet_for_aliases;
-#N canvas 182 119 522 576 namespace_collisions 0;
-#X obj 40 15 inlet;
-#X obj 60 98 list split 1;
-#X obj 60 123 t b a;
-#X msg 60 148 externdir;
-#X obj 310 63 r \$0-current-libdir-name;
-#X obj 219 63 r \$0-libdir;
-#X obj 180 108 symbol;
-#X obj 246 107 symbol;
-#X msg 180 168 symbol \$1/extra/\$2;
-#X obj 60 174 classinfo;
-#X obj 60 232 select;
-#X obj 40 40 t a a b b;
-#X msg 60 257 0;
-#X obj 98 256 b;
-#X msg 98 281 1;
-#X obj 40 321 list prepend;
-#X obj 40 346 route 0 1;
-#X obj 40 521 outlet;
-#X obj 70 457 s \$0-fail;
-#X obj 70 403 pack s s s;
-#X obj 70 377 list split 1;
-#X obj 60 199 trigger anything anything;
-#X msg 70 431 \$1: externdir mismatch: expected \$2 but got \$3;
-#X obj 180 143 pack s s;
-#X obj 40 489 list;
-#X obj 259 278 print externdir;
-#X connect 0 0 11 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 1 9 1;
-#X connect 3 0 9 0;
-#X connect 4 0 7 1;
-#X connect 5 0 6 1;
-#X connect 6 0 23 0;
-#X connect 7 0 23 1;
-#X connect 8 0 10 1;
-#X connect 8 0 19 1;
-#X connect 9 0 21 0;
-#X connect 9 0 25 0;
-#X connect 10 0 12 0;
-#X connect 10 1 13 0;
-#X connect 11 0 15 0;
-#X connect 11 1 1 0;
-#X connect 11 2 6 0;
-#X connect 11 3 7 0;
-#X connect 12 0 15 1;
-#X connect 13 0 14 0;
-#X connect 14 0 15 1;
-#X connect 15 0 16 0;
-#X connect 16 0 24 0;
-#X connect 16 1 20 0;
+#X connect 13 0 10 0;
+#X connect 14 0 11 0;
+#X connect 16 0 26 0;
+#X connect 17 0 19 1;
+#X connect 18 0 20 1;
 #X connect 19 0 22 0;
-#X connect 20 0 19 0;
-#X connect 21 0 10 0;
-#X connect 21 1 19 2;
-#X connect 22 0 18 0;
-#X connect 23 0 8 0;
-#X connect 24 0 17 0;
-#X restore 17 308 pd namespace_collisions;
+#X connect 20 0 22 1;
+#X connect 21 0 16 0;
+#X connect 21 1 19 0;
+#X connect 21 2 20 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 1;
+#X connect 26 1 3 0;
+#X connect 27 0 12 1;
+#X restore 194 79 pd right_outlet_for_aliases;
 #N canvas 3 25 740 694 load_the_object 0;
 #X obj 22 13 inlet;
 #X obj 86 115 list split 1;
@@ -482,11 +595,11 @@ may be other oddities in external libs with regard to libdir prefixes.
 #X connect 25 1 26 0;
 #X connect 26 0 21 0;
 #X connect 26 1 1 0;
-#X restore 86 156 pd load_the_object;
+#X restore 26 156 pd load_the_object;
 #N canvas 268 243 450 346 \$0-load_the_object_subpatch 0;
-#X restore 231 157 pd \$0-load_the_object_subpatch;
-#X msg 86 241 clear;
-#X obj 86 266 s pd-\$0-load_the_object_subpatch;
+#X restore 171 157 pd \$0-load_the_object_subpatch;
+#X msg 26 241 clear;
+#X obj 26 266 s pd-\$0-load_the_object_subpatch;
 #N canvas 99 25 704 622 check_for_namespace_collisions 0;
 #X obj 42 26 inlet;
 #X obj 42 51 t a a;
@@ -579,163 +692,59 @@ nameclash is in the current library we're testing then we ignore it.
 #X connect 22 0 13 0;
 #X connect 23 0 24 1;
 #X connect 24 0 22 0;
-#X restore 86 104 pd check_for_namespace_collisions;
+#X restore 194 114 pd check_for_namespace_collisions;
+#X obj 26 61 t a a;
+#X obj 58 114 print testing;
+#X obj 58 89 list split 1;
+#X connect 0 0 8 0;
+#X connect 2 0 7 0;
+#X connect 2 1 7 0;
+#X connect 3 0 5 0;
+#X connect 5 0 6 0;
+#X connect 8 0 3 0;
+#X connect 8 1 10 0;
+#X connect 10 0 9 0;
+#X restore 132 574 pd test-object;
+#X obj 164 239 trigger bang anything anything;
+#X msg 371 263 methods;
+#X obj 371 288 classinfo objectmaker;
+#X obj 371 313 s \$0-last-objectmaker-methodspace-length;
+#X text 304 85 \$0-last-objectmaker-methodspace-length;
+#X text 304 105 \$0-ext;
+#N canvas 454 133 450 323 set_\$0-libdir 0;
+#X obj 49 48 inlet;
+#X obj 49 137 pdinfo;
+#X obj 49 78 b;
+#X msg 49 108 libdir;
+#X obj 49 198 outlet;
+#X text 97 48 get the directory where extra/ and doc/ live;
+#X obj 49 162 trigger anything anything;
+#X obj 221 198 s \$0-libdir;
 #X connect 0 0 2 0;
-#X connect 2 0 8 0;
-#X connect 2 1 8 0;
-#X connect 4 0 6 0;
-#X connect 6 0 7 0;
-#X connect 8 0 4 0;
-#X restore 77 716 pd test-object;
-#X obj 249 340 classinfo objectmaker;
-#X msg 249 315 methods;
-#X text 293 467 \$0-last-objectmaker-methodspace-length;
-#X obj 249 370 s \$0-last-objectmaker-methodspace-length;
-#X text 293 487 \$0-current-libdir-name;
-#X text 293 507 \$0-fail;
-#N canvas 245 192 382 392 drip 0;
-#X obj 67 30 inlet;
-#X obj 102 83 list length;
-#X obj 102 108 until;
-#X obj 102 163 f;
-#X obj 102 188 + 1;
-#X msg 274 263 set;
-#X msg 66 307 \$1 \, \$2 \,;
-#X obj 66 263 list;
-#X msg 102 263 adddollar \$1 \, addcomma;
-#X msg 150 126 0;
-#X obj 66 332 symbol;
-#X obj 66 357 outlet;
-#X obj 67 55 trigger anything anything bang;
-#X obj 144 224 b;
-#X connect 0 0 12 0;
-#X connect 1 0 2 0;
+#X connect 1 0 6 0;
 #X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 3 1;
-#X connect 4 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 3 1;
-#X connect 10 0 11 0;
-#X connect 12 0 7 0;
-#X connect 12 1 1 0;
-#X connect 12 2 5 0;
-#X connect 12 2 9 0;
-#X connect 12 2 13 0;
-#X connect 13 0 7 1;
-#X restore 77 198 pd drip;
-#N canvas 245 192 382 392 drip 0;
+#X connect 3 0 1 0;
+#X connect 6 0 4 0;
+#X connect 6 1 7 0;
+#X restore 61 66 pd set_\$0-libdir;
+#N canvas 246 217 382 392 set_\$0-current_libdir 0;
 #X obj 67 30 inlet;
-#X obj 102 83 list length;
-#X obj 102 108 until;
-#X obj 102 163 f;
-#X obj 102 188 + 1;
-#X msg 274 263 set;
-#X msg 66 307 \$1 \, \$2 \, \$3 \,;
-#X obj 66 263 list;
-#X msg 102 263 adddollar \$1 \, addcomma;
-#X msg 150 126 0;
-#X obj 66 332 symbol;
-#X obj 66 357 outlet;
-#X obj 67 55 trigger anything anything bang;
-#X obj 144 224 b;
-#X connect 0 0 12 0;
+#X obj 67 55 trigger anything anything;
+#X obj 67 80 outlet;
+#X obj 202 81 s \$0-current-libdir;
+#X connect 0 0 1 0;
 #X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 3 1;
-#X connect 4 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 3 1;
-#X connect 10 0 11 0;
-#X connect 12 0 7 0;
-#X connect 12 1 1 0;
-#X connect 12 2 5 0;
-#X connect 12 2 9 0;
-#X connect 12 2 13 0;
-#X connect 13 0 7 1;
-#X restore 97 398 pd drip;
-#X msg 97 542 list \$3/extra/\$2/*\$1;
-#N canvas 500 53 450 404 test_path 0;
-#X obj 41 33 inlet;
-#X obj 41 138 outlet;
-#X obj 94 33 r \$0-libdir;
-#X obj 41 63 pack s s;
-#X msg 41 113 symbol \$2/extra/\$1;
-#X connect 0 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X restore 269 569 pd test_path;
-#X obj 269 594 t a b;
-#N canvas 384 25 589 486 test_load_and_path_with_declare 0;
-#X obj 64 21 inlet;
-#N canvas 0 0 450 300 \$0-load_declare 0;
-#X restore 647 149 pd \$0-load_declare;
-#X obj 153 161 f;
-#X obj 183 161 + 1;
-#X obj 153 186 * 30;
-#X obj 153 216 pack f s;
-#X obj 153 291 s pd-\$0-load_declare;
-#X obj 596 22 inlet;
-#X obj 596 77 t b b;
-#X msg 171 132 0;
-#X msg 628 246 clear;
-#X msg 153 246 obj 5 \$1 declare -lib \$2;
-#X obj 64 56 trigger bang bang anything;
-#X msg 64 246 clear;
-#X text 59 324 Load each object by dynamically instantiating a [declare
--lib libname]. We must clear the subpatch afterward as well to make
-sure we don't accidentally start with some loaded libs after editing
-this patch. Since Pd doesn't have any way to unload a library this
-works.;
-#X obj 334 21 inlet;
-#X obj 423 161 f;
-#X obj 453 161 + 1;
-#X obj 423 186 * 30;
-#X obj 423 216 pack f s;
-#X msg 441 132 0;
-#X obj 334 56 trigger bang bang anything;
-#X msg 334 246 clear;
-#X msg 423 246 obj 5 \$1 declare -path \$2;
-#X text 111 21 load a lib;
-#X text 380 22 set a path;
-#X connect 0 0 12 0;
-#X connect 2 0 3 0;
-#X connect 2 0 4 0;
-#X connect 3 0 2 1;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 8 0 20 0;
-#X connect 8 1 10 0;
-#X connect 9 0 2 1;
-#X connect 10 0 6 0;
-#X connect 11 0 6 0;
-#X connect 12 0 13 0;
-#X connect 12 1 2 0;
-#X connect 12 2 5 1;
-#X connect 13 0 6 0;
-#X connect 15 0 21 0;
-#X connect 16 0 17 0;
-#X connect 16 0 18 0;
-#X connect 17 0 16 1;
-#X connect 18 0 19 0;
-#X connect 19 0 23 0;
-#X connect 20 0 16 1;
-#X connect 21 0 22 0;
-#X connect 21 1 16 0;
-#X connect 21 2 19 1;
-#X connect 22 0 6 0;
-#X connect 23 0 6 0;
-#X restore 97 654 pd test_load_and_path_with_declare;
+#X connect 1 1 3 0;
+#X restore 132 184 pd set_\$0-current_libdir;
+#N canvas 0 0 450 300 set_\$0-ext 0;
+#X obj 78 44 inlet;
+#X obj 78 69 trigger anything anything;
+#X obj 78 94 outlet;
+#X obj 250 94 s \$0-ext;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X restore 164 329 pd set_\$0-ext;
 #N canvas 259 121 571 514 results 0;
 #X obj 62 25 inlet;
 #X obj 235 33 r \$0-current-libdir-name;
@@ -805,74 +814,34 @@ works.;
 #X connect 29 1 30 0;
 #X connect 30 0 27 0;
 #X connect 31 0 27 0;
-#X restore 37 756 pd results;
-#X obj 249 284 s \$0-current-libdir-name;
-#X obj 77 223 trigger anything anything;
-#X obj 674 284 t a;
-#X obj 674 504 t a;
-#X msg 77 72 libdir cyclone zexy creb cxc iemlib list-abs mapping markex
-maxlib memento mjlib motex osx pddp pdogg pixeltango pmpd rradical
-sigpack smlib unauthorized vbap pan freeverb~ hcs jmmmp ext13 ggee
-iem_anything ekext hexloader disis lyonpotpourri;
-#X obj 37 44 t b b b b;
-#N canvas 319 177 550 418 libs_not_loaded_by_default 0;
-#X obj 10 11 inlet;
-#X obj 10 251 outlet;
-#X text 104 243 problems;
-#X text 104 263 iem_tab: 45 classes that refuse to create without args
-;
-#X text 104 283 tof: param class is too complex to easily give default
-args;
-#X msg 10 36 adaptive arraysize autotune~ bassemu~ bob~ boids bonk~
-bsaylor choice comport controctopus fluid~ hid iem16 iem_adaptfilt
-iem_ambi iem_bin_ambi iem_delay iemgui iemmatrix iem_roomsim iem_spec2
-iemxmlrpc jasch_lib K12 la-kitchen loop~ lrshift~ memento-p mjlib moocow
-moonlib motex mrpeach nsend pan pd~ pdcontainer pd-wavelet pique plugin~
-pmpd purepd rjlib rradical rtc sfruit sigmund~ stdout timestretch windowing
-;
-#X connect 0 0 5 0;
-#X connect 5 0 1 0;
-#X restore 57 164 pd libs_not_loaded_by_default;
-#X text 269 163 <- two libraries to go: tof and iem_tab;
-#X obj 476 290 print next_library;
-#X connect 0 0 2 0;
-#X connect 1 0 4 0;
-#X connect 2 0 14 0;
-#X connect 3 0 13 0;
-#X connect 4 0 29 0;
-#X connect 5 0 6 0;
-#X connect 5 1 8 0;
-#X connect 6 0 30 0;
-#X connect 7 0 40 0;
-#X connect 9 0 33 2;
-#X connect 11 0 10 0;
-#X connect 12 0 33 0;
-#X connect 13 0 12 0;
-#X connect 18 0 6 2;
-#X connect 18 0 3 1;
+#X restore 61 601 pd results;
+#X obj 132 209 t a a;
+#X obj 61 94 trigger bang bang bang anything;
+#X connect 0 0 24 0;
+#X connect 1 0 13 0;
+#X connect 3 0 4 0;
+#X connect 4 0 25 0;
+#X connect 5 0 6 1;
+#X connect 6 0 7 0;
+#X connect 7 0 26 0;
+#X connect 9 0 10 2;
+#X connect 9 1 1 1;
+#X connect 10 0 12 0;
+#X connect 12 0 1 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 16 0 17 0;
+#X connect 18 0 6 0;
+#X connect 18 1 10 1;
+#X connect 18 2 19 0;
 #X connect 19 0 20 0;
-#X connect 19 1 1 0;
-#X connect 19 2 6 1;
-#X connect 19 3 10 0;
-#X connect 19 3 23 0;
 #X connect 20 0 21 0;
-#X connect 22 0 25 0;
-#X connect 23 0 22 0;
-#X connect 28 0 36 0;
-#X connect 29 0 5 0;
-#X connect 30 0 3 0;
-#X connect 31 0 32 0;
-#X connect 32 0 33 1;
-#X connect 32 1 33 2;
-#X connect 36 0 19 0;
-#X connect 36 1 35 0;
-#X connect 36 1 37 0;
-#X connect 36 1 43 0;
-#X connect 37 0 38 0;
-#X connect 38 0 31 0;
-#X connect 39 0 28 0;
-#X connect 40 0 34 0;
-#X connect 40 1 41 0;
-#X connect 40 2 39 0;
-#X connect 40 3 0 0;
-#X connect 41 0 28 0;
+#X connect 24 0 29 0;
+#X connect 25 0 28 0;
+#X connect 26 0 10 0;
+#X connect 28 0 16 0;
+#X connect 28 1 18 0;
+#X connect 29 0 27 0;
+#X connect 29 1 3 0;
+#X connect 29 2 5 0;
+#X connect 29 3 9 0;
-- 
GitLab