aboutsummaryrefslogtreecommitdiff
path: root/externals/vanilla
diff options
context:
space:
mode:
Diffstat (limited to 'externals/vanilla')
-rw-r--r--externals/vanilla/bng-help.pd444
-rw-r--r--externals/vanilla/clip~-help.pd91
-rw-r--r--externals/vanilla/cputime-help.pd167
-rw-r--r--externals/vanilla/dbtopow~-help.pd76
-rw-r--r--externals/vanilla/dbtorms~-help.pd80
-rw-r--r--externals/vanilla/delay-help.pd186
-rw-r--r--externals/vanilla/ftom~-help.pd80
-rw-r--r--externals/vanilla/hradio-help.pd401
-rw-r--r--externals/vanilla/hslider-help.pd440
-rw-r--r--externals/vanilla/key-help.pd131
-rw-r--r--externals/vanilla/keyname-help.pd136
-rw-r--r--externals/vanilla/keyup-help.pd134
-rw-r--r--externals/vanilla/line-help.pd263
-rw-r--r--externals/vanilla/list-help.pd626
-rw-r--r--externals/vanilla/loadbang-help.pd127
-rw-r--r--externals/vanilla/metro-help.pd98
-rw-r--r--externals/vanilla/mtof~-help.pd79
-rw-r--r--externals/vanilla/my_canvas-help.pd721
-rw-r--r--externals/vanilla/namecanvas-help.pd54
-rw-r--r--externals/vanilla/netreceive-help.pd93
-rw-r--r--externals/vanilla/netsend-help.pd111
-rw-r--r--externals/vanilla/openpanel-help.pd73
-rw-r--r--externals/vanilla/pipe-help.pd224
-rw-r--r--externals/vanilla/powtodb~-help.pd78
-rw-r--r--externals/vanilla/print-help.pd154
-rw-r--r--externals/vanilla/qlist-help.pd145
-rw-r--r--externals/vanilla/random-help.pd577
-rw-r--r--externals/vanilla/realtime-help.pd160
-rw-r--r--externals/vanilla/rmstodb~-help.pd79
-rw-r--r--externals/vanilla/rsqrt~-help.pd75
-rw-r--r--externals/vanilla/savepanel-help.pd70
-rw-r--r--externals/vanilla/sqrt~-help.pd79
-rw-r--r--externals/vanilla/textfile-help.pd112
-rw-r--r--externals/vanilla/timer-help.pd161
-rw-r--r--externals/vanilla/toggle-help.pd396
-rw-r--r--externals/vanilla/vradio-help.pd387
-rw-r--r--externals/vanilla/vslider-help.pd434
-rw-r--r--externals/vanilla/vu-help.pd374
-rw-r--r--externals/vanilla/wrap~-help.pd70
39 files changed, 8186 insertions, 0 deletions
diff --git a/externals/vanilla/bng-help.pd b/externals/vanilla/bng-help.pd
new file mode 100644
index 00000000..d4602e9e
--- /dev/null
+++ b/externals/vanilla/bng-help.pd
@@ -0,0 +1,444 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header bng 3 12 0 18 -204280
+-1 0;
+#X obj 0 300 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 42 244 494 344 META 0;
+#X text 12 115 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 135 AUTHOR Thomas Musil;
+#X text 12 155 WEBSITE;
+#X text 12 195 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 45 DESCRIPTION gui-bang;
+#X text 12 65 INLET_0 anything size flashtime init send receive label
+label_pos label_font color pos delta;
+#X text 12 95 OUTLET_0 bang;
+#X text 12 5 KEYWORDS control nonlocal GUI bang_op;
+#X text 12 175 RELEASE_DATE 2009;
+#X restore 500 597 pd META;
+#X obj 0 408 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 445 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 547 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 309 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 28 461 428 129 Related_objects 0;
+#X obj 22 43 bang;
+#X obj 69 43 trigger;
+#X obj 145 43 until;
+#X obj 201 43 bang~;
+#X msg 257 43;
+#X obj 20 93 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 69 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [bng] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 98 417 bang;
+#X obj 78 417 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 308 anything;
+#X obj 495 3 bng 15 250 50 0 foo5_rcv empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/bng -text
+pdpedia: bng;
+#X obj 144 227 print;
+#N canvas 598 330 187 198 once 0;
+#X msg 38 77 1;
+#X obj 38 51 t b b;
+#X obj 68 133 sel 0;
+#X obj 68 107 f 0;
+#X obj 38 24 inlet;
+#X obj 68 163 outlet;
+#X connect 0 0 3 1;
+#X connect 1 0 0 0;
+#X connect 1 1 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 144 203 pd once;
+#X obj 116 228 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 75 110 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 116 148 bng 50 950 50 1 foo5_snd foo5_rcv big-bang 57 25 0 12
+-262131 -260818 -143491;
+#X msg 116 49 33;
+#X msg 157 49 -3.14;
+#X msg 180 97 11 22 33.33;
+#X msg 170 73 open xxx;
+#X msg 187 121 funny;
+#X obj 292 72 s foo5_rcv;
+#X obj 292 102 r foo5_snd;
+#X obj 292 53 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 292 126 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X msg 75 49 0;
+#X text 321 142 and receive names. Right-;
+#X text 321 157 click and choose;
+#N canvas 85 201 428 309 bng_creation_arguments 0;
+#X text 12 28 "bng" can be called with 14 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 12 132 For example \, click the msg-box to dynamically create
+a bng:;
+#X text 12 80 bng creation arguments: Size Hold Interrupt Init sendName
+receiveName Label labelXOff labelYOff Font# fontSize bgColor foregroundColor
+lblColor;
+#X obj 13 196 s pd-bng_creation_arguments;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [bng] Creation Arguments and Dynamic Patching;
+#X msg 13 154 obj 180 240 bng 30 500 50 0 send receive Atlas -2 40
+0 12 9 2 18;
+#X connect 6 0 3 0;
+#X restore 100 519 pd bng_creation_arguments;
+#X text 320 173 "Properties" to set them \,;
+#X text 320 126 [bng] has settable send;
+#X text 110 250 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move
+a selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 321 187 or change them with messages;
+#X text 321 201 (see the subpatch below);
+#N canvas 48 5 428 610 Changing_GUI_Properties 0;
+#X text 239 33 no init;
+#X text 270 159 label position;
+#X text 167 451 delta;
+#X text 11 294 font properties;
+#X text 151 159 label;
+#X text 15 451 position;
+#X msg 13 103 size \$1;
+#X msg 104 104 flashtime \$1 \$2;
+#X msg 239 54 init 0;
+#X msg 249 104 init 1;
+#X msg 321 54 send foo5a_snd;
+#X msg 151 180 label new-label;
+#X msg 272 231 label_pos \$1 \$2;
+#X msg 13 366 label_font \$1 \$2;
+#X msg 16 558 pos \$1 \$2;
+#X msg 168 558 delta \$1 \$2;
+#X text 171 294 preset-colors;
+#X text 297 294 RGB-colors;
+#X msg 171 401 color \$1 \$2 \$3;
+#X msg 329 104 send bng-snd;
+#X obj 13 127 s bng_rcv;
+#X obj 104 128 s bng_rcv;
+#X obj 239 129 s bng_rcv;
+#X obj 321 129 s bng_rcv;
+#X obj 13 255 s bng_rcv;
+#X obj 23 230 s bng1a_rcv;
+#X obj 151 256 s bng_rcv;
+#X obj 272 256 s bng_rcv;
+#X obj 13 391 s bng_rcv;
+#X obj 171 426 s bng_rcv;
+#X obj 168 583 s bng_rcv;
+#X obj 16 583 s bng_rcv;
+#X msg 23 206 receive bng_rcv;
+#X msg 13 180 receive bng1a_rcv;
+#X msg 163 231 label myBang;
+#N canvas 375 166 160 287 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 72 \; \$1-interrupt 50 \; \$1-hold 250 \; \$1-xpos 340 \;
+\$1-ypos 500 \; \$1-xlabel 17 \; \$1-ylabel 7 \; \$1-dim 15 \; \$1-font
+0 \; \$1-font-size 10 \; \$1-bg 0 \; \$1-front 12 \; \$1-label 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 320 583 pd init;
+#X text 320 33 change send name;
+#X text 13 159 change receive name;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-interrupt empty
+0 -8 0 12 -262144 -1 -1 50 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-hold empty 0
+-8 0 12 -262144 -1 -1 250 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 104 54 pd flash-time;
+#X text 101 33 flash-time;
+#X text 12 32 dimensions;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 171 316 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 298 316 pd flash-time;
+#X text 248 72 init on;
+#X text 248 85 loadbang;
+#X obj 168 534 list;
+#X obj 168 473 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 310 466 cnv 15 102 102 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 311 467 cnv 15 100 100 empty empty empty 20 12 0 14 -261682
+-66577 0;
+#X obj 340 500 bng 15 250 50 1 bng-snd bng_rcv myBang 17 7 0 10 -262144
+-33289 -33289;
+#X text 62 318 1.font(0-2);
+#X text 62 339 2.height;
+#X text 220 318 1.bg;
+#X text 220 338 2.front;
+#X text 220 359 3.label;
+#X text 64 472 1.x-position;
+#X text 64 494 2.y-position;
+#X text 247 472 1.x-delta;
+#X text 247 494 2.y-delta;
+#X obj 13 53 nbx 3 14 8 200 0 0 empty \$0-dim empty 0 -8 0 12 -262144
+-1 -1 15 256;
+#X text 58 51 size;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 17 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 7 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 272 181 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 13 316 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 340 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 500 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 16 473 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 197 473 pd flash-time;
+#X text 321 203 2.y-offset;
+#X text 321 182 1.x-offset;
+#X text 153 56 1.interrupt;
+#X text 153 76 2.hold;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 6 2 [bng] Changing Properties through Messages;
+#X connect 6 0 20 0;
+#X connect 7 0 21 0;
+#X connect 8 0 22 0;
+#X connect 9 0 22 0;
+#X connect 10 0 23 0;
+#X connect 11 0 26 0;
+#X connect 12 0 27 0;
+#X connect 13 0 28 0;
+#X connect 14 0 31 0;
+#X connect 15 0 30 0;
+#X connect 18 0 29 0;
+#X connect 19 0 23 0;
+#X connect 32 0 25 0;
+#X connect 33 0 24 0;
+#X connect 34 0 26 0;
+#X connect 38 0 7 0;
+#X connect 41 0 18 0;
+#X connect 42 0 18 0;
+#X connect 45 0 15 0;
+#X connect 46 0 45 0;
+#X connect 59 0 6 0;
+#X connect 61 0 12 0;
+#X connect 62 0 13 0;
+#X connect 63 0 14 0;
+#X connect 64 0 45 1;
+#X restore 101 380 pd Changing_GUI_Properties;
+#X text 168 463 - creating a [bng] without any arguments will set default
+values for all gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [bng] object with custom properties:;
+#X text 11 23 gui-bang;
+#N canvas 43 24 428 573 bng_properties 0;
+#X text 22 53 1 Size;
+#X obj 104 60 bng 8 250 50 0 empty empty 8 10 4 0 8 -262144 -1 -1;
+#X obj 129 53 bng 15 250 50 0 empty empty 15 17 9 0 8 -262144 -1 -1
+;
+#X obj 164 43 bng 25 250 50 0 empty empty 25 27 20 0 8 -262144 -1 -1
+;
+#X text 51 75 Default size is 15 pixels. The minimum size is 8 and
+it does not have a maximum size.;
+#X text 23 258 3 Hold;
+#X obj 93 258 bng 15 50 10 0 empty empty 50 17 8 0 8 -262144 -1 -1
+;
+#X obj 128 258 bng 15 750 50 0 empty empty 750 17 8 0 8 -262144 -1
+-1;
+#X text 23 341 4 Receive Symbol/Send Symbol;
+#X text 49 356 This object can act as its own send or receive object.
+;
+#X obj 41 391 bng 15 250 50 0 link_this_bang empty This_one_sends_a_bang
+17 8 0 10 -262144 -1 -1;
+#X obj 41 412 bng 15 250 50 0 empty link_this_bang This_one_receives_it.
+17 8 0 10 -262144 -1 -1;
+#X text 232 370 Here is the alternative method.;
+#X text 26 447 5 GUI Options;
+#X text 49 469 The other properties are 'name' \, 'x/y offset' \, 'font
+size' \, and colours (for the background \, front \, and labels [name])
+;
+#X text 48 275 The default hold is 250 milliseconds. The hold value
+controls the length of time that the bng object stays "lit". Note that
+bng sends its message immediately regardless of the hold value.;
+#X obj 233 436 s linked_bngs;
+#X obj 338 389 r linked_bngs;
+#X text 22 105 2 Interrupt (milliseconds);
+#X text 48 119 If the bng object is "lit" and holding (see "hold" below)
+\, then receives another message before the hold time has passed \,
+the bng will quickly flash again for the duration you set in this interrupt
+property.;
+#X obj 24 203 bng 15 1000 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 47 187 This bng will hold for 1000 milliseconds \, but interrupt
+for 50 milliseconds if it gets a second message during its "hold".
+Click it once...wait. Then click it multiple times rather quickly to
+see the effect.;
+#X obj 233 413 bang;
+#X obj 338 413 bang;
+#X msg 233 389 send a message;
+#X text 18 510 This document was updated for Pd version 0.35 test 24
+by Dave Sabine as part of a project called pddp proposed by Krzysztof
+Czaja to build comprehensive documentation for Pd.;
+#X obj 338 439 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [bng] Properties;
+#X connect 17 0 23 0;
+#X connect 22 0 16 0;
+#X connect 23 0 26 0;
+#X connect 24 0 22 0;
+#X restore 101 556 pd bng_properties;
+#X text 80 463 14;
+#X text 215 551 (c) musil@iem.kug.ac.at;
+#X text 257 564 IEM KUG;
+#X text 232 576 graz \, austria 2002;
+#X text 168 418 - [bng] only outputs a bang message.;
+#X text 168 308 - [bng] outputs a bang message in response to any message
+that has not been defined to affect gui-properties (see below).;
+#X text 98 346 See the following subpatch for messages that change
+the gui-properties of [bng]:;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 15 0 14 0;
+#X connect 17 0 18 0;
+#X connect 18 0 16 0;
+#X connect 18 0 15 0;
+#X connect 19 0 18 0;
+#X connect 20 0 18 0;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 18 0;
+#X connect 25 0 27 0;
+#X connect 26 0 24 0;
+#X connect 28 0 18 0;
diff --git a/externals/vanilla/clip~-help.pd b/externals/vanilla/clip~-help.pd
new file mode 100644
index 00000000..d1b01d45
--- /dev/null
+++ b/externals/vanilla/clip~-help.pd
@@ -0,0 +1,91 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header clip~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 357 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 245 494 344 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal filter;
+#X text 12 45 DESCRIPTION restrict a signal to lie between two limits
+;
+#X text 12 125 OUTLET_0 signal;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 INLET_1 float;
+#X text 12 105 INLET_2 float;
+#X text 12 205 RELEASE_DATE 2009;
+#X restore 500 597 pd META;
+#X obj 0 449 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 486 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 366 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 69 480 428 108 Related_objects 0;
+#X obj 23 36 min~;
+#X obj 70 36 max~;
+#X obj 118 36 clip;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [clip~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X text 98 365 signal;
+#X obj 78 458 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 458 signal;
+#X obj 486 3 clip~;
+#X obj 460 20 pddp/pddplink http://wiki.puredata.info/en/clip~ -text
+pdpedia: clip~;
+#X obj 41 177 clip~ -0.5 0.5;
+#X obj 41 117 osc~ 1000;
+#X obj 57 226 metro 500;
+#X text 209 149 inlets to reset clip range;
+#X floatatom 101 149 4 0 0 0 - - -;
+#X floatatom 162 150 4 0 0 0 - - -;
+#X text 176 177 creation arguments initialize clip range;
+#X text 183 250 <- graph the output;
+#X obj 78 396 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 395 float;
+#X obj 78 421 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 420 float;
+#X obj 57 203 loadbang;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-array 100 float 0;
+#X coords 0 1 100 -1 200 100 1 0 0;
+#X restore 343 238 graph;
+#X text 11 23 restrict a signal to lie between two limits;
+#X text 168 365 - an incoming signal at the left inlet will be clipped
+to lie between the two limits.;
+#X text 168 458 - outputs the clipped signal.;
+#X text 168 505 - (optional) initial minimum value beyond which to
+clip the signal.;
+#X text 168 535 - (optional) initial maximum value beyond which to
+clip the signal.;
+#X text 80 505 1) float;
+#X text 80 535 2) float;
+#X text 81 67 The [clip~] object passes its signal input to its output
+\, clipping it to lie between two limits.;
+#X text 168 395 - minimum value below which the incoming signal is
+clipped.;
+#X text 168 420 - maximum value above which the incoming signal is
+clipped.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X obj 41 250 tabwrite~ \$0-array;
+#X connect 14 0 40 0;
+#X connect 15 0 14 0;
+#X connect 16 0 40 0;
+#X connect 18 0 14 1;
+#X connect 19 0 14 2;
+#X connect 26 0 16 0;
diff --git a/externals/vanilla/cputime-help.pd b/externals/vanilla/cputime-help.pd
new file mode 100644
index 00000000..c1395fca
--- /dev/null
+++ b/externals/vanilla/cputime-help.pd
@@ -0,0 +1,167 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header cputime 3 12 0 18
+-204280 -1 0;
+#X obj 0 359 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 242 494 360 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 KEYWORDS control time;
+#X text 12 45 DESCRIPTION measure CPU time;
+#X text 12 65 INLET_0 bang;
+#X text 12 85 INLET_1 bang;
+#X text 12 105 OUTLET_0 float;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 433 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 476 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 504 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 368 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 480 (none);
+#X text 98 442 float;
+#N canvas 48 338 428 252 Related_objects 0;
+#X obj 125 35 metro;
+#X obj 62 35 realtime;
+#X obj 14 36 timer;
+#X obj 173 35 delay;
+#X text 11 170 The best places to find information about Pd's libraries
+is:;
+#X text 8 192 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 10 207 or;
+#X text 10 222 iem.kug.ac.at/pdb/;
+#X text 12 121 This object is only offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 11 71 Externals;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [cputime] Related Objects;
+#X obj 11 91 pddp/helplink iemlib/t3_timer;
+#X restore 102 597 pd Related_objects;
+#X obj 471 3 cputime;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/cputime -text
+pdpedia: cputime;
+#X msg 122 156 bang;
+#X msg 83 134 bang;
+#X floatatom 83 200 0 0 0 0 - - -;
+#X text 155 202 Output is in milliseconds;
+#X text 118 134 Click here to start or reset;
+#X text 78 57 The [cputime] object measures elapsed CPU time. CPU time
+is the amount of time your computer's CPU requires to perform a task
+-- that's a short definition.;
+#X obj 83 178 cputime;
+#X text 160 157 Click here to get elapsed CPU time. Click again...and
+again...to see periodic measurements from the start or reset time.
+Be patient.;
+#X obj 78 400 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 399 bang;
+#X text 168 442 - the elapsed time in milliseconds arrives at the outlet
+when the right inlet receives a bang.;
+#X text 80 264 NOTE: Unlike most other objects in Pd \, the right inlet
+of [cputime] is the hot one (i.e. \, a bang to it triggers the output).
+;
+#N canvas 70 46 428 538 Time_Measurements 0;
+#X obj 30 395 time_measurements;
+#X obj 30 291 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 30 437 0 0 0 0 - - -;
+#X floatatom 116 436 0 0 0 0 - - -;
+#X floatatom 183 436 0 0 0 0 - - -;
+#X text 27 208 In the example below \, I've created an abstraction
+which will force each of Pd's stop-watches \, [timer] [cputime] and
+[realtime] to measure various processes and report the elapsed time.
+Click on each [bng] to begin the process and wait for the results.
+Notice the discrepancies in the results.;
+#X text 28 455 Logical Time;
+#X text 181 455 Real Time;
+#X text 115 455 CPU Time;
+#X obj 45 327 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 50 285 1 Measures elapsed time between two "bangs" from a [trigger]
+object.;
+#X text 65 319 2 Measures the amount of time Pd requires to turn on
+DSP and start an oscillator.;
+#X obj 89 359 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 27 487 This document was updated for Pd version 0.35 test 28
+by Dave Sabine as part of a project called pddp proposed by Krzysztof
+Czaja to build comprehensive documentation for Pd.;
+#X text 110 351 3 Measures the amount of time Pd requires count to
+three...please wait for approximately 3 seconds.;
+#X text 27 35 [cputime] works like essentially like a stop-watch. Once
+it starts \, you can continue to "poll" [cputime] to view the elapsed
+time.;
+#X text 27 82 The odd aspect about comparing [cputime] to a stop-watch
+is that a stop-watch can be stopped! [cputime] can only be started
+or reset. It cannot be stopped.;
+#X text 26 132 As stated above \, [cputime] measures "CPU" time. This
+value may be slightly different than "logical" time or "real" time.
+PD offers two objects which measure "logical" time and "real" time.
+See the reference documents for those objects for more information.
+;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [cputime] Time Measurements;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 0 2 4 0;
+#X connect 1 0 0 0;
+#X connect 9 0 0 1;
+#X connect 12 0 0 2;
+#X restore 102 537 pd Time_Measurements;
+#N canvas 70 77 428 430 Time_Objects 0;
+#X text 21 37 In a fantasy world \, computers could exist somehow beyond
+the restrictions of time and digital computation could be performed
+in ZERO time. However \, that is not the case. Instead \, every process
+within Pd and within your operating system requires at least a few
+nanoseconds of your CPU's time.;
+#X text 22 122 The [timer] object is like a clock that is not constrained
+to the regular laws of physics and the universal space-time continuum.
+It reports "time" measurements as only Pd can see them!;
+#X text 23 181 The [cputime] object is like a clock that measures how
+much time your CPU actually required to carry out your request. Keep
+in mind however that your CPU is busy doing many things simoultaneously
+\, so even though a process might take 5 minutes to complete \, your
+CPU does not pay full attention to that process for the entire 5 minutes.
+Instead \, it simply begins the process \, then refers back to that
+process from time to time until the it is complete. In other cases
+\, your CPU might require a full 5 minutes while Pd might report that
+merely a few milliseconds have passed. This type of discrepancy depends
+heavily on your computer's hardware and the type of processing it is
+performing.;
+#X text 24 350 The [realtime] object is as much like your own wrist
+watch as Pd can possibly manage. It measures time according to your
+operating system's internal clock.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [cputime] Why the Discrepencies Between Clocks?;
+#X restore 102 512 pd Time_Objects;
+#X text 101 561 A patch using [cputime] can be found in the Pure Documentation
+reference folder 7.stuff/tools/load-meter.pd;
+#X obj 78 442 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 measure CPU time;
+#X text 98 367 bang;
+#X text 168 367 - an initial bang to the left inlet starts the timer.
+Subsequent bangs reset the timer.;
+#X text 168 399 - a bang to the right inlet causes the elapsed time
+to be output (in milliseconds).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 13 0 19 1;
+#X connect 14 0 19 0;
+#X connect 19 0 15 0;
diff --git a/externals/vanilla/dbtopow~-help.pd b/externals/vanilla/dbtopow~-help.pd
new file mode 100644
index 00000000..c95719f3
--- /dev/null
+++ b/externals/vanilla/dbtopow~-help.pd
@@ -0,0 +1,76 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header dbtopow~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 415 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 246 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion;
+#X text 12 45 DESCRIPTION convert dB to power units for audio signals
+;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 65 INLET_0 signal float;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 452 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 488 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 516 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 424 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 492 (none);
+#N canvas 54 440 428 149 Related_objects 0;
+#X obj 253 43 powtodb~;
+#X obj 23 102 mtof;
+#X obj 68 102 ftom;
+#X obj 111 102 dbtorms;
+#X obj 176 102 rmstodb;
+#X obj 242 102 dbtopow;
+#X obj 304 102 powtodb;
+#X text 20 79 Control objects for conversion:;
+#X obj 23 43 mtof~;
+#X obj 70 43 ftom~;
+#X obj 118 43 dbtorms~;
+#X obj 187 43 rmstodb~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [dbtopow~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 239 243 snapshot~;
+#X floatatom 239 270 0 0 0 0 - - -;
+#X floatatom 239 135 0 0 0 0 - - -;
+#X text 98 423 signal;
+#X obj 78 461 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 461 signal;
+#X obj 474 3 dbtopow~;
+#X obj 440 20 pddp/pddplink http://wiki.puredata.info/en/dbtopow~ -text
+pdpedia: dbtopow~;
+#X obj 239 162 dbtopow~;
+#X text 11 23 convert dB to power units for audio signals;
+#X text 98 297 The [dbtopow~] object converts decibels to power units
+\, equal to the square of the "RMS" amplitude.;
+#X text 99 520 This object takes an audio signal as input and output
+(and works sample by sample). Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as [*~] and [osc~] \, depending on your hardware and math library.
+;
+#X obj 263 199 loadbang;
+#X obj 263 221 metro 150;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 10 0 11 0;
+#X connect 12 0 18 0;
+#X connect 18 0 10 0;
+#X connect 22 0 23 0;
+#X connect 23 0 10 0;
diff --git a/externals/vanilla/dbtorms~-help.pd b/externals/vanilla/dbtorms~-help.pd
new file mode 100644
index 00000000..d0de026c
--- /dev/null
+++ b/externals/vanilla/dbtorms~-help.pd
@@ -0,0 +1,80 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header dbtorms~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 409 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 246 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion;
+#X text 12 45 DESCRIPTION dB to linear amplitude for audio signals
+;
+#X text 12 65 INLET_0 signal float;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 446 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 483 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 510 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 418 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 487 (none);
+#N canvas 47 452 428 139 Related_objects 0;
+#X obj 116 42 rmstodb~;
+#X obj 185 42 dbtopow~;
+#X obj 251 42 powtodb~;
+#X obj 21 105 mtof;
+#X obj 66 105 ftom;
+#X obj 109 105 dbtorms;
+#X obj 174 105 rmstodb;
+#X obj 240 105 dbtopow;
+#X obj 302 105 powtodb;
+#X text 18 78 Control objects for conversion:;
+#X obj 21 42 mtof~;
+#X obj 68 42 ftom~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [dbtorms~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 209 195 snapshot~;
+#X floatatom 209 226 0 0 0 0 - - -;
+#X floatatom 209 90 0 0 0 0 - - -;
+#X obj 209 114 sig~;
+#X obj 276 169 metro 100;
+#X obj 276 139 loadbang;
+#X text 98 417 signal;
+#X obj 78 455 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 455 signal;
+#X obj 475 3 dbtorms~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/dbtorms~ -text
+pdpedia: dbtorms~;
+#X obj 209 139 dbtorms~;
+#X text 11 23 dB to linear amplitude for audio signals;
+#X text 99 251 The [dbtorms~] object converts from decibels to linear
+("RMS") amplitude \, so that 100 dB corresponds to an "RMS" of 1 .
+Zero dB \, which should correspond to 0.0001 in "RMS" \, is instead
+rounded down to zero.;
+#X text 99 514 This object takes an audio signal as input and output
+(and works sample by sample). Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as [*~] and [osc~] \, depending on your hardware and math library.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 10 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 21 0;
+#X connect 14 0 10 0;
+#X connect 15 0 14 0;
+#X connect 21 0 10 0;
diff --git a/externals/vanilla/delay-help.pd b/externals/vanilla/delay-help.pd
new file mode 100644
index 00000000..30588dc5
--- /dev/null
+++ b/externals/vanilla/delay-help.pd
@@ -0,0 +1,186 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header delay 3 12 0 18
+-204280 -1 0;
+#X obj 0 200 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 39 180 494 386 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 65 DESCRIPTION bang after time delay;
+#X text 12 5 ALIAS del;
+#X text 12 85 INLET_0 float bang stop;
+#X text 12 105 INLET_1 float;
+#X text 12 125 OUTLET_0 bang;
+#X text 12 25 KEYWORDS control time bang_op;
+#X text 12 205 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 393 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 446 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 488 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 97 299 428 291 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 42 37 timer;
+#X obj 8 37 pipe;
+#X obj 80 37 metro;
+#X obj 119 37 makenote;
+#X obj 179 87 delwrite~;
+#X text 4 208 The best places to find information about Pd's libraries
+is:;
+#X text 4 230 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 4 251 iem.kug.ac.at/pdb/;
+#X text 5 112 Externals;
+#X text 5 159 Externals are offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 7 62 Audio Objects;
+#X obj 10 87 vd~;
+#X obj 47 87 delread~;
+#X obj 113 87 delwrite~;
+#X text 7 1 [delay] Related Objects;
+#X text 5 133 [nop~];
+#X text 46 133 [z~];
+#X text 73 133 [t3_delay];
+#X text 137 133 [idelay~];
+#X text 194 133 [delay~];
+#X restore 101 597 pd Related_objects;
+#X obj 78 209 cnv 17 3 145 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 402 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 360 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 359 float;
+#X obj 451 3 delay;
+#X text 491 3 or;
+#X obj 517 2 del;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/delay -text
+pdpedia: delay;
+#X obj 100 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 100 150 delay 2000;
+#X obj 100 173 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 98 253 bang;
+#X text 98 313 stop;
+#X text 168 359 - a float to the right inlet sets the delay time (in
+milliseconds).;
+#X text 98 336 list;
+#X text 98 401 bang;
+#X msg 168 101 stop;
+#X msg 122 101 500;
+#X floatatom 157 128 0 0 0 0 - - -;
+#X text 188 129 <- scroll to change delay time in milliseconds;
+#X text 168 401 - [delay] only outputs a bang. It cannot be used like
+an "echo" or to delay messages other than bang. For that purpose \,
+you should explore [pipe].;
+#N canvas 106 287 428 250 A_delay_based_metronome 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 19 55 Let's assume for a moment that Miller had forgotten to
+build the [metro] object. (I know that sounds absurd \, but for the
+sake of example...);
+#X text 19 104 [delay] could be used to create a metronome as follows.
+;
+#X obj 58 197 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 58 175 delay 1000;
+#X msg 22 135 bang;
+#X msg 58 135 stop;
+#X obj 260 176 metro 1000;
+#X obj 260 197 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 260 157 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X floatatom 317 155 5 0 0 0 - - -;
+#X floatatom 115 154 5 0 0 0 - - -;
+#X text 152 175 is the same as;
+#X text 19 36 A makeshift [metro];
+#X text 7 1 [delay] A Metronome Built with [delay];
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 8 0;
+#X connect 9 0 7 0;
+#X connect 10 0 7 1;
+#X connect 11 0 4 1;
+#X restore 101 550 pd A_delay_based_metronome;
+#N canvas 103 173 428 389 Random_Impulse_Generator 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 21 35 Some users might be familiar with SC (SuperCollider)
+by James McCartney. For more info about SC \, visit www.audiosynth.com.
+Anyways...SC has a unit generator called "DUST". Dust will produce
+random impulses at a specified "density". I believe that Dust was given
+its name because it creates a sound that is similar to actual dust
+on old vinyl LP's -- you know that old crackling sound like Rice Krispies.
+;
+#X text 20 143 The idea is quite simple. If you want a "very dusty"
+sound \, you make the density quite high...if you want a "slightly
+dusty" sound \, you make the density quite low.;
+#X obj 22 299 delay;
+#X obj 22 321 bng 15 50 10 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 22 235 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X text 20 188 Dust.ar(2) in SC will produce 2 dusty impulses randomly
+per second. In the example below \, you'll see a version of this process
+created using Pd's delay object.;
+#X obj 22 278 random 500;
+#X obj 22 257 metro 500;
+#X floatatom 92 236 5 0 0 0 - - -;
+#X text 20 343 Also note that this example merely approximates the
+output of SC's "Dust" object.;
+#X text 130 236 low numbers produce a very "dusty" output.;
+#X text 130 248 high numbers produce a slightly "dusty" output.;
+#X text 7 1 [delay] A Random Impulse Generator using [delay];
+#X connect 3 0 4 0;
+#X connect 5 0 8 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 1;
+#X connect 9 0 7 1;
+#X restore 101 572 pd Random_Impulse_Generator;
+#X text 168 313 - causes [delay] to cancel its scheduled output.;
+#X text 168 336 - a list of floats will be truncated to the first element.
+;
+#X text 80 465 1) float;
+#X text 97 54 The [delay] object sends a bang to its outlet after a
+delay (in milliseconds) \, specified by its right inlet or its creation
+argument.;
+#X text 168 253 - a bang to the left inlet will output a bang after
+the prescribed time (set either at the right inlet creation argument).
+In the above example \, you should notice a delay of 2 seconds \, then
+a bang at the outlet.;
+#X text 168 208 - if a float is sent to the left inlet \, [delay] will
+set the delay time equal to that number (milliseconds) and schedule
+the outgoing bang.;
+#X text 98 492 [delay] accepts only ONE bang at a time. It cannot process
+multiple delays. In other words \, sending a "bang" to a [delay] which
+is already set will reschedule its output \, cancelling the old one.
+;
+#X text 168 465 - (optional) initial delay time (in milliseconds).
+;
+#X text 98 208 float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 298 550 pddp/pddplink ../2.control.examples/07.time.pd;
+#X text 11 23 bang after time delay;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 24 0 17 0;
+#X connect 25 0 17 0;
+#X connect 26 0 17 1;
diff --git a/externals/vanilla/ftom~-help.pd b/externals/vanilla/ftom~-help.pd
new file mode 100644
index 00000000..bdb0990f
--- /dev/null
+++ b/externals/vanilla/ftom~-help.pd
@@ -0,0 +1,80 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header ftom~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 420 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 245 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion MIDI;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 45 DESCRIPTION frequency to MIDI conversion for audio signals
+;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 457 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 494 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 524 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 429 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 498 (none);
+#N canvas 104 452 428 138 Related_objects 0;
+#X obj 70 37 dbtorms~;
+#X obj 138 37 rmstodb~;
+#X obj 207 37 dbtopow~;
+#X obj 273 37 powtodb~;
+#X obj 23 96 mtof;
+#X obj 68 96 ftom;
+#X obj 111 96 dbtorms;
+#X obj 176 96 rmstodb;
+#X obj 242 96 dbtopow;
+#X obj 304 96 powtodb;
+#X obj 23 37 mtof~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 73 Control objects for conversion:;
+#X text 8 2 [ftom~] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 209 205 snapshot~;
+#X floatatom 209 236 0 0 0 0 - - -;
+#X floatatom 209 100 0 0 0 0 - - -;
+#X obj 209 124 sig~;
+#X obj 256 179 metro 100;
+#X obj 256 149 loadbang;
+#X text 98 428 signal;
+#X obj 78 466 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 466 signal;
+#X obj 481 3 ftom~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/ftom~ -text
+pdpedia: ftom~;
+#X obj 209 149 ftom~;
+#X text 99 264 The ftom~ object transposes a frequency into a midi
+value in Hertz \, so that "440" goes to "69". A frequency of zero Hertz
+is given a MIDI value of -1500 (strictly speaking \, it is negative
+infinity.);
+#X text 11 23 frequency to MIDI conversion for audio signals;
+#X text 98 527 This object takes an audio signal as input and output
+(and works sample by sample). Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as *~ and osc~ \, depending on your hardware and math library.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 10 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 21 0;
+#X connect 14 0 10 0;
+#X connect 15 0 14 0;
+#X connect 21 0 10 0;
diff --git a/externals/vanilla/hradio-help.pd b/externals/vanilla/hradio-help.pd
new file mode 100644
index 00000000..c8323008
--- /dev/null
+++ b/externals/vanilla/hradio-help.pd
@@ -0,0 +1,401 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header hradio 3 12 0 18
+-204280 -1 0;
+#X obj 0 295 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 54 246 494 344 META 0;
+#X text 12 135 LIBRARY internal;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 AUTHOR Thomas Musil;
+#X text 12 175 WEBSITE;
+#X text 12 215 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS control storage GUI nonlocal;
+#X text 12 65 DESCRIPTION horizontal row of gui-radio buttons;
+#X text 12 85 INLET_0 float bang list size init number send receive
+label label_pos label_font color pos delta;
+#X text 12 115 OUTLET_0 float;
+#X text 12 195 RELEASE_DATE 2002;
+#X text 12 5 ALIAS rdb radiobut radiobutton;
+#X restore 500 597 pd META;
+#X obj 0 412 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 464 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 547 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 304 cnv 17 3 90 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 78 462 428 129 Related_objects 0;
+#X obj 22 43 bang;
+#X obj 69 43 trigger;
+#X obj 145 43 until;
+#X obj 201 43 bang~;
+#X msg 257 43;
+#X obj 20 93 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 69 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [hradio] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 421 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 291 165 and receive names. Right-;
+#X text 291 180 click and choose;
+#X text 290 196 "Properties" to set them \,;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/hradio -text
+pdpedia: hradio;
+#X obj 424 45 hradio 15 1 0 8 hradio-help-rcv empty empty 0 -8 0 10
+-262144 -1 -1 0;
+#X obj 27 50 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 27 207 4 0 0 0 - - -;
+#X obj 27 229 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 72 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 72 154 route 0 1 2 3 4 5 6 7 8 9;
+#X msg 172 71 set \$1;
+#X floatatom 172 50 4 0 9 0 - - -;
+#X floatatom 50 50 4 0 9 0 - - -;
+#X obj 91 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 111 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 131 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 150 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 170 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 190 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 209 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 229 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 249 179 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 75 207 print;
+#X obj 27 118 hradio 25 1 0 10 hradio-help-snd hradio-help-rcv hradio
+150 -8 0 12 -128992 -204786 -1 0;
+#X msg 107 76 3;
+#X msg 107 50 7;
+#X floatatom 292 59 5 0 0 0 - - -;
+#X floatatom 292 128 5 0 0 0 - - -;
+#X obj 292 80 s hradio-help-rcv;
+#X obj 292 105 r hradio-help-snd;
+#X text 98 303 float;
+#X text 98 367 list;
+#X text 98 421 float;
+#N canvas 109 230 428 285 hradio-creation-arguments 0;
+#X obj 25 202 s pd-hradio-creation-arguments;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [hradio] Creation Arguments and Dynamic Patching;
+#X text 22 38 [hradio] can be called with 15 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 22 80 [hradio] creation arguments: Size Unknown Init Number
+sendName receiveName Label labelXOff labelYOff font# fontSize bgColor
+foregroundColor labelColor initValue;
+#X text 22 123 For example \, click the msg-box to dynamically create
+a [hradio]:;
+#X msg 25 160 obj 160 245 hradio 25 1 0 3 empty empty Sterope 12 -8
+0 12 3 27 13 0 \;;
+#X connect 6 0 0 0;
+#X restore 170 522 pd hradio-creation-arguments;
+#X text 291 210 or change them with messages (see below);
+#N canvas 79 8 428 608 Setting_hradio_properties_through_messages 0
+;
+#X text 105 23 no init;
+#X text 161 155 label;
+#X msg 162 175 label blabla;
+#X msg 115 94 init 1;
+#X msg 105 42 init 0;
+#X text 114 61 init value;
+#X text 115 75 on loadbang;
+#X text 307 23 change send name;
+#X text 10 155 change receive name;
+#X obj 28 228 s z_rcv;
+#X msg 11 177 receive z_rcv;
+#N canvas 378 326 146 263 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 290 \; \$1-ypos 550 \; \$1-xlabel 0 \; \$1-ylabel
+-8 \; \$1-number 8 \; \$1-font-size 10 \; \$1-size 15 \; \$1-font-size
+10 \; \$1-font 0 \; \$1-bg 0 \; \$1-front 12 \; \$1-label 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 370 491 pd init;
+#X text 105 23 no init;
+#X msg 115 94 init 1;
+#X msg 105 42 init 0;
+#X text 114 61 init value;
+#X text 115 75 on loadbang;
+#X floatatom 198 42 3 0 20 0 - #0-number -;
+#X msg 198 94 number \$1;
+#X msg 322 92 send vradio_snd;
+#X msg 11 94 size \$1;
+#X text 10 23 dimensions;
+#X obj 11 44 nbx 3 14 8 200 0 0 empty \$0-size empty 0 -8 0 12 -262144
+-1 -1 15 256;
+#X text 61 41 size;
+#X text 300 155 label position;
+#X text 9 289 font properties;
+#X msg 302 229 label_pos \$1 \$2;
+#X msg 11 396 label_font \$1 \$2;
+#X text 60 313 1.font(0-2);
+#X text 60 334 2.height;
+#X text 351 178 1.x-offset;
+#X text 351 199 2.y-offset;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 -8 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 302 177 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 11 311 pd flash-time;
+#X text 162 289 preset-colors;
+#X text 301 289 RGB-colors;
+#X msg 162 396 color \$1 \$2 \$3;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 162 311 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 302 311 pd flash-time;
+#X text 211 313 1.bg;
+#X text 211 333 2.front;
+#X text 211 354 3.label;
+#X text 162 452 delta;
+#X text 10 452 position;
+#X msg 11 559 pos \$1 \$2;
+#X msg 163 559 delta \$1 \$2;
+#X obj 163 535 list;
+#X obj 163 474 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 59 473 1.x-position;
+#X text 59 495 2.y-position;
+#X text 242 473 1.x-delta;
+#X text 242 495 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 290 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 550 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 11 474 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 192 474 pd flash-time;
+#X obj 269 525 cnv 15 147 77 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 270 526 cnv 15 145 75 empty empty empty 20 12 0 14 -261682 -66577
+0;
+#X floatatom 291 580 5 0 0 0 - - -;
+#X obj 290 550 hradio 15 1 0 8 hradio_snd hradio_rcv myHradio 0 -8
+0 10 -262144 -33289 -33289 0;
+#X obj 11 118 s hradio_rcv;
+#X obj 105 118 s hradio_rcv;
+#X obj 198 118 s hradio_rcv;
+#X obj 308 118 s hradio_rcv;
+#X obj 11 254 s hradio_rcv;
+#X obj 162 254 s hradio_rcv;
+#X obj 302 254 s hradio_rcv;
+#X obj 11 421 s hradio_rcv;
+#X obj 162 421 s hradio_rcv;
+#X obj 11 584 s hradio_rcv;
+#X obj 163 584 s hradio_rcv;
+#X msg 28 203 receive hradio_rcv;
+#X msg 308 46 send hradio1_snd;
+#X msg 172 229 label myHradio;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [hradio] Set Properties through Messages;
+#X text 198 23 number of cells;
+#X connect 2 0 63 0;
+#X connect 3 0 59 0;
+#X connect 4 0 59 0;
+#X connect 10 0 62 0;
+#X connect 17 0 18 0;
+#X connect 18 0 60 0;
+#X connect 19 0 61 0;
+#X connect 20 0 58 0;
+#X connect 22 0 20 0;
+#X connect 26 0 64 0;
+#X connect 27 0 65 0;
+#X connect 32 0 26 0;
+#X connect 33 0 27 0;
+#X connect 36 0 66 0;
+#X connect 37 0 36 0;
+#X connect 38 0 36 0;
+#X connect 44 0 67 0;
+#X connect 45 0 68 0;
+#X connect 46 0 45 0;
+#X connect 47 0 46 0;
+#X connect 52 0 44 0;
+#X connect 53 0 46 1;
+#X connect 57 0 56 0;
+#X connect 69 0 9 0;
+#X connect 70 0 61 0;
+#X connect 71 0 63 0;
+#X restore 171 388 pd Setting_hradio_properties_through_messages;
+#X text 168 421 - output the number of the cell that has been clicked
+or sent to the inlet of [hradio]. Cell's are numbered from right to
+left \, in increasing order \, starting from zero.;
+#X text 24 246 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move a
+selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 11 21 horizontal row of gui-radio buttons;
+#X text 290 149 [hradio] has settable send;
+#X text 168 303 - a float highlights the corresponding button and outputs
+the button number. Buttons are numbered from left to right \, starting
+from zero. For incoming numbers that are out of range \, the nearest
+button number is selected.;
+#X text 168 468 - creating an [hradio] without any arguments sets default
+values for its gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [hradio] object with custom properties:
+;
+#X text 99 468 15;
+#X text 215 552 (c) musil@iem.kug.ac.at;
+#X text 257 565 IEM KUG;
+#X text 232 577 graz \, austria 2002;
+#X text 168 367 - a list is truncated to the first element.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 351 bang;
+#X text 168 351 - output the last selected value.;
+#X text 329 2 [rdb] or [radiobut] or [radiobutton];
+#X connect 15 0 33 0;
+#X connect 16 0 17 0;
+#X connect 19 0 18 0;
+#X connect 19 1 23 0;
+#X connect 19 2 24 0;
+#X connect 19 3 25 0;
+#X connect 19 4 26 0;
+#X connect 19 5 27 0;
+#X connect 19 6 28 0;
+#X connect 19 7 29 0;
+#X connect 19 8 30 0;
+#X connect 19 9 31 0;
+#X connect 20 0 33 0;
+#X connect 21 0 20 0;
+#X connect 22 0 33 0;
+#X connect 33 0 16 0;
+#X connect 33 0 19 0;
+#X connect 33 0 32 0;
+#X connect 34 0 33 0;
+#X connect 35 0 33 0;
+#X connect 36 0 38 0;
+#X connect 39 0 37 0;
diff --git a/externals/vanilla/hslider-help.pd b/externals/vanilla/hslider-help.pd
new file mode 100644
index 00000000..2ed25f53
--- /dev/null
+++ b/externals/vanilla/hslider-help.pd
@@ -0,0 +1,440 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header hslider 3 12 0 18
+-204280 -1 0;
+#X obj 0 291 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 494 344 META 0;
+#X text 12 135 LIBRARY internal;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 AUTHOR Thomas Musil;
+#X text 12 175 WEBSITE;
+#X text 12 215 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS control storage GUI nonlocal;
+#X text 12 65 DESCRIPTION horizontal gui-slider;
+#X text 12 5 ALIAS hsl;
+#X text 12 85 INLET_0 float bang size range log init steady receive
+send label label_pos label_font color pos delta;
+#X text 12 115 OUTLET_0 float;
+#X text 12 195 RELEASE_DATE 2002;
+#X restore 500 597 pd META;
+#X obj 0 410 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 461 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 546 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 300 cnv 17 3 105 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 90 479 428 112 Related_objects 0;
+#X obj 19 52 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 17 28 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [hslider] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 419 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 291 175 and receive names. Right-;
+#X text 291 190 click and choose;
+#X text 290 206 "Properties" to set them \,;
+#X text 98 299 float;
+#X text 98 340 list;
+#X text 98 419 float;
+#X text 291 220 or change them with messages (see below);
+#X text 430 3 abbreviation: [hsl];
+#X obj 414 45 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/hsl -text
+pdpedia: hsl;
+#X floatatom 135 116 4 0 0 0 - - -;
+#X msg 199 69 set \$1;
+#X floatatom 155 48 4 0 0 0 - - -;
+#X obj 135 138 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 135 49 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 138 94 hsl 101 15 25 75 0 1 foo1_snd foo1_rcv empty 8 -8 0 10
+-225280 -1109 -1 3900 1;
+#X floatatom 199 48 4 0 0 0 - - -;
+#X floatatom 292 141 4 0 0 0 - - -;
+#X floatatom 292 48 4 0 0 0 - - -;
+#X obj 179 140 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 47 t b b f;
+#X msg 56 85 1;
+#X obj 31 108 f 0;
+#X obj 31 131 pack 0 0;
+#X obj 31 156 route 0;
+#X obj 38 24 inlet;
+#X obj 31 180 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X restore 179 116 pd once;
+#X obj 59 177 hsl 73 15 55 3520 1 1 goo2_snd goo2_rcv log.freq. 8 7
+0 10 -204800 -260818 -90133 1618 1;
+#X obj 56 203 ftom;
+#X floatatom 56 227 4 0 0 0 - - -;
+#X floatatom 143 215 9 0 0 0 - - -;
+#X floatatom 56 132 4 0 0 0 - - -;
+#X obj 56 153 mtof;
+#X obj 292 92 s foo1_rcv;
+#X obj 292 117 r foo1_snd;
+#X msg 292 68 set \$1;
+#X text 139 193 (0.01 pixels);
+#X text 142 163 shift-click & drag;
+#X text 142 178 for fine-tuning;
+#X text 54 248 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move a
+selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 290 159 hslider has settable send;
+#X text 98 356 Special messages can be sent to [hslider] to change
+its properties:;
+#X text 168 419 - when the slider value is changed by clicking \, dragging
+\, or sending a float to the inlet \, the new slider value is sent
+to the outlet.;
+#N canvas 94 219 428 370 hsl-creation-arguments 0;
+#X obj 22 289 s pd-hsl-creation-arguments;
+#X text 20 37 "hsl" can be called with 18 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 21 225 For example \, click the msg-box to dynamically create
+a hsl:;
+#X text 20 84 hsl creation arguments: xSize ySize rangeBtm rangeTop
+Logarithmic Init sendName receiveName Label labelXOff labelYOff Font#
+fontSize bgColor foregroundColor lblColor sliderPosition steadyOnClick
+;
+#X text 21 142 note: sliderPosition is not the same as the initialization
+value. To dynamically instantiate an hsl that initializes with a desired
+value \, save an hsl in a patch and view it in a text editor to get
+the right value for sliderPosition. Or \, refer to hslider_set in g_hslider.c
+for conversion between sliderPosition and slider value.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [hslider] Creation Arguments and Dynamic Patching;
+#X msg 22 247 obj 150 335 hsl 75 20 -1 1 0 1 send receive Celaeno 12
+-9 0 12 7 13 21 4400 0;
+#X connect 7 0 0 0;
+#X restore 170 521 pd hsl-creation-arguments;
+#N canvas 66 11 463 602 Setting_slider_properties_through_messages
+0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 11 188 1 0 1 0 - #0-soc -;
+#X text 323 34 no init;
+#X text 8 169 steady-on-click;
+#X text 339 169 label;
+#X msg 339 191 label blabla;
+#X msg 323 53 init 0;
+#X msg 11 221 steady \$1;
+#X msg 234 73 lin;
+#X msg 244 105 log;
+#X text 230 34 linear/;
+#X text 230 49 logarithmical;
+#X text 332 73 init value;
+#X text 333 88 on loadbang;
+#X text 231 169 change send name;
+#X text 106 169 change receive name;
+#X obj 120 244 s z_rcv;
+#X msg 108 191 receive z_rcv;
+#X msg 347 243 label mySlider;
+#X obj 234 134 s hsl_rcv;
+#X obj 323 134 s hsl_rcv;
+#X obj 11 269 s hsl_rcv;
+#X obj 233 269 s hsl_rcv;
+#X obj 108 269 s hsl_rcv;
+#X msg 120 221 receive hsl_rcv;
+#X msg 233 192 send hsl1_snd;
+#X msg 242 221 send hsl_snd;
+#X obj 339 271 s hsl_rcv;
+#N canvas 382 136 161 310 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 300 \; \$1-ypos 350 \; \$1-xlabel -2 \; \$1-ylabel
+-8 \; \$1-soc 1 \; \$1-font-size 10 \; \$1-width 128 \; \$1-height
+15 \; \$1-bottom 0 \; \$1-top 127 \; \$1-bg 0 \; \$1-front 12 \; \$1-label
+12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 384 415 pd init;
+#X msg 333 109 init 1;
+#X msg 11 105 size \$1 \$2;
+#X text 60 56 1.width;
+#X text 60 77 2.height;
+#X obj 11 134 s hsl_rcv;
+#X obj 123 134 s hsl_rcv;
+#X text 172 56 1.bottom;
+#X text 172 77 2.top;
+#X text 120 34 output-range;
+#X msg 123 105 range \$1 \$2;
+#X text 136 307 font properties;
+#X msg 138 379 label_font \$1 \$2;
+#X text 187 329 1.font(0-2);
+#X text 187 350 2.height;
+#X text 9 308 label position;
+#X msg 11 380 label_pos \$1 \$2;
+#X text 60 330 1.x-offset;
+#X text 60 351 2.y-offset;
+#X obj 11 405 s hsl_rcv;
+#X obj 138 404 s hsl_rcv;
+#X obj 273 325 cnv 15 157 82 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 274 326 cnv 15 155 80 empty empty empty 20 12 0 14 -261682 -66577
+0;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-width empty
+0 -8 0 12 -262144 -1 -1 128 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-height empty
+0 -8 0 12 -262144 -1 -1 15 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 11 55 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-bottom empty
+0 -8 0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-top empty 0
+-8 0 12 -262144 -1 -1 127 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 123 55 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 -2 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 -8 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 11 329 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 138 328 pd flash-time;
+#X text 8 448 preset-colors;
+#X text 104 448 RGB-colors;
+#X msg 11 554 color \$1 \$2 \$3;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 11 469 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 108 469 pd flash-time;
+#X text 60 471 1.bg;
+#X text 60 491 2.front;
+#X text 60 512 3.label;
+#X text 317 448 delta;
+#X text 217 448 position;
+#X msg 218 540 pos \$1 \$2;
+#X msg 318 540 delta \$1 \$2;
+#X obj 318 517 list;
+#X obj 318 470 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 397 469 1.x-delta;
+#X text 397 491 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 300 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 350 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 218 470 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 347 470 pd flash-time;
+#X floatatom 329 384 5 0 0 0 - - -;
+#X obj 11 579 s hsl_rcv;
+#X obj 318 565 s hsl_rcv;
+#X obj 218 565 s hsl_rcv;
+#X text 10 35 dimensions;
+#X text 7 1 [hslider] Set Properties through Messages;
+#X text 266 469 1.x-pos;
+#X text 266 491 2.y-pos;
+#X obj 289 356 hsl 128 15 0 127 0 0 hsl-snd hsl-rcv mySlider -2 -8
+0 10 -262144 -1 -1 0 1;
+#X connect 1 0 7 0;
+#X connect 5 0 27 0;
+#X connect 6 0 20 0;
+#X connect 7 0 21 0;
+#X connect 8 0 19 0;
+#X connect 9 0 19 0;
+#X connect 17 0 23 0;
+#X connect 18 0 27 0;
+#X connect 24 0 16 0;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 29 0 20 0;
+#X connect 30 0 33 0;
+#X connect 38 0 34 0;
+#X connect 40 0 48 0;
+#X connect 44 0 47 0;
+#X connect 51 0 30 0;
+#X connect 52 0 38 0;
+#X connect 53 0 44 0;
+#X connect 54 0 40 0;
+#X connect 57 0 74 0;
+#X connect 58 0 57 0;
+#X connect 59 0 57 0;
+#X connect 65 0 76 0;
+#X connect 66 0 75 0;
+#X connect 67 0 66 0;
+#X connect 68 0 67 0;
+#X connect 71 0 65 0;
+#X connect 72 0 67 1;
+#X connect 81 0 73 0;
+#X restore 101 388 pd Setting_slider_properties_through_messages;
+#X text 11 21 horizontal gui-slider;
+#X text 98 466 18;
+#X text 168 466 - creating an [hslider] object without arguments sets
+default values for its gui-properties. See the subpatch below to learn
+how to dynamically instantiate a [bng] object with custom properties:
+;
+#X text 215 551 (c) musil@iem.kug.ac.at;
+#X text 257 564 IEM KUG;
+#X text 232 576 graz \, austria 2002;
+#X text 168 299 - a float updates the slider value and is sent to the
+outlet.;
+#X text 168 340 - a list is truncated to the first element.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 323 bang;
+#X text 168 323 - output the current slider value.;
+#X connect 20 0 23 0;
+#X connect 21 0 25 0;
+#X connect 22 0 25 0;
+#X connect 24 0 25 0;
+#X connect 25 0 20 0;
+#X connect 25 0 30 0;
+#X connect 26 0 21 0;
+#X connect 28 0 39 0;
+#X connect 30 0 29 0;
+#X connect 31 0 34 0;
+#X connect 31 0 32 0;
+#X connect 32 0 33 0;
+#X connect 35 0 36 0;
+#X connect 36 0 31 0;
+#X connect 38 0 27 0;
+#X connect 39 0 37 0;
diff --git a/externals/vanilla/key-help.pd b/externals/vanilla/key-help.pd
new file mode 100644
index 00000000..af3e67d5
--- /dev/null
+++ b/externals/vanilla/key-help.pd
@@ -0,0 +1,131 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header key 3 12 0 18 -204280
+-1 0;
+#X obj 0 257 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 242 494 344 META 0;
+#X text 12 85 LIBRARY internal;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 165 HELP_PATCH_AUTHORS Dave Sabine \, July 11 \, 2003 Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION get input from the keyboard;
+#X text 12 65 OUTLET_0 float;
+#X text 12 5 KEYWORDS control user_input;
+#X text 12 145 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 285 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 445 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 473 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 449 (none);
+#N canvas 92 446 428 145 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 21 42 keyup;
+#X obj 61 42 keyname;
+#X text 19 72 Externals and other object libraries;
+#X text 7 1 [key] Related Objects;
+#X obj 18 94 pddp/helplink Gem/gemkeyboard;
+#X obj 18 114 pddp/helplink Gem/gemkeyname;
+#X restore 102 598 pd Related_objects;
+#X text 98 293 float;
+#X obj 78 294 cnv 17 3 140 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 489 3 key;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/key -text
+pdpedia: key;
+#X text 98 261 (none);
+#X text 98 411 Also note that key combinations \, such as SHIFT+7 produce
+a different result than SHIFT or 7 alone.;
+#X text 168 346 Some keys \, such as SHIFT or the F1-F12 series all
+produce a zero \, but we can see by the [bng] that the event is not
+ignored completely...but the numeric "ID" of the key is not captured
+successfully. (This may produce different results on different systems.)
+;
+#X text 168 293 - the number received at the outlet represents the
+numeric "ID" of a key on the computer's keyboard. This event occurs
+when the key is pressed down. Only one event is captured at a time.
+;
+#X obj 103 137 key;
+#X obj 83 174 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 103 174 5 0 0 0 - - -;
+#X text 132 137 Type something on the keyboard to send input to Pd
+;
+#X text 100 95 [key] reports the (system dependent) numbers of "printing"
+keys of the keyboard.;
+#X text 99 477 Caveat - this only works if Pd actually gets the key
+events which can depend on the stacking order of windows and/or the
+pointer location. This is dependent on the system.;
+#N canvas 105 161 428 356 reacting_to_user_input 0;
+#X text 19 37 Most \, if not all \, programming environments provide
+us with tools to capture 'user initiated' events from the operating
+system. Keyboard input \, mouse clicks \, and mouse movements are the
+most common events in this 'user event' category.;
+#X text 19 103 Pd's [key] \, [keyup] \, and [keyname] are complimented
+by the externals such as [gemmouse] and [nimouse] to provide us with
+a full range of tools to gleen a user's activities at the computer.
+;
+#X text 33 240 onKeyUp;
+#X text 33 221 onKeyDown;
+#X text 33 259 onKeyPress;
+#X text 20 290 hmmm...wouldn't it be great if Pd also gave us onChange
+\, onBlur \, onFocus \, onClick \, onDblClick \, onDragDrop \, onLoad
+\, onMouseDown \, onMouseOver \, onMouseOut \, onMouseMove \, onUnload...?
+;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [key] Reacing to User Input;
+#X text 20 169 It's interesting to note that with these tools \, PD
+can mimic some of the functions in other languages - Javascript for
+example has:;
+#X restore 102 524 pd reacting_to_user_input;
+#N canvas 105 31 345 511 some_keyboard_fun 0;
+#X obj 52 75 loadbang;
+#X msg 23 16 bang;
+#X obj 33 158 qlist;
+#X floatatom 33 185 5 0 0 0 - - -;
+#X obj 228 30 r keyboard_fun;
+#X msg 52 105 read keyboard_fun.txt;
+#X msg 45 51 rewind;
+#X obj 228 112 symbol add2;
+#X obj 228 83 t b s;
+#X obj 228 138 pack s s;
+#X obj 228 164 route list;
+#X msg 47 245 set;
+#X msg 47 278;
+#X obj 228 57 symbol;
+#X text 71 17 Click here to start...;
+#X msg 62 131 tempo 0.8;
+#X obj 47 217 loadbang;
+#X connect 0 0 5 0;
+#X connect 0 0 15 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 13 0;
+#X connect 5 0 2 0;
+#X connect 6 0 2 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 12 0;
+#X connect 13 0 8 0;
+#X connect 15 0 2 0;
+#X connect 16 0 11 0;
+#X restore 102 548 pd some_keyboard_fun;
+#X obj 245 571 pddp/pddplink all_about_hid.pd -text all_about_hid;
+#X text 100 572 for more on HIDs:;
+#X text 11 23 get input from the keyboard;
+#X text 168 261 - [key] gets input directly from the keyboard.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
diff --git a/externals/vanilla/keyname-help.pd b/externals/vanilla/keyname-help.pd
new file mode 100644
index 00000000..d82f94f6
--- /dev/null
+++ b/externals/vanilla/keyname-help.pd
@@ -0,0 +1,136 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header keyname 3 12 0 18
+-204280 -1 0;
+#X obj 0 338 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 15 12 0 13
+-228856 -1 0;
+#N canvas 51 244 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 165 RELEASE_DATE 2009-06-12;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Dave Sabine \, July 11 \, 2003 Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION get input and key name from the keyboard
+;
+#X text 12 65 OUTLET_0 float;
+#X text 12 85 OUTLET_1 symbol;
+#X text 12 5 KEYWORDS control symbol_op user_input;
+#X restore 500 597 pd META;
+#X obj 0 365 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 15 12 0
+13 -228856 -1 0;
+#X obj 0 437 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 15 12
+0 13 -228856 -1 0;
+#X obj 0 464 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 15
+12 0 13 -228856 -1 0;
+#X text 98 441 (none);
+#N canvas 104 445 428 145 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 20 73 Externals and other object libraries;
+#X text 19 100 [gemkeyboard];
+#X text 102 100 [gemkeyname];
+#X obj 22 43 key;
+#X text 8 2 [keyup] Related Objects;
+#X obj 53 43 keyup;
+#X restore 102 597 pd Related_objects;
+#X text 98 373 float;
+#X obj 78 374 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 342 (none);
+#X obj 103 221 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 103 159 428 356 reacting_to_user_input 0;
+#X text 20 38 Most \, if not all \, programming environments provide
+us with tools to capture 'user initiated' events from the operating
+system. Keyboard input \, mouse clicks \, and mouse movements are the
+most common events in this 'user event' category.;
+#X text 20 104 Pd's [key] \, [keyup] \, and [keyname] are complimented
+by the externals such as [gemmouse] and [nimouse] to provide us with
+a full range of tools to gleen a user's activities at the computer.
+;
+#X text 34 241 onKeyUp;
+#X text 34 222 onKeyDown;
+#X text 34 260 onKeyPress;
+#X text 21 291 hmmm...wouldn't it be great if Pd also gave us onChange
+\, onBlur \, onFocus \, onClick \, onDblClick \, onDragDrop \, onLoad
+\, onMouseDown \, onMouseOver \, onMouseOut \, onMouseMove \, onUnload...?
+;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 21 170 It's interesting to note that with these tools \, PD
+can mimic some of the functions in other languages - Javascript for
+example has:;
+#X text 8 2 [keyup] Reacing to User Input;
+#X restore 102 523 pd reacting_to_user_input;
+#X obj 472 3 keyname;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/keyname -text
+pdpedia: keyname;
+#X obj 103 167 keyname;
+#X symbolatom 142 195 10 0 0 0 - - -;
+#X floatatom 103 195 5 0 0 0 - - -;
+#X obj 142 221 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 155 167 When you type on the keyboard \, [keyname] sends data
+to Pd;
+#X text 100 115 [keyname] reports the (system dependent) names of "printing"
+keys of the keyboard. It captures both the "keydown" and "keyup" events.
+;
+#X text 168 373 - the left inlet produces a 1 when a key goes down
+\, and a zero when the key goes up.;
+#X obj 78 404 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 403 symbol;
+#X text 168 403 - the right outlet produces a symbol which represents
+the name of the key.;
+#X text 99 467 Caveat - this object only works if Pd actually gets
+the key events which can depend on the stacking order of windows and/or
+the pointer location. This is dependent on the system.;
+#X obj 275 572 pddp/pddplink all_about_hid.pd -text all_about_hid;
+#X text 100 573 for more on HIDs:;
+#N canvas 107 131 327 410 some_keyboard_fun 0;
+#X obj 52 75 loadbang;
+#X msg 23 16 bang;
+#X obj 33 158 qlist;
+#X floatatom 33 185 5 0 0 0 - - -;
+#X obj 218 30 r keyboard_fun;
+#X msg 52 105 read keyboard_fun.txt;
+#X msg 45 51 rewind;
+#X obj 218 112 symbol add2;
+#X obj 218 83 t b s;
+#X obj 218 138 pack s s;
+#X obj 218 164 route list;
+#X msg 47 245 set;
+#X msg 47 278;
+#X obj 218 57 symbol;
+#X text 71 17 Click here to start...;
+#X msg 62 131 tempo 0.8;
+#X obj 47 217 loadbang;
+#X connect 0 0 5 0;
+#X connect 0 0 15 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 13 0;
+#X connect 5 0 2 0;
+#X connect 6 0 2 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 12 0;
+#X connect 13 0 8 0;
+#X connect 15 0 2 0;
+#X connect 16 0 11 0;
+#X restore 102 549 pd some_keyboard_fun;
+#X text 11 23 get input and key name from the keyboard;
+#X text 168 342 - [keyname] gets input directly from the keyboard.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 18 0;
+#X connect 16 1 17 0;
+#X connect 17 0 19 0;
+#X connect 18 0 12 0;
diff --git a/externals/vanilla/keyup-help.pd b/externals/vanilla/keyup-help.pd
new file mode 100644
index 00000000..060173bb
--- /dev/null
+++ b/externals/vanilla/keyup-help.pd
@@ -0,0 +1,134 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header keyup 3 12 0 18
+-204280 -1 0;
+#X obj 0 223 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 245 494 344 META 0;
+#X text 12 85 LIBRARY internal;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 145 RELEASE_DATE 2009-06-12;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 165 HELP_PATCH_AUTHORS Dave Sabine \, July 11 \, 2003 Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION get input from the keyboard on key release
+;
+#X text 12 65 INLET_0 float;
+#X text 12 5 KEYWORDS control user_input;
+#X restore 500 597 pd META;
+#X obj 0 250 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 400 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 427 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 404 (none);
+#N canvas 107 446 428 145 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 52 42 keyname;
+#X text 19 72 Externals and other object libraries;
+#X obj 21 42 key;
+#X text 7 1 [keyup] Related Objects;
+#X obj 18 93 pddp/helplink Gem/gemkeyboard;
+#X obj 18 113 pddp/helplink Gem/gemkeyname;
+#X restore 102 597 pd Related_objects;
+#X text 98 258 float;
+#X obj 78 259 cnv 17 3 130 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 227 (none);
+#X text 98 366 Also note that key combinations \, such as SHIFT+7 produce
+a different result than SHIFT or 7 alone.;
+#X text 168 301 Some keys \, such as SHIFT or the F1-F12 series all
+produce a zero \, but we can see by the [bng] that the event is not
+ignored completely...but the numeric "ID" of the key is not captured
+successfully. (This may produce different results on different systems.)
+;
+#X obj 83 162 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 103 162 5 0 0 0 - - -;
+#N canvas 107 160 428 356 reacting_to_user_input 0;
+#X text 19 37 Most \, if not all \, programming environments provide
+us with tools to capture 'user initiated' events from the operating
+system. Keyboard input \, mouse clicks \, and mouse movements are the
+most common events in this 'user event' category.;
+#X text 19 103 Pd's [key] \, [keyup] \, and [keyname] are complimented
+by the externals such as [gemmouse] and [nimouse] to provide us with
+a full range of tools to gleen a user's activities at the computer.
+;
+#X text 33 240 onKeyUp;
+#X text 33 221 onKeyDown;
+#X text 33 259 onKeyPress;
+#X text 20 290 hmmm...wouldn't it be great if Pd also gave us onChange
+\, onBlur \, onFocus \, onClick \, onDblClick \, onDragDrop \, onLoad
+\, onMouseDown \, onMouseOver \, onMouseOut \, onMouseMove \, onUnload...?
+;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 20 169 It's interesting to note that with these tools \, PD
+can mimic some of the functions in other languages - Javascript for
+example has:;
+#X text 7 1 [keyup] Reacing to User Input;
+#X restore 102 525 pd reacting_to_user_input;
+#X obj 483 3 keyup;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/keyup -text
+pdpedia: keyup;
+#X text 100 83 [keyup] reports the (system dependent) numbers of "printing"
+keys of the keyboard.;
+#X obj 103 125 keyup;
+#X text 142 125 When you release a key \, [keyup] sends data to Pd
+;
+#X text 168 258 - the number at this outlets represents the numeric
+"ID" of a key on the computer's keyboard. This even occurs when the
+key is released. Only one event is captured at a time.;
+#X text 98 431 The [key] and [keyup] objects can mimic the functionality
+of the [noteon] and [noteoff] objects. A key combination such as SHIFT+7
+could be considered a 'chord'!;
+#X text 99 471 Caveat - this object only works if Pd actually gets
+the key events which can depend on the stacking order of windows and/or
+the pointer location. This is dependent on the system.;
+#X obj 276 572 pddp/pddplink all_about_hid.pd -text all_about_hid;
+#X text 101 573 for more on HIDs:;
+#N canvas 107 163 330 381 some_keyboard_fun 0;
+#X obj 52 75 loadbang;
+#X msg 23 16 bang;
+#X obj 33 158 qlist;
+#X floatatom 33 185 5 0 0 0 - - -;
+#X obj 218 30 r keyboard_fun;
+#X msg 52 105 read keyboard_fun.txt;
+#X msg 45 51 rewind;
+#X obj 218 112 symbol add2;
+#X obj 218 83 t b s;
+#X obj 218 138 pack s s;
+#X obj 218 164 route list;
+#X msg 47 245 set;
+#X msg 47 278;
+#X obj 218 57 symbol;
+#X text 71 17 Click here to start...;
+#X msg 62 131 tempo 0.8;
+#X obj 47 217 loadbang;
+#X connect 0 0 5 0;
+#X connect 0 0 15 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 13 0;
+#X connect 5 0 2 0;
+#X connect 6 0 2 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 9 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 12 0;
+#X connect 13 0 8 0;
+#X connect 15 0 2 0;
+#X connect 16 0 11 0;
+#X restore 102 550 pd some_keyboard_fun;
+#X text 11 23 get input from the keyboard on key release;
+#X text 168 227 - [keyup] gets input directly from the keyboard.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 20 0 14 0;
+#X connect 20 0 15 0;
diff --git a/externals/vanilla/line-help.pd b/externals/vanilla/line-help.pd
new file mode 100644
index 00000000..f90cd194
--- /dev/null
+++ b/externals/vanilla/line-help.pd
@@ -0,0 +1,263 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header line 3 12 0 18 -204280
+-1 0;
+#X obj 0 267 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 494 364 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 45 DESCRIPTION ramp generator;
+#X text 12 65 INLET_0 float list stop;
+#X text 12 85 INLET_1 float;
+#X text 12 105 OUTLET_0 float;
+#X text 12 185 RELEASE_DATE 1997;
+#X text 12 5 KEYWORDS control time;
+#X restore 500 598 pd META;
+#X obj 0 375 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 439 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 498 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 104 484 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 43 line~;
+#X obj 62 43 vline~;
+#N canvas 0 22 456 306 related_objects_from_other_libraries 0;
+#X obj 23 21 tripleLine;
+#X obj 105 20 t3_line~;
+#X obj 171 20 fade~;
+#X obj 219 21 step;
+#X text 17 54 These objects are offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 16 103 The best places to find information about Pd's libraries
+is:;
+#X text 13 125 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 14 141 or;
+#X text 15 155 iem.kug.ac.at/pdb/;
+#X restore 21 70 pd related_objects_from_other_libraries;
+#X text 8 2 [line] Related Objects;
+#X restore 101 598 pd Related_objects;
+#X obj 78 276 cnv 17 3 63 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 275 float;
+#X text 98 301 list;
+#X text 98 383 float;
+#X obj 78 384 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 347 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 346 float;
+#X obj 493 3 line;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/line -text
+pdpedia: line;
+#X obj 137 180 line;
+#X msg 137 87 1000 1000;
+#X floatatom 137 201 5 0 0 0 - - -;
+#X text 203 86 ramp up.;
+#X msg 146 110 0 1000;
+#X text 193 110 ramp down.;
+#X msg 158 154 stop;
+#X msg 154 133 42;
+#X text 180 134 jumps to this value immediately.;
+#X text 195 154 stops the current ramp.;
+#N canvas 106 115 428 446 continuous_ramps 0;
+#X text 19 98 In other words \, if [line] receives a message specifying
+some new target and time before reaching the previous target \, it
+takes off from its current value.;
+#X obj 26 247 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X msg 56 205 stop;
+#X msg 49 185 42;
+#X obj 23 226 line;
+#X msg 23 144 127 5000;
+#X msg 41 165 0 5000;
+#X text 16 271 Due to this unique behavior \, a common construct found
+in Pd patches includes the [pack] object as follows:;
+#X obj 30 392 line;
+#X floatatom 30 413 10 0 0 0 - - -;
+#X floatatom 30 306 5 0 0 0 - - -;
+#X obj 30 372 pack f 500;
+#X msg 41 325 50;
+#X msg 49 346 2000;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [line] Continuous Ramps;
+#X text 21 37 [line] does not schedule its incoming messages. What
+this means is that if you send [line] a new target value mid-way through
+a ramp \, a new ramp is immediately created to the new target value
+starting from the "current" value.;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 8 0 9 0;
+#X connect 10 0 11 0;
+#X connect 11 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X restore 101 551 pd continuous_ramps;
+#N canvas 107 25 428 516 grain_rate_and_creation_arguments 0;
+#X text 21 39 The "grain rate" of [line] is the rate at which it will
+output its values. The faster the grain is \, the smoother the ramp
+will appear. While slower grain rates will produce a more disjunct
+ramp. Of course this setting will alter the amount of CPU that the
+[line] object will require. Higher rates require more computation.
+;
+#X text 22 145 This means simply that [line] will output a new value
+between its current value and your new value once every 20 milliseconds.
+;
+#X text 22 126 The default grain rate is 20 milliseconds.;
+#X text 19 193 [line]'s optional creation arguments can be used to
+reset the grain rate. However \, the grain rate cannot be reset dynamically.
+;
+#X text 21 248 First creation argument is the initial value: the starting
+point of the first ramp.;
+#X text 20 287 The second creation argument sets the grain rate. Observe
+the following two examples to see how the grain rate effects the output.
+;
+#X obj 33 403 line 0 5;
+#X obj 36 436 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X msg 136 332 127;
+#X msg 168 340 0;
+#X obj 135 368 pack f 5000;
+#X obj 203 436 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 200 403 line 0 500;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [line] Grain Rate;
+#X text 31 469 You can check the default grain rate in the subpatch
+below:;
+#N canvas 398 136 429 326 default_grain_rate 0;
+#X obj 22 87 line;
+#X obj 22 226 timer;
+#X obj 22 111 t b b;
+#X obj 49 137 spigot;
+#X obj 101 169 0;
+#X obj 22 193 spigot;
+#X obj 22 64 t a b;
+#X obj 65 87 1;
+#X obj 71 226 1;
+#X obj 22 251 print Pd's_default_grain_rate;
+#X msg 22 42 0 200;
+#X text 19 274 Here we assume the grain rate is less than 200 ms. For
+a more comprehensive test we could start with a time value of 1 ms
+and step up until the output ceases to increase.;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X text 7 1 [line] Pd's Default Grain Rate;
+#X text 60 42 Click here to output pd's default grain rate to the console
+;
+#X connect 0 0 2 0;
+#X connect 1 0 9 0;
+#X connect 2 0 5 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 1 1;
+#X connect 4 0 3 1;
+#X connect 4 0 5 1;
+#X connect 5 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 0 0;
+#X connect 6 1 7 0;
+#X connect 7 0 5 1;
+#X connect 8 0 3 1;
+#X connect 10 0 6 0;
+#X restore 34 491 pd default_grain_rate;
+#X connect 6 0 7 0;
+#X connect 8 0 10 0;
+#X connect 9 0 10 0;
+#X connect 10 0 6 0;
+#X connect 10 0 12 0;
+#X connect 12 0 11 0;
+#X restore 101 529 pd grain_rate_and_creation_arguments;
+#X text 11 23 ramp generator;
+#X text 98 325 stop;
+#X text 168 325 - stop the current ramp.;
+#X text 167 346 - time to reach the target value (in milliseconds).
+;
+#X text 168 275 - target value. This value is stored and used as the
+starting value for the next ramp.;
+#X text 168 301 - a (target \, time) pair is distributed between the
+two inlets.;
+#X text 168 474 - grain rate in milliseconds (default: 20 ms).;
+#X text 168 383 - [line] outputs a linear ramp \, reaching the target
+value within the time value specified by the right inlet and at a grain
+rate specified by the second creation argument (default 20 ms).;
+#N canvas 106 32 428 493 tips_on_using_line 0;
+#X text 20 39 [line]'s left inlet defines the "target" value. The right
+inlet defines the "time" value. The "target \, time" pair of numbers
+inform [line] to produce a numeric "ramp" from its current value (whatever
+that might be at any given moment) to the new value within the alloted
+time which is defined at the right inlet.;
+#X obj 25 242 line;
+#X msg 59 218 1000;
+#X msg 25 218 1000;
+#X obj 25 175 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 25 195 t b b;
+#X floatatom 25 264 5 0 0 0 - - -;
+#X obj 150 260 line;
+#X msg 150 236 1000;
+#X obj 150 216 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 150 282 5 0 0 0 - - -;
+#X text 20 309 If [line] receives a new target value without an accompanying
+"time" \, it simply jumps to the new value...as in the example above
+on the right. In the example above on the left \, you'll see that [line]
+will create a numeric ramp from 0 to 1000 over 1000 milliseconds. You
+should also note that if you click that [bng] again a second time \,
+nothing happens. This is because [line] is already at 1000 \, so sending
+it new instructions to ramp to 1000 is meaningless and has no effect.
+;
+#X text 20 425 Having said all of that \, let's just reiterate that
+it's important to send a "time" value to [line] before sending it a
+new "target" value...unless of course you WANT it to jump immediately
+to the new target.;
+#X text 149 182 While this does NOT work unless;
+#X text 149 196 you click "500" first.;
+#X msg 184 236 500;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [line] Tips;
+#X text 20 118 It is important to realize that [line] stores only the
+current value...it does not remember the defined "time" (duration of
+the ramp). Hence \, the example to the left works:;
+#X connect 1 0 6 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 5 1 2 0;
+#X connect 7 0 10 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 15 0 7 1;
+#X restore 101 507 pd tips_on_using_line;
+#X text 80 459 1) float;
+#X text 80 474 2) float;
+#X text 168 459 - initial value \, i.e. \, the starting point of the
+first ramp.;
+#X obj 3 598 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 571 pddp/pddplink ../3.audio.examples/C03.zipper.noise.pd
+-text doc/3.audio.examples/C03.zipper.noise.pd;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X connect 21 0 17 0;
+#X connect 23 0 17 0;
+#X connect 24 0 17 0;
diff --git a/externals/vanilla/list-help.pd b/externals/vanilla/list-help.pd
new file mode 100644
index 00000000..2a872d0e
--- /dev/null
+++ b/externals/vanilla/list-help.pd
@@ -0,0 +1,626 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header list 3 12 0 18 -204280
+-1 0;
+#X obj 0 161 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 244 494 344 META 0;
+#X text 12 90 LIBRARY internal;
+#X text 12 130 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 50 LICENSE SIBSD;
+#X text 12 110 AUTHOR Miller Puckette;
+#X text 12 170 HELP_PATCH_AUTHORS Updated for Pd version 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 70 DESCRIPTION building and using variable-length messages
+;
+#X text 12 5 NAME list append list prepend list trim list split list
+length;
+#X text 12 30 KEYWORDS control storage needs_work list_op symbol_op
+;
+#X text 12 150 RELEASE_DATE 2005;
+#X restore 500 598 pd META;
+#X obj 0 244 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 295 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 506 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 99 484 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [list] Related Objects;
+#X obj 21 42 float;
+#X obj 61 42 symbol;
+#X obj 112 42 pack;
+#X obj 152 42 unpack;
+#X restore 102 599 pd Related_objects;
+#X obj 78 253 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 170 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 493 3 list;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/list -text
+pdpedia: list;
+#N canvas 0 83 555 502 append 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X obj 13 3 list append;
+#X text 18 24 append (concatenate) the second list to the first;
+#X obj 0 294 cnv 3 520 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 377 cnv 3 520 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 386 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 303 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 353 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 304 anything;
+#X text 98 354 anything;
+#X obj 0 421 cnv 3 520 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X text 80 456 n);
+#X text 98 471 float;
+#X text 80 440 1);
+#X text 170 440 - the symbol "append".;
+#X text 170 456 - an arbitrary number of additional floats or symbols
+may be specified to initialize the list stored at the right inlet.
+;
+#X obj 158 219 list append 1 2;
+#X floatatom 168 165 5 0 0 0 - - -;
+#X msg 158 140 1 2 3;
+#X msg 178 190 bang;
+#X msg 285 189 bang;
+#X obj 158 241 print append;
+#X msg 285 163 4 5 6 and 7;
+#X msg 285 80 4 5 6;
+#X msg 285 139 four 5 6;
+#X msg 285 110 list four 5 6;
+#X text 178 354 - all input is converted to a list and stored.;
+#X text 178 304 - all input is converted to a list. The list stored
+at the right inlet is appended to it \, and the resulting list is sent
+to the outlet.;
+#X text 98 387 list;
+#X text 168 387 - the output is always a message with the selector
+"list" (see subpatch "list_conversion" for more info).;
+#X text 98 440 symbol atom;
+#X text 98 456 symbol atom;
+#X connect 16 0 21 0;
+#X connect 17 0 16 0;
+#X connect 18 0 16 0;
+#X connect 19 0 16 0;
+#X connect 20 0 16 1;
+#X connect 22 0 16 1;
+#X connect 23 0 16 1;
+#X connect 24 0 16 1;
+#X connect 25 0 16 1;
+#X restore 102 365 pd append;
+#N canvas 87 25 428 592 about-lists 0;
+#X obj 22 567 print message;
+#X msg 22 380 list x.wav 44100;
+#X msg 22 538 read \$1 \$2;
+#X msg 22 409 set x.wav 44100;
+#X msg 39 509 set \, add2 read \, adddollar 1 \, adddollar 2;
+#X msg 22 439 x.wav 44100;
+#X obj 39 483 loadbang;
+#X text 127 486 reset message as it was;
+#X text 139 380 good;
+#X text 128 411 bad;
+#X text 94 439 ugly;
+#X msg 223 403 list 44100 x.wav;
+#X msg 236 428 44100 x.wav;
+#X obj 223 454 print number-first;
+#X text 217 375 these two are equivalent:;
+#X text 19 266 In the example below \, the top message sets \$1 to
+"x.wav" and \$2 to 44100 in the "read" message. The lower message box
+outputs the message "read x.wav 44100". The "set" message changes the
+content of the message box itself (click on the longer message box
+below to repair the damage.) The "ugly" message \, since it is neither
+"list" nor "set" \, gets interpreted in an arbitrary (and probably
+inappropriate!) way.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [list] About lists in Pd;
+#X text 19 37 Messages in Pd are somewhat artificially divided into
+two classes. First are data-holding messages (bang \, float \, symbol
+\, list) which are the primary way of communicating between objects.
+Second is "everything else" (you could call them out-of-band messages
+or metamessages) that describe changes in configuration \, read and
+write files \, quit Pd \, etc. These are provided so that complex objects
+don't need to have 100 separate inlets for every possible functionality.
+It's not clear whether this was a good design choice \, but it's entrenched.
+;
+#X text 19 170 The distinction becomes visible \, and ugly \, when
+the leading item in a data-holding message is a symbol. In this case
+\, to disambiguate it from the other sort \, the printed form of the
+message has a selector \, "list" or "symbol" prepended to it. Underneath
+\, there is always a selector in front of data messages \, but it is
+implied if the first data item is a number.;
+#X connect 1 0 2 0;
+#X connect 2 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 4 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 0;
+#X restore 101 546 pd about-lists;
+#X text 11 23 building and using variable-length messages;
+#X text 80 314 1);
+#X text 80 474 n);
+#X text 180 365 append - append the second list to the first;
+#X text 180 409 split - split a list in two;
+#X text 180 387 prepend - prepend the second list to the first;
+#X text 180 453 length - output the number of items in a list;
+#X text 180 431 trim - trim the "list" selector off;
+#X obj 212 113 list;
+#X msg 233 68 rice;
+#X msg 212 46 beans;
+#X obj 212 135 print groceries;
+#X msg 246 90 cornbread;
+#X text 98 510 Here are some examples showing how to use these objects
+to compose and/or use variable length messages:;
+#N canvas 19 21 525 646 simple_sequencer 0;
+#X obj 23 173 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 232 176 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 227 154 clear;
+#X text 20 153 send;
+#X msg 71 175 250;
+#X msg 103 175 500;
+#X msg 136 175 750;
+#X msg 169 175 1000;
+#X obj 23 258 list append;
+#X obj 188 220 t l;
+#X obj 71 214 list prepend;
+#X obj 23 426 t l l;
+#X obj 74 426 print start;
+#X obj 129 257 print stored;
+#X obj 23 451 list split 1;
+#X obj 23 575 del;
+#X obj 23 607 print bang;
+#X obj 55 542 list append;
+#X msg 35 403 0 250 250 500;
+#X text 98 150 -- add --;
+#X text 37 20 example 1: simple rhythmic sequencer;
+#X text 29 53 The top part of this patch demonstrates building up a
+message from a variable number of elements provided sequentially. The
+"list prepend" object stores the list and \, each time a number arrives
+\, prepends the previous list to it.;
+#X text 216 237 "list prepend" to its own inlet.;
+#X text 213 220 "trigger list" is needed only to connect outlet of
+;
+#X text 254 258 printout shows the growing message.;
+#X text 47 279 "list append" stores the growing message which is output
+by the "send" button above. "list prepend" would have been equivalent.
+;
+#X text 165 403 <-- test message;
+#X text 39 354 The bottom part of the patch takes numbers off the beginning
+of the list \, one by one \, to use as delays.;
+#X text 190 426 printout shows the sequence as it starts.;
+#X text 169 543 The rest of the list is stored for next time.;
+#X obj 141 505 print done;
+#X text 150 450 Split off the first item. If there is none \, nothing
+comes out the first or second outlet \, but instead we get a "bang"
+from the third one.;
+#X text 64 575 After delay \, output a bang and recall the rest of
+the list.;
+#X connect 0 0 8 0;
+#X connect 1 0 10 1;
+#X connect 4 0 10 0;
+#X connect 5 0 10 0;
+#X connect 6 0 10 0;
+#X connect 7 0 10 0;
+#X connect 8 0 11 0;
+#X connect 9 0 10 1;
+#X connect 10 0 9 0;
+#X connect 10 0 8 1;
+#X connect 10 0 13 0;
+#X connect 11 0 14 0;
+#X connect 11 1 12 0;
+#X connect 14 0 15 0;
+#X connect 14 1 17 1;
+#X connect 14 2 30 0;
+#X connect 15 0 16 0;
+#X connect 15 0 17 0;
+#X connect 17 0 14 0;
+#X connect 18 0 11 0;
+#X restore 401 546 pd simple_sequencer;
+#N canvas 126 39 397 569 another_sequencer 0;
+#X obj 66 263 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 292 266 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 287 244 clear;
+#X text 63 243 send;
+#X obj 66 342 list append;
+#X obj 213 317 t l;
+#X obj 94 303 list prepend;
+#X obj 66 410 t l l;
+#X obj 121 410 print start;
+#X obj 171 340 print stored;
+#X obj 66 486 del;
+#X obj 105 486 list append;
+#X msg 94 264 250 57;
+#X msg 154 264 500 52;
+#X msg 215 264 750 55;
+#X obj 66 461 unpack;
+#X obj 66 435 list split 2;
+#X text 80 38 example 2: sequencer with pitch;
+#X text 147 242 -- add --;
+#X obj 185 438 print done;
+#X obj 115 517 print pitch;
+#X text 13 69 This example is a slight modification of example 1 showing
+how to build up lists with more than one item per iteration. We regard
+pairs of numbers as specifying a delay time and a pitch. Unlike the
+previous example \, the delay here is interpreted as teh delay until
+the next event \, not the delay since the previous one. This is done
+by taking the "pitch" output before the delay object (previously the
+"output" was taken from the delay object's output.);
+#X connect 0 0 4 0;
+#X connect 1 0 6 1;
+#X connect 4 0 7 0;
+#X connect 5 0 6 1;
+#X connect 6 0 5 0;
+#X connect 6 0 4 1;
+#X connect 6 0 9 0;
+#X connect 7 0 16 0;
+#X connect 7 1 8 0;
+#X connect 10 0 11 0;
+#X connect 11 0 16 0;
+#X connect 12 0 6 0;
+#X connect 13 0 6 0;
+#X connect 14 0 6 0;
+#X connect 15 0 10 0;
+#X connect 15 1 20 0;
+#X connect 16 0 15 0;
+#X connect 16 1 11 1;
+#X connect 16 2 19 0;
+#X restore 401 568 pd another_sequencer;
+#N canvas 47 147 447 426 serializer 0;
+#X obj 19 287 list split 1;
+#X obj 19 378 print;
+#X obj 19 204 until;
+#X obj 19 242 list append;
+#X obj 45 171 t b l;
+#X obj 149 287 bang;
+#X msg 45 148 1 2 3 4 a b c;
+#X text 34 21 example 3: serializing a message without delays;
+#X text 17 55 The "until" object can be used as shown to iterate through
+all the items of a list.;
+#X text 178 147 <- click to test;
+#X text 101 171 First store list \, then start the loop;
+#X text 88 199 "until" bangs its output until told to stop by a "bang"
+to its right inlet.;
+#X text 107 241 Store the remaining list.;
+#X text 184 286 third outlet of "split" tells us to stop.;
+#X text 37 318 Second outlet of "split" becomes the new list for "list
+append" above.;
+#X text 75 377 First outlet is the output.;
+#X connect 0 0 1 0;
+#X connect 0 1 3 1;
+#X connect 0 2 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 4 0 2 0;
+#X connect 4 1 3 1;
+#X connect 5 0 2 1;
+#X connect 6 0 4 0;
+#X restore 241 568 pd serializer;
+#N canvas 100 215 428 350 lists_vs_non-lists 0;
+#X obj 23 290 list append 1 2;
+#X floatatom 23 120 5 0 0 0 - - -;
+#X msg 23 95 1 2 3;
+#X msg 23 68 list cis boom bah;
+#X msg 23 145 bang;
+#X msg 162 260 bang;
+#X obj 23 319 print append;
+#X msg 23 43 walk the dog;
+#X msg 162 210 list x y z;
+#X msg 161 184 go dog go;
+#X msg 160 234 4 5 6 and 7;
+#X text 119 43 non-list message converted to list;
+#X text 144 68 list starting with symbol;
+#X text 75 118 number is one-element list;
+#X text 75 95 numeric list;
+#X text 75 145 bang is zero-element list;
+#X text 226 184 same for right inlet...;
+#X text 235 233 (note: only the first item;
+#X text 238 252 need be a number to make this;
+#X text 238 270 a list.);
+#X text 121 290 <- creation args initialize the list to append;
+#X obj 2 2 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [list] Lists vs. Non-lists;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 1;
+#X connect 7 0 0 0;
+#X connect 8 0 0 1;
+#X connect 9 0 0 1;
+#X connect 10 0 0 1;
+#X restore 101 568 pd lists_vs_non-lists;
+#N canvas 0 82 555 506 prepend 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X obj 0 299 cnv 3 520 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 377 cnv 3 520 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 386 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 308 cnv 17 3 40 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 354 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 309 anything;
+#X text 98 355 anything;
+#X obj 0 421 cnv 3 520 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X text 80 456 n);
+#X text 98 471 float;
+#X text 80 440 1);
+#X text 170 456 - an arbitrary number of additional floats or symbols
+may be specified to initialize the list stored at the right inlet.
+;
+#X floatatom 198 160 5 0 0 0 - - -;
+#X msg 188 135 1 2 3;
+#X msg 208 185 bang;
+#X msg 315 184 bang;
+#X msg 315 158 4 5 6 and 7;
+#X msg 315 75 4 5 6;
+#X msg 315 134 four 5 6;
+#X msg 315 105 list four 5 6;
+#X text 178 355 - all input is converted to a list and stored.;
+#X text 18 24 prepend the second list to the first;
+#X obj 13 3 list prepend;
+#X obj 188 214 list prepend 1 2;
+#X obj 188 236 print prepend;
+#X text 178 309 - all input is converted to a list. The list stored
+at the right inlet is prepended to it \, and the resulting list is
+sent to the outlet.;
+#X text 170 440 - the symbol "prepend".;
+#X text 98 387 list;
+#X text 168 387 - the output is always a message with the selector
+"list" (see subpatch "list_conversion" for more info).;
+#X text 98 440 symbol atom;
+#X text 98 456 symbol atom;
+#X connect 13 0 24 0;
+#X connect 14 0 24 0;
+#X connect 15 0 24 0;
+#X connect 16 0 24 1;
+#X connect 17 0 24 1;
+#X connect 18 0 24 1;
+#X connect 19 0 24 1;
+#X connect 20 0 24 1;
+#X connect 24 0 25 0;
+#X restore 102 387 pd prepend;
+#N canvas 1 82 555 530 split 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X obj 0 277 cnv 3 520 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 371 cnv 3 520 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 380 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 286 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 314 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 287 anything;
+#X obj 0 458 cnv 3 520 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X text 80 477 1);
+#X msg 200 145 bang;
+#X obj 159 173 list split 2;
+#X floatatom 262 148 3 0 5 0 - - -;
+#X msg 159 57 1 2;
+#X msg 124 57 1;
+#X text 156 228 first n;
+#X text 245 228 rest of list;
+#X text 337 228 shorter than n;
+#X text 18 24 cut a list into smaller ones;
+#X obj 13 3 list split;
+#X msg 173 79 one 2 3;
+#X msg 183 101 list one 2 3;
+#X msg 193 123 1 2 three;
+#X obj 159 211 print split0;
+#X obj 248 211 print split1;
+#X obj 340 211 print split2;
+#X text 178 287 - all input is converted to a list.;
+#X text 98 315 float;
+#X text 98 381 list;
+#X obj 78 403 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 404 list;
+#X obj 78 425 cnv 17 3 17 empty \$0-pddp.cnv.let.2 2 5 9 0 16 -228856
+-162280 0;
+#X text 98 426 list;
+#X text 178 315 - split point. A value of n will send the first n elements
+to the left outlet \, and the rest of the list to the middle outlet.
+Incoming lists shorter than n are sent to the rightmost outlet.;
+#X text 168 381 - the first n elements of the incoming list.;
+#X text 168 404 - the remaining elements of the incoming list.;
+#X text 168 426 - if the incoming list has fewer than n elements \,
+it is sent in its entirety to the rightmost outlet.;
+#X text 170 477 - the symbol "split".;
+#X text 98 493 float;
+#X text 80 493 2);
+#X text 98 477 symbol atom;
+#X text 170 493 - (optional) an integer to initialize the split point.
+;
+#X connect 9 0 10 0;
+#X connect 10 0 22 0;
+#X connect 10 1 23 0;
+#X connect 10 2 24 0;
+#X connect 11 0 10 1;
+#X connect 12 0 10 0;
+#X connect 13 0 10 0;
+#X connect 19 0 10 0;
+#X connect 20 0 10 0;
+#X connect 21 0 10 0;
+#X restore 102 409 pd split;
+#N canvas 1 82 555 481 trim 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X obj 0 330 cnv 3 520 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 385 cnv 3 520 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 394 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 339 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 340 anything;
+#X obj 0 429 cnv 3 520 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X text 80 448 1);
+#X msg 49 139 1 2 3;
+#X msg 49 90 list cis boom bah;
+#X msg 49 195 bang;
+#X msg 49 63 walk the dog;
+#X obj 49 276 list trim;
+#X obj 49 298 print trim;
+#X msg 49 222 1 x y;
+#X msg 49 248 x 1 y;
+#X msg 49 113 55;
+#X text 98 395 anything;
+#X text 170 448 - the symbol "trim".;
+#X obj 13 3 list trim;
+#X text 18 24 remove the list selector;
+#X text 128 230 The [list trim] object inputs lists (or makes lists
+out of incoming non-list messages) and outputs a message whose selector
+is the first item of the list \, and whose arguments \, if any \, are
+the remainder of the list. If the list has no items \, or if its first
+item is numeric \, the selector is "list" (which might print out as
+list \, float \, or bang.);
+#X text 98 448 symbol atom;
+#X text 178 340 - all input is converted to a list. A bang message
+is converted to an empty list. A symbol message like "symbol blah"
+is converted to "list blah".;
+#X text 134 63 non-list messages remain non-list messages;
+#X text 97 139 implicit list remains a list;
+#X msg 49 167 symbol x;
+#X text 86 195 becomes message "list" (interpreted by most objects
+as bang);
+#X text 166 90 "list" selector gets trimmed off;
+#X text 79 113 becomes "list 55" (interpreted by most objects as float)
+;
+#X text 112 167 "symbol" selector gets trimmed off.;
+#X text 168 395 - after the incoming message is converted to a list
+\, the "list" selector is removed and the message is output.;
+#X connect 8 0 12 0;
+#X connect 9 0 12 0;
+#X connect 10 0 12 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 0;
+#X connect 16 0 12 0;
+#X connect 26 0 12 0;
+#X restore 102 431 pd trim;
+#N canvas 1 99 555 490 length 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header empty 3 12 0 14
+-204280 -1 0;
+#X obj 0 374 cnv 3 520 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#X obj 0 411 cnv 3 520 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 78 420 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 383 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 384 anything;
+#X obj 0 448 cnv 3 520 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X text 80 467 1);
+#X obj 13 3 list length;
+#X msg 226 161 1 2 3;
+#X msg 226 112 list cis boom bah;
+#X msg 227 187 bang;
+#X msg 226 85 walk the dog;
+#X msg 227 209 1 x y;
+#X msg 226 235 x 1 y;
+#X msg 226 135 55;
+#X obj 201 263 list length;
+#X floatatom 201 289 5 0 0 0 - - -;
+#X text 18 24 number of elements in a list;
+#X text 98 421 float;
+#X text 170 467 - the symbol "length".;
+#X text 98 467 symbol atom;
+#X text 168 384 - any message type is accepted and converted to a list.
+;
+#X text 168 421 - [list length] outputs the number of elements in the
+list.;
+#X connect 9 0 16 0;
+#X connect 10 0 16 0;
+#X connect 11 0 16 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 0;
+#X connect 14 0 16 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X restore 102 453 pd length;
+#X text 98 314 symbol atom;
+#X text 98 329 float;
+#N canvas 49 88 428 419 list_conversion_in_Pd 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [list] Conversion;
+#X text 19 168 In brief:;
+#X text 19 188 "list" -> bang;
+#X text 19 208 "list 1" -> "float 1";
+#X text 19 228 "list hello" -> "symbol hello";
+#X text 19 37 Most objects in Pd handle zero- and one-element lists
+in the following way:;
+#X text 19 67 * an incoming zero-element list (i.e. \, a message consisting
+onf the selector "list") is treated as a bang.;
+#X text 19 97 * an incoming one-element list that contains a float
+is treated as a float.;
+#X obj 22 331 route list float;
+#X obj 22 304 list;
+#X obj 22 358 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 68 358 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 22 277 12;
+#X text 55 277 implicit float-- same as "float 12";
+#X text 55 304 output as "list 12";
+#X floatatom 68 387 5 0 0 0 - - -;
+#X text 130 331 [route] converts "list 12" to "float 12";
+#X text 19 127 * an incoming one-element list that contains a symbol
+atom is treated as a symbol.;
+#X connect 9 0 11 0;
+#X connect 9 1 12 0;
+#X connect 9 1 16 0;
+#X connect 10 0 9 0;
+#X connect 13 0 10 0;
+#X restore 241 546 pd list_conversion_in_Pd;
+#X text 170 314 - (optional) if no creation argument is given \, or
+if the first creation argument is a number \, [list] will behave like
+[list append]. Otherwise \, one of the following symbols may be given
+as arguments (see subpatches for more info):;
+#X text 98 252 [list] family objects always output a list. See the
+"list_conversion_in_Pd" subpatch below for how lists are interpreted
+by other objects.;
+#X text 98 474 depending on what the first creation argument is \,
+other creation arguments may be specified.;
+#X text 98 171 See subpatches under the heading "arguments" for more
+details. With the exception of the right inlet of [list split] \, All
+[list] objects will convert incoming non-list messages to lists (e.g.
+\, "set 5" will become "list set 5"). A bang message is converted to
+an empty list (i.e. \, "list") \, and "symbol foo" is converted to
+"list foo".;
+#X obj 4 598 pddp/pddplink pddp/help.pd -text help;
+#X connect 22 0 25 0;
+#X connect 23 0 22 1;
+#X connect 24 0 22 0;
+#X connect 26 0 22 1;
diff --git a/externals/vanilla/loadbang-help.pd b/externals/vanilla/loadbang-help.pd
new file mode 100644
index 00000000..3914a968
--- /dev/null
+++ b/externals/vanilla/loadbang-help.pd
@@ -0,0 +1,127 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header loadbang 3 12 0
+18 -204280 -1 0;
+#X obj 0 422 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 244 494 344 META 0;
+#X text 12 85 LIBRARY internal;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 165 HELP_PATCH_AUTHORS Dave Sabine \, November 12 \, 2002
+Jonathan Wilkes revised the patch to conform to the PDDP template for
+Pd version 0.42.;
+#X text 12 45 DESCRIPTION send "bang" automatically when patch loads
+;
+#X text 12 65 OUTLET_0 bang;
+#X text 12 5 KEYWORDS control bang_op;
+#X text 12 145 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 450 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 492 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 520 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 495 (none);
+#N canvas 89 493 428 100 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 21 42 bang;
+#X obj 61 42 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 92 42 trigger;
+#X obj 160 42 initbang;
+#X text 7 1 [loadbang] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 459 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 loadbang;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/loadbang -text
+pdpedia: loadbang;
+#X obj 89 264 loadbang;
+#X obj 89 312 f 1;
+#X obj 132 312 f 4;
+#X obj 89 337 +;
+#X floatatom 89 361 5 0 0 0 - - -;
+#X obj 89 287 t b b;
+#X obj 87 122 loadbang;
+#X obj 87 147 metro 1000;
+#X obj 87 171 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 86 216 In this example \, [loadbang] was used to process a
+simple mathematic equation when this patch was loaded. In this case:
+1 + 4 = 5;
+#X text 86 86 In this example \, [loadbang] was used simply to start
+a process automatically when this patch was loaded.;
+#X text 98 426 (none);
+#X text 98 458 bang;
+#X text 99 572 Pd Documentation Chapter 3.6 - doc/1.manual/x3.htm;
+#N canvas 96 135 428 388 More_Info 0;
+#X obj 15 149 print foo;
+#X obj 15 101 loadbang;
+#X text 13 177 As well \, the following [float]s were set with a group
+of numbers. Click the [bng] below to verify that the numbers were stored
+in the [float] objects.;
+#X obj 25 327 f;
+#X floatatom 25 352 2 0 0 0 - - -;
+#X obj 64 327 f;
+#X floatatom 64 352 2 0 0 0 - - -;
+#X obj 104 327 f;
+#X floatatom 103 352 2 0 0 0 - - -;
+#X obj 25 235 bng 15 250 50 0 empty empty Click_here_to_see_the_numbers_stored_in_the_float_objects.
+0 -6 0 8 -262144 -1 -1;
+#X obj 194 288 random 10;
+#X obj 103 289 random 10;
+#X text 14 30 The loadbang object will send a "bang" message when a
+canvas/patch loads and is used most often to 'initialize' or set default
+values in a patch. For example \, when you opened this patch \, the
+message below was immediately printed in the terminal window.;
+#X obj 103 255 loadbang;
+#X obj 287 289 random 10;
+#X msg 15 124 you have opened the [loadbang] help document;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [loadbang] More Info;
+#X connect 1 0 15 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 7 0 8 0;
+#X connect 9 0 3 0;
+#X connect 9 0 5 0;
+#X connect 9 0 7 0;
+#X connect 10 0 5 1;
+#X connect 11 0 3 1;
+#X connect 13 0 11 0;
+#X connect 13 0 10 0;
+#X connect 13 0 14 0;
+#X connect 14 0 7 1;
+#X connect 15 0 0 0;
+#X restore 102 529 pd More_Info;
+#X text 11 23 send "bang" automatically when patch loads;
+#X text 168 458 - a "bang" message is sent automatically when the containing
+patch is loaded.;
+#N canvas 100 356 428 191 Important_Note 0;
+#X text 49 159 c:/pd/pd.exe -noloadbang;
+#X text 19 37 Loadbangs are a useful tool to set initial values in
+a patch - however \, there are times when it might be necessary to
+debug a patch and "turn off" all the loadbang objects. This can be
+accomplished by opening Pd with the -noloadbang flag.;
+#X text 19 102 For example \, to suppress all loadbangs \, your command
+line might look something like this: (more info about Pd's command
+line can be found in Chapter 3.6 of the HTML documentation.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [loadbang] Important Note;
+#X restore 102 551 pd Important_Note;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 12 0 17 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 1;
+#X connect 15 0 16 0;
+#X connect 17 0 13 0;
+#X connect 17 1 14 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
diff --git a/externals/vanilla/metro-help.pd b/externals/vanilla/metro-help.pd
new file mode 100644
index 00000000..2b843f59
--- /dev/null
+++ b/externals/vanilla/metro-help.pd
@@ -0,0 +1,98 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header metro 3 12 0 18
+-204280 -1 0;
+#X obj 0 327 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 246 507 361 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed to build comprehensive documentation for Pd. Jonathan Wilkes
+revised the patch to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 45 DESCRIPTION send a bang periodically ala metronome;
+#X text 12 105 OUTLET_0 bang;
+#X text 12 85 INLET_1 float;
+#X text 12 65 INLET_0 float bang list stop;
+#X text 12 5 KEYWORDS control time bang_op;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 483 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 525 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 567 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 96 378 428 249 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [metro] Related Objects;
+#X text 20 101 These objects are offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 19 150 The best places to find information about Pd's libraries
+is:;
+#X text 19 172 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 20 188 or;
+#X text 21 202 iem.kug.ac.at/pdb/;
+#X obj 24 35 pddp/helplink mjlib/metroplus;
+#X obj 24 55 pddp/helplink iemlib/t3_metro;
+#X obj 24 75 pddp/helplink maxlib/pulse;
+#X restore 102 597 pd Related_objects;
+#X obj 78 336 cnv 17 3 75 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 335 float;
+#X text 98 395 list;
+#X obj 78 492 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 417 cnv 17 3 55 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 416 float;
+#X obj 483 3 metro;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/metro -text
+pdpedia: metro;
+#X obj 109 224 metro 500;
+#X floatatom 160 201 4 0 0 0 - - -;
+#X msg 109 125 1;
+#X text 177 124 nonzero number or "bang" to start;
+#X msg 150 158 0;
+#X msg 141 125 bang;
+#X msg 182 158 stop;
+#X obj 109 247 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 219 158 zero or "stop" to stop;
+#X text 168 335 - sending a nonzero number to the left inlet starts
+the metronome. Sending a zero stops it.;
+#X text 98 361 bang;
+#X text 98 378 stop;
+#X text 98 446 list;
+#X text 167 446 - a list to the right inlet will be truncated to the
+first item.;
+#X text 143 247 The metro object sends a series of bangs at a constant
+rate.;
+#X text 98 491 bang;
+#X text 168 544 - (optional) sets the initial rate in milliseconds.
+;
+#X text 168 361 - start the metronome.;
+#X text 168 378 - the "stop" message turns off the metronome.;
+#X text 167 416 - the right inlet sets the interval in milliseconds
+between each "bang" that is sent to the outlet of [metro].;
+#X text 168 491 - [metro] outputs a bang at a constant rate \, defined
+by the creation argument or a value sent to its right inlet.;
+#X text 80 544 1) float;
+#X text 11 23 send a bang periodically ala metronome;
+#X text 168 395 - a list will be distributed to the inlets of [metro].
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 23 0;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
+#X connect 20 0 16 0;
+#X connect 21 0 16 0;
+#X connect 22 0 16 0;
diff --git a/externals/vanilla/mtof~-help.pd b/externals/vanilla/mtof~-help.pd
new file mode 100644
index 00000000..e6c47b46
--- /dev/null
+++ b/externals/vanilla/mtof~-help.pd
@@ -0,0 +1,79 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header mtof~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 418 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 243 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion MIDI;
+#X text 12 45 DESCRIPTION MIDI to frequency conversion for audio signals
+;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 455 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 492 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 520 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 427 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 496 (none);
+#N canvas 107 445 428 145 Related_objects 0;
+#X obj 23 43 ftom~;
+#X obj 70 43 dbtorms~;
+#X obj 138 43 rmstodb~;
+#X obj 207 43 dbtopow~;
+#X obj 273 43 powtodb~;
+#X obj 23 102 mtof;
+#X obj 68 102 ftom;
+#X obj 111 102 dbtorms;
+#X obj 176 102 rmstodb;
+#X obj 242 102 dbtopow;
+#X obj 304 102 powtodb;
+#X text 20 79 Control objects for conversion:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [mtof~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 482 3 mtof~;
+#X obj 209 149 mtof~;
+#X obj 209 205 snapshot~;
+#X floatatom 209 236 0 0 0 0 - - -;
+#X floatatom 209 100 0 0 0 0 - - -;
+#X obj 209 124 sig~;
+#X obj 256 179 metro 100;
+#X obj 256 149 loadbang;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/mtof~ -text
+pdpedia: mtof~;
+#X text 98 426 signal;
+#X obj 78 464 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 464 signal;
+#X text 99 524 This object takes an audio signal as input and output
+(and works sample by sample.) Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as *~ and osc~ \, depending on your hardware and math library.
+;
+#X text 11 23 MIDI to frequency conversion for audio signals;
+#X text 99 265 The [mtof~] object transposes a midi value into a frequency
+in Hertz \, so that "69" goes to "440". You can specify microtonal
+pitches as in "69.5" (a quarter tone higher than 69).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 14 0 15 0;
+#X connect 15 0 11 0;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
diff --git a/externals/vanilla/my_canvas-help.pd b/externals/vanilla/my_canvas-help.pd
new file mode 100644
index 00000000..97ddf25f
--- /dev/null
+++ b/externals/vanilla/my_canvas-help.pd
@@ -0,0 +1,721 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header my_canvas 3 12 0
+18 -204280 -1 0;
+#X obj 0 352 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 245 494 344 META 0;
+#X text 12 85 LIBRARY internal;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 105 AUTHOR Thomas Musil;
+#X text 12 125 WEBSITE;
+#X text 12 165 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 65 DESCRIPTION gui-rectangle;
+#X text 12 5 ALIAS cnv;
+#X text 12 145 RELEASE_DATE 2002;
+#X text 12 25 KEYWORDS control GUI nonlocal;
+#X restore 500 597 pd META;
+#X obj 0 430 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 459 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 546 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 80 481 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [cnv] Related Objects;
+#X obj 22 43 drawpolygon;
+#X obj 112 43 filledpolygon;
+#X obj 22 73 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X restore 102 597 pd Related_objects;
+#X text 11 23 gui-rectangle;
+#X text 418 3 [my_canvas] or [cnv];
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/cnv -text
+pdpedia: cnv;
+#X text 98 356 (none);
+#X text 98 435 (none);
+#X text 98 374 See the following subpatch for messages that change
+the gui-properties of [cnv]:;
+#N canvas 80 25 428 604 Changing_GUI_Properties 0;
+#X obj 27 393 unpack 0 0;
+#X text 12 301 get position on canvas;
+#X msg 13 109 size \$1;
+#X obj 13 72 nbx 3 14 8 200 0 0 empty \$0-dim empty 0 -8 0 12 -262144
+-1 -1 15 256;
+#X obj 13 133 s cnv_rcv;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-width empty
+0 -8 0 12 -262144 -1 -1 100 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-height empty
+0 -8 0 12 -262144 -1 -1 60 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 89 59 pd flash-time;
+#X text 86 38 visible size;
+#X text 138 61 1.width;
+#X text 138 81 2.height;
+#X msg 89 109 vis_size \$1 \$2;
+#X obj 89 133 s cnv_rcv;
+#X text 195 38 change send name;
+#X text 310 38 change receive name;
+#X obj 196 134 s cnv_rcv;
+#X obj 310 134 s cnv_rcv;
+#X msg 196 59 send cnv5a_snd;
+#X msg 310 59 receive cnv1a_rcv;
+#X obj 320 109 s cnv1a_rcv;
+#X msg 320 85 receive cnv_rcv;
+#X text 132 173 label position;
+#X text 274 173 font properties;
+#X text 13 173 label;
+#X msg 13 194 label new-label;
+#X msg 134 245 label_pos \$1 \$2;
+#X msg 276 245 label_font \$1 \$2;
+#X text 325 197 1.font(0-2);
+#X text 325 218 2.height;
+#X text 183 196 1.x-offset;
+#X text 183 217 2.y-offset;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 20 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 134 195 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 14 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 276 195 pd flash-time;
+#X text 164 461 delta;
+#X text 12 461 position;
+#X msg 13 558 pos \$1 \$2;
+#X msg 165 558 delta \$1 \$2;
+#X text 165 301 preset-colors;
+#X text 264 301 RGB-colors;
+#N canvas 364 205 169 292 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 10 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 33 237 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 0 1 4 1;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 165 323 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 115 456 t b a;
+#X obj 104 124 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X text 120 137 2.label;
+#X obj 96 410 route 0 1;
+#X obj 96 497 pack 0 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 17 0;
+#X connect 10 0 18 0;
+#X connect 10 1 18 1;
+#X connect 11 0 9 1;
+#X connect 13 0 5 0;
+#X connect 14 0 6 0;
+#X connect 15 0 7 0;
+#X connect 17 0 18 0;
+#X connect 17 1 10 0;
+#X connect 18 0 0 0;
+#X coords 0 -1 1 1 102 58 2 100 100;
+#X restore 265 323 pd flash-time;
+#X obj 165 534 list;
+#X obj 165 483 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 214 325 1.bg;
+#X text 61 482 1.x-position;
+#X text 61 504 2.y-position;
+#X text 244 482 1.x-delta;
+#X text 244 504 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 310 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 500 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 13 483 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 194 483 pd flash-time;
+#X msg 27 322 get_pos;
+#X obj 27 347 s cnv_rcv;
+#X obj 165 433 s cnv_rcv;
+#X obj 13 583 s cnv_rcv;
+#X obj 165 583 s cnv_rcv;
+#X obj 276 270 s cnv_rcv;
+#X obj 134 270 s cnv_rcv;
+#X obj 13 270 s cnv_rcv;
+#X text 214 345 2.label;
+#N canvas 375 166 157 260 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 72 \; \$1-width 100 \; \$1-height 60 \; \$1-xpos 310 \; \$1-ypos
+500 \; \$1-xlabel 20 \; \$1-ylabel 12 \; \$1-dim 15 \; \$1-font 0 \;
+\$1-font-size 14 \; \$1-bg 10 \; \$1-label 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 265 408 pd init;
+#X obj 310 500 cnv 15 100 60 cnv_snd cnv_rcv my_canvas 20 12 0 14 -233017
+-33289 0;
+#X obj 27 370 r cnv_snd;
+#X msg 165 408 color \$1 \$2;
+#X obj 27 421 nbx 3 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 90 421 nbx 3 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X msg 25 245 label my_canvas;
+#X msg 204 109 send cnv_snd;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [cnv] Changing Properties through Messages;
+#X text 12 51 size;
+#X text 12 38 selectable;
+#X text 14 417 x;
+#X text 76 418 y;
+#X connect 0 0 61 0;
+#X connect 0 1 62 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 9 0;
+#X connect 9 0 10 0;
+#X connect 15 0 13 0;
+#X connect 16 0 14 0;
+#X connect 18 0 17 0;
+#X connect 22 0 55 0;
+#X connect 23 0 54 0;
+#X connect 24 0 53 0;
+#X connect 29 0 23 0;
+#X connect 30 0 24 0;
+#X connect 33 0 51 0;
+#X connect 34 0 52 0;
+#X connect 37 0 60 0;
+#X connect 38 0 60 0;
+#X connect 39 0 34 0;
+#X connect 40 0 39 0;
+#X connect 46 0 33 0;
+#X connect 47 0 39 1;
+#X connect 48 0 49 0;
+#X connect 59 0 0 0;
+#X connect 60 0 50 0;
+#X connect 63 0 55 0;
+#X connect 64 0 13 0;
+#X restore 170 407 pd Changing_GUI_Properties;
+#N canvas 103 143 428 369 canvas-creation-arguments 0;
+#X msg 23 43 canvas: cnv selectableSize xSize ySize sendName recieveName
+Label labelXOff labelYOff Font# fontSize bgColor lblColor 0;
+#X text 20 80 Canvas can be called with 13 creation arguments. These
+are not "optional" - all parameters must be filled or the canvas will
+not instantiate correctly.;
+#X text 20 125 The function of the final "0" is unknown to me (it is
+found in the textual entry for a canvas object in a .pd file) but can
+be safely left off without ill effects.;
+#X text 20 167 For example \, click the msg-box to dynamically create
+a cnv:;
+#X obj 23 237 s pd-canvas-creation-arguments;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [cnv] Creation Arguments and Dynamic Patching;
+#X msg 23 195 obj 110 260 cnv 15 200 100 myCanvas myCanvasR Alcyone
+75 12 2 14 -261441 12;
+#X connect 7 0 4 0;
+#X restore 171 518 pd canvas-creation-arguments;
+#X text 168 463 - creating a [cnv] without any arguments will set default
+values for all gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [cnv] object with custom properties:;
+#X floatatom 338 318 4 0 0 0 - - -;
+#X floatatom 382 318 4 0 0 0 - - -;
+#X text 349 334 x;
+#X text 393 334 y;
+#X obj 435 177 metro 100;
+#X obj 435 157 tgl 15 1 empty empty empty 20 8 0 10 -262144 -1 -1 1
+1;
+#X obj 338 270 r from_K1;
+#X floatatom 435 318 4 0 0 0 - - -;
+#X floatatom 479 318 4 0 0 0 - - -;
+#X text 445 334 x;
+#X text 490 334 y;
+#X obj 435 270 r from_K2;
+#N canvas 7 299 313 315 room 0;
+#X obj 6 7 cnv 15 300 300 empty empty type...ctrl+e 100 140 2 17 -33289
+-24198 0;
+#X obj 26 27 cnv 1 1 264 empty empty move_K1_and_K2 65 160 2 17 -166441
+-24198 0;
+#X obj 287 30 cnv 1 1 261 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 27 27 cnv 1 260 1 empty empty empty 20 12 2 20 -166441 -66577
+0;
+#X obj 28 291 cnv 1 260 1 empty empty empty 20 12 2 20 -99865 -66577
+0;
+#X obj 38 40 cnv 25 25 25 from_K1 to_K K1 1 13 2 14 -261681 -123526
+0;
+#X obj 251 255 cnv 25 25 25 from_K2 to_K K2 1 13 2 14 -225280 -1109
+0;
+#X restore 97 171 pd room;
+#X obj 338 294 unpack;
+#X obj 435 294 unpack;
+#X text 17 147 Click the subwindow below to use a cnv as a control
+surface:;
+#X obj 20 61 cnv 15 100 60 empty empty label 20 12 0 14 -233017 -66577
+0;
+#X text 128 58 Colored rectangle with a label. Right-click in the top-left
+corner of the gray rectangle to the left and click "properties" to
+change the object's appearance.;
+#X text 127 110 The blue rectangle at the top of each help patch is
+a [cnv] \, as are the horizontal dividers below.;
+#X text 98 463 13;
+#X text 257 564 IEM KUG;
+#X text 232 576 graz \, austria 2002;
+#X msg 435 199 get_pos;
+#X obj 435 221 send to_K;
+#X text 94 197 To get a cnv position \, send it a "get_pos" message
+->;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#N canvas 404 60 483 507 (subpatch) 0;
+#X msg 144 296 bang;
+#X msg 144 321 1 30;
+#X obj 144 409 line~;
+#X obj 202 301 del 30;
+#X obj 61 433 *~;
+#X obj 62 485 dac~;
+#X obj 62 359 osc~ 880;
+#X obj 62 403 clip~ -1 1;
+#X obj 35 220 list split 1;
+#X obj 15 311 list;
+#X obj 35 244 t b a;
+#X obj 62 334 mtof;
+#X obj 62 457 *~ 0.07;
+#X obj 207 128 metro 50;
+#X obj 207 202 s \$0-cnv;
+#X obj 207 106 0;
+#X obj 207 84 del 3000;
+#X obj 310 170 f;
+#X obj 342 170 + 1;
+#X obj 35 12 r \$0-bng;
+#X obj 106 14 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 310 197 div 13;
+#X msg 310 314 color \$1 0;
+#X obj 242 105 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 279 86 sel 0;
+#X obj 279 107 -1;
+#X obj 279 130 t a;
+#X obj 207 155 f -1;
+#X msg 207 180 delta 0 \$1;
+#X obj 35 44 spigot 1;
+#X obj 35 76 t a b;
+#X obj 96 55 0;
+#X obj 130 55 1;
+#X obj 310 220 sel 3 4;
+#X msg 371 246 5 \$1;
+#X obj 371 268 -;
+#X msg 310 246 1;
+#X obj 340 245 f 2;
+#X obj 383 170 sel 1;
+#X msg 377 198 0;
+#X msg 411 199 2;
+#X obj 62 311 + 68;
+#X obj 15 284 del 170;
+#X text 167 14 IT'S A SECRET TO EVERYBODY.;
+#X obj 100 100 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X obj 56 106 loadbang;
+#X obj 35 174 list;
+#X obj 114 217 s \$0-randomize;
+#X obj 71 149 r \$0-new-secret;
+#X msg 56 128 7 1 0 8 12 16;
+#X obj 35 197 list prepend 11 10;
+#X obj 62 381 *~ 1.4;
+#X msg 202 323 0 400;
+#X connect 0 0 1 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 1;
+#X connect 3 0 52 0;
+#X connect 4 0 12 0;
+#X connect 6 0 51 0;
+#X connect 7 0 4 0;
+#X connect 8 0 10 0;
+#X connect 8 1 9 1;
+#X connect 9 0 8 0;
+#X connect 10 0 42 0;
+#X connect 10 1 0 0;
+#X connect 10 1 41 0;
+#X connect 11 0 6 0;
+#X connect 12 0 5 0;
+#X connect 12 0 5 1;
+#X connect 13 0 17 0;
+#X connect 13 0 27 0;
+#X connect 15 0 13 0;
+#X connect 15 0 17 1;
+#X connect 16 0 15 0;
+#X connect 16 0 23 0;
+#X connect 16 0 32 0;
+#X connect 17 0 18 0;
+#X connect 17 0 21 0;
+#X connect 18 0 17 1;
+#X connect 19 0 29 0;
+#X connect 20 0 29 0;
+#X connect 21 0 33 0;
+#X connect 22 0 14 0;
+#X connect 23 0 24 0;
+#X connect 23 0 38 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 1;
+#X connect 27 0 28 0;
+#X connect 28 0 14 0;
+#X connect 29 0 30 0;
+#X connect 30 0 13 0;
+#X connect 30 0 16 0;
+#X connect 30 0 46 0;
+#X connect 30 1 31 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 36 0;
+#X connect 33 1 37 0;
+#X connect 33 2 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 22 0;
+#X connect 36 0 22 0;
+#X connect 37 0 22 0;
+#X connect 38 0 39 0;
+#X connect 38 1 40 0;
+#X connect 39 0 37 1;
+#X connect 40 0 37 1;
+#X connect 41 0 11 0;
+#X connect 42 0 9 0;
+#X connect 45 0 49 0;
+#X connect 46 0 47 0;
+#X connect 46 0 50 0;
+#X connect 48 0 46 1;
+#X connect 49 0 46 1;
+#X connect 50 0 8 0;
+#X connect 51 0 7 0;
+#X connect 52 0 2 0;
+#X coords 0 -1 1 1 15 15 2 100 100;
+#X restore 11 336 pd;
+#X obj 219 553 bng 14 250 50 0 \$0-bng empty empty 4 7 0 12 -262144
+-262144 -1;
+#X text 66 275 You can also use a white [cnv] to;
+#X text 66 290 conceal parts of a patch (use;
+#X text 66 305 with care);
+#N canvas 92 49 450 511 let's-play-pong! 0;
+#X obj 138 138 cnv 15 100 25 empty \$0-score Score:0 5 12 0 14 -233017
+-66577 0;
+#X obj 14 281 cnv 15 5 60 \$0-ps \$0-pr empty 20 12 0 14 -1 -66577
+0;
+#X obj 257 19 key;
+#X msg 257 112 delta 0 \$1;
+#X msg 257 87 -5;
+#X obj 68 48 tgl 15 0 empty empty Go! 17 7 0 10 -4034 -1 -1 0 1;
+#X obj 337 158 r \$0-ps;
+#X obj 337 180 unpack;
+#X obj 370 202 v py;
+#X obj 68 117 t b b b;
+#X msg 107 169 \; \$1-br get_pos \; \$1-pr get_pos \;;
+#X obj 425 6 cnv 5 5 500 empty empty empty 20 12 0 14 -1 -66577 0;
+#X obj 257 158 r \$0-bs;
+#X obj 290 202 v by;
+#X obj 68 447 pack;
+#X msg 145 340 1;
+#X msg 178 340 -1;
+#X obj 68 491 s \$0-br;
+#X obj 87 297 sel 0 1 2 3 4 5;
+#X msg 101 361 1;
+#N canvas 574 158 450 300 drift 0;
+#X obj 55 40 inlet;
+#X obj 136 40 inlet;
+#X obj 205 45 inlet;
+#X obj 55 117 f;
+#X obj 93 142 mod;
+#X obj 55 164 sel 1;
+#X obj 55 231 f 1;
+#X obj 55 266 outlet;
+#X msg 90 231 0;
+#X obj 136 61 b;
+#X obj 136 88 random 8;
+#X obj 136 115 sel 0;
+#X msg 130 137 1e+37;
+#X obj 205 155 t a;
+#X floatatom 13 147 5 0 0 0 - - -;
+#X obj 93 118 + 1;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 13 0;
+#X connect 3 0 5 0;
+#X connect 3 0 14 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 5 1 8 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 11 1 4 1;
+#X connect 12 0 4 1;
+#X connect 13 0 6 1;
+#X connect 15 0 4 0;
+#X restore 95 427 pd drift;
+#X obj 68 405 t a b;
+#X obj 68 383 f 1;
+#X msg 134 18 10 SLOW;
+#X msg 134 35 7 MEDIUM;
+#X obj 257 43 spigot;
+#X obj 77 71 s \$0-k;
+#X obj 310 10 r \$0-k;
+#N canvas 0 0 450 300 score 0;
+#X obj 84 59 inlet;
+#X obj 84 113 f;
+#X obj 120 113 + 1;
+#X obj 84 86 b;
+#X msg 84 152 label Score:\$1;
+#X obj 84 179 s \$0-score;
+#X obj 165 24 r die;
+#X obj 165 51 sel 0;
+#X obj 165 78 0;
+#X obj 210 92 loadbang;
+#X msg 210 114 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 1 1;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X restore 101 386 pd score;
+#X obj 68 95 metro 10;
+#N canvas 0 0 450 300 once 0;
+#X obj 26 21 inlet;
+#X obj 26 102 outlet;
+#X obj 26 75 t a b;
+#X msg 89 48 0;
+#X obj 26 48 spigot 1;
+#X connect 0 0 4 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 2 0;
+#X restore 310 32 pd once;
+#X obj 257 65 select 97 122 32;
+#X msg 336 89 1;
+#X obj 87 277 t a;
+#X obj 147 92 cnv 15 100 40 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 147 89 a = up \; z = down \; <space> = replay;
+#X msg 134 69 1.5 WTF;
+#X text 216 378 0 - die at left wall \; 1 - richochet off left wall
+\; 2 - die at right wall (not yet) \; 3 - richochet off right wall
+\; 4 - richochet off top \; 5 - richochet of bottom \;;
+#X obj 87 225 expr if(bx<=20 \, py<=by && py+60>=by \, -1) \; if (bx>=415
+\, 3 \, -1) \; if (by<=0 \, 4 \, if (by>=500 \, 5 \, -1));
+#X obj 68 18 r play;
+#X obj 336 111 s play;
+#X msg 87 319 0;
+#X obj 318 297 cnv 10 10 10 \$0-bs \$0-br empty 20 12 0 14 -1 -66577
+0;
+#X obj 257 202 v bx;
+#X obj 337 202 v px;
+#X obj 257 180 unpack;
+#X obj 257 134 s \$0-pr;
+#X msg 294 87 5;
+#X msg 134 52 4 FAST;
+#X obj 107 139 f \$0;
+#X msg 130 361 -1;
+#X msg 68 469 delta \$1 \$2;
+#X obj 87 341 s play;
+#N canvas 528 152 450 386 sfx 0;
+#X obj 21 169 noise~;
+#X obj 22 201 *~;
+#X obj 102 176 vline~;
+#X obj 23 249 +~;
+#X obj 174 146 delread~ \$0-b;
+#X obj 36 278 delwrite~ \$0-b 500;
+#X obj 22 302 *~ 0.1;
+#X obj 23 330 dac~;
+#X obj 135 120 del;
+#X msg 102 120 1;
+#X msg 135 145 0;
+#X obj 174 120 * 10;
+#X obj 175 176 *~ 0.8;
+#X msg 174 81 2;
+#X obj 117 9 inlet;
+#X obj 174 54 change;
+#X obj 117 31 sel -1 0 2;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 1;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 12 0;
+#X connect 6 0 7 0;
+#X connect 6 0 7 1;
+#X connect 8 0 10 0;
+#X connect 9 0 2 0;
+#X connect 10 0 2 0;
+#X connect 11 0 4 0;
+#X connect 12 0 3 1;
+#X connect 13 0 9 0;
+#X connect 13 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 16 0;
+#X connect 15 0 13 0;
+#X connect 16 3 15 0;
+#X restore 211 294 pd sfx;
+#X connect 2 0 25 0;
+#X connect 3 0 46 0;
+#X connect 4 0 3 0;
+#X connect 5 0 26 0;
+#X connect 5 0 29 0;
+#X connect 6 0 7 0;
+#X connect 7 0 44 0;
+#X connect 7 1 8 0;
+#X connect 9 0 22 0;
+#X connect 9 1 38 0;
+#X connect 9 2 49 0;
+#X connect 12 0 45 0;
+#X connect 14 0 51 0;
+#X connect 15 0 20 2;
+#X connect 16 0 20 2;
+#X connect 18 0 41 0;
+#X connect 18 1 19 0;
+#X connect 18 2 41 0;
+#X connect 18 3 50 0;
+#X connect 18 4 15 0;
+#X connect 18 5 16 0;
+#X connect 19 0 20 1;
+#X connect 19 0 22 1;
+#X connect 19 0 28 0;
+#X connect 20 0 14 1;
+#X connect 21 0 14 0;
+#X connect 21 1 20 0;
+#X connect 22 0 21 0;
+#X connect 23 0 29 1;
+#X connect 24 0 29 1;
+#X connect 25 0 31 0;
+#X connect 27 0 30 0;
+#X connect 29 0 9 0;
+#X connect 30 0 25 1;
+#X connect 31 0 4 0;
+#X connect 31 1 47 0;
+#X connect 31 2 32 0;
+#X connect 32 0 40 0;
+#X connect 33 0 18 0;
+#X connect 33 0 53 0;
+#X connect 36 0 29 1;
+#X connect 38 0 33 0;
+#X connect 38 1 33 0;
+#X connect 38 2 33 0;
+#X connect 39 0 5 0;
+#X connect 41 0 52 0;
+#X connect 45 0 43 0;
+#X connect 45 1 13 0;
+#X connect 47 0 3 0;
+#X connect 48 0 29 1;
+#X connect 49 0 10 0;
+#X connect 50 0 20 1;
+#X connect 50 0 22 1;
+#X connect 51 0 17 0;
+#X restore 136 312 pd let's-play-pong!;
+#X obj 60 272 cnv 15 210 65 empty \$0-cnv empty 20 12 0 14 -262144
+-262144 0;
+#X text 235 551 musil@iem.kug.ac.at;
+#X text 221 550 c;
+#X connect 21 0 39 0;
+#X connect 22 0 21 0;
+#X connect 23 0 30 0;
+#X connect 28 0 31 0;
+#X connect 30 0 17 0;
+#X connect 30 1 18 0;
+#X connect 31 0 24 0;
+#X connect 31 1 25 0;
+#X connect 39 0 40 0;
diff --git a/externals/vanilla/namecanvas-help.pd b/externals/vanilla/namecanvas-help.pd
new file mode 100644
index 00000000..80ab7bb2
--- /dev/null
+++ b/externals/vanilla/namecanvas-help.pd
@@ -0,0 +1,54 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header namecanvas 3 12
+0 18 -204280 -1 0;
+#X obj 0 450 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 245 494 344 META 0;
+#X text 12 65 LIBRARY internal;
+#X text 12 105 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 85 AUTHOR Miller Puckette;
+#X text 12 145 HELP_PATCH_AUTHORS Updated for Pd version 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION attach a canvas to a name;
+#X text 12 5 KEYWORDS control canvas_op;
+#X text 12 125 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 478 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 505 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 102 481 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [namecanvas] Related Objects;
+#X obj 19 43 pddp/helplink iemguts/sendcanvas;
+#X restore 102 597 pd Related_objects;
+#X obj 455 3 namecanvas;
+#X obj 425 20 pddp/pddplink http://wiki.puredata.info/en/namecanvas
+-text pdpedia: namecanvas;
+#X obj 120 153 namecanvas \$0-bonzo;
+#X obj 120 210 s \$0-bonzo;
+#X text 98 454 (none);
+#X text 98 482 (none);
+#X obj 120 366 s pd-namecanvas-help.pd;
+#X text 11 23 attach a canvas to a name;
+#X text 168 523 - sets the name to associate with this canvas. Any
+messages sent to this name will be forwarded to the canvas containing
+this [namecanvas] object.;
+#X msg 120 186 msg 50 50 Hi there. This works locally.;
+#X msg 120 338 msg 50 70 This works globally.;
+#X text 78 523 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 120 240 If you open another instance of this help patch \,
+you'll see that clicking the message box above will create an object
+on the canvas where you click.;
+#X text 119 294 The following is similar \, but it will create an object
+in each "namecanvas-help.pd" patch that you have open:;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
diff --git a/externals/vanilla/netreceive-help.pd b/externals/vanilla/netreceive-help.pd
new file mode 100644
index 00000000..789d9b84
--- /dev/null
+++ b/externals/vanilla/netreceive-help.pd
@@ -0,0 +1,93 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header netreceive 3 12
+0 18 -204280 -1 0;
+#X obj 0 331 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 242 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd v0.41. Revised by
+Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 KEYWORDS control network;
+#X text 12 45 DESCRIPTION listen for incoming messages from a network
+;
+#X text 12 65 OUTLET_0 anything;
+#X text 12 85 OUTLET_1 float;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 358 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 431 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 558 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [netreceive] Related Objects;
+#X obj 22 43 netsend;
+#X restore 102 598 pd Related_objects;
+#X obj 78 367 cnv 17 3 25 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 80 451 1) float;
+#X obj 463 3 netreceive;
+#X obj 430 20 pddp/pddplink http://wiki.puredata.info/en/netreceive
+-text pdpedia: netreceive;
+#X floatatom 226 82 0 0 0 0 - - -;
+#X obj 139 145 netreceive 3001 1;
+#X obj 139 82 print tcp;
+#X obj 139 166 print udp;
+#N canvas 57 331 428 261 About_netreceive 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [netreceive] More Info;
+#X text 21 38 The [netreceive] object opens a socket for TCP ("stream")
+or UDP ("datagram") network reception on a specified port. If using
+TCP \, an outlet gives you the number of [netsend] objects (or other
+compatible clients) have opened connections here.;
+#X text 20 170 There are some possibilities for intercommunication
+with other programs... see the help for [netsend].;
+#X text 19 104 Incoming network messages appear at the left inlet of
+the [netreceive] object. (They used to be received by [receive] objects
+\, in which case it was up to the sender to select which one). To test
+the object you can send messages from the [netsend] help window.;
+#X text 18 208 SECURITY ALERT: the port that netreceive opens has no
+access restrictions \, so anyone can connect to it and send messages.
+;
+#X restore 102 567 pd About_netreceive;
+#X text 11 23 listen for incoming messages from a network;
+#X text 168 466 - (optional) 0 for TCP \, nonzero for UDP. (Default
+is TCP.);
+#X text 168 451 - (optional) port number.;
+#X text 80 466 2) float;
+#X text 168 481 - if you set the third argument to the word "old" \,
+everything sent to the specified port is received into the global message
+space. This is the original behavior of [netreceive]. This can be VERY
+INSECURE since it gives someone full access to your computer \, allowing
+them to do anything that Pd can via the network.;
+#X text 98 290 Old behavior: [netreceive 4567 0 old] (see argument
+3 below);
+#X text 80 481 3) symbol atom;
+#X text 98 366 anything;
+#X obj 78 403 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 402 float;
+#X text 264 60 <- TCP \, port 3000;
+#X text 261 144 <- UDP \, port 3001;
+#X text 98 205 You can send messages from the [netsend] objects in
+the help patch for [netsend].;
+#X text 168 366 - any message received by this [netreceive] object
+will be sent to the left outlet.;
+#X text 98 334 (none);
+#X obj 139 61 netreceive 3000;
+#X text 168 402 - when using TCP \, the [netreceive] object has a right
+inlet which shows the number of open connections.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 13 0 15 0;
+#X connect 32 0 14 0;
+#X connect 32 1 12 0;
diff --git a/externals/vanilla/netsend-help.pd b/externals/vanilla/netsend-help.pd
new file mode 100644
index 00000000..cb80560b
--- /dev/null
+++ b/externals/vanilla/netsend-help.pd
@@ -0,0 +1,111 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header netsend 3 12 0 18
+-204280 -1 0;
+#X obj 0 348 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 46 242 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd v0.41. Revised by
+Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
+;
+#X text 12 5 KEYWORDS control network;
+#X text 12 45 DESCRIPTION send Pd messages over a network;
+#X text 12 65 INLET_0 connect disconnect send;
+#X text 12 85 OUTLET_0 float;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 478 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 515 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 558 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 54 478 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [netsend] Related Objects;
+#X restore 102 598 pd Related_objects;
+#X obj 78 357 cnv 17 3 110 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 486 float;
+#X obj 78 487 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 send Pd messages over a network;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/netsend -text
+pdpedia: netsend;
+#X obj 473 3 netsend;
+#X obj 15 238 netsend;
+#X msg 15 79 connect localhost 3000;
+#X msg 23 213 send foo \$1;
+#X floatatom 23 186 0 0 0 0 - - -;
+#X msg 15 160 disconnect;
+#X msg 186 213 send foo \$1;
+#X floatatom 186 186 0 0 0 0 - - -;
+#X msg 178 160 disconnect;
+#X obj 178 238 netsend 1;
+#X msg 178 79 connect localhost 3001;
+#X floatatom 15 265 0 0 0 0 - - -;
+#X floatatom 178 265 0 0 0 0 - - -;
+#X text 66 58 TCP;
+#X text 253 55 UDP;
+#X text 325 79 Connect to "localhost" port 3000/3001;
+#X text 253 161 Close the connection;
+#X text 215 188 Send messages to "foo" on remote machine;
+#X text 12 294 Outlet is nonzero if connection is open \, zero otherwise.
+;
+#X msg 15 106 connect molloy 3000;
+#X msg 178 106 connect molloy 3001;
+#X msg 15 133 connect bug 3000;
+#X msg 178 133 connect bug 3000;
+#X text 98 356 connect;
+#X text 98 413 disconnect;
+#X text 98 443 send;
+#X text 168 486 - nonzero if the connection is open \, zero otherwise.
+;
+#N canvas 57 331 428 233 About_netsend 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 20 132 Opt@web.fm has made compatible objects for Max so that
+Pd and Max can intercommunicate: see ftp://fals.ch/pub/pdnets/.;
+#X text 8 2 [netsend] More Info;
+#X text 20 39 The [netsend] object connects to another machine over
+the network for sending TCP ("stream") or UDP ("datagram") messages.
+An outlet reports whether the connection is open or not. A connection
+request should specify the name or IP address of the other host and
+the port number. There should be a [netreceive] object on the remote
+host with a matching port number.;
+#X text 20 168 The Linux version of Pd comes with "pdsend" and "pdreceive"
+standalone programs. These haven't been tested in Windows yet (but
+the source is included in the Pd distribution).;
+#X restore 102 567 pd About_netsend;
+#X text 80 535 1) float;
+#X text 168 535 - (optional) 0 for TCP \, nonzero for UDP. (Default
+is TCP.);
+#X text 168 413 - disconnect from the remote machine. When it is disconnected
+\, a "0" is sent to the outlet.;
+#X text 168 443 - after successfully connecting \, use the "send" message
+to forward data to the remote machine.;
+#X text 168 356 - use the "connect" message to connect to the specified
+remote machine-- providing its name or IP address-- on the specified
+port (e.g. \, "connect localhost 3000"). A "1" is output if the connection
+is successful.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 14 0 24 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 16 0;
+#X connect 18 0 14 0;
+#X connect 19 0 22 0;
+#X connect 20 0 19 0;
+#X connect 21 0 22 0;
+#X connect 22 0 25 0;
+#X connect 23 0 22 0;
+#X connect 32 0 14 0;
+#X connect 33 0 22 0;
+#X connect 34 0 14 0;
+#X connect 35 0 22 0;
diff --git a/externals/vanilla/openpanel-help.pd b/externals/vanilla/openpanel-help.pd
new file mode 100644
index 00000000..c460580c
--- /dev/null
+++ b/externals/vanilla/openpanel-help.pd
@@ -0,0 +1,73 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header openpanel 3 12 0
+18 -204280 -1 0;
+#X obj 0 310 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 243 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.40. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS control GUI;
+#X text 12 45 DESCRIPTION query the user for a filename;
+#X text 12 65 INLET_0 bang symbol;
+#X text 12 85 OUTLET_0 symbol;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 432 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 475 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 503 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 479 (none);
+#N canvas 101 483 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 43 savepanel;
+#X obj 92 43 soundfiler;
+#X text 8 2 [openpanel] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 319 cnv 17 3 105 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 441 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 openpanel;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/openpanel
+-text pdpedia: openpanel;
+#X msg 171 104 bang;
+#X obj 171 217 print;
+#X text 211 104 Starts open panel in current directory;
+#X msg 187 130 symbol /tmp;
+#X msg 187 159 symbol C:/;
+#X text 265 130 Starts in a specified directory;
+#X text 98 318 bang;
+#X text 98 364 symbol;
+#X text 98 398 list;
+#X text 168 318 - a "bang" to the inlet causes an "Open file" browser
+to appear on the screen. If you select a file \, the filename appears
+at the outet.;
+#X text 168 364 - sending a symbol will start the "Open file" browser
+in the specified directory.;
+#X text 98 440 symbol;
+#X obj 171 192 openpanel;
+#X text 167 440 - the filename of the selected file is output from
+the outlet.;
+#X text 99 507 Unlike other symbol-handling objects in Pd \, [openpanel]
+can output a symbol that contains spaces \, which will get handled
+propertly by an object like [soundfiler]. However \, if you set this
+filename to a message box and save the patch \, the symbol will be
+converted to a list the next time you open the patch.;
+#X text 11 23 query the user for a filename;
+#X text 168 398 - a list starting with a symbol will be truncated to
+the first element.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 13 0 25 0;
+#X connect 16 0 25 0;
+#X connect 17 0 25 0;
+#X connect 25 0 14 0;
diff --git a/externals/vanilla/pipe-help.pd b/externals/vanilla/pipe-help.pd
new file mode 100644
index 00000000..4dc5dc55
--- /dev/null
+++ b/externals/vanilla/pipe-help.pd
@@ -0,0 +1,224 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header pipe 3 12 0 18 -204280
+-1 0;
+#X obj 0 148 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 49 202 494 386 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 185 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 165 AUTHOR Miller Puckette;
+#X text 12 225 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 KEYWORDS control time;
+#X text 12 45 DESCRIPTION delay a message - a message "delay line"
+;
+#X text 12 65 INLET_0 float list symbol pointer bang flush clear;
+#X text 12 105 INLET_R float;
+#X text 12 85 INLET_N float list symbol pointer bang;
+#X text 12 125 OUTLET_N float symbol pointer;
+#X text 12 205 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 401 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 456 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 563 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 104 322 428 267 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 23 43 delay;
+#X obj 67 43 timer;
+#X text 8 2 [pipe] Related Objects;
+#X text 20 181 The best places to find information about Pd's libraries
+is:;
+#X text 21 203 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 22 218 or;
+#X text 21 233 iem.kug.ac.at/pdb/;
+#X text 20 132 This object is offered in Pd only if you have downloaded
+and properly installed the appropriate library. It may or may not exist
+in a single library.;
+#X obj 17 105 pddp/helplink iemlib/t3_delay;
+#X restore 102 597 pd Related_objects;
+#X obj 78 157 cnv 17 3 160 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 181 float;
+#X obj 78 410 cnv 17 3 40 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X obj 78 374 cnv 17 3 17 empty \$0-pddp.cnv.let.r r 5 9 0 16 -228856
+-162280 0;
+#X obj 492 3 pipe;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/pipe -text
+pdpedia: pipe;
+#X text 98 206 symbol;
+#X text 98 232 pointer;
+#X text 98 259 list;
+#X text 98 156 bang;
+#X text 98 286 flush;
+#X text 98 304 clear;
+#X obj 78 328 cnv 17 3 40 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
+-162280 0;
+#X text 98 373 float;
+#N canvas 78 30 428 522 Creation_arguments 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [pipe] Related Objects;
+#X obj 23 61 pipe 1000;
+#X obj 20 189 pipe s 1000;
+#X text 93 189 A pipe for symbols.;
+#X obj 20 282 pipe f s 1000;
+#X text 115 282 A pipe for one float \, and one symbol.;
+#X msg 20 159 symbol cat;
+#X msg 92 159 symbol dog;
+#X symbolatom 20 210 10 0 0 0 - - -;
+#X symbolatom 95 303 10 0 0 0 - - -;
+#X floatatom 20 303 5 0 0 0 - - -;
+#X msg 31 261 100 dog;
+#X msg 20 240 42 cat;
+#X floatatom 21 386 0 0 0 0 - - -;
+#X floatatom 21 494 0 0 0 0 - - -;
+#X obj 21 412 t f f f;
+#X obj 49 443 + 1;
+#X obj 77 443 + 2;
+#X floatatom 64 493 0 0 0 0 - - -;
+#X floatatom 108 494 0 0 0 0 - - -;
+#X obj 21 469 pipe f f f 1000;
+#X text 19 329 Miller's original example shows how a list of floats
+can be delayed by [pipe]. Note that the [trigger] object is used to
+ensure that [pipe] receives the messages from right to left order.
+;
+#X text 18 25 1) If only one creation argument is used \, it defines
+the initial length of delay. [pipe] will then expect a float.;
+#X text 17 87 2) If two or more arguments are provided \, then all
+except for the last will define the data type to be expected at the
+corresponding inlet. The delay time is initialized by the LAST creation
+argument \, which can be changed by sending a new delay time to the
+rightmost inlet.;
+#X text 72 240 Messages can be sent as lists like this example.;
+#X connect 3 0 9 0;
+#X connect 5 0 11 0;
+#X connect 5 1 10 0;
+#X connect 7 0 3 0;
+#X connect 8 0 3 0;
+#X connect 12 0 5 0;
+#X connect 13 0 5 0;
+#X connect 14 0 16 0;
+#X connect 16 0 21 0;
+#X connect 16 1 17 0;
+#X connect 16 2 18 0;
+#X connect 17 0 21 1;
+#X connect 18 0 21 2;
+#X connect 21 0 15 0;
+#X connect 21 1 19 0;
+#X connect 21 2 20 0;
+#X restore 170 543 pd Creation_arguments;
+#X text 168 304 - forces [pipe] to forget all stored messages.;
+#X text 168 259 - a list to the left inlet will be distributed among
+[pipe]'s inlets.;
+#X obj 95 104 pipe 1000;
+#X floatatom 126 53 5 0 0 0 - - -;
+#X msg 95 53 1;
+#X floatatom 95 126 5 0 0 0 - - -;
+#X floatatom 162 53 5 0 0 0 - - -;
+#N canvas 80 25 428 536 More_info 0;
+#X obj 1 451 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 -204280 -1 0;
+#X text 20 80 Like water running through a pipe \, it goes in one end...runs
+the length of the pipe...then comes out the other end.;
+#X floatatom 23 127 5 0 0 0 - - -;
+#X obj 23 148 pipe 20;
+#X floatatom 23 170 5 0 0 0 - - -;
+#X text 20 38 The left inlet accepts numbers \, symbols \, pointers
+\, messages \, and lists. The right inlet adjusts the delay time (the
+length of the pipe).;
+#X floatatom 69 127 5 0 0 0 - - -;
+#X text 111 126 Adjust the length of the pipe.;
+#X floatatom 23 298 0 0 0 0 - - -;
+#X obj 23 391 pipe 2000;
+#X text 62 296 numbers to store and output later;
+#X text 88 319 output all stored messages immediately;
+#X msg 34 323 flush;
+#X msg 51 369 clear;
+#X text 99 369 forget all stored messages;
+#X text 19 199 [pipe] accepts two very important methods.;
+#X text 20 219 1 "flush": forces [pipe] to output all stored messages
+immediately.;
+#X text 20 248 2 "clear": forces [pipe] to forget all stored messages.
+;
+#X obj 23 412 print;
+#X msg 44 344 bang;
+#X text 80 344 output the most recently stored message;
+#X text 20 267 3 "bang": repeat the most recently stored message again.
+;
+#X text 20 473 [pipe] schedules its output immediately after storing
+the incoming messages. This means that the delay time can be changed
+at runtime without effecting the messages that have already been scheduled
+for output.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 449 Rescheduling;
+#X text 8 2 [pipe] More Info;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 6 0 3 1;
+#X connect 8 0 9 0;
+#X connect 9 0 18 0;
+#X connect 12 0 9 0;
+#X connect 13 0 9 0;
+#X connect 19 0 9 0;
+#X restore 101 572 pd More_info;
+#X text 11 23 delay a message - a message "delay line";
+#X text 169 93 The [pipe] object stores a sequence of messages and
+outputs them after a specified delay time in milliseconds. You can
+change the delay time as you wish. The outputs are sorted automatically.
+;
+#X text 80 475 1) float;
+#X text 98 490 symbol atom;
+#X text 168 156 - a bang will send the most recently stored message
+to the outlet after the specified delay time.;
+#X text 168 181 - a float to the left inlet will be stored \, then
+sent to the outlet after the specified delay.;
+#X text 168 232 - if the first argument to [pipe] is "p" \, an incoming
+pointer will be output after the specified delay.;
+#X text 168 206 - if the first argument to [pipe] is "s" \, an incoming
+symbol will be output after the specified delay.;
+#X msg 51 53 flush;
+#X msg 9 53 clear;
+#X text 168 286 - forces [pipe] to immediately output all stored messages.
+;
+#X text 168 373 - the rightmost inlet takes a float value that specifies
+the length of the delay (in milliseconds).;
+#X text 168 327 - an additional inlet is created for each argument
+provided to [pipe] besides the delay time. This makes it possible to
+send lists through [pipe].;
+#X text 98 422 symbol;
+#X text 98 409 float;
+#X text 98 435 pointer;
+#X text 168 409 - pipe can output symbols \, floats \, pointers. One
+outlet is created for each argument provided (besides the final argument
+to specify delay time).;
+#X text 167 475 - (optional) creation arguments define the data type
+to be expected at each inlet: "f" for float (or a float \, like "41"
+\, to initialize the value) \, "s" for symbol \, and "p" for pointer.
+The final argument defines the initial length of delay. See the subpatch
+below for more about the arguments:;
+#X obj 9 79 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 98 327 float;
+#X text 98 340 symbol;
+#X text 98 353 pointer;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 25 0 28 0;
+#X connect 26 0 25 0;
+#X connect 27 0 25 0;
+#X connect 29 0 25 1;
+#X connect 39 0 25 0;
+#X connect 40 0 25 0;
+#X connect 49 0 25 0;
diff --git a/externals/vanilla/powtodb~-help.pd b/externals/vanilla/powtodb~-help.pd
new file mode 100644
index 00000000..d90eebfc
--- /dev/null
+++ b/externals/vanilla/powtodb~-help.pd
@@ -0,0 +1,78 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header powtodb~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 418 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 245 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion acoustic_units;
+#X text 12 45 DESCRIPTION convert power units to dB for audio signals
+;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 455 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 492 cnv 3 550 3 empty \$0-pddp.cnv.argument argument 8 12
+0 13 -228856 -1 0;
+#X obj 0 520 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 427 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 496 (none);
+#N canvas 102 446 428 141 Related_objects 0;
+#X obj 23 102 mtof;
+#X obj 68 102 ftom;
+#X obj 111 102 dbtorms;
+#X obj 176 102 rmstodb;
+#X obj 242 102 dbtopow;
+#X obj 304 102 powtodb;
+#X text 20 79 Control objects for conversion:;
+#X obj 23 43 mtof~;
+#X obj 70 43 ftom~;
+#X obj 118 43 dbtorms~;
+#X obj 187 43 rmstodb~;
+#X obj 253 43 dbtopow~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [powtodb~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 209 225 snapshot~;
+#X floatatom 209 256 0 0 0 0 - - -;
+#X floatatom 209 120 0 0 0 0 - - -;
+#X obj 209 144 sig~;
+#X obj 276 199 metro 100;
+#X obj 276 169 loadbang;
+#X text 98 426 signal;
+#X obj 78 464 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 464 signal;
+#X text 99 524 This object takes an audio signal as input and output
+(and works sample by sample.) Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as *~ and osc~ \, depending on your hardware and math library.
+;
+#X obj 209 169 dbtopow~;
+#X text 99 292 The powtodb~ object converts power units \, equal to
+the square of the "RMS" amplitude \, to decibels.;
+#X obj 471 3 powtodb~;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/powtodb~ -text
+pdpedia: powtodb~;
+#X text 11 23 convert power units to dB for audio signals;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 10 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 20 0;
+#X connect 14 0 10 0;
+#X connect 15 0 14 0;
+#X connect 20 0 10 0;
diff --git a/externals/vanilla/print-help.pd b/externals/vanilla/print-help.pd
new file mode 100644
index 00000000..eaf94861
--- /dev/null
+++ b/externals/vanilla/print-help.pd
@@ -0,0 +1,154 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header print 3 12 0 18
+-204280 -1 0;
+#X obj 0 324 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 244 494 344 META 0;
+#X text 12 85 LIBRARY internal;
+#X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 AUTHOR Miller Puckette;
+#X text 12 165 HELP_PATCH_AUTHORS This document was updated for Pd
+version 0.38.4 by Dave Sabine and Hans-Christoph Steiner as part of
+a project called pddp proposed by Krzysztof Czaja to build comprehensive
+documentation for Pd. Jonathan Wilkes revised the patch to conform
+to the PDDP template for Pd version 0.42.;
+#X text 12 5 KEYWORDS control;
+#X text 12 45 DESCRIPTION print messages to the terminal window;
+#X text 12 65 INLET_0 anything;
+#X text 12 145 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 424 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 452 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 535 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 98 483 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [print] Related Objects;
+#X obj 22 43 print~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 333 cnv 17 3 80 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 483 3 print;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/print -text
+pdpedia: print;
+#X text 98 428 (none);
+#N canvas 103 75 428 487 print_oddities 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [print] Oddities;
+#X obj 33 189 print;
+#X msg 33 73 1;
+#X msg 42 97 float 1;
+#X obj 65 161 symbol test;
+#X msg 60 120 symbol this;
+#X obj 65 142 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 121 310 one 2 three;
+#X obj 53 394 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 121 395 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 130 371 print STRAIGHT;
+#X msg 105 290 list 1 two 3;
+#X msg 88 270 1 two 3;
+#X msg 130 331 list one 2 three;
+#X obj 56 371 route list;
+#X text 20 222 [print] only interprets the "list" selector when the
+following body of the message is an implied list \, i.e. a set of atoms
+that starts with a float.;
+#X text 20 428 This document was updated for Pd version 0.38.4 by Dave
+Sabine and Hans-Christoph Steiner as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd.;
+#X text 138 114 "symbols" are not interpreted;
+#X text 140 129 (i.e. "symbol" is also printed);
+#X text 20 38 floats are interpreted (i.e. it doesn't show the word
+"float" before the number):;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 8 0 11 0;
+#X connect 8 0 15 0;
+#X connect 12 0 11 0;
+#X connect 12 0 15 0;
+#X connect 13 0 11 0;
+#X connect 13 0 15 0;
+#X connect 14 0 11 0;
+#X connect 14 0 15 0;
+#X connect 15 0 9 0;
+#X connect 15 1 10 0;
+#X restore 101 569 pd print_oddities;
+#X text 98 332 anything;
+#X text 168 331 - the [print] object takes any message and prints it
+to the console window. When the print object receives a message \,
+its output will appear in the console window following the name of
+the print object and a colon (:). If the print object does not have
+a name (which you can supply as an argument within the print object
+itself) then the word "print" appears followed by a colon (:) and your
+message.;
+#X text 168 428 - [print] routes output directly to the console window.
+;
+#X msg 159 64 walk the dog;
+#X msg 85 64 bang;
+#X msg 126 64 234;
+#X obj 85 99 print;
+#X msg 158 151 walk the dog;
+#X msg 85 151 bang;
+#X msg 125 151 234;
+#X obj 85 188 print myPrintObject;
+#X text 209 188 A print object with a name.;
+#X text 132 92 A print object without a name. Be sure you can see the
+terminal window as you click on these messages.;
+#N canvas 105 232 428 300 print_and_lists 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [print] Lists;
+#X text 23 38 When the print object receives a list \, it will output
+the entire list as a single message. Like below:;
+#X obj 25 98 print print_this_list;
+#X msg 25 75 10 20 30 foo;
+#X msg 26 180 10 20 30 foo;
+#X obj 26 233 unpack f f f s;
+#X obj 26 266 print unpack_this_list;
+#X text 23 127 To output the list as separate elements \, the list
+needs to be unpacked first. Note that [unpack]'s outlets are triggered
+from right to left. Like below:;
+#X text 37 200 The arguments here are used to tell Pd what type of
+atom to expect: (f = float \, s = symbol).;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 1 7 0;
+#X connect 6 2 7 0;
+#X connect 6 3 7 0;
+#X restore 101 544 pd print_and_lists;
+#X text 82 219 Use the "-n" flag to suppress "print:" in the output
+to the console:;
+#X msg 85 253 test;
+#X obj 207 286 print;
+#X msg 207 254 test;
+#X text 159 286 vs.;
+#X obj 85 286 print -n;
+#X text 168 470 - if you provide a symbol as an argument \, the symbol--
+followed by a colon-- will precede the output when it is sent to the
+console. Or you may use the "-n" flag to only print the incoming message
+(see example above).;
+#X text 78 469 1) symbol atom;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 11 23 print messages to the terminal window;
+#X connect 16 0 19 0;
+#X connect 17 0 19 0;
+#X connect 18 0 19 0;
+#X connect 20 0 23 0;
+#X connect 21 0 23 0;
+#X connect 22 0 23 0;
+#X connect 28 0 32 0;
+#X connect 30 0 29 0;
diff --git a/externals/vanilla/qlist-help.pd b/externals/vanilla/qlist-help.pd
new file mode 100644
index 00000000..11fb7505
--- /dev/null
+++ b/externals/vanilla/qlist-help.pd
@@ -0,0 +1,145 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header qlist 3 12 0 18
+-204280 -1 0;
+#X obj 0 351 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 304 171 494 366 META 0;
+#X text 12 135 LIBRARY internal;
+#X text 12 175 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 155 AUTHOR Miller Puckette;
+#X text 12 215 HELP_PATCH_AUTHORS Updated for Pd version 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION text-based sequencer;
+#X text 12 65 INLET_0 bang print tempo rewind next clear add add2 read
+write;
+#X text 12 95 OUTLET_0 list;
+#X text 12 115 OUTLET_1 bang;
+#X text 12 5 KEYWORDS control storage nonlocal filesystem list_op;
+#X text 12 195 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 393 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 502 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 529 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 506 (none);
+#N canvas 89 483 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [qlist] Related Objects;
+#X obj 22 43 textfile;
+#X obj 85 43 receive;
+#X restore 102 597 pd Related_objects;
+#X obj 78 360 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 403 cnv 17 3 37 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 480 3 qlist;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/qlist -text
+pdpedia: qlist;
+#N canvas 72 97 428 339 messages_to_qlist 0;
+#X msg 23 115 rewind;
+#X msg 23 139 next;
+#X msg 23 67 bang;
+#X msg 23 91 tempo 1;
+#X text 76 66 sequence automatically;
+#X text 76 91 set relative tempo;
+#X text 77 114 go to beginning (and stop);
+#X text 78 138 single-step forward;
+#X text 120 258 read a file;
+#X msg 23 259 read qlist.txt;
+#X msg 23 282 write /tmp/qlist.txt;
+#X msg 23 187 clear;
+#X msg 23 211 add 500 this is another message;
+#X msg 23 235 add2 that;
+#X text 80 186 empty the qlist;
+#X text 96 234 add a message to a qlist but don't terminate it;
+#X text 78 161 single-step forward SUPRESSING MESSAGE-SENDING;
+#X msg 23 163 next 1;
+#X msg 23 43 print;
+#X text 77 42 print contents to Pd window;
+#X obj 23 312 outlet;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [qlist] Messages Accepted by [qlist];
+#X text 156 281 write a file;
+#X text 217 210 add a message to a qlist;
+#X connect 0 0 20 0;
+#X connect 1 0 20 0;
+#X connect 2 0 20 0;
+#X connect 3 0 20 0;
+#X connect 9 0 20 0;
+#X connect 10 0 20 0;
+#X connect 11 0 20 0;
+#X connect 12 0 20 0;
+#X connect 13 0 20 0;
+#X connect 17 0 20 0;
+#X connect 18 0 20 0;
+#X restore 76 89 pd messages_to_qlist;
+#X obj 76 115 qlist;
+#X floatatom 76 163 0 0 0 0 - - -;
+#X obj 103 140 print done;
+#X text 112 165 This outlet gets a list of leading numbers for the
+next message \, for you to use in designing your own sequencer.;
+#X text 210 89 <- Click to see messages to qlist;
+#X obj 135 276 r this;
+#X obj 238 276 r that;
+#X obj 135 305 print this;
+#X obj 238 305 print that;
+#X text 73 231 These receives are invoked in the file "qlist.txt" in
+this directory.;
+#N canvas 82 159 428 398 More_Info 0;
+#X text 20 38 The qlist object reads text files containing time-tagged
+Pd messages. You can have them sequenced automatically (by sending
+a "bang" message \, possibly changing speed via "tempo" messages) or
+manually via the "rewind" and "next" messages.;
+#X text 20 228 To run it manually \, send "rewind" followed by "next".
+All messages not preceeded by numbers are sent. As soon as a message
+starting with one or more numbers is encountered \, the numbers are
+output as a list. There are many ways you could design a sequencer
+around this.;
+#X text 20 298 You can also record textual messages and save them to
+a file. Send "clear" to empty the qlist and "add" to add messages (terminated
+with semicolons.) The message \, "add2" adds a list of atoms without
+finishing with a semicolon in case you want to make variable-length
+messages.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [qlist] More Info;
+#X text 20 108 To run the qlist automatically \, send it a "read" message
+(the filename is relative to the directory the patch is in) and later
+a "bang." Messages in the file are separated by semicolons. Optional
+leading numbers are delay times in milliseconds. If the tempo is different
+from 1 the messages are sent faster or slower accordingly. Messages
+should start with a symbol giving the destination object. In the file
+"qlist.q" used here \, the messages go to objects "this" and "that"
+which are receives below.;
+#X restore 101 538 pd More_Info;
+#X text 98 402 list;
+#X obj 78 446 cnv 17 3 47 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 445 bang;
+#X text 168 445 - this outlet gets a bang when you hit the end of the
+sequence. In the file "qlist.txt" used in the example above \, the
+end is delayed 1000 milliseconds after the last message.;
+#X text 11 23 text-based sequencer;
+#X text 98 359 See the subpatch "messages_to_qlist" in the example
+above for a complete list of messages and their functionalities.;
+#X text 168 402 - if you run [qlist] manually (using the "next" message)
+\, messages starting with one or more numbers are are output as a list.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 98 557 pddp/pddplink ../2.control.examples/23.sequencing.pd
+-text doc/2.control.examples/23.sequencing.pd;
+#X obj 98 572 pddp/pddplink ../3.audio.examples/D13.additive.qlist.pd
+-text doc/3.audio.examples/D13.additive.qlist.pd;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 14 1 16 0;
+#X connect 19 0 21 0;
+#X connect 20 0 22 0;
diff --git a/externals/vanilla/random-help.pd b/externals/vanilla/random-help.pd
new file mode 100644
index 00000000..7f33781f
--- /dev/null
+++ b/externals/vanilla/random-help.pd
@@ -0,0 +1,577 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header random 3 12 0 18
+-204280 -1 0;
+#X obj 0 252 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 247 494 344 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 29 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 45 DESCRIPTION pseudorandom integer generator;
+#X text 12 5 KEYWORDS control random;
+#X text 12 85 INLET_1 float;
+#X text 12 105 OUTLET_0 float;
+#X text 12 65 INLET_0 bang seed;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 389 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 426 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 476 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 87 265 428 374 Related_objects 0;
+#X text 20 255 These objects are offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 20 297 The best places to find information about Pd's libraries
+is:;
+#X text 21 314 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 23 328 or;
+#X text 20 343 iem.kug.ac.at/pdb/;
+#X obj 20 95 pddp/helplink markex/randomF;
+#X obj 20 115 pddp/helplink markex/tripleRand;
+#X obj 20 135 pddp/helplink motex/shuffle;
+#X obj 20 155 pddp/helplink cxc/utime;
+#X obj 20 175 pddp/helplink mjlib/pin~;
+#X obj 20 195 pddp/helplink iemmatrix/mtx_rand;
+#X obj 20 215 pddp/helplink iemlib/randomblock~;
+#X obj 20 235 pddp/helplink cyclone/drunk;
+#X text 20 75 Externals;
+#N canvas 404 60 483 507 (subpatch) 0;
+#X msg 144 296 bang;
+#X msg 144 321 1 30;
+#X obj 144 409 line~;
+#X obj 202 301 del 30;
+#X obj 61 433 *~;
+#X obj 62 485 dac~;
+#X obj 62 359 osc~ 880;
+#X obj 62 403 clip~ -1 1;
+#X obj 35 220 list split 1;
+#X obj 15 311 list;
+#X obj 35 244 t b a;
+#X obj 62 334 mtof;
+#X obj 62 457 *~ 0.07;
+#X obj 207 128 metro 50;
+#X obj 207 202 s \$0-cnv;
+#X obj 207 106 0;
+#X obj 207 84 del 3000;
+#X obj 310 170 f;
+#X obj 342 170 + 1;
+#X obj 35 12 r \$0-bng;
+#X obj 106 14 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 310 197 div 13;
+#X msg 310 314 color \$1 0;
+#X obj 242 105 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 279 86 sel 0;
+#X obj 279 107 -1;
+#X obj 279 130 t a;
+#X obj 207 155 f -1;
+#X msg 207 180 delta 0 \$1;
+#X obj 35 44 spigot 1;
+#X obj 35 76 t a b;
+#X obj 96 55 0;
+#X obj 130 55 1;
+#X obj 310 220 sel 3 4;
+#X msg 371 246 5 \$1;
+#X obj 371 268 -;
+#X msg 310 246 1;
+#X obj 340 245 f 2;
+#X obj 383 170 sel 1;
+#X msg 377 198 0;
+#X msg 411 199 2;
+#X obj 62 311 + 68;
+#X obj 15 284 del 170;
+#X text 167 14 IT'S A SECRET TO EVERYBODY.;
+#X obj 100 100 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X obj 56 106 loadbang;
+#X obj 35 174 list;
+#X obj 114 217 s \$0-randomize;
+#X obj 71 149 r \$0-new-secret;
+#X msg 56 128 7 1 0 8 12 16;
+#X obj 35 197 list prepend 11 10;
+#X obj 62 381 *~ 1.4;
+#X msg 202 323 0 400;
+#X connect 0 0 1 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 1;
+#X connect 3 0 52 0;
+#X connect 4 0 12 0;
+#X connect 6 0 51 0;
+#X connect 7 0 4 0;
+#X connect 8 0 10 0;
+#X connect 8 1 9 1;
+#X connect 9 0 8 0;
+#X connect 10 0 42 0;
+#X connect 10 1 0 0;
+#X connect 10 1 41 0;
+#X connect 11 0 6 0;
+#X connect 12 0 5 0;
+#X connect 12 0 5 1;
+#X connect 13 0 17 0;
+#X connect 13 0 27 0;
+#X connect 15 0 13 0;
+#X connect 15 0 17 1;
+#X connect 16 0 15 0;
+#X connect 16 0 23 0;
+#X connect 16 0 32 0;
+#X connect 17 0 18 0;
+#X connect 17 0 21 0;
+#X connect 18 0 17 1;
+#X connect 19 0 29 0;
+#X connect 20 0 29 0;
+#X connect 21 0 33 0;
+#X connect 22 0 14 0;
+#X connect 23 0 24 0;
+#X connect 23 0 38 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 1;
+#X connect 27 0 28 0;
+#X connect 28 0 14 0;
+#X connect 29 0 30 0;
+#X connect 30 0 13 0;
+#X connect 30 0 16 0;
+#X connect 30 0 46 0;
+#X connect 30 1 31 0;
+#X connect 31 0 29 1;
+#X connect 32 0 29 1;
+#X connect 33 0 36 0;
+#X connect 33 1 37 0;
+#X connect 33 2 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 22 0;
+#X connect 36 0 22 0;
+#X connect 37 0 22 0;
+#X connect 38 0 39 0;
+#X connect 38 1 40 0;
+#X connect 39 0 37 1;
+#X connect 40 0 37 1;
+#X connect 41 0 11 0;
+#X connect 42 0 9 0;
+#X connect 45 0 49 0;
+#X connect 46 0 47 0;
+#X connect 46 0 50 0;
+#X connect 48 0 46 1;
+#X connect 49 0 46 1;
+#X connect 50 0 8 0;
+#X connect 51 0 7 0;
+#X connect 52 0 2 0;
+#X coords 0 -1 1 1 15 15 2 100 100;
+#X restore 266 222 pd;
+#X obj 8 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 23 42 noise~;
+#X obj 23 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 38 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 53 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 68 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 83 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 98 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 113 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 128 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 173 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 254 180 cnv 15 40 24 empty empty empty 20 12 0 14 -179689 -66577
+0;
+#N canvas 271 87 451 558 (subpatch) 0;
+#X obj 27 181 t a b;
+#X obj 54 203 f;
+#X obj 54 228 + 1;
+#X obj 27 282 list prepend;
+#X obj 84 203 mod 3;
+#X msg 27 255 \$1\$2\$3\$4\$5\$6;
+#X obj 179 115 0;
+#X obj 27 358 list append;
+#X obj 48 331 list append;
+#X obj 27 40 t a b;
+#X obj 27 304 route 3 2 1;
+#X obj 24 119 cnv 15 110 24 empty empty empty 20 12 0 14 -179689 -66577
+0;
+#N canvas 222 70 378 565 list-scramble 0;
+#X obj 148 213 list;
+#X obj 205 294 sel;
+#X obj 148 181 t b a;
+#X obj 104 372 f;
+#X obj 205 267 list split 1;
+#X obj 294 267 t a;
+#X obj 77 318 spigot;
+#X obj 116 291 1;
+#X obj 128 318 0;
+#X obj 77 98 t b b b;
+#X obj 148 240 route bang;
+#X msg 152 415 adddollar \$1;
+#X msg 152 479 list \$2 \$4 \$1 \$3 \$6 \$5;
+#X obj 104 415 s \$0-l;
+#X obj 274 153 r \$0-l;
+#X obj 77 345 t b b;
+#X obj 40 373 f;
+#X obj 68 372 + 1;
+#X obj 18 442 moses;
+#X obj 45 415 r \$0-len;
+#X obj 159 -31 inlet;
+#X obj 193 60 list length;
+#X obj 236 95 s \$0-len;
+#X obj 45 468 b;
+#X obj 45 495 s \$0-end;
+#X obj 77 71 until;
+#X obj 120 71 r \$0-end;
+#X obj 210 38 s \$0-r;
+#X obj 25 318 r \$0-r;
+#X obj 223 138 r \$0-r;
+#X obj 25 345 0;
+#X obj 148 158 + 1;
+#X obj 252 395 r \$0-r;
+#X obj 159 -4 t a b a b;
+#X obj 3 73 s \$0-in;
+#X obj 96 450 r \$0-in;
+#X obj 152 506 outlet;
+#X obj 3 46 list;
+#X msg 252 417 set list;
+#X obj 274 190 list;
+#X obj 274 215 t a;
+#X obj 134 131 cnv 15 70 24 empty empty empty 20 12 0 14 -179689 -66577
+0;
+#X obj 148 134 random;
+#X connect 0 0 10 0;
+#X connect 1 0 8 0;
+#X connect 2 0 0 0;
+#X connect 2 1 1 1;
+#X connect 2 1 3 1;
+#X connect 3 0 11 0;
+#X connect 3 0 13 0;
+#X connect 4 0 1 0;
+#X connect 4 1 5 0;
+#X connect 5 0 4 0;
+#X connect 6 0 15 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 1;
+#X connect 9 0 6 0;
+#X connect 9 1 42 0;
+#X connect 9 2 7 0;
+#X connect 10 1 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 36 0;
+#X connect 14 0 39 0;
+#X connect 15 0 16 0;
+#X connect 15 1 3 0;
+#X connect 16 0 17 0;
+#X connect 17 0 16 1;
+#X connect 17 0 18 0;
+#X connect 18 1 23 0;
+#X connect 19 0 18 1;
+#X connect 20 0 33 0;
+#X connect 21 0 22 0;
+#X connect 21 0 42 1;
+#X connect 23 0 24 0;
+#X connect 25 0 9 0;
+#X connect 26 0 25 1;
+#X connect 28 0 30 0;
+#X connect 29 0 0 1;
+#X connect 29 0 39 1;
+#X connect 30 0 16 1;
+#X connect 31 0 2 0;
+#X connect 32 0 38 0;
+#X connect 33 0 37 0;
+#X connect 33 1 25 0;
+#X connect 33 2 21 0;
+#X connect 33 3 27 0;
+#X connect 35 0 12 0;
+#X connect 37 0 34 0;
+#X connect 38 0 12 0;
+#X connect 39 0 40 0;
+#X connect 39 0 0 1;
+#X connect 40 0 39 1;
+#X connect 42 0 31 0;
+#X restore 27 121 pd list-scramble;
+#X obj 27 464 t a b;
+#X obj 27 539 s pd-\$0-random-header;
+#X msg 72 489 clear \, donecanvasdialog 0 0 2 0 -1 1 1 200 18 0 0 \,
+obj 0 0 cnv 15 200 18 empty \$0-pddp.cnv.random-subheading empty 3
+12 0 14 -204280 -1 0;
+#X obj 112 20 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 27 67 b j e c t s \, e l a t e d \, r a n d o m;
+#X obj 27 17 r \$0-bng;
+#X obj 43 409 loadbang;
+#X msg 43 436 text 8 0 [random] Related Objects;
+#X msg 27 381 text 8 0 [\$1] R\$2 O\$3;
+#X text 98 408 <- triggers a dirty flag;
+#X obj 56 90 r \$0-randomize;
+#N canvas 0 0 450 300 filter-numbers 0;
+#X obj 121 55 inlet;
+#X obj 121 82 list trim;
+#X obj 121 109 route list;
+#X obj 178 136 list;
+#X obj 178 163 outlet;
+#X obj 121 190 s \$0-new-secret;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X restore 27 153 pd filter-numbers;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 0 3 1;
+#X connect 3 0 10 0;
+#X connect 4 0 1 1;
+#X connect 5 0 3 0;
+#X connect 6 0 1 1;
+#X connect 7 0 21 0;
+#X connect 8 0 7 1;
+#X connect 9 0 17 0;
+#X connect 9 1 6 0;
+#X connect 10 0 7 0;
+#X connect 10 1 8 0;
+#X connect 10 2 8 1;
+#X connect 12 0 24 0;
+#X connect 13 0 14 0;
+#X connect 13 1 15 0;
+#X connect 15 0 14 0;
+#X connect 16 0 9 0;
+#X connect 17 0 12 0;
+#X connect 18 0 9 0;
+#X connect 20 0 13 0;
+#X connect 21 0 13 0;
+#X connect 23 0 12 0;
+#X connect 24 0 0 0;
+#X restore 263 183 pd;
+#X obj 158 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 143 3 bng 15 250 50 0 \$0-bng empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#N canvas 0 0 450 300 \$0-random-header 0;
+#X obj 0 0 cnv 15 200 18 empty 0-pddp.cnv.random-subheading empty 3
+12 0 14 -204280 -1 0;
+#X text 8 0 [random] Related Objects;
+#X coords 0 -1 1 1 200 18 2 0 0;
+#X restore 11 1 pd \$0-random-header;
+#X obj 180 171 cnv 3 210 60 empty \$0-cnv empty 20 12 0 14 -262144
+-262144 0;
+#X restore 102 597 pd Related_objects;
+#X obj 78 261 cnv 17 3 85 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 397 float;
+#X obj 78 398 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 356 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 355 float;
+#X obj 481 3 random;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/random -text
+pdpedia: random;
+#X text 81 56 [random] outputs pseudorandom integers between 0 and
+N-1 where N is the creation argument or the value of the right inlet.
+;
+#X obj 84 122 random 100;
+#X obj 84 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 84 144 3 0 0 0 - - -;
+#X text 154 122 Generates random numbers between 0 and 99;
+#X obj 84 187 random 100;
+#X obj 84 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 84 210 3 0 0 0 - - -;
+#X floatatom 141 162 5 0 0 0 - - -;
+#X text 181 162 Changes the 'range' of random numbers.;
+#X text 98 260 bang;
+#X text 98 299 seed;
+#X text 168 299 - to specify the seed \, use the seed message followed
+by a float ( "seed 42" ).;
+#N canvas 65 83 428 454 About_seeds 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [random] About seeds;
+#X text 21 158 However \, "seeds" can be inputted into [random] by
+sending a message \, like below:;
+#X msg 24 221 seed 42;
+#X obj 90 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 90 245 random 1000;
+#X floatatom 90 265 3 0 0 0 - - -;
+#X obj 24 201 loadbang;
+#X text 21 294 Seeds are kept locally so that if two [random]s are
+seeded the same \, they will have the same output - as demonstrated
+below. Furthermore \, you can seed the same one twice to repeat the
+output.;
+#X msg 180 363 seed 42;
+#X obj 106 366 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 106 398 random 1000;
+#X floatatom 106 418 3 0 0 0 - - -;
+#X obj 180 343 loadbang;
+#X obj 180 398 random 1000;
+#X floatatom 180 418 3 0 0 0 - - -;
+#X text 233 363 Click again to repeat output.;
+#X text 20 38 Random numbers are generated via a complex equation which
+produces a pseudo-predictable sequence of numbers. Each [random] object's
+equation is provided with a "seed" which is really just one of the
+variables in the equation which produces the sequence. The "seed" is
+generated by Pd based on specific parameters in each patch which contains
+a [random] object. If more than one [random] object is contained within
+a single patch \, each gets a different "seed".;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 7 0 3 0;
+#X connect 9 0 11 0;
+#X connect 9 0 14 0;
+#X connect 10 0 11 0;
+#X connect 10 0 14 0;
+#X connect 11 0 12 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X restore 171 332 pd About_seeds;
+#N canvas 91 66 428 441 More_about_seeds 0;
+#X text 20 39 While the "default" seed for each [random] is usually
+very effective \, it may be necessary to find better - more unpredictable
+- more indeterminate ways to seed the object to produce a more pleasing
+result.;
+#X text 20 96 Here are some ideas that may improve the implementation
+of [random]:;
+#X floatatom 202 211 0 0 0 0 - - -;
+#X obj 44 138 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 202 182 / 100;
+#X floatatom 44 208 0 0 0 0 - - -;
+#X text 64 137 Both methods here produce random numbers between 0 and
+5;
+#X obj 202 157 random 501;
+#X obj 44 179 random 6;
+#X text 269 157 0 - 500;
+#X text 41 239 between 0 and 5;
+#X text 41 226 Produces whole numbers;
+#X text 20 136 1;
+#X text 20 283 2;
+#X obj 44 284 loadbang;
+#X obj 44 317 timer;
+#X obj 106 297 bng 15 250 50 0 empty empty Click_to_seed 0 -8 0 10
+-262144 -1 -1;
+#X msg 44 343 seed \$1;
+#X obj 106 381 bng 15 250 50 0 empty empty Click_for_output 0 -8 0
+10 -262144 -1 -1;
+#X floatatom 106 421 5 0 0 0 - - -;
+#X obj 106 400 random 42;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 240 226 between 0 and 5;
+#X text 240 212 produces fractional results;
+#X text 240 195 within range.;
+#X text 240 182 divide by 100 to keep output;
+#X text 206 298 "Time is on your side". Using the;
+#X text 206 314 [timer] object here (which is;
+#X text 206 343 interesting trick.;
+#X text 207 329 started via loadbang) is an;
+#X text 8 2 [random] More Info on Seeds;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 7 0 4 0;
+#X connect 8 0 5 0;
+#X connect 14 0 15 0;
+#X connect 15 0 17 0;
+#X connect 16 0 15 1;
+#X connect 17 0 20 0;
+#X connect 18 0 20 0;
+#X connect 20 0 19 0;
+#X restore 102 485 pd More_about_seeds;
+#N canvas 107 145 428 418 weighted_random_numbers 0;
+#X msg 23 118 bang;
+#X text 20 58 You can generate weighted random numbers from uniformly
+distributed ones. If you just want two possible outcomes with a varying
+probability for each one \, you can do as shown:;
+#X obj 23 144 random 100;
+#X obj 23 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 89 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 125 151 3 0 100 0 - - -;
+#X obj 23 177 moses 80;
+#X text 20 230 This outputs a number at left 80% of the time \, otherwise
+at right \, unless you override the "80" using the number box. You
+may extend this to more than two possible outcomes \, for instance
+like this:;
+#X msg 24 293 bang;
+#X obj 24 319 random 100;
+#X obj 24 372 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 114 373 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 24 347 moses 10;
+#X obj 114 348 moses 30;
+#X obj 182 373 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 22 388 10%;
+#X text 112 389 20%;
+#X text 184 388 70%;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [random] Weighted Random Numbers;
+#X text 62 117 <- click to test;
+#X text 156 150 <- change probablilty;
+#X text 64 293 <- click to test;
+#X text 20 25 There are many ways that [random] can be incorporated
+into other structures that change the qualities of the results.;
+#X connect 0 0 2 0;
+#X connect 2 0 6 0;
+#X connect 5 0 6 1;
+#X connect 6 0 3 0;
+#X connect 6 1 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 12 0;
+#X connect 12 0 10 0;
+#X connect 12 1 13 0;
+#X connect 13 0 11 0;
+#X connect 13 1 14 0;
+#X restore 102 507 pd weighted_random_numbers;
+#X text 11 23 pseudorandom integer generator;
+#X text 168 397 - the output is an integer between 0 and N-1.;
+#X text 168 442 - sets the initial value of N \, where the output ranges
+between 0 and N-1.;
+#X text 168 260 - a bang to [random] will output an integer between
+0 and N-1 \, where N is the creation argument or the value to the right
+inlet.;
+#X text 167 355 - a float to the right inlet sets N \, where the output
+ranges between 0 and N-1.;
+#X text 78 442 1) float;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 102 527 pddp/pddplink ../2.control.examples/19.random.pd -text
+doc/2.control.examples/19.random.pd;
+#X obj 102 542 pddp/pddplink ../2.control.examples/20.weighted-random.pd
+-text doc/2.control.examples/20.weighted-random.pd;
+#X obj 102 557 pddp/pddplink ../2.control.examples/21.markov.chain.pd
+-text doc/2.control.examples/21.markov.chain.pd;
+#X obj 102 572 pddp/pddplink ../2.control.examples/22.random-walk.pd
+-text doc/2.control.examples/22.random-walk.pd;
+#X connect 16 0 18 0;
+#X connect 17 0 16 0;
+#X connect 20 0 22 0;
+#X connect 21 0 20 0;
+#X connect 23 0 20 1;
diff --git a/externals/vanilla/realtime-help.pd b/externals/vanilla/realtime-help.pd
new file mode 100644
index 00000000..b52e5360
--- /dev/null
+++ b/externals/vanilla/realtime-help.pd
@@ -0,0 +1,160 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header realtime 3 12 0
+18 -204280 -1 0;
+#X obj 0 376 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 243 494 372 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 185 RELEASE_DATE 2009-06-12;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 KEYWORDS control time;
+#X text 12 45 DESCRIPTION ask operating system for elapsed real time
+;
+#X text 12 65 INLET_0 bang;
+#X text 12 85 INLET_1 bang;
+#X text 12 105 OUTLET_0 float;
+#X restore 500 597 pd META;
+#X obj 0 473 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 510 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 537 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 514 (none);
+#N canvas 107 323 428 268 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [realtime] Related Objects;
+#X obj 126 43 metro;
+#X obj 23 43 cputime;
+#X obj 81 43 timer;
+#X text 20 134 These objects are offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 19 183 The best places to find information about Pd's libraries
+is:;
+#X text 20 202 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 21 216 or;
+#X text 20 231 iem.kug.ac.at/pdb/;
+#X text 20 85 Related External Objects;
+#X obj 20 110 pddp/helplink iemlib/t3_timer;
+#X restore 102 597 pd Related_objects;
+#X obj 78 385 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 481 float;
+#X obj 78 482 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 429 cnv 17 3 35 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 466 3 realtime;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/realtime -text
+pdpedia: realtime;
+#X msg 119 160 bang;
+#X msg 94 138 bang;
+#X floatatom 94 204 0 0 0 0 - - -;
+#X text 166 206 Output is in milliseconds;
+#X text 129 138 Click here to start or reset;
+#X text 89 91 The [realtime] object measures elapsed "real" time as
+measured by your operating system.;
+#X obj 94 182 realtime;
+#X text 157 161 Click here to get elapsed real time. Click again...and
+again...to see periodic measurements from the start or reset time.
+;
+#X text 90 234 [realtime] works like essentially like a stop-watch.
+Once it starts \, you can continue to "poll" [realtime] to view the
+elapsed time.;
+#X text 90 281 The odd aspect about comparing [realtime] to a stop-watch
+is that a stop-watch can be stopped! [realtime] can only be started
+or reset. It cannot be stopped.;
+#N canvas 108 160 428 429 About_clocks 0;
+#X text 20 60 In a fantasy world \, computers could exist somehow beyond
+the restrictions of time and digital computation could be performed
+in ZERO time. However \, that is not the case. Instead \, every process
+within Pd and within your operating system requires at least a few
+nanoseconds of your CPU's time.;
+#X text 21 145 The [timer] object is like a clock that is not constrained
+to the regular laws of physics and the universal space-time continuum.
+It reports "time" measurements as only Pd can see them!;
+#X text 22 205 The [cputime] object is like a clock that measures how
+much time your CPU actually required to carry out your request. Keep
+in mind however that your CPU is busy doing many things simoultaneously
+\, so even though a process might take 5 minutes to complete \, your
+CPU does not pay full attention to that process for the entire 5 minutes.
+Instead \, it simply begins the process \, then refers back to that
+process from time to time until the it is complete. In other cases
+\, your CPU might require a full 5 minutes while Pd might report that
+merely a few milliseconds have passed. This type of discrepancy depends
+heavily on your computer's hardware and the type of processing it is
+performing.;
+#X text 21 369 The [realtime] object is as much like your own wrist
+watch as Pd can possibly manage. It measures time according to your
+operating system's internal clock.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [realtime] About Clocks;
+#X text 21 38 Why the discrepancies between clocks?;
+#X restore 102 569 pd About_clocks;
+#N canvas 105 140 428 400 Comparing_timers 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [realtime] Comparing timers in Pd;
+#X obj 45 296 time_measurements;
+#X obj 45 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 45 353 0 0 0 0 - - -;
+#X floatatom 114 353 0 0 0 0 - - -;
+#X floatatom 184 353 0 0 0 0 - - -;
+#X text 20 108 In the example below \, I've created an abstraction
+which will force each of Pd's stop-watches \, [timer] [cputime] and
+[realtime] to measure various processes and report the elapsed time.
+Click on each [bng] to begin the process and wait for the results.
+Notice the discrepancies in the results.;
+#X text 20 371 Logical Time;
+#X text 170 371 Real Time;
+#X text 104 371 CPU Time;
+#X obj 57 228 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 65 186 1 Measures elapsed time between two "bangs" from a [trigger]
+object.;
+#X text 77 220 2 Measures the amount of time Pd requires to turn on
+DSP and start an oscillator.;
+#X obj 97 260 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 118 252 3 Measures the amount of time Pd requires count to
+three...please wait for approximately 3 seconds.;
+#X text 20 39 As stated above \, [realtime] measures "real" or actual
+time. This value may be slightly different that CPU time or "logical"
+time. Pd offers two objects which measure CPU time and "logical" time.
+See the reference documents for those objects for more information.
+;
+#X connect 2 0 4 0;
+#X connect 2 1 5 0;
+#X connect 2 2 6 0;
+#X connect 3 0 2 0;
+#X connect 11 0 2 1;
+#X connect 14 0 2 2;
+#X restore 102 547 pd Comparing_timers;
+#X text 98 384 bang;
+#X text 98 428 bang;
+#X text 167 428 - a bang to the right inlet sends the elapsed time
+to the outlet. Unlike most other objects in pd \, this is the "hot"
+inlet \, i.e. \, it triggers the output.;
+#X text 168 384 - a bang to the left inlet resets the timer. Unlike
+most other objects in pd \, the left inlet of [realtime] is a "cold"
+inlet \, i.e. \, it does not trigger the output.;
+#X text 11 23 ask operating system for elapsed real time;
+#X text 168 481 - elapsed time in milliseconds.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 15 0 21 1;
+#X connect 16 0 21 0;
+#X connect 21 0 17 0;
diff --git a/externals/vanilla/rmstodb~-help.pd b/externals/vanilla/rmstodb~-help.pd
new file mode 100644
index 00000000..13b20787
--- /dev/null
+++ b/externals/vanilla/rmstodb~-help.pd
@@ -0,0 +1,79 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header rmstodb~ 3 12 0
+18 -204280 -1 0;
+#X obj 0 414 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 245 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal conversion acoustical_units;
+#X text 12 45 DESCRIPTION linear amplitude to dB for audio signals
+;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 451 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 514 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 423 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 491 (none);
+#N canvas 107 461 428 130 Related_objects 0;
+#X obj 187 37 dbtopow~;
+#X obj 253 37 powtodb~;
+#X obj 23 96 mtof;
+#X obj 68 96 ftom;
+#X obj 111 96 dbtorms;
+#X obj 176 96 rmstodb;
+#X obj 242 96 dbtopow;
+#X obj 304 96 powtodb;
+#X text 20 73 Control objects for conversion:;
+#X obj 23 37 mtof~;
+#X obj 70 37 ftom~;
+#X obj 118 37 dbtorms~;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [rmstodb~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 209 225 snapshot~;
+#X floatatom 209 256 0 0 0 0 - - -;
+#X floatatom 209 120 0 0 0 0 - - -;
+#X obj 209 144 sig~;
+#X obj 276 199 metro 100;
+#X obj 276 169 loadbang;
+#X text 98 422 signal;
+#X obj 78 460 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 460 signal;
+#X obj 445 20 pddp/pddplink http://wiki.puredata.info/en/dbtorms~ -text
+pdpedia: dbtorms~;
+#X obj 209 169 rmstodb~;
+#X obj 474 3 rmstodb~;
+#X text 11 23 linear amplitude to dB for audio signals;
+#X text 99 281 The [rmstodb~] object converts from linear ("RMS") amplitude
+to decibels \, so that an "RMS" of 1 corresponds to 100 dB. Zero amplitude
+(strictly speaking \, minus infinity dB) is clipped to zero dB.;
+#X text 99 518 This object takes an audio signal as input and output
+(and works sample by sample). Since it calls a library math function
+\, it may be much more expensive than other workaday tilde objects
+such as [*~] and [osc~] \, depending on your hardware and math library.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 10 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 20 0;
+#X connect 14 0 10 0;
+#X connect 15 0 14 0;
+#X connect 20 0 10 0;
diff --git a/externals/vanilla/rsqrt~-help.pd b/externals/vanilla/rsqrt~-help.pd
new file mode 100644
index 00000000..40faca0a
--- /dev/null
+++ b/externals/vanilla/rsqrt~-help.pd
@@ -0,0 +1,75 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header rsqrt~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 468 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 245 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION signal reciprocal square root;
+#X text 12 5 KEYWORDS signal;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 504 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 540 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 567 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 544 (none);
+#N canvas 61 484 428 105 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 43 sqrt~;
+#X obj 137 43 q8_sqrt~;
+#X obj 67 43 q8_rsqrt~;
+#X obj 197 43 sqrt;
+#X text 8 2 [rsqrt~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 476 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 513 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 478 3 rsqrt~;
+#X obj 452 20 pddp/pddplink http://wiki.puredata.info/en/rsqrt~ -text
+pdpedia: rsqrt~;
+#X obj 233 261 metro 500;
+#X obj 233 236 r metro;
+#X floatatom 217 157 0 0 0 0 - - -;
+#X floatatom 217 319 0 0 0 0 - - -;
+#X obj 217 294 snapshot~;
+#X floatatom 217 404 9 0 0 0 - - -;
+#X obj 217 346 t f f;
+#X obj 217 375 *;
+#X obj 217 183 sig~;
+#X obj 217 212 rsqrt~;
+#X text 98 475 signal;
+#X text 98 512 signal;
+#X text 11 23 signal reciprocal square root;
+#X text 168 475 - incoming signal.;
+#X text 168 512 - reciprocal square root of the incoming signal.;
+#X text 74 110 [rsqrt~] takes the approximate reciprocal square root
+of the incoming signal \, using a fast \, approximate algorithm which
+is probably accurate to about 120 dB (20 bits).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 17 0;
+#X connect 14 0 13 0;
+#X connect 14 0 13 0;
+#X connect 15 0 21 0;
+#X connect 16 0 19 0;
+#X connect 17 0 16 0;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 18 0;
+#X connect 21 0 22 0;
+#X connect 22 0 17 0;
diff --git a/externals/vanilla/savepanel-help.pd b/externals/vanilla/savepanel-help.pd
new file mode 100644
index 00000000..aaf1535f
--- /dev/null
+++ b/externals/vanilla/savepanel-help.pd
@@ -0,0 +1,70 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header savepanel 3 12 0
+18 -204280 -1 0;
+#X obj 0 334 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 243 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.24. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS control GUI;
+#X text 12 45 DESCRIPTION query the user for the name of a file to
+create;
+#X text 12 85 DATATYPE_OUT symbol;
+#X text 12 65 INLET_0 bang symbol;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 459 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 501 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 528 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 505 (none);
+#N canvas 104 480 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 43 openpanel;
+#X text 8 2 [savepanel] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 343 cnv 17 3 105 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 468 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 463 3 savepanel;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/savepanel
+-text pdpedia: savepanel;
+#X text 98 342 bang;
+#X text 98 467 symbol;
+#X text 168 467 - once chosen from the file browser \, the filename
+is output as a symbol.;
+#X text 99 532 [savepanel] handles filenames with spaces correctly.
+However \, if you try to save a filename with spaces in a message box
+\, for example \, it will be converted to a list the next time you
+open the patch.;
+#X msg 205 131 bang;
+#X obj 205 225 print;
+#X obj 205 200 savepanel;
+#X msg 249 131 symbol /tmp;
+#X text 98 387 symbol;
+#X text 168 387 - you can send a symbol to the inlet of [savepanel]
+to specify the initial directory (see above).;
+#X text 98 422 list;
+#X msg 249 153 symbol C:/;
+#X text 11 23 query the user for the name of a file to create;
+#X text 168 422 - a list will be truncated to the first element (if
+it is a symbol).;
+#X text 168 342 - when [savepanel] gets a bang \, a "Save As" file
+browser appears on the screen. If you choose a filename \, it appears
+on the outlet.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 17 0 19 0;
+#X connect 19 0 18 0;
+#X connect 20 0 19 0;
+#X connect 24 0 19 0;
diff --git a/externals/vanilla/sqrt~-help.pd b/externals/vanilla/sqrt~-help.pd
new file mode 100644
index 00000000..842e1254
--- /dev/null
+++ b/externals/vanilla/sqrt~-help.pd
@@ -0,0 +1,79 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header sqrt~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 437 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 246 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal;
+#X text 12 45 DESCRIPTION signal square root;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 65 INLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 502 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 539 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 567 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 543 (none);
+#N canvas 108 478 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 152 43 rsqrt~;
+#X obj 203 43 sqrt;
+#X obj 22 43 q8_sqrt~;
+#X obj 82 43 q8_rsqrt~;
+#X text 8 2 [sqrt~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 446 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 511 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 485 3 sqrt~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/sqrt~ -text
+pdpedia: sqrt~;
+#X obj 232 240 metro 500;
+#X floatatom 215 137 0 0 0 0 - - -;
+#X floatatom 216 297 0 0 0 0 - - -;
+#X obj 216 264 snapshot~;
+#X floatatom 216 380 9 0 0 0 - - -;
+#X obj 216 324 t f f;
+#X obj 216 351 *;
+#X obj 215 163 sig~;
+#X text 98 445 signal;
+#X obj 232 215 loadbang;
+#X text 98 465 float;
+#X obj 216 191 sqrt~;
+#X text 168 465 - a float may be sent to the inlet as long as no signal
+connections are made to [sqrt~].;
+#X text 98 510 signal;
+#X text 168 510 - the square root of the incoming signal is output.
+;
+#X text 11 23 signal square root;
+#X text 168 445 - an incoming signal.;
+#X text 20 72 [sqrt~] takes the approximate square root of the incoming
+signal \, using a fast \, approximate algorithm which is probably accurate
+to about 120 dB (20 bits).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 16 0;
+#X connect 14 0 20 0;
+#X connect 15 0 18 0;
+#X connect 16 0 15 0;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 19 0 17 0;
+#X connect 20 0 24 0;
+#X connect 22 0 13 0;
+#X connect 22 0 13 0;
+#X connect 24 0 16 0;
diff --git a/externals/vanilla/textfile-help.pd b/externals/vanilla/textfile-help.pd
new file mode 100644
index 00000000..21207bc2
--- /dev/null
+++ b/externals/vanilla/textfile-help.pd
@@ -0,0 +1,112 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header textfile 3 12 0
+18 -204280 -1 0;
+#X obj 0 429 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 243 494 344 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION read and write text files;
+#X text 12 65 INLET_0 bang rewind clear add add2 set read write print
+;
+#X text 12 85 OUTLET_0 list;
+#X text 12 105 OUTLET_1 bang;
+#X text 12 5 KEYWORDS control storage filesystem list_op anything_op
+;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 465 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 531 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 558 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 535 (none);
+#N canvas 73 482 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [textfile] Related Objects;
+#X obj 22 43 qlist;
+#X restore 102 597 pd Related_objects;
+#X obj 78 438 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 474 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 498 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 11 23 read and write text files;
+#X obj 435 20 pddp/pddplink http://wiki.puredata.info/en/textfile -text
+pdpedia: textfile;
+#X obj 465 3 textfile;
+#X obj 85 347 print done;
+#X text 98 497 bang;
+#X text 167 497 - this outlet gets a bang when you hit the end of the
+sequence.;
+#X text 98 473 list;
+#X text 168 473 - this outlet gets the lines in sequence.;
+#X text 168 437 (see the example above for messages accepted by [textfile])
+;
+#X msg 101 76 rewind;
+#X text 214 207 read a file;
+#X msg 101 208 read textfile.txt;
+#X text 152 75 go to beginning;
+#X msg 101 98 bang;
+#X text 152 97 output one line as a list;
+#X msg 101 230 write /tmp/textfile.txt;
+#X msg 101 252 write /tmp/textfile2.txt cr;
+#X msg 101 274 read textfile.txt cr;
+#X msg 101 120 clear;
+#X text 152 119 empty the object;
+#X text 208 142 add a message;
+#X msg 101 186 set 2 4 6 8;
+#X text 208 186 clear and then add one message;
+#X msg 101 142 add cis boom bah;
+#X msg 101 164 add2 bang;
+#X text 208 164 add an unterminated message;
+#X msg 101 296 print;
+#X text 145 296 debugging printout;
+#X text 248 229 write a file;
+#X text 274 311 mapped to semicolons.;
+#X obj 40 322 textfile;
+#X text 272 251 write a file \, terminating lines with a;
+#X text 273 266 carriage return (omitting semicolons).;
+#X text 272 281 You can read files this way \, too \, in;
+#X text 273 296 which case carriage returns are mapped;
+#N canvas 94 361 428 199 About_textfile 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [textfile] Related Objects;
+#X text 21 38 The textfile object reads and writes text files to and
+from memory. You can read a file and output sequential lines as messages
+\, or collect lines and write them out. You can use this object to
+generate "models" for Gem \, for instance.;
+#X text 20 91 To record textual messages and save them to a file \,
+first send "clear" to empty the sequence and "add" to add messages
+(terminated with semicolons.) The message \, "add2" adds a list of
+atoms without finishing with a semicolon in case you want to make variable-length
+messages.;
+#X text 20 155 You can also use this object simply for storing heterogeneous
+sequences of messages.;
+#X restore 101 567 pd About_textfile;
+#X obj 40 369 print message;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 21 0 42 0;
+#X connect 23 0 42 0;
+#X connect 25 0 42 0;
+#X connect 27 0 42 0;
+#X connect 28 0 42 0;
+#X connect 29 0 42 0;
+#X connect 30 0 42 0;
+#X connect 33 0 42 0;
+#X connect 35 0 42 0;
+#X connect 36 0 42 0;
+#X connect 38 0 42 0;
+#X connect 42 0 48 0;
+#X connect 42 1 15 0;
diff --git a/externals/vanilla/timer-help.pd b/externals/vanilla/timer-help.pd
new file mode 100644
index 00000000..b5d819a2
--- /dev/null
+++ b/externals/vanilla/timer-help.pd
@@ -0,0 +1,161 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header timer 3 12 0 18
+-204280 -1 0;
+#X obj 0 394 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 245 494 368 META 0;
+#X text 12 125 LIBRARY internal;
+#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 145 AUTHOR Miller Puckette;
+#X text 12 205 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 5 KEYWORDS control time;
+#X text 12 45 DESCRIPTION measure logical time;
+#X text 12 65 INLET_0 bang;
+#X text 12 85 INLET_1 bang;
+#X text 12 105 OUTLET_0 float;
+#X text 12 185 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 470 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 512 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 539 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 516 (none);
+#N canvas 73 345 428 246 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [timer] Related Objects;
+#X obj 135 35 metro;
+#X obj 72 35 realtime;
+#X obj 24 35 timer;
+#X obj 183 35 delay;
+#X text 22 162 The best places to find information about Pd's libraries
+is:;
+#X text 22 182 www.puredata.org and click on "Downloads" then "Software"
+;
+#X text 24 197 or;
+#X text 21 212 iem.kug.ac.at/pdb/;
+#X text 22 120 This object is only offered in Pd only if you have downloaded
+and properly installed the appropriate library. These objects may or
+may not exist in a single library.;
+#X text 22 70 Externals;
+#X obj 24 95 pddp/helplink iemlib/t3_timer;
+#X restore 102 597 pd Related_objects;
+#X obj 78 403 cnv 17 3 25 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 478 float;
+#X obj 78 479 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 434 cnv 17 3 25 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 168 478 - upon sending the "flush" message to the left inlet
+\, [bag] will output each value in the order it was received.;
+#X obj 482 3 timer;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/timer -text
+pdpedia: timer;
+#X msg 104 180 bang;
+#X msg 79 158 bang;
+#X obj 79 202 timer;
+#X floatatom 79 224 0 0 0 0 - - -;
+#X text 151 226 Output is in milliseconds;
+#X text 114 158 Click here to start or reset;
+#X text 74 111 The [timer] object measures elapsed logical time. Logical
+time moves forward as if all computation were instantaneous and as
+if all [delay] and [metro] objects were exact.;
+#X text 142 181 Click here to get elapsed logical time. Click again...and
+again...to see periodic measurements from the start or reset time.
+;
+#X text 77 250 NOTE: Unlike most other objects in Pd \, the right inlet
+of [timer] is the hot one (i.e. \, a bang to it triggers the output).
+;
+#X text 98 402 bang;
+#X text 168 402 - an initial "bang" to the left inlet starts the timer.
+Subsequent "bangs" reset the timer.;
+#X text 98 433 bang;
+#X text 167 433 - a bang to the right inlet causes the elapsed time
+to be output (in milliseconds).;
+#N canvas 94 193 428 419 Time_Objects 0;
+#X text 21 38 In a fantasy world \, computers could exist somehow beyond
+the restrictions of time and digital computation could be performed
+in ZERO time. However \, that is not the case. Instead \, every process
+within Pd and within your operating system requires at least a few
+nanoseconds of your CPU's time.;
+#X text 22 123 The [timer] object is like a clock that is not constrained
+to the regular laws of physics and the universal space-time continuum.
+It reports "time" measurements as only Pd can see them!;
+#X text 23 182 The [cputime] object is like a clock that measures how
+much time your CPU actually required to carry out your request. Keep
+in mind however that your CPU is busy doing many things simoultaneously
+\, so even though a process might take 5 minutes to complete \, your
+CPU does not pay full attention to that process for the entire 5 minutes.
+Instead \, it simply begins the process \, then refers back to that
+process from time to time until the it is complete. In other cases
+\, your CPU might require a full 5 minutes while Pd might report that
+merely a few milliseconds have passed. This type of discrepancy depends
+heavily on your computer's hardware and the type of processing it is
+performing.;
+#X text 24 341 The [realtime] object is as much like your own wrist
+watch as Pd can possibly manage. It measures time according to your
+operating system's internal clock.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [cputime] Why the Discrepencies Between Clocks?;
+#X restore 102 548 pd Time_Objects;
+#N canvas 73 72 428 495 Time_Measurements 0;
+#X text 21 38 [timer] works like essentially like a stop-watch. Once
+it starts \, you can continue to "poll" the [timer] to view the elapsed
+time.;
+#X text 20 135 As stated above \, [timer] measures "logical" time.
+This value may be slightly different that CPU time or "real" time.
+PD offers two objects which measure CPU time and "real" time. See the
+reference documents for those objects for more information.;
+#X obj 25 304 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 25 448 0 0 0 0 - - -;
+#X floatatom 110 448 0 0 0 0 - - -;
+#X floatatom 172 448 0 0 0 0 - - -;
+#X text 21 211 In the example below \, I've created an abstraction
+which will force each of Pd's stop-watches \, [timer] [cputime] and
+[realtime] to measure various processes and report the elapsed time.
+Click on each [bng] to begin the process and wait for the results.
+Notice the discrepancies in the results.;
+#X text 23 464 Logical Time;
+#X text 170 464 Real Time;
+#X text 109 464 CPU Time;
+#X obj 40 340 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 45 298 1 Measures elapsed time between two "bangs" from a [trigger]
+object.;
+#X text 60 332 2 Measures the amount of time Pd requires to turn on
+DSP and start an oscillator.;
+#X obj 84 372 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 21 85 The odd aspect about comparing [timer] to a stop-watch
+is that a stop-watch can be stopped! [timer] can only be started or
+reset. It cannot be stopped.;
+#X text 105 364 3 Measures the amount of time Pd requires count to
+three...please wait for approximately 3 seconds.;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [timer] Related Objects;
+#X obj 25 408 time_measurements;
+#X connect 2 0 18 0;
+#X connect 10 0 18 1;
+#X connect 13 0 18 2;
+#X connect 18 0 3 0;
+#X connect 18 1 4 0;
+#X connect 18 2 5 0;
+#X restore 102 572 pd Time_Measurements;
+#X text 11 23 measure logical time;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 16 0 18 1;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
diff --git a/externals/vanilla/toggle-help.pd b/externals/vanilla/toggle-help.pd
new file mode 100644
index 00000000..136bd9ea
--- /dev/null
+++ b/externals/vanilla/toggle-help.pd
@@ -0,0 +1,396 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header toggle 3 12 0 18
+-204280 -1 0;
+#X obj 0 308 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 51 244 494 344 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 165 AUTHOR Thomas Musil;
+#X text 12 185 WEBSITE;
+#X text 12 225 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 25 KEYWORDS control GUI nonlocal;
+#X text 12 65 DESCRIPTION gui-toggle between zero and a non-zero value
+;
+#X text 12 5 ALIAS tgl;
+#X text 12 85 INLET_0 float bang size nonzero init send receive label
+label_pos label_font color pos delta;
+#X text 12 125 OUTLET_0 float;
+#X text 12 205 RELEASE_DATE 2002;
+#X restore 500 597 pd META;
+#X obj 0 422 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 459 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 544 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 317 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 54 490 428 100 Related_objects 0;
+#X obj 20 53 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 29 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [tgl] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 431 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 346 167 and receive names. Right-;
+#X text 346 182 click and choose;
+#X text 345 198 "Properties" to set them \,;
+#X text 120 255 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move
+a selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 346 212 or change them with messages;
+#X text 346 226 (see the subpatch below);
+#X text 98 361 see the following subpatch for messages that change
+the gui-properties of [bng]:;
+#N canvas 60 6 428 618 Changing_GUI_Properties 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 212 37 no init;
+#X text 162 166 label;
+#X msg 212 56 init 0;
+#X msg 232 109 init 1;
+#X msg 162 186 label blabla;
+#X msg 172 236 label myToggle;
+#X text 303 37 change send name;
+#X text 22 166 change receive name;
+#X obj 212 133 s tgl_rcv;
+#X obj 304 133 s tgl_rcv;
+#X obj 22 262 s tgl_rcv;
+#X obj 162 262 s tgl_rcv;
+#X msg 304 58 send foo6_snd;
+#X msg 314 108 send tgl_snd;
+#X msg 42 213 receive tgl_rcv;
+#X obj 42 237 s tgl2_rcv;
+#X msg 22 188 receive tgl2_rcv;
+#N canvas 317 326 161 227 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-size 15 \; \$1-nonzero 1 \; \$1-lbl-x 17 \; \$1-lbl-y
+7 \; \$1-font-size 10 \; \$1-xpos 336 \; \$1-ypos 500;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 311 580 pd init;
+#X msg 22 109 size \$1;
+#X text 21 37 dimensions;
+#X obj 22 58 nbx 3 14 8 200 0 0 empty \$0-size empty 0 -8 0 12 -262144
+-1 -1 15 256;
+#X text 69 55 size;
+#X obj 22 133 s tgl_rcv;
+#X obj 112 58 nbx 3 14 -1e+37 1e+37 0 0 empty \$0-nonzero empty 0 -8
+0 12 -262144 -1 -1 1 256;
+#X obj 112 133 s tgl_rcv;
+#X text 111 37 nonzero-value;
+#X msg 112 109 nonzero \$1;
+#X text 224 75 init value;
+#X text 226 89 on loadbang;
+#X text 306 165 label position;
+#X text 20 302 font properties;
+#X msg 308 237 label_pos \$1 \$2;
+#X msg 22 374 label_font \$1 \$2;
+#X text 71 326 1.font(0-2);
+#X text 71 347 2.height;
+#X text 357 188 1.x-offset;
+#X text 357 209 2.y-offset;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-lbl-x empty
+0 -8 0 12 -262144 -1 -1 17 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-lbl-y empty
+0 -8 0 12 -262144 -1 -1 7 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 308 187 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 324 pd flash-time;
+#X text 162 302 preset-colors;
+#X text 301 302 RGB-colors;
+#X msg 162 409 color \$1 \$2 \$3;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 162 324 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 302 324 pd flash-time;
+#X text 211 326 1.bg;
+#X text 211 346 2.front;
+#X text 211 367 3.label;
+#X text 163 462 delta;
+#X text 21 462 position;
+#X msg 22 569 pos \$1 \$2;
+#X msg 164 569 delta \$1 \$2;
+#X obj 164 545 list;
+#X obj 164 484 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 70 483 1.x-position;
+#X text 70 505 2.y-position;
+#X text 243 483 1.x-delta;
+#X text 243 505 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 336 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 500 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 484 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 193 484 pd flash-time;
+#X obj 311 467 cnv 15 102 102 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 312 468 cnv 15 100 100 empty empty empty 20 12 0 14 -261682
+-66577 0;
+#X obj 308 262 s tgl_rcv;
+#X obj 22 399 s tgl_rcv;
+#X obj 162 434 s tgl_rcv;
+#X obj 22 594 s tgl_rcv;
+#X obj 164 594 s tgl_rcv;
+#X obj 336 500 tgl 15 0 tgl_snd tgl_rcv myToggle 17 7 0 10 -262144
+-1 -1 0 1;
+#X obj 337 538 nbx 3 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X text 6 2 [tgl] Changing Properties through Messages;
+#X connect 3 0 9 0;
+#X connect 4 0 9 0;
+#X connect 5 0 12 0;
+#X connect 6 0 12 0;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 16 0;
+#X connect 17 0 11 0;
+#X connect 19 0 23 0;
+#X connect 21 0 19 0;
+#X connect 24 0 27 0;
+#X connect 27 0 25 0;
+#X connect 32 0 62 0;
+#X connect 33 0 63 0;
+#X connect 38 0 32 0;
+#X connect 39 0 33 0;
+#X connect 42 0 64 0;
+#X connect 43 0 42 0;
+#X connect 44 0 42 0;
+#X connect 50 0 65 0;
+#X connect 51 0 66 0;
+#X connect 52 0 51 0;
+#X connect 53 0 52 0;
+#X connect 58 0 50 0;
+#X connect 59 0 52 1;
+#X connect 67 0 68 0;
+#X restore 170 394 pd Changing_GUI_Properties;
+#X text 168 463 - creating a [bng] without any arguments will set default
+values for all gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [bng] object with custom properties:;
+#X obj 406 3 tgl 15 0 foo6_rcv empty empty 17 7 0 10 -262144 -1 -1
+0 1;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/toggle -text
+pdpedia: toggle;
+#X text 426 0 abbreviation: [tgl];
+#X obj 302 78 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 302 153 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 302 103 s foo6_rcv;
+#X obj 302 127 r foo6_snd;
+#X obj 56 274 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 26 124 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X msg 29 65 33;
+#X obj 56 184 tgl 60 1 foo6_snd foo6_rcv big_toggle 66 27 2 13 -228992
+-4033 -34 1 1;
+#X msg 72 87 1;
+#X msg 79 109 0;
+#X floatatom 56 253 4 0 0 0 - - -;
+#X msg 63 65 -0.001;
+#X msg 183 123 set 1;
+#X msg 188 145 set 0;
+#X obj 20 159 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 95 253 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 175 101 set -0.23;
+#X obj 323 59 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 322 153 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 1
+1;
+#X msg 173 79 0 3 4.55;
+#X msg 165 57 0.22 0 -5.44;
+#X msg 323 79 set \$1;
+#X text 345 151 [tgl] has settable send;
+#N canvas 47 373 428 173 tgl_without_gui 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [tgl] Build a toggle without a gui;
+#X obj 58 87 == 0;
+#X floatatom 22 138 3 0 0 0 - - -;
+#X obj 22 43 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 96 86 toggle;
+#X obj 22 87 f 1;
+#X text 95 69 This works like;
+#X text 97 105 without the gui.;
+#X connect 2 0 6 1;
+#X connect 4 0 6 0;
+#X connect 6 0 2 0;
+#X connect 6 0 3 0;
+#X restore 100 552 pd tgl_without_gui;
+#X text 98 316 bang;
+#X text 168 316 - toggle between zero and the non-zero value.;
+#X text 98 331 float;
+#X text 98 346 list;
+#X text 168 346 - a list will be concatenated to the first item.;
+#X text 168 331 - output the value.;
+#X text 98 431 float;
+#N canvas 80 194 428 314 tgl_creation_arguments 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 2 [tgl] Creation Arguments and Dynamic Patching;
+#X text 19 38 "tgl" can be called with 14 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 21 127 It's unclear what the Unknown value is for- it is necessary
+to have it so you can specify the non-zero value.;
+#X text 22 164 Click the msg-box to dynamically create a tgl:;
+#X text 21 82 tgl creation arguments: Size Init sendName receiveName
+Label labelXOff labelYOff Font# fontSize bgColor foregroundColor LblColor
+initValue non-zeroValue;
+#X obj 23 231 s pd-tgl_creation_arguments;
+#X msg 23 186 obj 160 270 tgl 25 0 tgl-snd tgl-rcv Pleione 30 14 0
+20 5 18 13 0 1 \;;
+#X connect 7 0 6 0;
+#X restore 170 519 pd tgl_creation_arguments;
+#X text 11 23 gui-toggle between zero and a non-zero value;
+#X text 215 551 (c) musil@iem.kug.ac.at;
+#X text 257 564 IEM KUG;
+#X text 232 576 graz \, austria 2002;
+#X text 98 463 14;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 22 0 24 0;
+#X connect 25 0 23 0;
+#X connect 25 0 40 0;
+#X connect 27 0 29 0;
+#X connect 28 0 29 0;
+#X connect 29 0 32 0;
+#X connect 29 0 37 0;
+#X connect 30 0 29 0;
+#X connect 31 0 29 0;
+#X connect 32 0 26 0;
+#X connect 33 0 29 0;
+#X connect 34 0 29 0;
+#X connect 35 0 29 0;
+#X connect 36 0 29 0;
+#X connect 38 0 29 0;
+#X connect 39 0 43 0;
+#X connect 41 0 29 0;
+#X connect 42 0 29 0;
+#X connect 43 0 24 0;
diff --git a/externals/vanilla/vradio-help.pd b/externals/vanilla/vradio-help.pd
new file mode 100644
index 00000000..6b026a80
--- /dev/null
+++ b/externals/vanilla/vradio-help.pd
@@ -0,0 +1,387 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header vradio 3 12 0 18
+-204280 -1 0;
+#X obj 0 316 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 54 247 494 344 META 0;
+#X text 12 115 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 135 AUTHOR Thomas Musil;
+#X text 12 155 WEBSITE;
+#X text 12 195 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 KEYWORDS control storage GUI nonlocal;
+#X text 12 45 DESCRIPTION vertical column of gui-radio buttons;
+#X text 12 65 INLET_0 float bang size init number send receive label
+label_pos label_font color pos delta;
+#X text 12 95 OUTLET_0 float;
+#X text 12 175 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 438 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 492 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 571 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 325 cnv 17 3 85 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 83 461 428 129 Related_objects 0;
+#X obj 22 43 bang;
+#X obj 69 43 trigger;
+#X obj 145 43 until;
+#X obj 201 43 bang~;
+#X msg 257 43;
+#X obj 20 93 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 69 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vradio] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 447 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 291 174 and receive names. Right-;
+#X text 291 189 click and choose;
+#X text 290 205 "Properties" to set them \,;
+#X floatatom 292 63 5 0 5 0 - - -;
+#X floatatom 292 137 5 0 0 0 - - -;
+#X text 98 324 float;
+#X text 98 389 list;
+#X text 98 447 float;
+#X text 291 219 or change them with messages (see below);
+#X text 168 447 - output the number of the cell that has been clicked
+or sent to the inlet of [hradio]. Cell's are numbered from right to
+left \, in increasing order \, starting from zero.;
+#X text 97 270 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move a
+selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 11 21 vertical column of gui-radio buttons;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/vradio -text
+pdpedia: vradio;
+#X obj 529 45 vradio 15 1 0 8 empty empty empty 0 -8 0 10 -262144 -1
+-1 0;
+#X obj 91 48 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 11 230 4 0 0 0 - - -;
+#X obj 11 252 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X obj 126 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X msg 226 76 set \$1;
+#X floatatom 226 55 4 0 5 0 - - -;
+#X floatatom 114 48 4 0 9 0 - - -;
+#X obj 148 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 170 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 192 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 214 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 236 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 259 255 tgl 12 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X obj 59 230 print;
+#X obj 91 100 vradio 20 1 0 6 vradio-help-snd vradio-help-rcv vradio
+30 40 0 10 -4032 -86277 -1 0;
+#X msg 161 71 2;
+#X msg 161 48 6;
+#X obj 126 230 route 0 1 2 3 4 5;
+#X obj 292 84 s vradio-help-rcv;
+#X obj 292 114 r vradio-help-snd;
+#X text 290 158 [vradio] has settable send;
+#N canvas 83 190 428 345 vradio-creation-arguments 0;
+#X obj 23 208 s pd-vradio-creation-arguments;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vradio] Creation Arguments and Dynamic Patching;
+#X text 20 38 [vradio] can be called with 15 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 20 81 [vradio] creation arguments: Size Unknown Init Number
+sendName receiveName Label labelXOff labelYOff font# fontSize bgColor
+foregroundColor labelColor initValue;
+#X text 20 125 For example \, click the msg-box to dynamically create
+a [vradio]:;
+#X msg 23 166 obj 180 260 vradio 25 1 0 3 empty empty Taygete -10 -10
+0 12 6 25 13 0 \;;
+#X connect 6 0 0 0;
+#X restore 170 547 pd vradio-creation-arguments;
+#X text 168 389 - a list is truncated to the first element.;
+#X text 168 324 - a float highlights the corresponding button and outputs
+the button number. Buttons are numbered from top to bottom \, starting
+from zero. For incoming numbers that are out of range \, the nearest
+button number is selected.;
+#N canvas 66 12 428 601 Setting_vradio_properties_through_messages
+0;
+#X text 111 33 no init;
+#X text 175 160 label;
+#X msg 175 180 label blabla;
+#X msg 121 104 init 1;
+#X msg 111 52 init 0;
+#X text 120 71 init value;
+#X text 121 85 on loadbang;
+#X text 317 33 change send name;
+#X text 23 160 change receive name;
+#X obj 38 233 s z_rcv;
+#X msg 21 182 receive z_rcv;
+#N canvas 313 106 164 268 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 349 \; \$1-ypos 432 \; \$1-xlabel 0 \; \$1-ylabel
+-8 \; \$1-number 8 \; \$1-font-size 10 \; \$1-size 15 \; \$1-font-size
+10 \; \$1-font 0 \; \$1-bg 0 \; \$1-front 12 \; \$1-label 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 315 389 pd init;
+#X text 111 33 no init;
+#X msg 121 104 init 1;
+#X msg 111 52 init 0;
+#X text 120 71 init value;
+#X text 121 85 on loadbang;
+#X floatatom 204 52 3 0 20 0 - #0-number -;
+#X text 204 33 number (of cells);
+#X msg 204 104 number \$1;
+#X obj 204 128 s vradio_rcv;
+#X obj 316 128 s vradio_rcv;
+#X obj 21 259 s vradio_rcv;
+#X obj 175 259 s vradio_rcv;
+#X msg 316 56 send vradio1_snd;
+#X msg 325 104 send vradio_snd;
+#X msg 38 208 receive vradio_rcv;
+#X msg 185 234 label myVradio;
+#X msg 21 104 size \$1;
+#X text 20 33 dimensions;
+#X obj 21 54 nbx 3 14 8 200 0 0 empty \$0-size empty 0 -8 0 12 -262144
+-1 -1 15 256;
+#X text 71 51 size;
+#X obj 21 128 s vradio_rcv;
+#X text 314 160 label position;
+#X text 19 287 font properties;
+#X msg 316 234 label_pos \$1 \$2;
+#X msg 21 355 label_font \$1 \$2;
+#X text 70 311 1.font(0-2);
+#X text 70 332 2.height;
+#X text 365 183 1.x-offset;
+#X text 365 204 2.y-offset;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 -8 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 316 182 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 21 309 pd flash-time;
+#X text 175 287 preset-colors;
+#X text 314 287 RGB-colors;
+#X msg 175 391 color \$1 \$2 \$3;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 175 309 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 315 306 pd flash-time;
+#X text 224 311 1.bg;
+#X text 224 331 2.front;
+#X text 224 352 3.label;
+#X text 174 448 delta;
+#X text 20 448 position;
+#X msg 21 545 pos \$1 \$2;
+#X msg 175 545 delta \$1 \$2;
+#X obj 175 521 list;
+#X obj 175 470 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 69 469 1.x-position;
+#X text 69 491 2.y-position;
+#X text 254 469 1.x-delta;
+#X text 254 491 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 349 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 432 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 21 470 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 204 470 pd flash-time;
+#X obj 317 415 cnv 15 102 177 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 318 416 cnv 15 100 175 empty empty empty 20 12 0 14 -261682
+-66577 0;
+#X floatatom 350 567 5 0 0 0 - - -;
+#X obj 349 432 vradio 15 1 0 8 vradio_snd vradio_rcv myVradio 0 -8
+0 10 -262144 -33289 -33289 0;
+#X obj 316 259 s vradio_rcv;
+#X obj 21 380 s vradio_rcv;
+#X obj 175 416 s vradio_rcv;
+#X obj 21 570 s vradio_rcv;
+#X obj 175 570 s vradio_rcv;
+#X obj 111 128 s vradio_rcv;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vradio] Set Properties through Messages;
+#X connect 2 0 23 0;
+#X connect 3 0 72 0;
+#X connect 4 0 72 0;
+#X connect 10 0 22 0;
+#X connect 17 0 19 0;
+#X connect 19 0 20 0;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 9 0;
+#X connect 27 0 23 0;
+#X connect 28 0 32 0;
+#X connect 30 0 28 0;
+#X connect 35 0 67 0;
+#X connect 36 0 68 0;
+#X connect 41 0 35 0;
+#X connect 42 0 36 0;
+#X connect 45 0 69 0;
+#X connect 46 0 45 0;
+#X connect 47 0 45 0;
+#X connect 53 0 70 0;
+#X connect 54 0 71 0;
+#X connect 55 0 54 0;
+#X connect 56 0 55 0;
+#X connect 61 0 53 0;
+#X connect 62 0 55 1;
+#X connect 66 0 65 0;
+#X restore 100 410 pd Setting_vradio_properties_through_messages;
+#X text 98 496 15;
+#X text 168 496 - creating an [vradio] without any arguments sets default
+values for its gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [vradio] object with custom properties:
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 372 bang;
+#X text 168 372 - output the current value.;
+#X connect 13 0 42 0;
+#X connect 24 0 38 0;
+#X connect 25 0 26 0;
+#X connect 28 0 38 0;
+#X connect 29 0 28 0;
+#X connect 30 0 38 0;
+#X connect 38 0 25 0;
+#X connect 38 0 37 0;
+#X connect 38 0 41 0;
+#X connect 39 0 38 0;
+#X connect 40 0 38 0;
+#X connect 41 0 27 0;
+#X connect 41 1 31 0;
+#X connect 41 2 32 0;
+#X connect 41 3 33 0;
+#X connect 41 4 34 0;
+#X connect 41 5 35 0;
+#X connect 41 6 36 0;
+#X connect 43 0 14 0;
diff --git a/externals/vanilla/vslider-help.pd b/externals/vanilla/vslider-help.pd
new file mode 100644
index 00000000..8e88d26d
--- /dev/null
+++ b/externals/vanilla/vslider-help.pd
@@ -0,0 +1,434 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header vslider 3 12 0 18
+-204280 -1 0;
+#X obj 0 306 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 52 226 494 387 META 0;
+#X text 12 135 LIBRARY internal;
+#X text 12 175 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 45 LICENSE SIBSD;
+#X text 12 155 AUTHOR Miller Puckette;
+#X text 12 215 HELP_PATCH_AUTHORS This help patch was updated for Pd
+version 0.35 test 28 by Dave Sabine as part of a project called pddp
+proposed by Krzysztof Czaja to build comprehensive documentation for
+Pd. Jonathan Wilkes revised the patch to conform to the PDDP template
+for Pd version 0.42.;
+#X text 12 25 KEYWORDS control storage GUI nonlocal;
+#X text 12 65 DESCRIPTION vertical gui-slider;
+#X text 12 5 ALIAS vsl;
+#X text 12 85 INLET_0 float bang size range log init steady receive
+send label label_pos label_font color pos delta;
+#X text 12 115 OUTLET_0 float;
+#X text 12 195 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 436 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 490 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 574 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 315 cnv 17 3 106 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 68 461 428 129 Related_objects 0;
+#X obj 20 53 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 18 29 All iem-gui objects:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vslider] Related Objects;
+#X restore 100 597 pd Related_objects;
+#X obj 78 445 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 314 float;
+#X text 98 445 float;
+#X text 54 259 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move a
+selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 168 445 - when the slider value is changed by clicking \, dragging
+\, or sending a float to the inlet \, the new slider value is sent
+to the outlet.;
+#N canvas 53 19 464 608 Setting_slider_properties_through_messages
+0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 12 189 1 0 1 0 - #0-soc -;
+#X text 324 35 no init;
+#X text 9 170 steady-on-click;
+#X text 11 309 label;
+#X msg 11 329 label blabla;
+#X msg 324 54 init 0;
+#X msg 12 222 steady \$1;
+#X msg 235 74 lin;
+#X msg 245 106 log;
+#X text 231 35 linear/;
+#X text 231 50 logarithmical;
+#X text 333 74 init value;
+#X text 334 89 on loadbang;
+#X text 235 170 change send name;
+#X text 108 170 change receive name;
+#X obj 122 245 s z_rcv;
+#X msg 110 192 receive z_rcv;
+#X msg 21 381 label mySlider;
+#X msg 122 222 receive hsl_rcv;
+#X msg 237 193 send hsl1_snd;
+#X msg 246 222 send hsl_snd;
+#N canvas 234 255 161 292 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 391 \; \$1-ypos 200 \; \$1-xlabel -2 \; \$1-ylabel
+-8 \; \$1-soc 1 \; \$1-font-size 10 \; \$1-width 15 \; \$1-height 128
+\; \$1-bottom 0 \; \$1-top 127 \; \$1-bg 0 \; \$1-front 12 \; \$1-label
+12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 400 586 pd init;
+#X msg 334 110 init 1;
+#X msg 12 106 size \$1 \$2;
+#X text 61 57 1.width;
+#X text 61 78 2.height;
+#X text 173 57 1.bottom;
+#X text 173 78 2.top;
+#X text 121 35 output-range;
+#X msg 124 106 range \$1 \$2;
+#X text 242 308 font properties;
+#X msg 244 380 label_font \$1 \$2;
+#X text 293 330 1.font(0-2);
+#X text 293 351 2.height;
+#X text 120 309 label position;
+#X msg 122 380 label_pos \$1 \$2;
+#X text 171 330 1.x-offset;
+#X text 171 351 2.y-offset;
+#X obj 375 184 cnv 15 67 172 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 376 185 cnv 15 65 170 empty empty empty 20 12 0 14 -261682 -66577
+0;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-width empty
+0 -8 0 12 -262144 -1 -1 15 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-height empty
+0 -8 0 12 -262144 -1 -1 128 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 12 56 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-bottom empty
+0 -8 0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-top empty 0
+-8 0 12 -262144 -1 -1 127 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 124 56 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 -2 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 -8 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 122 329 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 244 329 pd flash-time;
+#X text 9 449 preset-colors;
+#X text 105 449 RGB-colors;
+#X msg 12 555 color \$1 \$2 \$3;
+#N canvas 364 205 306 317 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 33 237 pack 0 0 0;
+#X obj 120 197 t b a;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 0 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-front empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 103 144 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 2;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 3 0;
+#X coords 0 -1 1 1 48 62 2 100 100;
+#X restore 12 470 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 96 410 route 0 1 2;
+#X obj 96 497 pack 0 0 0;
+#X obj 115 456 t b a;
+#X obj 168 455 t b a;
+#X obj 104 124 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X text 120 137 2.front;
+#X text 120 153 3.label;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 10 2 13 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 11 0;
+#X connect 13 1 11 2;
+#X connect 14 0 9 1;
+#X connect 18 0 5 0;
+#X connect 19 0 6 0;
+#X connect 20 0 7 0;
+#X coords 0 -1 1 1 102 74 2 100 100;
+#X restore 109 470 pd flash-time;
+#X text 61 472 1.bg;
+#X text 61 492 2.front;
+#X text 61 513 3.label;
+#X text 318 449 delta;
+#X text 218 449 position;
+#X msg 219 541 pos \$1 \$2;
+#X msg 319 541 delta \$1 \$2;
+#X obj 319 518 list;
+#X obj 319 471 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 398 470 1.x-delta;
+#X text 398 492 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 391 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 200 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 219 471 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 348 471 pd flash-time;
+#X floatatom 392 337 5 0 0 0 - - -;
+#X text 11 36 dimensions;
+#X text 267 470 1.x-pos;
+#X text 267 492 2.y-pos;
+#X obj 12 135 s vsl_rcv;
+#X obj 124 135 s vsl_rcv;
+#X obj 235 135 s vsl_rcv;
+#X obj 324 135 s vsl_rcv;
+#X obj 12 270 s vsl_rcv;
+#X obj 110 270 s vsl_rcv;
+#X obj 237 270 s vsl_rcv;
+#X obj 11 409 s vsl_rcv;
+#X obj 122 409 s vsl_rcv;
+#X obj 244 405 s vsl_rcv;
+#X obj 12 580 s vsl_rcv;
+#X obj 219 566 s vsl_rcv;
+#X obj 319 566 s vsl_rcv;
+#X obj 391 200 vsl 15 128 0 127 0 0 vsl_snd vsl_rcv mySlider -2 -8
+0 10 -262144 -33289 -33289 0 1;
+#X text 8 2 [vslider] Set Properties through Messages;
+#X connect 1 0 7 0;
+#X connect 5 0 74 0;
+#X connect 6 0 70 0;
+#X connect 7 0 71 0;
+#X connect 8 0 69 0;
+#X connect 9 0 69 0;
+#X connect 17 0 72 0;
+#X connect 18 0 74 0;
+#X connect 19 0 16 0;
+#X connect 20 0 73 0;
+#X connect 21 0 73 0;
+#X connect 23 0 70 0;
+#X connect 24 0 67 0;
+#X connect 30 0 68 0;
+#X connect 32 0 76 0;
+#X connect 36 0 75 0;
+#X connect 41 0 24 0;
+#X connect 42 0 30 0;
+#X connect 43 0 36 0;
+#X connect 44 0 32 0;
+#X connect 47 0 77 0;
+#X connect 48 0 47 0;
+#X connect 49 0 47 0;
+#X connect 55 0 78 0;
+#X connect 56 0 79 0;
+#X connect 57 0 56 0;
+#X connect 58 0 57 0;
+#X connect 61 0 55 0;
+#X connect 62 0 57 1;
+#X connect 80 0 63 0;
+#X restore 101 406 pd Setting_slider_properties_through_messages;
+#X text 430 3 abbreviation: [vsl];
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/vsl -text
+pdpedia: vsl;
+#X obj 57 213 ftom;
+#X floatatom 57 237 9 0 0 0 - - -;
+#X floatatom 104 213 9 0 0 0 - - -;
+#X floatatom 57 84 9 0 0 0 - - -;
+#X obj 57 106 mtof;
+#X text 97 177 (0.01 pixels);
+#X text 99 148 shift-click & drag;
+#X text 99 163 for fine-tuning;
+#X obj 57 132 vsl 15 73 55 3520 1 1 goo4_snd goo4_rcv log.freq. 20
+6 0 10 -261681 -260818 -90881 2244 1;
+#X text 380 170 names. Right-click and;
+#X text 380 155 send and receive names.;
+#X text 379 186 choose "Properties" to;
+#X text 380 200 set them \, or change them;
+#X text 380 214 with messages (see below);
+#X floatatom 250 216 4 0 0 0 - - -;
+#X msg 309 69 set \$1;
+#X floatatom 270 47 4 0 0 0 - - -;
+#X obj 250 240 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144
+-1 -1;
+#X obj 250 47 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1
+-1;
+#X floatatom 309 48 4 0 0 0 - - -;
+#X floatatom 310 191 4 0 0 0 - - -;
+#X floatatom 309 100 4 0 0 0 - - -;
+#X obj 250 102 vsl 15 101 100 300 0 1 foo3_snd foo3_rcv empty 8 -8
+0 10 -225280 -1109 -1 5350 1;
+#X obj 309 143 s foo3_rcv;
+#X obj 310 169 r foo3_snd;
+#X msg 309 121 set \$1;
+#X obj 294 240 print;
+#N canvas 276 200 290 224 once 0;
+#X obj 38 24 inlet;
+#X obj 38 91 outlet;
+#X obj 38 69 t a b;
+#X obj 38 47 spigot 1;
+#X obj 97 47 0;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 1;
+#X restore 294 216 pd once;
+#X text 98 374 Special messages can be sent to [vslider] to change
+its properties:;
+#N canvas 65 102 428 434 vsl-creation-arguments 0;
+#X text 22 226 For example \, click the msg-box to dynamically create
+a hsl:;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vslider] Creation Arguments and Dynamic Patching;
+#X obj 23 290 s pd-vsl-creation-arguments;
+#X text 21 38 "vsl" can be called with 18 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X text 21 85 vsl creation arguments: xSize ySize rangeBtm rangeTop
+Logarithmic Init sendName receiveName Label labelXOff labelYOff Font#
+fontSize bgColor foregroundColor lblColor sliderPosition steadyOnClick
+;
+#X text 22 143 note: sliderPosition is not the same as the initialization
+value. To dynamically instantiate an hsl that initializes with a desired
+value \, save an hsl in a patch and view it in a text editor to get
+the right value for sliderPosition. Or \, refer to hslider_set in g_vslider.c
+for conversion between sliderPosition and slider value.;
+#X msg 23 248 obj 150 335 vsl 75 75 -1 1 0 1 send receive Merope 15
+-9 0 12 7 13 21 4400 0;
+#X connect 7 0 3 0;
+#X restore 170 546 pd vsl-creation-arguments;
+#X text 379 139 vslider has settable;
+#X text 11 21 vertical gui-slider;
+#X text 98 494 18;
+#X text 168 494 - creating a [vslider] object without arguments sets
+default values for its gui-properties. See the subpatch below to learn
+how to dynamically instantiate a [bng] object with custom properties:
+;
+#X text 168 314 - a float updates the slider value and is sent to the
+outlet.;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X text 98 356 list;
+#X text 168 356 - a list is truncated to the first element.;
+#X text 98 339 bang;
+#X text 168 339 - output the current slider value.;
+#X connect 17 0 18 0;
+#X connect 20 0 21 0;
+#X connect 21 0 25 0;
+#X connect 25 0 17 0;
+#X connect 25 0 19 0;
+#X connect 31 0 34 0;
+#X connect 32 0 39 0;
+#X connect 33 0 39 0;
+#X connect 35 0 39 0;
+#X connect 36 0 32 0;
+#X connect 38 0 42 0;
+#X connect 39 0 31 0;
+#X connect 39 0 44 0;
+#X connect 41 0 37 0;
+#X connect 42 0 40 0;
+#X connect 44 0 43 0;
diff --git a/externals/vanilla/vu-help.pd b/externals/vanilla/vu-help.pd
new file mode 100644
index 00000000..1615cdb2
--- /dev/null
+++ b/externals/vanilla/vu-help.pd
@@ -0,0 +1,374 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header vu 3 12 0 18 -204280
+-1 0;
+#X obj 0 287 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 53 246 494 344 META 0;
+#X text 12 155 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 175 AUTHOR Thomas Musil;
+#X text 12 195 WEBSITE;
+#X text 12 5 KEYWORDS control GUI nonlocal;
+#X text 12 45 DESCRIPTION gui-vu-meter-display;
+#X text 12 65 INLET_0 float list bang size scale receive label label_pos
+label_font color pos delta;
+#X text 12 95 INLET_1 float;
+#X text 12 115 OUTLET_0 float;
+#X text 12 135 OUTLET_1 float;
+#X text 12 215 RELEASE_DATE 2002;
+#X text 12 235 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X restore 500 597 pd META;
+#X obj 0 435 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 489 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 572 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#N canvas 81 462 428 126 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vu] Related Objects;
+#X obj 22 91 x_all_guis bng tgl vsl hsl hradio vradio vu cnv nbx;
+#X text 20 67 All iem-gui objects:;
+#X obj 23 43 env~;
+#X restore 102 597 pd Related_objects;
+#X obj 78 296 cnv 17 3 90 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X text 98 295 float;
+#X obj 78 444 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 396 cnv 17 3 30 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X obj 465 20 pddp/pddplink http://wiki.puredata.info/en/vu -text pdpedia:
+vu;
+#X text 98 312 list;
+#X text 98 396 float;
+#X text 98 412 list;
+#X text 168 312 - a 2-item list will be distributed to the two inlets
+;
+#X text 98 444 float;
+#X obj 78 466 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 466 float;
+#N canvas 76 117 428 416 vu-creation-arguments 0;
+#X obj 25 237 s pd-vu-creation-arguments;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 8 2 [vu] Creation Arguments;
+#X text 22 163 For example \, click the msg-box to dynamically create
+a [vu]:;
+#X text 23 98 [vu] creation arguments: xSize ySize receiveName Label
+labelXOff labelYOff font# fontSize bgColor labelColor Scale Unknown(0)
+;
+#X text 22 38 [vu] can be called with 12 creation arguments. These
+are not "optional" - all parameters must be filled or the gui-bng will
+not instantiate correctly.;
+#X msg 25 195 obj 160 280 vu 15 120 fff Elektra -15 -12 0 12 26 12
+0 0;
+#X connect 6 0 0 0;
+#X restore 170 549 pd vu-creation-arguments;
+#N canvas 75 10 428 611 Changing_GUI_Properties 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X floatatom 130 62 1 0 1 0 - #0-scale -;
+#X text 124 38 display scale;
+#X msg 130 116 scale \$1;
+#X obj 130 141 s vu_rcv;
+#X text 213 38 change receive name;
+#X obj 215 141 s vu_rcv;
+#X msg 215 62 receive vu12_rcv;
+#X obj 231 114 s vu12_rcv;
+#X msg 231 89 receive vu_rcv;
+#X msg 339 61 label blabla;
+#X obj 339 141 s vu_rcv;
+#X text 339 38 label;
+#N canvas 378 326 151 256 init 0;
+#X obj 16 11 loadbang;
+#X obj 16 42 f \$0;
+#X msg 16 73 \; \$1-xpos 330 \; \$1-ypos 245 \; \$1-scale 1 \; \$1-xlabel
+-1 \; \$1-ylabel -8 \; \$1-label 12 \; \$1-font-size 10 \; \$1-width
+15 \; \$1-height 120 \; \$1-font 0 \; \$1-bg 12 \; \$1-bg 12;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 352 404 pd init;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-width empty
+0 -8 0 12 -262144 -1 -1 15 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-height empty
+0 -8 0 12 -262144 -1 -1 120 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 59 pd flash-time;
+#X text 19 38 dimensions;
+#X text 71 61 1.width;
+#X text 71 81 2.height;
+#X msg 22 116 size \$1 \$2;
+#X obj 22 141 s vu_rcv;
+#X text 20 175 label position;
+#X text 152 175 font properties;
+#X msg 22 250 label_pos \$1 \$2;
+#X msg 154 250 label_font \$1 \$2;
+#X text 203 199 1.font(0-2);
+#X text 203 220 2.height;
+#X text 71 198 1.x-offset;
+#X text 71 219 2.y-offset;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xlabel empty
+0 -8 0 12 -262144 -1 -1 -1 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ylabel empty
+0 -8 0 12 -262144 -1 -1 -8 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 197 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 0 2 0 0 \$0-dummy \$0-font empty 0 -8 0 12
+-262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-font-size empty
+0 -8 0 12 -262144 -1 -1 10 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 154 197 pd flash-time;
+#X text 22 310 preset-colors;
+#X text 131 310 RGB-colors;
+#N canvas 364 205 169 292 flash-time 0;
+#X obj 69 196 t b a;
+#X obj 33 262 outlet;
+#X obj 103 104 nbx 3 14 0 29 0 0 \$0-dummy \$0-bg empty 0 -8 0 12 -262144
+-1 -1 12 256;
+#X obj 103 124 nbx 3 14 0 29 0 0 \$0-dummy \$0-label empty 0 -8 0 12
+-262144 -1 -1 12 256;
+#X obj 33 237 pack 0 0;
+#X connect 0 0 4 0;
+#X connect 0 1 4 1;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 332 pd flash-time;
+#N canvas 0 0 306 317 flash-time 0;
+#X obj 96 521 outlet;
+#X obj 162 230 t b f;
+#X obj 96 268 +;
+#X obj 96 293 t b f;
+#X obj 96 324 +;
+#X obj 19 208 * -65536;
+#X obj 96 208 * -256;
+#X obj 162 208 * -1;
+#X obj 96 355 - 1;
+#X obj 96 385 list prepend 0;
+#X obj 115 456 t b a;
+#X obj 104 124 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X text 120 120 1.bg;
+#X obj 103 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-r empty 0 -8 0 10 -262144
+-258113 -1 0 256;
+#X obj 133 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-g empty 0 -8 0 10 -262144
+-13381 -1 0 256;
+#X obj 163 105 nbx 3 14 0 255 0 0 \$0-dummy \$0-b empty 0 -8 0 10 -262144
+-4160 -1 0 256;
+#X text 120 137 2.label;
+#X obj 96 410 route 0 1;
+#X obj 96 497 pack 0 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 4 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 17 0;
+#X connect 10 0 18 0;
+#X connect 10 1 18 1;
+#X connect 11 0 9 1;
+#X connect 13 0 5 0;
+#X connect 14 0 6 0;
+#X connect 15 0 7 0;
+#X connect 17 0 18 0;
+#X connect 17 1 10 0;
+#X connect 18 0 0 0;
+#X coords 0 -1 1 1 102 58 2 100 100;
+#X restore 132 332 pd flash-time;
+#X text 71 334 1.bg;
+#X text 71 354 2.label;
+#X msg 22 407 color \$1 \$2;
+#X text 153 463 delta;
+#X text 21 463 position;
+#X msg 22 560 pos \$1 \$2;
+#X msg 154 560 delta \$1 \$2;
+#X obj 154 536 list;
+#X obj 154 485 bng 20 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 70 484 1.x-position;
+#X text 70 506 2.y-position;
+#X text 233 484 1.x-delta;
+#X text 233 506 2.y-delta;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-xpos empty 0
+-8 0 12 -262144 -1 -1 330 256;
+#X obj 103 124 nbx 3 14 -1e+37 1e+37 0 0 \$0-dummy \$0-ypos empty 0
+-8 0 12 -262144 -1 -1 245 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 22 485 pd flash-time;
+#N canvas 366 206 174 259 flash-time 0;
+#X obj 68 180 pack;
+#X obj 103 149 t b a;
+#X obj 68 205 outlet;
+#X obj 103 104 nbx 3 14 -20 20 0 0 \$0-dummy \$0-xdelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X obj 103 124 nbx 3 14 -20 20 0 0 \$0-dummy \$0-ydelta empty 0 -8
+0 12 -262144 -1 -1 0 256;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X coords 0 -1 1 1 48 42 2 100 100;
+#X restore 183 485 pd flash-time;
+#X obj 296 213 cnv 15 102 177 empty empty empty 20 12 0 14 -1 -66577
+0;
+#X obj 297 214 cnv 15 100 175 empty empty empty 20 12 0 14 -261682
+-66577 0;
+#X obj 22 275 s vu_rcv;
+#X obj 154 275 s vu_rcv;
+#X obj 22 432 s vu_rcv;
+#X obj 154 585 s vu_rcv;
+#X obj 22 585 s vu_rcv;
+#X text 6 2 [vu] Changing Properties through Messages;
+#X msg 349 114 label my-vu;
+#X obj 330 245 vu 15 120 vu_rcv my-vu -1 -8 0 10 -33289 -33289 1 0
+;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 7 0 6 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 14 0 18 0;
+#X connect 18 0 19 0;
+#X connect 22 0 51 0;
+#X connect 23 0 52 0;
+#X connect 28 0 22 0;
+#X connect 29 0 23 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 36 0 53 0;
+#X connect 39 0 55 0;
+#X connect 40 0 54 0;
+#X connect 41 0 40 0;
+#X connect 42 0 41 0;
+#X connect 47 0 39 0;
+#X connect 48 0 41 1;
+#X connect 57 0 11 0;
+#X restore 172 375 pd Changing_GUI_Properties;
+#X text 97 345 see the following subpatch for messages that change
+the gui-properties of [vu]:;
+#X text 168 493 - creating a [vu] without any arguments will set default
+values for all gui-properties. See the subpatch below to learn how
+to dynamically instantiate a [vu] object with custom properties:;
+#X text 170 239 Use the UP- \, DOWN- \, LEFT- or RIGHT-key to move
+a selected gui-object. Right-click and choose "Properties" to modify
+its appearance.;
+#X text 341 111 and receive names. Right-;
+#X text 341 126 click and choose;
+#X text 340 142 "Properties" to set them \,;
+#X text 341 156 or change them with messages;
+#X text 341 170 (see the subpatch below);
+#X floatatom 259 90 7 -110 20 1 dB - -;
+#X obj 42 48 tgl 15 1 empty empty empty 8 -8 0 10 -262144 -1 -1 0 1
+;
+#X obj 43 125 vu 15 120 foo7_rcv vu-meter 60 0 0 10 -1 -355 1 0;
+#X floatatom 42 259 6 0 0 1 dB - -;
+#X floatatom 104 259 6 0 0 1 dB - -;
+#X text 108 68 <list> of rms \, peak;
+#X obj 259 197 s foo7_rcv;
+#X obj 259 168 pack 0 0;
+#X floatatom 277 113 7 -110 20 1 dB - -;
+#X obj 277 138 t b f;
+#X floatatom 52 90 7 -110 20 1 dB - -;
+#X floatatom 120 90 7 -110 20 1 dB - -;
+#N canvas 44 136 290 278 source 0;
+#X obj 40 95 random 102;
+#X obj 40 171 - 101;
+#X obj 40 205 pack 0 0;
+#X obj 40 45 metro 300;
+#X obj 40 69 t b b;
+#X obj 133 95 random 20;
+#X obj 40 117 t f f;
+#X obj 91 147 +;
+#X obj 91 172 - 101;
+#X obj 40 21 inlet;
+#X obj 40 250 outlet;
+#X obj 100 249 s fff;
+#X obj 159 249 s vu_rcv;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 1 5 0;
+#X connect 5 0 7 1;
+#X connect 6 0 1 0;
+#X connect 6 1 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 2 1;
+#X connect 9 0 3 0;
+#X restore 42 68 pd source;
+#X text 340 95 [vu] has settable send;
+#X text 11 23 gui-vu-meter-display;
+#X text 98 493 12;
+#X text 168 295 - rms level.;
+#X text 168 396 - peak-level.;
+#X text 168 412 - a list will be truncated to the first element.;
+#X text 168 444 - rms level.;
+#X text 168 466 - peak-level.;
+#X text 98 328 bang;
+#X text 168 328 - a bang will output the current values of the inlets.
+;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X connect 30 0 37 0;
+#X connect 31 0 42 0;
+#X connect 32 0 33 0;
+#X connect 32 1 34 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 39 0 37 0;
+#X connect 39 1 37 1;
+#X connect 40 0 32 0;
+#X connect 41 0 32 1;
+#X connect 42 0 32 0;
diff --git a/externals/vanilla/wrap~-help.pd b/externals/vanilla/wrap~-help.pd
new file mode 100644
index 00000000..6315e917
--- /dev/null
+++ b/externals/vanilla/wrap~-help.pd
@@ -0,0 +1,70 @@
+#N canvas 0 0 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header wrap~ 3 12 0 18
+-204280 -1 0;
+#X obj 0 428 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 50 243 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.33. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 5 KEYWORDS signal;
+#X text 12 45 DESCRIPTION remainder modulo 1;
+#X text 12 65 INLET_0 signal;
+#X text 12 85 OUTLET_0 signal;
+#X text 12 165 RELEASE_DATE 1997;
+#X restore 500 597 pd META;
+#X obj 0 503 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 540 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X text 98 544 (none);
+#N canvas 104 481 428 109 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 43 wrap;
+#X text 8 2 [wrap~] Related Objects;
+#X restore 102 597 pd Related_objects;
+#X obj 78 437 cnv 17 3 55 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 78 512 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 482 3 wrap~;
+#X obj 455 20 pddp/pddplink http://wiki.puredata.info/en/wrap~ -text
+pdpedia: wrap~;
+#X obj 94 243 metro 500;
+#X floatatom 78 144 0 0 0 0 - - -;
+#X floatatom 78 290 0 0 0 0 - - -;
+#X obj 78 267 snapshot~;
+#X obj 78 170 sig~;
+#X obj 78 194 wrap~;
+#X obj 94 218 loadbang;
+#X text 111 144 <- shift-drag here to get non-integers to try;
+#X text 98 436 signal;
+#X text 98 457 float;
+#X text 98 477 list;
+#X text 168 477 - a list will be truncated to the first item.;
+#X text 98 511 signal;
+#X text 11 23 remainder modulo 1;
+#X text 168 436 - the incoming signal.;
+#X text 168 457 - a float will automatically be converted to a signal.
+;
+#X text 74 317 [wrap~] gives the difference between the input and the
+largest integer not exceeding it (for positive numbers this is the
+fractional part).;
+#X obj 4 597 pddp/pddplink pddp/help.pd -text help;
+#X obj 455 51 pddp/dsp-reminder;
+#X connect 13 0 16 0;
+#X connect 14 0 17 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 16 0;
+#X connect 19 0 13 0;
+#X connect 19 0 13 0;